Project

General

Profile

Task #7743

Коммит 905af510: Sub instruction added

Added by Pavel Putro over 3 years ago. Updated 5 months ago.

Status:
Closed
Priority:
Normal
Assignee:
Target version:
-
Start date:
11/21/2016
Due date:
% Done:

0%

Estimated time:
Detected in build:
master
Published in build:

Description

Добавил описание инструкций subf и subf., однако не под своим именем, т.к. гит был настроен на старый проект. Также заметил что из комментариев пропали все специальные символы такие как ← и.т.д., хотя в файле перед отправкой они были. Прошу проверить правильность описания инструкции и сообщить если есть какие-то проблемы. У меня тесты выполняются без ошибок.

History

#1

Updated by Andrei Tatarnikov over 3 years ago

Несколько общих замечаний:

  1. В спецификациях не должно быть символов табуляции. У нас принято вместо них использовать пробелы.
  2. Внутренние инструкции, к которым не обращаются на прямую, такие как op add_general, нужно помечать ключевым словом internal (т.е. internal op add_general).
  3. Не нужно злоупотреблять использованием атрибута init. Опкоды нужно помещать в строку форматирования. Атрибут init должен использоваться только тогда, когда по-другому не получается. Промежуточные присваивания, которые делаются внутри этого атрибута, создают проблемы при дизассемблировании. Также это вредит производительности (init выполняется перед каждым вызовом других атрибутов). Таким образом, все кострукции типа:
    op addi (rt: R, ra: R, simm: SHORT)
      init = {
        OPCD = coerce(card(6), 0b011100);
      }
      syntax = format("addi %s, %s, %d", rt.syntax, ra.syntax, simm)
      image  = format("%16s%5s%5s%6s", simm, ra.image, rt.image, OPCD)
    
    должны быть переписаны как:
    op addi (rt: R, ra: R, simm: SHORT)
      syntax = format("addi %s, %s, %d", rt.syntax, ra.syntax, simm)
      image  = format("%16s%5s%5s011100", simm, ra.image, rt.image)
    
#2

Updated by Alexander Protsenko over 3 years ago

  • Assignee set to Alexander Protsenko

1. Есть негласное соглашение в спецификациях MicroTESK вместо символа табуляции ставить 4 пробела. (В большинстве редакторов можно настроить автозамену.) Стоит этого придерживаться.

2. На счет

 internal op add_general
это ключевое слово появилось у нас недавно, пример для PowerPC писался раньше, так что не отражал этого. Я сейчас поправлю это.

3. Наличие символов подобных "←" не желательно. Это мое упущение, опять же сейчас я сам это поправлю.

4. По поводу "init", в примерах все верно. Пришли с Андреем по этому поводу к соглашению. Его вариант тоже верен, но пока лучше использовать вариант из примера.

#3

Updated by Alexander Protsenko over 3 years ago

  • Status changed from New to Feedback
  • Assignee changed from Alexander Protsenko to Pavel Putro

Обновил "powerpc_alu.nml". Поправил все о чем писал выше.

Важно: необходимо обновить версию ядра MicroTESK до последнего. (https://forge.ispras.ru/attachments/download/4928/microtesk-2.4.3-beta-161118.tar.gz)

Немного общих пояснений:
1. Описание инструкций берется из документа EREF_RM.pdf (EREF: A Programmer’s Reference Manual for Freescale Power Architecture Processors). Стоит отметить, что в e500mc 32 битные регистры, а описание в документе универсальное.
2. Регистры и поля регистров, такие как:

XER_SO = XER_SO | XER_OV
....
CR0_SO = XER_SO;
объявлены в файле "powerpc.nml" (86+ строка на данный момент)

Ошибок в инструкциях найдено не было.

#4

Updated by Alexander Protsenko over 3 years ago

Обновлена группа инструкций add (add., addo, addo.). Были вынесены общие "syntax" и "image" в add_general().
(Предлагается использовать этот пример для спецификации новых групп инструкций, если он применим.)

Исправлена в шаблоне операция "OR".

#5

Updated by Pavel Putro over 3 years ago

Нужно ли, для соблюдения стиля, обновить таким способом все уже созданные инструкции?

#6

Updated by Alexander Protsenko over 3 years ago

Pavel Putro wrote:

Нужно ли, для соблюдения стиля, обновить таким способом все уже созданные инструкции?

Если говорить про стиль, то первая версия ему соответствует. И необходимости в этом нет.
Лучше сосредоточиться на добавление новых инструкций. Последний пример показывает, как ускорить процесс спецификации групп инструкций.

#7

Updated by Andrei Tatarnikov over 3 years ago

В спецификации было добавлено ключевое слово pseudo (коммит 974ac00e8a84cebdfdec61d780f3fb4e0aaf4e2e).

Оно должно использоваться для инструкций, которые являются производными от других инструкций (например, являющихся их частным случаем, как mr и or). Это все интструкции, помеченные как "Equivalent to: ...". У таких инструкций опткоды совпадают опткодами базовых инструкций, и при декодировании невозможно выбрать правильный вариант. Поэтому при помощи ключевого слова pseudo все производные интсрукции должны исключаться из рассмотрения, а при декодировании всегда будут получаться базовые инструкции.

Например, инструкция mr rA,rS всегда будет декодироваться как or rA,rS,rS.

// mr: Move register
// mr rA,rS (Rc=0) Equivalent to: or rA,rS,rS
pseudo op mr (ra: R, rs: R)
  init = {
    Rc = coerce(BIT, 0);
    XO_10 = coerce(card(10), 0b0011110110);
    OPCD = coerce(card(6), 0b111110);
  }
  syntax = format("mr %s, %s", ra.syntax, rs.syntax)
  image  = format("%1s%10s%5s%5s%5s%6s", Rc, XO_10, rs.image, ra.image, rs.image, OPCD)
  action = {
    or(ra, rs, rs).action;
  }
#8

Updated by Sergey Smolov 5 months ago

  • Detected in build changed from svn to master

Задача ещё актуальна?

#9

Updated by Pavel Putro 5 months ago

  • Status changed from Feedback to Closed

Also available in: Atom PDF