Je suis en train de compiler un programme pour Raspberry Pi 2B (ARMv7/Neon), mais je reçois une erreur d'un code assembleur en ligne:Gcc se plaint de vstmia - pourquoi?
Error: VFP single precision register expected -- `vstmia.64 r9,{d16-d31}'
Le code est:
asm volatile (
"vstmia.64 %[reg]!, {d0 - d15} @ read all regs\n\t"
"vstmia.64 %[reg], {d16 - d31} @ read all regs\n\t"
::[reg] "r" (&vregs):
);
drôle chose est qu'il ne se plaint pas de la première vstmia
. J'ai essayé avec le {d0 - d32}
d'abord et je pensais qu'il y avait peut-être trop de registres 64 bits, mais ce n'est évidemment pas le problème. vregs
est un stockage aligné de 8 octets.
J'utilise bras-linux-gnueabihf-gcc 4.8.3, avec cette ligne de commande:
arm-linux-gnueabihf-gcc -mcpu=cortex-a7 -marm -O2 -g -std=gnu11 -MMD -MP -MF"ARM_decode_table.d" -MT"ARM_decode_table.o" -c -o "ARM_decode_table.o" "../ARM_decode_table.c"
Quelle option '-mfpu =' passez-vous? – Notlikethat
bras-linux-gnueabihf-gcc -mcpu = cortex-a7 -marm -O2 -g -std = gnu11 -MMD -MP -MF "ARM_decode_table.d" -MT "ARM_decode_table.o" -c -o "ARM_decode_table.o "" ../ARM_decode_table.c " – turboscrew
OK, si vous ne spécifiez pas de FPU, vous obtiendrez la configuration par défaut du compilateur (vous pouvez vérifier la configuration de GCC avec' -v'). Je vais jeter une conjecture sauvage que cela se trouve être 'vfpv3-d16';) – Notlikethat