RISC-V架构常见gcc编译选项(-march、-mabi=、-mcmodel、-mlittle-endian、-mbig-endian)

1、-march=RISCV_ARCH

  • 用于告诉编译器目标芯片的架构情况,生成对应的二进制代码
  • 比如:-march=rv32im
    • rv32:告诉编译器生成的代码实在RISC-V架构的32位芯片上运行,就不会使用ld和sd命令,而使用lw和sw
    • im:芯片支持i指令集和m指令集
  • 怎么填写合适的参数
    • -march这个参数不是软件来决定的,是具体的芯片来决定
    • 芯片是什么架构、32位还是64位、支持哪些指令集,这些都是固定的,查芯片手册就知道,或者看厂家提供的demo代码是怎么填的

2、-mabi=RISCV_ABI

数据模型intlong指针
ilp32/ilp32f/ilp32d32bit32bit32bit
lp64/lp64f/lp64d32bit64bit64bit
浮点数传参规则需要支持的浮点指令扩展float参数double参数
ilp32/lp64不需要通过整数寄存器(a0-a1)传递通过整数寄存器(a0-a3)传递
ilp32f/lp64f需要支持F扩展通过浮点寄存器(fa0-fa1)传递通过整数寄存器(a0-a3)传递
ilp32d/lp64d需要支持F和D扩展通过浮点寄存器(fa0-fa1)传递通过浮点寄存器(fa0-fa1)传递
  • -mabi参数用于指定编译目标的adi,RISC-V定义了两个整型abi和三个浮点abi
    • 两个整型abi
      • ilp32:int、long、pointer都是32位,long long是64位,char是8位,short是16位
      • lp64:long、pointer是64位,int是32位,其他类型和ilp32一样
    • 三个浮点abi
      • ""空字符:在寄存器中不传递浮点参数
      • f:32位浮点寄存器,需要支持F扩展
      • d:64位浮点寄存器,需要支持F和D扩展

3、-march和-mabi的组合

组合含义
march=rv32imafdc -mabi=ilp32d可以生成硬件浮点指令,并在寄存器中传递浮点参数。这类似于 ARM 的 GCC 的-mfloat-abi=hard 参数
march=rv32imac -mabi=ilp32不能生成浮点指令,也不能在寄存器中传递浮点参数。这类似于 ARM 的 GCC 的-mfloat-abi=soft 参数
march=rv32imafdc -mabi=ilp32可以生成硬件浮点指令,但不会在寄存器中传递浮点参数。这类似于ARM的GCC的-mfloat-abi=softfp参数,通在硬浮动系统上与软浮动二进制文件接口时使用
march=rv32imac -mabi=ilp32d非法,因为 ABI 要求在寄存器中传递浮点参数,但ISA 没有定义用于传递它们的浮点寄存器

4、-mcmodel

-mcmodel含义
-mcmodel=medlow选项用于指示该程序的寻址范围固定只能在-2GB至+2GB的空间内。注意:地址区间没有负数可言,-2GB是指整个64位地址空间最高2GB地址区间
-mcmodel=medany寻址范围在当前PC的前后2G范围,寻址空间空间是不固定的,比较灵活
  • -mcmodel参数是用于告诉编译器指令的寻址范围,默认是-mcmodel=medlow
  • -mcmodel=medlow:简单理解就是只能寻址[0:4G]。对于32位架构的芯片刚好足够(最大也就是4G空间),但是对于64位架构的芯片则不能寻址全部空间
  • -mcmodel=medany:寻址范围在当前PC的前后2G范围,PC是不断变化的,可以实现把64位架构芯片的全部地址范围都寻址
  • 总结:
    • 32位架构芯片选“-mcmodel=medlow”和“-mcmodel=medany”都可以,但最好选“-mcmodel=medlow”
    • 64位架构芯片则必须选“-mcmodel=medany”,否则可能会因为不能寻址高位地址而出错

5、获取合适“-mabi和-march”组合的简便办法

在这里插入图片描述

  • 在编译工具链中使用-v查看信息,可以知道编译链支持的-march和-mabi组合
  • 这个方法不保证一定正确,正确的前提是维护编译工具链的人要正确填写

