gpt4 book ai didi

gcc - ARM7TDMI 不支持请求的专用寄存器

转载 作者:行者123 更新时间:2023-12-04 23:45:32 25 4
gpt4 key购买 nike

我需要将一些使用 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... 的解决方法

知道我的问题是什么吗?

最佳答案

要读取一个特殊用途的寄存器,你应该使用mrs指令:

extern inline void ngEnable(void)
{
int tmp;
asm volatile(
"mrs %[tmp], CPSR\n\t"
"bic %[tmp], %[tmp], #0xC0\n\t"
"msr CPSR_c, %[tmp]"
: [tmp] "=r" (tmp)
);
}

此修复后,代码对我来说工作正常。

此外,由于您不使用 tmp 的值,实际上您甚至没有设置它,因此您应该使用 =r(仅输出)而不是 +r(输入-输出)。

关于gcc - ARM7TDMI 不支持请求的专用寄存器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8838256/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com