ZHCUA98E january   2018  – march 2023 TDA4VM , TDA4VM-Q1

 

  1.   摘要
  2. 1关于本文档
    1. 1.1 相关文档
    2. 1.2 商标
  3. 2将 C 源代码从 C6000 迁移到 C7000
    1. 2.1  编译器选项
    2. 2.2  原生矢量数据类型
    3. 2.3  类型限定符:near 和 far
    4. 2.4  64 位 long 类型
    5. 2.5  对控制寄存器的引用
    6. 2.6  存储器映射外设
    7. 2.7  运行时支持
    8. 2.8  迁移头文件 c6x_migration.h 的内容
      1. 2.8.1 支持的宏
      2. 2.8.2 不受支持的宏
      3. 2.8.3 传统数据类型
      4. 2.8.4 传统内在函数
    9. 2.9  伽罗瓦域乘法指令
    10. 2.10 有关迁移代码的性能注意事项
      1. 2.10.1 UNROLL Pragma
      2. 2.10.2 子矢量访问
      3. 2.10.3 16x16 和 16x32 位乘法
      4. 2.10.4 __x128_t 类型
      5. 2.10.5 无符号数组偏移
      6. 2.10.6 流引擎和流地址生成器
      7. 2.10.7 其他优化指南
  4. 3主机仿真
  5. 4修订历史记录
    1.     29
    2.     30

原生矢量数据类型

C6000 编译器支持使用原生矢量数据类型,这些类型在 TMS320C6000 优化编译器用户指南 (SPRUI04) 的第 7.4.2 节中进行了说明。

将依赖原生矢量数据类型的源代码移植到 C7000 编译器时,请了解以下差异:

  • 没有 c6x_vec.h 文件。将 c6x_vec.hc6x.h 的 #include 替换为仅 c7x.h
  • C7000 默认启用 --vectypes 编译器选项。
  • 如果符号与原生矢量类型的名称相冲突,请使用 --vectypes=off。

在 C6000 上,必须使用 --vectypes 选项启用类似于 OpenCL™ 的原生矢量数据类型。但是,对于 C7000 编译器,默认情况下会启用所有原生矢量数据类型。因此,无需使用 --vectypes=on。如果现有代码的符号与原生矢量数据类型符号相冲突,则可以使用 --vectypes=off 选项关闭编译器对这些符号的识别。

请注意,每种原生矢量数据类型都有两个名称:一个不带双下划线前缀(例如 int4),一个带双下划线前缀(例如 __int4)。原生矢量数据类型的双下划线版本始终被编译器识别。--vectypes=off 选项仅会关闭那些没有双下划线前缀的矢量数据类型。

为了以后实现尽可能出色的兼容性和可移植性,我们建议您重命名使用 OpenCL 和类似 OpenCL 的原生矢量数据类型名称的所有现有 定义类型、结构或等级(不会成为原生矢量数据类型)。这也允许使用较短的原生矢量类型名称,这些名称不使用双下划线前缀。

C7100 和 C7120 的矢量大小为 512 位,因此矢量中的元素数上限大于 C6000。C6000 受到 OpenCL 施加的 16 个元素的限制。C7000 的矢量长度限于表 2-2 中所示的最大元素数。

表 2-2 C7000 支持的矢量类型
类型说明最大元素数
charnn 个 8 位有符号整数值组成的矢量64
ucharnn 个 8 位无符号整数值组成的矢量64
shortnn 个 16 位有符号整数值组成的矢量32
ushortnn 个 16 位无符号整数值组成的矢量32
intnn 个 32 位有符号整数值组成的矢量16
uintnn 个 32 位无符号整数值组成的矢量16
longnn 个 64 位有符号整数值组成的矢量8
ulongnn 个 64 位无符号整数值组成的矢量8
floatnn 个 32 位单精度浮点值组成的矢量16
doublenn 个 64 位双精度浮点值组成的矢量8
ccharnn 对 8 位有符号整数值组成的矢量32
cshortnn 对 16 位有符号整数值组成的矢量16
cintnn 对 32 位有符号整数值组成的矢量8
clongnn 对 64 位有符号整数值组成的矢量4
cfloatnn 对 32 位浮点值组成的矢量8
cdoublenn 对 64 位浮点值组成的矢量4

C7000 不支持 C6000 64 位 longlongn、ulonglongn 和 clonglongn 矢量类型。只要包含 c6x_migration.h 文件,编译器就会将这些类型映射为 C7000 支持的相应类型,即分别为 longn、ulongn 和 clongn