6、-mlittle-endian、-mbig-endian

  • -mlittle-endian:生成小端机器码
  • -mbig-endian:生成大端机器码
  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: RISC-V架构手册是一本介绍RISC-V指令集体系结构的重要参考资料。RISC-V是一种开放的指令集架构,具有可扩展性、灵活性和高效性的特点。 首先,RISC-V架构手册详细介绍了RISC-V指令集中的所有指令,包括常用的算术指令、逻辑指令、存取指令、分支指令等。它不仅列出了每个指令的编码格式和操作码,还详细说明了每个指令的功能和使用方法。这样的信息对于开发RISC-V处理器的工程师来说至关重要。 其次,RISC-V架构手册还介绍了RISC-V处理器的基本结构和中断处理机制。它详细解释了数据通路、控制单元和存储器等组件的连接方式和工作原理。同时,手册还讨论了RISC-V处理器的中断处理流程,包括中断的触发条件、中断处理程序的执行和中断返回等。这对于编操作系统或者驱动程序的开发者来说非常有帮助。 此外,RISC-V架构手册还包含了关于扩展特性和可选模块的说明。它介绍了如何在RISC-V架构上扩展自定义指令或者功能,以及如何添加可选的模块,如浮点单元、虚拟内存管理等。这样的灵活性使得RISC-V架构非常适合于各种应用领域,从嵌入式系统到超级计算机。 总的来说,RISC-V架构手册是开发人员和研究人员掌握RISC-V指令集和架构设计的重要参考资料。它全面介绍了RISC-V指令集的各个方面,并提供了实现RISC-V处理器的指导。通过学习和理解这本手册,人们可以更好地应用和推广RISC-V架构,推动开源指令集的发展。 ### 回答2: RISC-V(精简指令集计算机-五)架构手册是一份完整的指南,用于描述和解释RISC-V计算机架构的细节和规范。这个手册为开发者和研究人员提供了一个详细的参考,以了解和标准化他们在RISC-V处理器设计和实现方面的工作。 RISC-V架构手册包含多个章节和附录,涵盖了RISC-V指令集的不同方面。它首先介绍了RISC-V的设计原理和目标,比如简洁性、可扩展性和定制化能力。然后,手册详细说明了RISC-V指令集的不同指令格式和编码规则,包括指令解码过程和操作码的定义。 这个手册还涵盖了RISC-V的寄存器和寄存器文件,描述了它们的使用方法和特殊规则。此外,手册还提供了关于异常处理机制和中断处理机制的解释,以及RISC-V中的特权级别和特权模式的详细信息。 RISC-V架构手册还包含了有关内存管理单元(MMU)和虚拟内存系统的信息,说明了RISC-V支持的不同内存访问方式和存储体系结构的细节。此外,手册还提供了有关浮点运算和向量指令集的详细说明以及其使用方法。 除了这些主要内容外,RISC-V架构手册还提供了一些附录,包括指令集的变种和扩展,以及示例代码和编程实例。这些附录为开发者提供了实际应用和开发RISC-V处理器的指导支持。 总之,RISC-V架构手册是一个重要的参考资料,用于理解和使用RISC-V计算机架构。它的详细说明和规范为开发者提供了标准化和统一化的参考,以便设计、实现和优化RISC-V处理器。 ### 回答3: RISC-V架构手册是一本详细介绍RISC-V指令集架构的重要参考资料。RISC-V是一种新兴的开源指令集架构,其优势在于简洁、可扩展和高度灵活。RISC-V架构手册系统地介绍了RISC-V指令集的各种特性和用法。 首先,RISC-V架构手册提供了RISC-V指令集的全面介绍。它详细解释了RISC-V的指令编码方式、寄存器组织、内存管理机制等基本概念。通过学习手册,人们可以了解到RISC-V指令的格式和操作方式,从而能够编符合RISC-V架构的程序。 其次,RISC-V架构手册系统介绍了RISC-V的扩展指令集。RISC-V提供了一种模块化的设计理念,允许用户根据不同的应用需求选择使用不同的指令集扩展。手册详细介绍了RISC-V的各种扩展,如乘法/除法扩展、向量扩展等,并提供了使用这些扩展的示例和指导。 另外,RISC-V架构手册还介绍了RISC-V的异常处理和中断机制。这些机制对于系统安全和稳定运行非常重要。手册详细解释了异常和中断的分类、处理流程以及相关的指令和寄存器。通过学习手册,人们可以了解到如何在RISC-V架构中设计有效的异常处理和中断控制机制。 最后,RISC-V架构手册还介绍了RISC-V的特殊指令和特殊寄存器。这些特殊指令和寄存器常用于系统级编程和性能优化。手册提供了这些指令和寄存器的详细说明和使用方法,帮助人们充分发挥RISC-V架构的优势。 综上所述,RISC-V架构手册是学习和理解RISC-V指令集架构的重要工具。通过研读手册,人们可以掌握RISC-V的基本概念、指令格式和操作方式,进而能够灵活应用RISC-V的各种扩展和特殊功能,为不同的应用场景设计高效的RISC-V架构系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值