Project

General

Profile

Actions

Task #5350

closed

Labels in the text of instruction calls

Added by Andrei Tatarnikov over 9 years ago. Updated over 5 years ago.

Status:
Closed
Priority:
High
Assignee:
Andrei Tatarnikov
Category:
ISA Simulator
Target version:
Start date:
10/16/2014
Due date:
% Done:

100%

Estimated time:
Detected in build:
svn
Published in build:

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)
Actions

Also available in: Atom PDF