Но почему данные должны храниться относительно pc? Есть инструкция вида LW rd, imm(rs). Если мы загружаем константу (а мы же говорим о константах, да?), то они лежат обычно в секции .rodata, по фиксированному адресу.
Кэш ускоряет работу с памятью, но хорошей практикой считается как можно меньше трогать память, и выполнять всё, что можно, на регистрах. Отсюда и замена lw/ld длинными цепочками команд, вычисляюших константы в рантайме.
Загрузка из памяти, это одна инструкция. В современном мире загрузка из памяти - это самая медленная операция, и может занимать сотни тактов. Зависит от попадания в кэш.
Здесь в a0 загружается 64-битная константа. Главным образом используются сложения и сдвиги. Это несколько громоздко, но иначе придётся делать загрузку константы из памяти, а это нежелательно.
Нет, в железо ничего не переведено, это остаётся просто соглашением, и вы можете использовать какое-то другое соглашение для своих проектов. Однако это соглашение является стандартным и изменять его без необходимости не нужно.
Это на самом деле очень удобно, его можно использовать везде, где один из операндов равен нулю. Один из наиболее очевидных примеров использования: add rd, rs, zero - переносит rs в rd, что заменяет команду mov, необходимую в других архитектурах.
Ребята, которые пилят мультиклет, нахамили мне в лицо, когда я предложил запилить компилятор на LLVM. В их поделии нет ничего такого, что нельзя было бы запилить в LLVM. Если вы посмотрите в существующие бэкенды LLVM, там есть действительно нетипичные архитектуры, и ничего, всё работает.
Ничего особенного я в этих советах не вижу. Готовьтесь к каждому интервью, внимательно изучите требования вакансии, задавайте вопросы - что не так?
Можно ссылочку на видео?
Я не буду разводить бессмысленных дискуссий, но данные относительно pc не хранятся ни в одной архитектуре. Предлагаю на этом закончить.
Но почему данные должны храниться относительно pc? Есть инструкция вида LW rd, imm(rs). Если мы загружаем константу (а мы же говорим о константах, да?), то они лежат обычно в секции .rodata, по фиксированному адресу.
Кэш ускоряет работу с памятью, но хорошей практикой считается как можно меньше трогать память, и выполнять всё, что можно, на регистрах. Отсюда и замена lw/ld длинными цепочками команд, вычисляюших константы в рантайме.
Загрузка из памяти, это одна инструкция. В современном мире загрузка из памяти - это самая медленная операция, и может занимать сотни тактов. Зависит от попадания в кэш.
64-битная версия выглядит практически так же, но добавлены команды для загрузки и сохранения 64-битных чисел и некоторые другие.
Пример:
Здесь в a0 загружается 64-битная константа. Главным образом используются сложения и сдвиги. Это несколько громоздко, но иначе придётся делать загрузку константы из памяти, а это нежелательно.
Сейчас на ядро Risc V перешли в своей продукции компании MIPS, Western Digital, и ряд других крупных компаний имеют такие планы.
Пока на рынке мало микросхем, но кое-что есть. Есть аналоги STM32 на RISCV, есть чипы SiFive, скоро выйдет одноплатник от Beaglebone.
Нет, в железо ничего не переведено, это остаётся просто соглашением, и вы можете использовать какое-то другое соглашение для своих проектов. Однако это соглашение является стандартным и изменять его без необходимости не нужно.
Это на самом деле очень удобно, его можно использовать везде, где один из операндов равен нулю. Один из наиболее очевидных примеров использования: add rd, rs, zero - переносит rs в rd, что заменяет команду mov, необходимую в других архитектурах.
В оригинале было слово ill-tempered, я затрудняюсь перевести его дословно. Будем считать, что Бендер безумен в хорошем смысле.