Task #5350
closedLabels in the text of instruction calls
100%
Description
Не обходим вменяемый механизм использования меток в сгенерированом коде инструкций. Сейчас используется ненадёжно решение, основанное на замене текста (r2689).
Суть проблемы состоит в следующем. Вот типичный код операции ветвления:
op BEQ (rs : R, rt : R, offset : SHORT) syntax = format("BEQ %s, %s, %<label>d", rs.syntax, rt.syntax, offset) image = format("000100%s%s%s", rs.image, rt.image, offset) action = { if rs == rt then // Informs that control transfer is to be performed BRANCH = 1; // Calculates the jump address and saves it to a temporary variable JMPADDR = NIA + (offset << 3); endif; }
Адрес для перехода получается на основе параметра offset (смещение), который представляет собой некоторую числовую константу. В тестовом шаблоне этот параметр может задаваться как обращение к некой метке и при этом инструкции будет передана некая произвольная (fake) константа, т.к. у нас сейчас нет модели памяти и мы не можем вычислить смещение. Проблема: при герации кода у нас получается некорректный код: вызов инструкции B будет с произвольным смещением. Поэтому, необходимо в таких случах вместо fake аргумента подставлять имя метки. При этом важно поддерживать оба варианта использования: (1) передавать инструкции константные значения и (2) использовать метки.
Нужно продумать решение. Скорее всего поддержка должна быть на уровне модели. Т.е. модель должна уметь регистрировать метки и подставлять соответствующие имена, если метка для данного значения зарегистрирована.
В Sim-nML добавлено следующее соглашение. В строке форматирования используется тег <label> для обозначения значений, которые могут быть заменены на имя соответствующей метки.
syntax = format("BEQ %s, %s, %<label>d", rs.syntax, rt.syntax, offset)
Updated by Alexander Kamkin about 10 years ago
- Subject changed from [model] Labels in the text of instruction calls to Labels in the text of instruction calls
- Category set to ISA Simulator
Updated by Andrei Tatarnikov about 7 years ago
- Status changed from New to Resolved
- % Done changed from 0 to 100