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

【背景】

看到有人问关于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 LP ARMv6 533/667/800 MHz Single-core ARM11 (ARM1176ZJF-S) 3D Graphics accelerator mSDRAM, mDDR 2009

 

6.【后记 2015-03-30】

又看到别人问类似的问题:

ARM11(S3C6410)平台上如何使用浮点运算?- 知乎

然后找资料期间,找到了相关的帖子:

3.4. Using VFP Floating Point

其中介绍了,关于

-mfloat-abi=softfp

-mfloat-abi=hard

的区别。

7.更多相关内容,详见:

ArmHardFloatPort/VfpComparison – Debian Wiki

ARM and Keil Tools: ARM Cortex-A Processors and… | ARM Connected Community

 

【总结】

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

即可。

 

其中:

【-mfloat-abi和mfpu参数的含义】

  • -mfloat-abi:决定了采用何种ABI->即内部的参数传递和(调用函数后的)结果的返回的方式和规则->ARM中最常用的是:新的用AAPCS,而旧的是用其他方式。
    • 软件模拟浮点:没有硬件浮点计算单元。采用软件模拟浮点运算。通过调用相关的库函数去模拟实现浮点运算。
      • 猜测:估计对应的配置是 -mfpu=none和-mfloat-abi=softfp
    • -mfloat-abi=softfp:有硬件浮点计算单元,但用的是soft-float ABI;编译器产生VFP浮点指令集。但是浮点计算结果返回值调用方式是采用和传统的软件浮点一样的方式。
    • -mfloat-abi=hard:有硬件浮点计算单元,但用的是VFP ABI,算是AAPCS的VFP变体;浮点计算的参数和结果的返回值采用VFP寄存器返回,使得浮点计算更快。
  • -mfpu:决定了硬件浮点单元是什么。常见的值有
    • none:没有硬件浮点计算单元
    • vfp:之前的一些ARM芯片的硬件浮点计算单元
    • neon:一些新的ARM芯片的内置的硬件浮点计算单元,对应的是VFPv3


发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量