Under construction!

URL данного справочника
emc.orgfree.com/RISC-V/hb


Навигатор

home My RISC-V home

Инструкции
базового набора
RV64I
(дополняет
RV32I):

handbook

арифметические

сдвиги

загрузки

сохранения

См. также

  • набор RV32I
  • набор RV128I

Evgeny Eremin

Инструкции SLLI, SRLI, SRAI (64 бита)

SLLI rd, rs1, shamt
SRLI rd, rs1, shamt
SRAI rd, rs1, shamt

При обсуждении используются следующие обобщенные обозначения инструкций:

  • SxxI32 (вместо xx можно подставить LL, RL или RA, т.е. SLLI32, SRLI32 или SRAI32) - инструкции набора RV32I, обозначаемые ранее как SLLI, SRLI и SRAI соответственно.
  • SxxI64 - те же инструкции, но для набора RV64I.

Набор команд: базовый RV64I

Формат: I (с некоторой особенностью полей shamt и func7!!!)

Операнды: rd и rs1 – регистры, shamt – 6-битная константа

Действие: сдвиг значения rs1 на shamt битов; результат помещается в rd

Примечания

  1. Все инструкции сдвигов SxxI64 кодируются почти одинаково с SxxI32. В частности, и для RV32I, и для RV64I одинаковым образом кодируются поля инструкции opcod, rd, func3 и rs1.
  2. Но есть отличие. В SxxI32 число сдвигов shamt помещается в 5 битов. Для SxxI64 под него требуется уже 6 битов. Недостающий для поля shamt бит берется из поля func7, фактически превращая его в func6! (См. пример ниже.) Кстати говоря, для RV128I придется "отбирать" у func6 еще один бит!
  3. При shamt < 32 кодирование соответствующих пар инструкций SxxI32 и SxxI64 неразличимо. Но начиная с 32 (до 64) инструкция SxxI32 становится некорректной. Лично мне это кажется неудобным, поскольку при большом сдвиге, не зная разрядность, невозможно по записи команды однозначно понять, правильна она или нет. Да и если говорить строго, то все то это плохо походит на правила кодирования для объявленного формата I.
  4. Принятое в стандарте RISC-V название поля shamt – это сокращение от SHift AMounT, т.е. количество сдвигов.

Пример

Инструкция SLLI x31, x7, 36 сдвигает содержимое регистра x7 на 36 битов влево, а результат помещает в x31.
Код инструкции для 64-битных данных (а для 32-битных команда некорректна) содержит следующие поля:

полеразрядностьсодержимоепримечание
func66 битов000000 всегда
shamt6 битов10010036
rs15 битов00111x7
func33 бита001 всегда
rd5 битов11111x31
opcode7 битов0010011 всегда

Итоговый код

000000 100100 00111 001 11111 00100112 = 02 43 9F 9316

Для увеличения разрядности shamt биты берутся из поля func7.


Автор справочника - Евгений Александрович Еремин (Пермский государственный гуманитарно-педагогический университет). e_eremin@yahoo.com


Free Web Hosting