GCC ARM 如何使用内联汇编为特定的 fp 寄存器赋值?
GCC ARM How to assign value to particular fp register using inline assembly?
我无法为特定的 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
有什么解决这个问题的建议吗?
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
).
我无法为特定的 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
有什么解决这个问题的建议吗?
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
).