我无法为特定的fp寄存器赋值。
例如,如果我使用通用寄存器,它编译并正常工作:
register uint* r1 asm ("r1") = (uint *) lrd;
但是当我尝试为fp寄存器做同样的事情时:
register float f3 asm ("f3") = 1.0;
我在编译期间收到此错误:
error: register specified for ‘f3’ isn’t suitable for data type
我使用以下命令行来编译我的内核:
/usr/bin/arm-linux-gnueabi-gcc -c -march=armv7-a -mfpu=neon c_class.c
有任何建议如何解决这个问题?
答案 0 :(得分:2)
f3
是传统的FPA寄存器命名,我无法找到任何方法使交叉编译器(GCC 4.8.3)不阻塞它,虽然信息略有不同:
test.c:5:17: error: invalid register name for ‘f’
register float f asm("f3") = 42.0;
使用最新的VFP / NEON标识s3
:
register float f asm("s3") = 42.0;
工作正常并产生了一个看起来很健全的拆卸:
4: eddf 1a03 vldr s3, [pc, #12] ; 14 <main+0x14>
...
14: 42280000 .word 0x42280000
它似乎也接受指定双精度寄存器视图(d3
)而没有抱怨,尽管它仍然编译为32位加载到等效的单精度寄存器(s6
)。