RISC-V 架构适配知识库
  • 睿迁工具集
  • RVSmartPorting
  • 简体中文
  • English (US)
在 Gitee 上查看
  • 睿迁工具集
  • RVSmartPorting
  • 简体中文
  • English (US)
在 Gitee 上查看
  • 简介
    • 贡献规范
  • 入门
    • 内存一致性模型
    • 硬件开发板差异
    • 指令集模块
  • 通用调整
    • 检查项目对多架构的支持性
    • 文件结构调整
    • 目录结构调整
    • 测试用例调整
  • C/C++ 程序
    • 内联汇编
    • 宏定义与判断
    • 移位运算中的整形常数
    • Intrinsic 函数
    • 多版本函数
    • 系统调用
  • 汇编程序
  • 编译配置文件
    • rpmbuild
    • Makefile
    • CMake
    • Autoconf
    • QMake
    • 其它
  • 其它编程语言
    • Rust
    • Go
    • Python
    • 其它语言
  • 辅助工具集
    • 目标代码定位工具
    • 汇编指令翻译工具

多版本函数

GNU C++ 编译器提供了一种“多版本函数”的机制,利用属性标签 __attribute__ 可为不同的目标硬件架构编写不同版本的函数,运行时将自动根据当前平台切换使用。 多版本函数机制可以允许同一个函数在不同的目标扩展指令集下拥有多套不同的实现, 以充分利用特定扩展指令集的优势,加速程序运行。

目前,GCC 编译器原生支持 X86 平台下的多版本函数机制,ARM 正致力于 为 AArch64 架构引入该机制的支持。

__attribute__ ((target ("default")))
int foo(void) {
    // 默认版本的 foo 函数
    return 0;
}

__attribute__ ((target ("sse4.2")))
int foo(void) {
    // 针对 SSE 4.2 架构的 foo 函数
    return 1;
}

__attribute__ ((target ("arch=atom")))
int foo(void) {
    // 针对 Atom 系列处理器的 foo 函数
    return 2;
}

__attribute__ ((target ("arch=amdfam10")))
int foo(void) {
    // 针对 0x10 系列 AMD 处理器的 foo 函数
    return 3;
}

int main () {
    // 自动根据目标硬件架构平台调用对应版本的 foo 函数
    printf("%d", foo());
    return 0;
}

参考文献

  • GCC: Function Multiversioning
编辑本页面
最后更新时间:
贡献者: LightningRS
Prev
Intrinsic 函数
Next
系统调用

本知识库采用 木兰开放作品许可协议 署名-相同方式共享 第1版 进行许可

版权所有 © 2025 RVSmartPorting. | 京ICP备20005262号 | beian京公网安备11010802043677号