【记录】查找关于S3C6410中的中的-march,-mcpu,-mtune以及-mfpu和-mfloat-abi

本文详细介绍了S3C6410处理器的FPU配置过程,包括其ARM1176ZJF内核的架构、所使用的ARMv6架构以及VFPv2浮点处理单元的具体配置方法。

原文地址

【背景】

看到有人问关于S3C2440de6410的CPU,关于FPU方面的配置。

现去查找整理一下。

【折腾过程】

1.关于crosstool-ng中的-march,-mcpu,-mtune的配置,可参考:

crosstool-ng中的配置参数:Architecture level, Emit assembly for CPU, Tune for CPU

2.关于-mfpu的配置可参考:

crosstool-ng中的配置参数:浮点处理单元FPU

3.现在去研究S3C6410中的核心参数是啥:

先去搜:

s3c6410 vfp

找到:

http://www.samsung.com/global/business/semiconductor/file/media/s3c6410_datasheet_200804-0.pdf

可知:

s3c6410的内核是:

ARM1176ZJF 533/667MHz VFP/SIMD

4.而对于ARM1176ZJF,对应的再去搜:

ARM1176 vfp

找到:

1.4.2. Vector Floating-Point (VFP)

中的:

The VFP implements the ARM VFPv2 floating-point coprocessor instruction set.

以及:

http://www.arm.com/zh/products/processors/classic/arm11/arm1176.php

找到:

ARM1176

架构
ARMv6

Dhrystone 性能
1.25 DMPS/MHz

多核
否 – 仅单核

ISA 支持

内存管理
内存管理单元

调试和跟踪
用于 ARM11 的 CoreSight™ 设计工具包(单独提供)

和:

ARM 浮点架构 (VFP)

中的:

VFP 架构版本

在 ARMv7 架构之前,VFP 代表用于矢量运算的矢量浮点架构。

对于许多应用来说,设置硬件浮点至关重要,并且硬件浮点可用作使用高级设计工具(如 MatLab、MATRIXx 和 LabVIEW)直接对系统建模和派生应用程序代码的片上系统 (SoC) 设计流程的一部分。在与NEON™ 多媒体处理功能结合使用时,可增强图像应用程序的性能(如缩放、2D 和 3D 转换、字体生成和数字过滤)。

迄今为止,VFP 主要有三个版本:

  1. VFPv1 已废弃。要获取详细信息,可向 ARM 发送相关请求。
  2. VFPv2 是对 ARMv5TE、ARMv5TEJ 和 ARMv6 架构中 ARM 指令集的可选扩展。
  3. VFPv3 是对 ARMv7-A 和 ARMv7-R 配置文件中 ARM、 Thumb®® 和 ThumbEE 指令集的可选扩展。可使用 32 个或 16 个双字长寄存器实现 VFPv3。术语 VFPv3-D32 和 VFPv3-D16 用于区别这两个实现选项。扩展 VFPv3 使用半精度扩展,可在半精度浮点和单精度浮点之间提供双向转换功能。

5.其他一些参考资料:

http://en.wikipedia.org/wiki/List_of_Samsung_System_on_a_Chip

中的:

S3C6410[12]65 nm LPARMv6533/667/800 MHz Single-coreARM11 (ARM1176ZJF-S)3D Graphics acceleratormSDRAM, mDDR2009

 

【总结】

1.S3C6410内核是ARM1176ZJF

2.ARM11的内核是ARMv6架构

3.ARM1176ZJF的ARMv6中用的FPU是VFPv2

对应着:

gcc中的选项是:

参考:

3.17.3 ARM Options

中的:

-march=armv6

-mcpu=arm1176jzf-s

-mtune=s3c6410

或者是:

(参考:[Clfs-support] Target specific options…

-mtune=arm1176jzf-s

对应fpu的配置,应该是:

(由于3.17.3 ARM Options中没有看到vfpv2,而且网上搜

-mfpu=vfp

在另外,应该是:

-mfloat-abi=hard

或:

(参考:Android.mk

-mfloat-abi=softfp

即可。

### CFLAGS CFLAGS 用于 C 语言编译器的编译选项。当前的设置为 `-mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Dgcc -O1 -gdwarf-2 -g`。 - `-mcpu=cortex-m4`:指定目标处理器为 Cortex-M4 内核,让编译器针对该内核特性优化代码生成[^1]。 - `-mthumb`:指示生成 Thumb 指令集代码,节省代码空间,适用于 Cortex-M 系列处理器。 - `-mfpu=fpv4-sp-d16`:指定使用 FPV4-SP-D16 浮点单元,提高浮点运算性能。 - `-mfloat-abi=hard`:采用硬浮点 ABI,直接使用硬件浮点单元进行浮点运算,提升速度。 - `-ffunction-sections` `-fdata-sections`:分别将函数变量存于独立段,便于链接器去除未使用的段以减小可执行文件大小。 - `-Dgcc`:定义预处理器宏 `gcc`,可用于条件编译。 - `-O1`:开启 1 级编译优化,在编译时间代码优化程度间取得平衡。 - `-gdwarf-2` `-g`:生成 DWARF 2 格式的调试信息,方便调试程序。 优化建议:如果不需要调试信息,可去掉 `-gdwarf-2 -g`;若追求更高性能,可将 `-O1` 改为 `-O2` 或 `-O3`,但可能增加编译时间。 ### AFLAGS AFLAGS 用于汇编器的编译选项,设置为 `-c -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -x assembler-with-cpp -Wa,-mimplicit-it=thumb -gdwarf-2`。 - `-c`:只进行编译,不进行链接。 - `-x assembler-with-cpp`:将输入文件视为带预处理的汇编文件。 - `-Wa,-mimplicit-it=thumb`:传递 `-mimplicit-it=thumb` 给汇编器,指定隐式 IT 指令模式为 Thumb。 优化建议:若不需要调试信息,可去掉 `-gdwarf-2`。 ### LFLAGS LFLAGS 用于链接器的选项,设置为 `-mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Wl,--gc-sections,-Map=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds`。 - `-Wl,--gc-sections`:链接器去除未使用的段,减小可执行文件大小。 - `-Wl,-Map=rt-thread.map`:生成链接映射文件,记录可执行文件中各段、符号的地址大小等信息。 - `-Wl,-cref`:在映射文件中包含交叉引用表。 - `-Wl,-u,Reset_Handler`:强制保留 `Reset_Handler` 符号。 - `-T board/linker_scripts/link.lds`:指定链接脚本,定义可执行文件的内存布局。 优化建议:可考虑增加 `-O1` 等链接器优化选项,进一步优化链接过程。 ### CXXFLAGS CXXFLAGS 用于 C++ 编译器的编译选项,设置与 CFLAGS 类似 `-mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Dgcc -O1 -gdwarf-2 -g`。优化建议同 CFLAGS。 ### EXTERN_LIB EXTERN_LIB 用于指定外部库,设置为 `-lc -lm`。 - `-lc`:链接 C 标准库。 - `-lm`:链接数学库。 优化建议:根据项目实际需求,添加或删除其他必要的外部库。 ### 示例优化后的设置 ```makefile CFLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Dgcc -O2 AFLAGS := -c -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -x assembler-with-cpp -Wa,-mimplicit-it=thumb LFLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Wl,--gc-sections,-Map=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds -O1 CXXFLAGS := -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections -Dgcc -O2 EXTERN_LIB := -lc -lm ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值