我需要轉換與ARMASM編譯gcc的一些代碼(代碼的Sourcery GCC-4.6.2 EABI)。我使用的是ARM7TDMI和我的編譯參數是ARM7TDMI不支持請求的特殊用途寄存器
arm-none-eabi-gcc -c -march=armv4t -mcpu=arm7tdmi -mlittle-endian -g -O1
(我省略了-I和-D參數...)
在我的文件我有這樣的代碼,將不能編譯:
extern inline void ngEnable(void)
{
int tmp;
asm volatile(
"msr %[tmp], CPSR\n\t"
"bic %[tmp], %[tmp], #0xC0\n\t"
"msr CPSR_c, %[tmp]"
: [tmp] "+r" (tmp)
);
}
我得到這個錯誤:根據這個帖子Re: trouble building linux-linaro-3.0-2011.08-0
C:\DOCUME~1\MALLAR~1.ISC\LOCALS~1\Temp\ccA9cCgQ.s: Assembler messages:
C:\DOCUME~1\MALLAR~1.ISC\LOCALS~1\Temp\ccA9cCgQ.s:267: Error: selected processor does not support requested special purpose register -- `msr r3,CPSR'
make: *** [cdbini.o] Error 1
(我卜ILD Windows版本,但問題可能是一樣的嗎?)我已經使用不使用-march =所有的解決辦法...
我的問題是什麼你知道嗎?
你用拇指或ARM指令集的編譯它? Thumb模式可能對訪問寄存器有一些限制,所以你可以嘗試使用arm指令。 – Zuljin 2012-01-12 16:34:52