【发布时间】:2012-02-08 22:18:33
【问题描述】:
我需要将一些使用 ARMASM 编译的代码转换为 gcc(代码源 GCC-4.6.2 eabi)。我使用 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)
);
}
我收到此错误:
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
根据这篇帖子Re: trouble building linux-linaro-3.0-2011.08-0(我在 Windows 上构建,但问题可能相同?)我已经在使用不使用 -march=all...的解决方法...
知道我的问题是什么吗?
【问题讨论】:
-
你是用 thumb 还是 arm 指令集编译的? Thumb 模式可能对访问寄存器有一些限制,因此您可以尝试 arm 指令。