GCC ARM如何使用内联汇编为特定fp寄存器赋值?

GCC ARM如何使用内联汇编为特定fp寄存器赋值?,gcc,arm,inline-assembly,Gcc,Arm,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

我很难给特定的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
4:eddf 1a03 vldr s3[pc,#12];14
...
14:42280000.字0x42280000
它似乎也可以毫无怨言地指定双精度寄存器视图(
d3
),尽管该视图仍然编译为等效单精度寄存器(
s6
)的32位加载。

我对软浮点(armel)使用了错误的交叉编译器(GCC 4.7.3)和AMRv4体系结构,而不是使用硬浮点(armhf)和ARMv7的交叉编译器。它适用于GCC 4.8.2和最新的VFP/NEON标志(s或d)。