我们正在实施自定义RISC-V CPU。我们从Rocket核心开始作为基础并进行大量修改。
我们的第一个版本基于2016 Rocket Chip,它没有压缩指令。我们现在正在移植到2017年。我们最近发现2017版本允许32位指令在16位边界上对齐 - 这意味着单个指令可以分成两个缓存行!
对于我们的实施,这会导致非常重要的问题。
只要32位指令不在高速缓存行之间分割,就可以了。
是否可以强制GCC在32位边界上对齐所有32位指令?
答案 0 :(得分:2)
目前工具链中不支持此功能。我们的GCC端口实际上无法做到这一点,因为在链接时处理对齐(这里有一个博客:https://www.sifive.com/blog/2017/08/28/all-aboard-part-3-linker-relaxation-in-riscv-toolchain/)。虽然您可以在工具链中添加对此的支持,但它会使C扩展名无效,因此您可能最好将其视为不支持RVC的核心。