On Monday, 9 September 2013 at 20:37:47 UTC, Joseph Cassman wrote:
So I'm out of ideas on where the error is coming from. Anyone got any ideas on what's going on here?

Still not sure what is going on but I found a work-around that somebody else might find useful.

The mov instruction is able to work with 64-bit values successfully so the value that is larger than 32 bits can be placed in a register and the register used for the operation. Here are few examples.

    void main()
    {
        asm
        {
            mov   RAX,0x1ffffffffUL;
            mov   R8,0xFFFFFFFFFFFFFFFFUL;
            and   R8,RAX;
            xor   R8,RAX;
            or    R8,RAX;
            add   R8,RAX;
            sub   R8,RAX;
            cmp   R8,RAX;
        }
    }

And their disassembly (excluding the nonessentials).

    mov RAX,01FFFFFFFFh
    mov R8,0FFFFFFFFFFFFFFFFh
    and R8,RAX
    xor R8,RAX
    or  R8,RAX
    add R8,RAX
    sub R8,RAX
    cmp R8,RAX

The only downside of the work-around is that there is already pressure on the limited number of registers in x64. Some shuffling might be required.

Joseph

Reply via email to