[LLVMdev] Apple clang 4.2 based on llvm 3.2 produces a wrong "instruction requires:arm-mode"

Moshe Kravchik mkravchik at hotmail.com
Wed Jun 12 05:51:14 PDT 2013


Hi,
I've got an assembly file which used to compile with previous clang versions. However with 4.2 I get the following error:
admin$
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang
-arch armv7 ./src/asm.s  -o asm.o

./src/asm.s:30:5: error: instruction requires
a CPU feature not currently enabled

    add r2, pc, r2
According to ARM specification:Use of PC and SP in Thumb instructionsIn most of these instructions, you cannot use PC (R15) for Rd, or any operand.The exceptions are:you can use PC for Rn in 32-bit Thumb ADD and SUB instructions, with a constant Operand2 value in the range 0-4095, and no S suffix. These instructions are useful for generating PC-relative addresses. Bit[1] of the PC value reads as 0 in this case, so that the base address for the calculation is always word-aligned.you can use PC in 16-bit Thumb ADD{cond} Rd, Rd, Rm instructions, where both registers cannot be PC.

I indeed specified that this line belongs to the Thumb function. But the clang still produces this error.
When I compile this file directly with "as" it compiles correctly.

Please help!
  		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130612/1d8d00e1/attachment.html>


More information about the llvm-dev mailing list