【问题标题】:ARM neon instruction generationARM neon 指令生成
【发布时间】:2015-11-22 18:11:48
【问题描述】:

我想从Roy 提供的简单 linpack.c 程序为 ARM 生成霓虹灯指令 我在 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

【问题讨论】:

  • 在一个单行程序 (float f(float x){return 2*x;}) 上尝试一下并向我们展示 asm 怎么样?
  • @marc 我已根据您的评论编辑了问题。
  • 嗯,那是使用软浮点...也许-mfloat-abi=hard -mfpu=neon
  • 尝试开启优化(例如-O3)。
  • 在使用硬浮点和 O2、O3 过滤器后,我仍然没有收到任何霓虹灯指令。但是,我发现了一个确实会产生霓虹灯指令的例子。仍然使用带有所有过滤器的完整命令,例如 arm-linux-gnueabi-gcc-4.6 -O2 -march=armv7-a -mtune=cortex-a9 -ftree-vectorize -mhard-float -mfloat-abi=softfp -mfpu =neon -ffast-math -mvectorize-with-neon-quad -S on linpack 代码不会生成。因此,我推断下面提到的链接中的 C 代码实际上是启用了 neon 指令的生成。 gist.github.com/syohex/3023686

标签: c gcc assembly arm neon


【解决方案1】:

我使用了-O3 标志,它有助于解决问题。我收到了vadd, vmul, 等说明

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2014-08-12
    • 1970-01-01
    相关资源
    最近更新 更多