The armv7 architecture should be able to deal with the armv6t2 instruction set for moving 16 bit values. // current clang inline assembler bug for: /usr/local/bin/clang -march=armv7 -ccc-host-triple arm-apple-darwin11 -c test.c #ifdef __arm__ int test(void) { int val; asm ( //"mov %[r0], #0xff \n\t" // old ARM way for 1023 constant (works) //"orr %[r0], %[r0], #0x300 \n\t" "movw %[r0], #1023 \n\t" // new ARMv6T2 way for 16 bit wide constants "movt %[r0], #0 \n\t" : [r0] "=r" (val) ); return val; } #endif Currently this results in an error: test.c:8:7: error: instruction requires: armv6t2 "movw %[r0], #1023 \n\t" // new ARMv6T2 way for 16 bit wide constants ^ <inline asm>:1:2: note: instantiated into assembly here movw r0, #1023
Both modes working now.