Как поля rs1 и rs2 для регистров с плавающей запятой (f0-f31) кодируются в инструкциях RISC-V? - PullRequest
0 голосов
/ 30 октября 2018

Целочисленная регистровая кодировка соответствует их числовым именам (0-31, для x0-x31). Что это за кодировка для f0-f31?

Я пытаюсь написать дизассемблер.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Итак, несколько вещей: 1) Есть документы по RISC-V. 2) если вы пишете первый ассемблер или дизассемблер для набора инструкций, тогда вы работаете там и можете просто спуститься по одному из кубиков кремниевых инженеров и спросить. 3) если нет, то существуют инструменты для этого набора инструкций, и вы должны использовать их в качестве справки:

Принимая документацию по рискам:

.word 0x001100D3
.word 0x002100D3
.word 0x003100D3
.word 0x001100D3
.word 0x001200D3
.word 0x001300D3
.word 0x00130153
.word 0x00130253
.word 0x00130353

собрать, затем разобрать

   0:   001100d3            fadd.s  f1,f2,f1,rne
   4:   002100d3            fadd.s  f1,f2,f2,rne
   8:   003100d3            fadd.s  f1,f2,f3,rne
   c:   001100d3            fadd.s  f1,f2,f1,rne
  10:   001200d3            fadd.s  f1,f4,f1,rne
  14:   001300d3            fadd.s  f1,f6,f1,rne
  18:   00130153            fadd.s  f2,f6,f1,rne
  1c:   00130253            fadd.s  f4,f6,f1,rne
  20:   00130353            fadd.s  f6,f6,f1,rne

затем напишите код, используя мнемонику, повторите. Разработайте свой дизассемблер из документации ISA в сочетании с существующими инструментами, продолжайте этот процесс, пока вы не почувствуете себя довольно хорошо в своем инструменте. Ожидайте ошибки или неопределенность в документации ...

Теперь, конечно, в этом случае можно надеяться, что GNU использует язык ассемблера, который чем-то напоминает язык Risc-V, желания, примеры, документацию. У GNU есть привычка этого не делать. В то же время, если вы пишете дизассемблер, а не ассемблер и не полный набор инструментов, тогда вы должны сделать так, чтобы дизассемблер соответствовал синтаксису используемого вами ассемблера, для вашего же здравого смысла ...

0 голосов
/ 30 октября 2018

Регистры с плавающей точкой кодируются таким же образом. Процессор знает, использовать ли регистр целых чисел или регистр с плавающей запятой по характеру команды.

Спецификации RISC-V соответствуют https://riscv.org/specifications/. В качестве образца для одного типа инструкции, в Руководство по набору инструкций RISC-V, том I: Уровень пользователя ISA , версия 2.2, май 7, 2017, раздел 8.6, «Инструкции по вычислениям с плавающей запятой одинарной точности»:

Арифметические инструкции с плавающей точкой с одним или двумя исходными операндами используют формат R-типа с основным кодом операции OP-FP. FADD.S, FSUB.S, FMUL.S и FDIV.S выполняют сложение, вычитание, умножение и деление с плавающей запятой одинарной точности соответственно между rs1 и rs2, записав результат в rd .

Формат R-типа показан в 2.2, «Базовые форматы инструкций». На схеме показано, что rs1 , rs2 и rd - биты 19 через 15, 24 до 20 и с 11 по 7 соответственно.

...