GCC se queja de VSTMIA - ¿Por qué? -- gcc campo con arm campo con inline-assembly campo con raspberry-pi2 campo con neon camp Relacionados El problema

Gcc complains about vstmia - why?


1
vote

problema

Español

Estoy tratando de compilar un programa para Raspberry Pi 2B (ARMV7 / NEON), pero recibo un error de un código de ensamblaje en línea:

Error: VFP Registro de precisión único esperado - `VSTMIA.64 R9, {D16-D31} '

El código es:

  asm volatile (         "vstmia.64 %[reg]!, {d0 - d15} @ read all regs  "         "vstmia.64 %[reg], {d16 - d31} @ read all regs  "         ::[reg] "r" (&vregs): );   

Lo gracioso es que no se queja sobre el primer vstmia . Lo intenté con un solo {d0 - d32} primero y pensé que tal vez había demasiados registros de 64 bits, pero obviamente no es el problema. vregs es un almacenamiento alineado de 8 bytes.

Estoy usando ARM-LINUX-GNUABIHF-GCC 4.8.3, con esta línea de comando:

ARM-LINUX-GNUAABIHF-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 "

Original en ingles

I'm trying to compile a program for Raspberry Pi 2B (ARMv7 / Neon), but I get an error from an inline assembly code:

Error: VFP single precision register expected -- `vstmia.64 r9,{d16-d31}'

The code is:

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): ); 

Funny thing is that it doesn't complain about the first vstmia. I tried with single {d0 - d32} first and I thought maybe there were too many 64-bit registers, but that's obviously not the problem. vregs is a 8-byte aligned storage.

I'm using arm-linux-gnueabihf-gcc 4.8.3, with this command line:

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"

              
       
       

Lista de respuestas

4
 
vote
vote
La mejor respuesta
 

Al no especificar la opción "now"1010 "apropiado, obtiene cualquier soporte de FPU que proporciona la configuración predeterminada del compilador. Desde su configuración en este caso, es decir, "{'ID': '1313636@resource.calendar.google.com'},{'ID': '3383137@resource.calendar.google.com'},{'ID': '383733@resource.calendar.google.com'}"1 , lo que significa VFPv2 antiguo crujiente con solo 16 d registros de 16 d superpuestos a los registros de 32 s. Por lo tanto, la primera instrucción que se dirige a "{'ID': '1313636@resource.calendar.google.com'},{'ID': '3383137@resource.calendar.google.com'},{'ID': '383733@resource.calendar.google.com'}"2 - "{'ID': '1313636@resource.calendar.google.com'},{'ID': '3383137@resource.calendar.google.com'},{'ID': '383733@resource.calendar.google.com'}"3 está bien, pero el ensamblador se niega a ensamblar la segunda instrucción que sabe que no funcionará en el objetivo elegido.

Para Cortex-A7 con neón, "{'ID': '1313636@resource.calendar.google.com'},{'ID': '3383137@resource.calendar.google.com'},{'ID': '383733@resource.calendar.google.com'}"4 permitirá que el Paquete de herramientas sepa que puede dejar rasgar y usar todo lo que tiene disponible.

 

By not specifying an appropriate -mfpu option, you get whatever FPU support the compiler's default configuration provides. From your configuration in this case, that is --with-fpu=vfp, which means crusty old VFPv2 with only 16 D registers overlaying the 32 S registers. Thus the first instruction targeting d0-d15 is fine, but the assembler refuses to assemble the second instruction which it knows won't work on the chosen target.

For Cortex-A7 with NEON, -mfpu=neon-vfpv4 will let the toolchain know that it can let rip and use everything you have available.

 
 
   
   

Relacionados problema

1  Es arm_neon.h ¿Falta todos los tipos Float16_T?  ( Is arm neon h missing all float16 t types ) 
Estoy usando la instrucción de Neon Simd para escribir una parte de una aplicación de Android, dirigida a los procesadores Cortex A8. Según este manual de re...

5  Asamblea de neón del brazo en Windows Phone 8 no funciona  ( Arm neon assembly on windows phone 8 not working ) 
Estoy tratando de llamar a una función que está codificada en el ensamblaje del brazo de neón en un archivo .s que se ve así: AREA myfunction, code, read...

0  Makefile: Error fatal: NE10.H: No hay tal archivo o directorio  ( Makefile fatal error ne10 h no such file or directory ) 
Actualmente tratando de hacer el archivo y encontró este error: fatal error: NE10.h: No such file or directory #include "NE10.h" ^~~~~~~~ compilat...

1  Mejorar el código C con Neon IOS  ( Improve c code with neon ios ) 
El código a continuación se usa para escalar una imagen, pero el rendimiento no es bueno. Gogueled y encontré algunos consejos para convertir los códigos a Ne...

6  Constante fuera de rango con neón intrínsecos  ( Constant out of range with neon intrinsics ) 
IM Compilación del siguiente código de prueba de intrínsecos de Neon Neon (en Eclipse con Android NDK): void foo(uint64_t* Res) { uint64_t x = 0xff12aa...

3  Carga / tienda alineada con intrínsecos de neón en GCC  ( Aligned load store with neon intrinsics in gcc ) 
¿Cómo puede hacer que GCC genere las instrucciones de carga / tienda para el acceso alineado? Si tenemos algo como: uint8_t* p; uint8x8x4_t r = vld4_u8(p...

2  8x8 float32_t Matrix Multiplication usando el brazo Neon es más lento?  ( 8x8 float32 t matrix multiplication using arm neon is slower ) 
Me pregunto qué intrínsecos hacen que la multiplicación de matriz más lenta de la Matriz de SIMD, y qué debo hacer para hacer la multiplicación de la matriz g...

2  Rendimiento de FFMPEG Decodificación en Android sin soporte de neón  ( Performance of ffmpeg decoding on android without neon support ) 
He compilado el código FFMPEG en Android y puedo reproducir el video sin soporte de neón y para ARMV5TE. La decodificación es buena, el video juega, pero el p...

15  Convención de llamadas del brazo a C, los registros de neón para ahorrar  ( Arm to c calling convention neon registers to save ) 
Hay una Publicidad similar que cubre registros regulares . ¿Qué pasa con los registros de neón? Por lo que recuerdo, ya sea que la mitad superior o la mitad...

44  ARM CORTEX-A8: ¿Cuál es la diferencia entre VFP y neón?  ( Arm cortex a8 whats the difference between vfp and neon ) 
En el procesador ARM CORTEX-A8, entiendo lo que es Neon, es un coprocesador de SIMD. Pero es una unidad VFP (Punto de flotación vectorial), ¿que también es ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos