ARM neon 指令生成
ARM neon instruction generation
我想通过一个简单的 linpack.c 程序为 ARM 生成 neon 指令,该程序可从 Roy
我在 arm-linux-gnueabi-gcc 中使用了多个标志,例如,
arm-linux-gnueabi-gcc -S -mfpu=neon /home/junaid/code/c/linpack.c
据我所知,neon和VFP指令都是以V开头的,比如VADD。但是我看不到任何这样的指令是转储的。我还使用了 -mfpu=vfp、-funsafe-math-optimizations 和静态 (-s) 标志,但我仍然看不到任何霓虹灯指令。
我无法识别 neon 指令,或者没有使用正确的 gcc 标志,或者没有明确使用生成 neon 指令的 c 代码!!
编辑:
使用命令编译第一条评论中提到的代码,
arm-linux-gnueabi-gcc -S -mfpu-neon /home/junaid/code/c/test.c .
汇编是
.arch armv5t
.fpu softvfp
.eabi_attribute 20, 1
.eabi_attribute 21, 1
.eabi_attribute 23, 3
.eabi_attribute 24, 1
.eabi_attribute 25, 1
.eabi_attribute 26, 2
.eabi_attribute 30, 6
.eabi_attribute 34, 0
.eabi_attribute 18, 4
.file "test.c"
.global __aeabi_fadd
.text
.align 2
.global f
.type f, %function
f:
@ args = 0, pretend = 0, frame = 8
@ frame_needed = 1, uses_anonymous_args = 0
stmfd sp!, {fp, lr}
add fp, sp, #4
sub sp, sp, #8
str r0, [fp, #-8] @ float
ldr r3, [fp, #-8] @ float
mov r0, r3
mov r1, r3
bl __aeabi_fadd
mov r3, r0
mov r0, r3
sub sp, fp, #4
ldmfd sp!, {fp, pc}
.size f, .-f
.ident "GCC: (Ubuntu/Linaro 4.7.3-12ubuntu1) 4.7.3"
.section .note.GNU-stack,"",%progbits
我使用了 -O3
标志,它有助于解决问题。我得到了 vadd, vmul,
等说明
我想通过一个简单的 linpack.c 程序为 ARM 生成 neon 指令,该程序可从 Roy 我在 arm-linux-gnueabi-gcc 中使用了多个标志,例如,
arm-linux-gnueabi-gcc -S -mfpu=neon /home/junaid/code/c/linpack.c
据我所知,neon和VFP指令都是以V开头的,比如VADD。但是我看不到任何这样的指令是转储的。我还使用了 -mfpu=vfp、-funsafe-math-optimizations 和静态 (-s) 标志,但我仍然看不到任何霓虹灯指令。 我无法识别 neon 指令,或者没有使用正确的 gcc 标志,或者没有明确使用生成 neon 指令的 c 代码!!
编辑: 使用命令编译第一条评论中提到的代码,
arm-linux-gnueabi-gcc -S -mfpu-neon /home/junaid/code/c/test.c .
汇编是
.arch armv5t
.fpu softvfp
.eabi_attribute 20, 1
.eabi_attribute 21, 1
.eabi_attribute 23, 3
.eabi_attribute 24, 1
.eabi_attribute 25, 1
.eabi_attribute 26, 2
.eabi_attribute 30, 6
.eabi_attribute 34, 0
.eabi_attribute 18, 4
.file "test.c"
.global __aeabi_fadd
.text
.align 2
.global f
.type f, %function
f:
@ args = 0, pretend = 0, frame = 8
@ frame_needed = 1, uses_anonymous_args = 0
stmfd sp!, {fp, lr}
add fp, sp, #4
sub sp, sp, #8
str r0, [fp, #-8] @ float
ldr r3, [fp, #-8] @ float
mov r0, r3
mov r1, r3
bl __aeabi_fadd
mov r3, r0
mov r0, r3
sub sp, fp, #4
ldmfd sp!, {fp, pc}
.size f, .-f
.ident "GCC: (Ubuntu/Linaro 4.7.3-12ubuntu1) 4.7.3"
.section .note.GNU-stack,"",%progbits
我使用了 -O3
标志,它有助于解决问题。我得到了 vadd, vmul,
等说明