2.1.116. --[no_]unaligned_access

此选项启用或禁用基于 ARM 体系结构的处理器上的未对齐数据访问。

缺省选项

对于支持未对齐数据访问的基于 ARM 体系结构的处理器,缺省为 --unaligned_access。 这包括:

  • 基于 ARMv6 体系结构的所有处理器

  • 基于 ARMv7-A 和 ARMv7-R 体系结构的处理器

对于不支持未对齐数据访问的基于 ARM 体系结构的处理器,缺省为 --no_unaligned_access。 这包括:

  • 基于 ARMv6 以前版本的体系结构的所有处理器

  • 基于 ARMv7-M 体系结构的处理器

用法

--unaligned_access

在支持未对齐数据访问的处理器(如 --cpu=ARM1136J-S)上使用 --unaligned_access 可加快对压缩结构的访问速度。

若要启用未对齐支持,必须执行下列操作:

  • 在初始化代码中清除 CP15 寄存器 1 的 A 位(即位 1)。

  • 在初始化代码中设置 CP15 寄存器 1 的 U 位(即位 22)。

    U 位的初始值由内核的 UBITINIT 输入确定。

RVCT 库包含旨在利用未对齐访问的某些库函数的特殊版本。 在启用未对齐访问支持的情况下,RVCT 工具将使用这些库函数从未对齐访问中获益。

--no_unaligned_access

使用 --no_unaligned_access 可在 ARMv6 处理器上禁止生成未对齐字和半字访问。

若要在不使用未对齐访问的情况下在 ARMv6 目标上启用对四字节求模的对齐检查,必须执行下列操作:

  • 在初始化代码中设置 CP15 寄存器 1 的 A 位(即位 1)。

  • 在初始化代码中设置 CP15 寄存器 1 的 U 位(即位 22)。

    U 位的初始值由内核的 UBITINIT 输入确定。

Note

ARM 处理器内核不支持未对齐双字访问,例如对 longlong 整数的未对齐访问。 双字访问必须是八字节或四字节对齐的。

编译器不支持对八字节求模的对齐检查。 也就是说,编译器(或更具体地说是 RVCT 工具集)不支持 CP15 寄存器 1 中的配置 U = 0A = 1

RVCT 库包含旨在利用未对齐访问的某些库函数的特殊版本。 若要在禁用未对齐访问支持的情况下禁止使用这些高级库函数,则在编译 C 和 C++ 源文件以及汇编语言源文件组合的情况下,需要同时在编译器命令行和汇编程序命令行中指定 --no_unaligned_access

限制

仅当软件中的对齐支持选项与处理器内核中的对齐支持选项相匹配时,针对支持未对齐数据访问的处理器而编译的代码才能正确运行。

另请参阅

Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0348AC
Non-Confidential