RISC-V 压缩指令:是否可以强制编译器在 32 位边界上对齐 32 位指令?
RISC-V Compressed Instructions: Can compiler be forced to align 32bit instructions on 32bit boundaries?
我们正在实施自定义 RISC-V CPU。我们以 Rocket core 为基础,大量修改。
我们的第一个版本基于 2016 Rocket Chip,没有压缩指令。我们现在正在移植到 2017 年,确实如此。我们最近发现 2017 版本允许 32 位指令在 16 位边界上对齐——这意味着单个指令可以拆分为两个缓存行!
对于我们的实施,这会导致重要的问题。
只要 32 位指令不跨高速缓存行拆分就没问题。
是否可以强制 GCC 在 32 位边界上对齐所有 32 位指令?
工具链中目前不支持此功能。我们的 GCC 端口实际上无法执行此操作,因为对齐是在 link 时间处理的(有一篇关于此的博客:https://www.sifive.com/blog/2017/08/28/all-aboard-part-3-linker-relaxation-in-riscv-toolchain/)。虽然您可以将对此的支持添加到工具链中,但它会使 C 扩展实际上变得无用,因此您最好将其视为不支持 RVC 的核心。
我们正在实施自定义 RISC-V CPU。我们以 Rocket core 为基础,大量修改。
我们的第一个版本基于 2016 Rocket Chip,没有压缩指令。我们现在正在移植到 2017 年,确实如此。我们最近发现 2017 版本允许 32 位指令在 16 位边界上对齐——这意味着单个指令可以拆分为两个缓存行!
对于我们的实施,这会导致重要的问题。
只要 32 位指令不跨高速缓存行拆分就没问题。
是否可以强制 GCC 在 32 位边界上对齐所有 32 位指令?
工具链中目前不支持此功能。我们的 GCC 端口实际上无法执行此操作,因为对齐是在 link 时间处理的(有一篇关于此的博客:https://www.sifive.com/blog/2017/08/28/all-aboard-part-3-linker-relaxation-in-riscv-toolchain/)。虽然您可以将对此的支持添加到工具链中,但它会使 C 扩展实际上变得无用,因此您最好将其视为不支持 RVC 的核心。