根据ARM documentation - AArch64 Floating-point and NEON:
Both floating-point and NEON are required in all standard ARMv8 implementations. However, implementations targeting specialized markets may support the following combinations:
No NEON or floating-point.
Full floating-point and SIMD support with exception trapping.
Full floating-point and SIMD support without exception trapping.
也就是说,如果您使用的 Armv8-a 实现是“标准”的,而且很可能是,它应该支持全浮点和 SIMD,如果您指定 -march=armv8-a+simd,编译器应该在所有情况下都使用它们.
似乎结果与 gcc 10.2.0 相同:
op.c:
double op( double value)
{
double v3 = v1 + v2 + value;
return v3;
}
/opt/arm/10/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc -march=armv8 -S op.c
cat op.s
.arch armv8-a
.file "op.c"
.text
.section .rodata
.align 3
.type v1, %object
.size v1, 8
v1:
.word 0
.word 1072693248
.align 3
.type v2, %object
.size v2, 8
v2:
.word 0
.word 1073741824
.text
.align 2
.global op
.type op, %function
op:
.LFB0:
.cfi_startproc
sub sp, sp, #32
.cfi_def_cfa_offset 32
str d0, [sp, 8]
fmov d1, 1.0e+0
fmov d0, 2.0e+0
fadd d0, d1, d0
ldr d1, [sp, 8]
fadd d0, d1, d0
str d0, [sp, 24]
ldr d0, [sp, 24]
add sp, sp, 32
.cfi_def_cfa_offset 0
ret
.cfi_endproc
.LFE0:
.size op, .-op
.ident "GCC: (GNU Toolchain for the A-profile Architecture 10.2-2020.11 (arm-10.16)) 10.2.1 20201103"
.section .note.GNU-stack,"",@progbits
/opt/arm/10/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc -march=armv8-a+simd -S op.c
cat op.s
.arch armv8-a
.file "a.c"
.text
.section .rodata
.align 3
.type v1, %object
.size v1, 8
v1:
.word 0
.word 1072693248
.align 3
.type v2, %object
.size v2, 8
v2:
.word 0
.word 1073741824
.text
.align 2
.global op
.type op, %function
op:
.LFB0:
.cfi_startproc
sub sp, sp, #32
.cfi_def_cfa_offset 32
str d0, [sp, 8]
fmov d1, 1.0e+0
fmov d0, 2.0e+0
fadd d0, d1, d0
ldr d1, [sp, 8]
fadd d0, d1, d0
str d0, [sp, 24]
ldr d0, [sp, 24]
add sp, sp, 32
.cfi_def_cfa_offset 0
ret
.cfi_endproc
.LFE0:
.size op, .-op
.ident "GCC: (GNU Toolchain for the A-profile Architecture 10.2-2020.11 (arm-10.16)) 10.2.1 20201103"
.section .note.GNU-stack,"",@progbits