vc vlongs are broken for cast

for example, _v2uc produces the code:

acid; asm(_v2uc)
_v2uc 0x00005360        MOVW    rv+8(FP),R1
_v2uc+0x4 0x00005364    JMP     (R31)
_v2uc+0x8 0x00005368    AND     $0xff,R1

i think this should be
        MOVW    rv+12(FP),R1
        JMP     (R31)
        AND     $0xff,R1

since the high 32-bits of the vlong should be first, since
this is a BE machine.  perhaps there's supposed to be a
special calling convention for vlongs?

here's an example of the issue:

void
main(void)
{
        uvlong x;

        x = 0x012345678abcdefull;
        print("(uchar)x %.2ux\n", (uchar)x);
        exits("");
}

mikro; v.x
x = 0012345678abcdef
(uchar)x        ef

marshalling a 64-bit pointer in this way will lay down the
bytes with the hi and lo reversed.

- erik

Reply via email to