Сжатые инструкции RISC-V: Можно ли заставить компилятор выравнивать 32-битные инструкции на 32-битных границах? - PullRequest
0 голосов
/ 08 мая 2018

Мы реализуем пользовательский процессор RISC-V. Мы начинаем с ядра Rocket в качестве базы и сильно модифицируем.

Наша первая версия была основана на Rocket Chip 2016 года, в котором не было сжатых инструкций. Сейчас мы портируем на 2017 год, что делает. Недавно мы обнаружили, что версия 2017 года позволяет выровнять 32-битные инструкции по 16-битным границам - это означает, что одну инструкцию можно разделить на две строки кэша!

Для нашей реализации это вызывает нетривиальные проблемы.

Все хорошо, если 32-битные инструкции не разбиты по строкам кэша.

Можно ли заставить GCC выровнять все 32-битные инструкции на 32-битных границах?

1 Ответ

0 голосов
/ 19 мая 2018

В настоящее время нет поддержки этого в наборе инструментов. Наш порт GCC был бы фактически неспособен сделать это, так как выравнивание обрабатывается во время соединения (об этом есть блог: https://www.sifive.com/blog/2017/08/28/all-aboard-part-3-linker-relaxation-in-riscv-toolchain/).. Хотя вы могли бы добавить поддержку этого в цепочку инструментов, он бы эффективно отобразил расширение C). бесполезно, так что вам, вероятно, лучше рассматривать это как ядро, которое не поддерживает RVC.

...