-mfloat-abi=softfp的问题,指定fpu为neon
来源:互联网 发布:centos git 备份 编辑:程序博客网 时间:2024/06/18 08:01
测试使用的C语言程序源码如下,程序源码文件是arm-c-disassemble.c:
int sum(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
1、编译但是不汇编,查看产生的汇编源码程序源码:
arm-Linux-androideabi-gcc -S -o arm-c-disassemble-fp.s arm-c-disassemble.c
查看产生的汇编语言程序源码arm-c-disassemble-fp.s:
.arch armv5te
.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 "arm-c-disassemble.c"
.text
.align 2
.global sum
.type sum, %function
sum:
@ args = 0, pretend = 0, frame = 8
@ frame_needed = 1, uses_anonymous_args = 0
@ link register save eliminated.
str fp, [sp, #-4]!
add fp, sp, #0
sub sp, sp, #12
str r0, [fp, #-8]
str r1, [fp, #-12]
ldr r2, [fp, #-8]
ldr r3, [fp, #-12]
add r3, r2, r3
mov r0, r3
sub sp, fp, #0
@ sp needed
ldr fp, [sp], #4
bx lr
.size sum, .-sum
.align 2
.global sub
.type sub, %function
sub:
@ args = 0, pretend = 0, frame = 8
@ frame_needed = 1, uses_anonymous_args = 0
@ link register save eliminated.
str fp, [sp, #-4]!
add fp, sp, #0
sub sp, sp, #12
str r0, [fp, #-8]
str r1, [fp, #-12]
ldr r2, [fp, #-8]
ldr r3, [fp, #-12]
rsb r3, r3, r2
mov r0, r3
sub sp, fp, #0
@ sp needed
ldr fp, [sp], #4
bx lr
.size sub, .-sub
.ident "GCC: (GNU) 4.8"
.section .note.GNU-stack,"",%progbits
默认编译的arch是armv5te,默认的fpu是softvfp;
2、Cortex-A9是armv7-a的arch,因此需要在编译时指定arch:
arm-linux-androideabi-gcc -S -march=armv7-a -o arm-c-disassemble-fp.s arm-c-disassemble.c
查看编译后产生的汇编语言程序源码:
.arch armv7-a
.fpu softvfp
.eabi_attribute 20, 1
...
此时arch是armv7-a;
3、在(2)的基础上,此时fpu是softvfp,Cortex-A9中支持neon,在编译时增加-mfpu=neon指定fpu:
arm-linux-androideabi-gcc -S -march=armv7-a -mfpu=neon -o arm-c-disassemble-fp.s arm-c-disassemble.c
查看编译后产生的汇编语言程序源码:
.arch armv7-a
.fpu softvfp
.eabi_attribute 20, 1
...
奇怪的是,此时.fpu依然是softvfp,而不是我们指定的neon,为什么呢?
经过网络搜索,需要指定“-mfloat-abi=name”,mfloat-abi的作用参考gcc文档中的说明,
mfloat-abi取值有三个“soft”,“softfp”,“hard”,此处指定mfloat-abi为“softfp”,然后编译:
arm-linux-androideabi-gcc -S -march=armv7-a -mfloat-abi=softfp -mfpu=neon -o arm-c-disassemble-fp.s arm-c-disassemble.c
查看编译后产生的汇编语言程序源码:
.arch armv7-a
.eabi_attribute 27, 3
.fpu neon
.eabi_attribute 20, 1
...
此时fpu成为了我们指定的neon;
4、在(3)的基础上,还可以继续指定CPU相关的一些更详细的信息,例如-mcpu=name的值,指定具体的CPU型号:
arm-linux-androideabi-gcc -S -mcpu=cortex-a9 -march=armv7-a -mfloat-abi=softfp -mfpu=neon -o arm-c-disassemble-fp.s arm-c-disassemble.c
指定具体的CPU型号为Cortex-A9,查看编译后产生的汇编语言程序源码:
.cpu cortex-a9
.eabi_attribute 27, 3
.fpu neon
.eabi_attribute 20, 1
...
此时.arch变成了.cpu,指定具体的CPU型号;
此时编译的完整的汇编语言程序源码:
.cpu cortex-a9
.eabi_attribute 27, 3
.fpu neon
.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, 1
.eabi_attribute 18, 4
.file "arm-c-disassemble.c"
.text
.align 2
.global sum
.type sum, %function
sum:
@ args = 0, pretend = 0, frame = 8
@ frame_needed = 1, uses_anonymous_args = 0
@ link register save eliminated.
str fp, [sp, #-4]!
add fp, sp, #0
sub sp, sp, #12
str r0, [fp, #-8]
str r1, [fp, #-12]
ldr r2, [fp, #-8]
ldr r3, [fp, #-12]
add r3, r2, r3
mov r0, r3
sub sp, fp, #0
@ sp needed
ldr fp, [sp], #4
bx lr
.size sum, .-sum
.align 2
.global sub
.type sub, %function
sub:
@ args = 0, pretend = 0, frame = 8
@ frame_needed = 1, uses_anonymous_args = 0
@ link register save eliminated.
str fp, [sp, #-4]!
add fp, sp, #0
sub sp, sp, #12
str r0, [fp, #-8]
str r1, [fp, #-12]
ldr r2, [fp, #-8]
ldr r3, [fp, #-12]
rsb r3, r3, r2
mov r0, r3
sub sp, fp, #0
@ sp needed
ldr fp, [sp], #4
bx lr
.size sub, .-sub
.ident "GCC: (GNU) 4.8"
.section .note.GNU-stack,"",%progbits
- -mfloat-abi=softfp的问题,指定fpu为neon
- -mfloat-abi=softfp的问题,指定fpu为neon
- 让APK只包含指定的ABI
- 让APK只包含指定的ABI
- 让APK只包含指定的ABI
- RISC、CISC、 SIMD、FPU、MMX、SSE、SSEX、AVX、3D Now以及DSP、ARM的Neon简介
- 【记录】查找关于S3C6410中的中的-march,-mcpu,-mtune以及-mfpu和-mfloat-abi
- STM32F4XX的FPU使用
- m4的fpu使用
- STM32的FPU体验
- Android ABI和CPU的问题
- 编译ffmpeg neon时出现的问题
- Codility上的问题(35) Neon 2014
- FPU
- jQuery dataType指定为json的问题
- jQuery dataType指定为json的问题
- 安装Android虚拟机,CPU/ABI 为空的解决办法
- 安装Android虚拟机,CPU/ABI 为空的解决办法
- AssetBundle资源包--1
- kafka常用命令
- 嵌入式linux下u盘自动挂载的实现
- MVC开发模式
- DPM(Deformable Parts Models)-----目标检测算法理解
- -mfloat-abi=softfp的问题,指定fpu为neon
- 四种常见的XML解析方式
- 函数的调用,栈帧的创建和销毁
- 如何通过U盘安装Ubuntu系统
- 分布式 微服务 soa dubbo 一点一点来
- MySQL数据类型与操作数据表
- C# 类的方法
- 【机房重构】-数据库设计
- Android 文件读写和文件夹创建和删除总结