Issue byte codes for ARMv7's movw and movt?

Jeffrey Walton noloader@gmail.com
Mon May 20 23:39:00 GMT 2019


Hi Everyone,

I'm having trouble crafting the byte codes for the following from C/C++:

    asm volatile("movw %0,%1 \n"
        "movt %0,%1 \n"
        : "=r"(a) : "i"(0x1234));

When I tested and disassembled it produced:

    00000000 <_Z4testv>:
       0:   f241 2334       movw    r3, #4660       ; 0x1234
       4:   f2c1 2334       movt    r3, #4660       ; 0x1234
       8:   4770            bx      lr

Then, moving back to C/C++:

        int a;
        asm volatile (
#if __BIG_ENDIAN__
            ".byte 0xf2, 0x41, 0x23, 0x34  \n\t"   // movw r3, 0x1234
            ".byte 0xf2, 0xc1, 0x23, 0x34  \n\t"   // movt r3, 0x1234
            "mov %0, r3                    \n\t"   // mov [a], r3
#else
            ".byte 0x41, 0xf2, 0x34, 0x23  \n\t"   // movw r3, 0x1234
            ".byte 0xc1, 0xf2, 0x34, 0x23  \n\t"   // movt r3, 0x1234
            "mov %0, r3                    \n\t"   // mov [a], r3
#endif
            : "=r" (a) : : "r3");

        result = (a == 0x12341234);

However, when I step the code under GDB, it disassembles to strcc or teqcs.

I seem to recall there's a special way of doing this with ARM such
that two code paths are not needed, but I don't recall them. I thought
it used .word or .instruction, but I can't find a reference at the
moment.

How do I issue the byte codes for movw and movt?

Thanks in advance.



More information about the Gcc-help mailing list