¿Por qué no puedo compilar este código ensamblador?

Al ensamblar el código, aparece el error: fpu.s(13): error: A1240E: el valor inmediato no se puede usar con esta operación

AREA PGRM, CODE, READONLY
ENTRY
EXPORT __main
__main
    LDR R0,=0XE000ED88
    LDR R1,[R0]
    ORR R1,R1,#(0xF << 20)
    STR R1,[R0]
    dsb



    VMOV.F32 S7, #0x419c0000
    VMOV.F32 S8, #0X41B40000
    VADD.F32 S9,S7,S8

LOOP    B LOOP
    END
Considero que esta pregunta está fuera de tema, porque solo está relacionada con la programación, sin importar qué plataforma se use.
Sea consistente con sus números hexadecimales. Use #0xFFFFFFFF en lugar de usar a veces #0XFFFFFFFF. Puede confundir al compilador con ser inconsistente.
@ Sparky256, ¿el compilador se confundirá? Pensé que rechaza por completo o acepta la sintaxis de las constantes y parece lo suficientemente legal.

Respuestas (1)

En VMOV, el formato F32 espera el siguiente argumento como valor inmediato:

Cualquier número que se pueda expresar como ± norte × 2 r , donde n y r son números enteros, 16 <= n <= 31, 0 <= r <= 7.

Tienes los siguientes valores inmediatos:

0x 419 C 0000 = 4199 × 2 18 norte = 4199 r = 18
y
0x 41 B 40000 = 4205 × 2 18 norte = 4205 r = 18

En ambas instrucciones, los valores inmediatos están claramente fuera del rango esperado. Debe escalar estos parámetros de antemano.

Este también fue mi pensamiento, pero al consultar la guía del usuario para el cortex-m4, esta restricción no figura en la lista. infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0553a/…
@Colin__s No estoy seguro de seguir, la misma descripción de los rangos de valores está en el enlace que presentó. ¿Quiere decir que el ensamblador debería hacer la vista gorda ante esto?
por favor revise el enlace nuevamente, tenía algo incorrecto en mi portapapeles cuando comenté por primera vez. El manual de cortex m4 dice "Restricciones No hay restricciones".
@Colin__s De hecho, este parece ser el caso. Si los rangos de valores no son los culpables, mi próxima suposición sería una configuración de destino incorrecta.
@Vincente He usado el núcleo del procesador simulado ARMCM4_FP.
@Colin__s Que 'sin restricciones' se aplica a cuándo, no a la cantidad de bits utilizados para codificar un valor inmediato.