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