Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M8 / Исполнительная среда Itanium.doc
Скачиваний:
18
Добавлен:
16.04.2013
Размер:
340.48 Кб
Скачать

3. Исполнительная среда.

Архитектурное состояние состоит из регистров и памяти. Результаты выполнения инструкции становятся архитектурно видимыми согласно набору правил последовательности исполнения. Эта глава описывает состав прикладной архитектуры и правила для исполнительной последовательности. Детали описаны в главе 6 при описании выполнения набора инструкций IA-32.

3.1. Состав прикладных регистров

Прикладным программам доступен следующий список регистров (см. рис.3.1):

  • General Registers (GRs) – основные регистры представлены регистровым файлом GR0-GR127. При выполнении инструкций IA-32, целочисленные и сегментные регистры IA-32 содержатся в GR8-GR31.

  • Floating-point Registers (FRs) – регистры с плавающей точкой образуют файл FR0-FR127. При выполнении инструкций IA-32, регистры с плавающей точкой и регистры мультимедиа IA-32 содержатся в FR8-FR31.

  • Predicate Registers (PRs) – однобитные предикатные регистры PR0-PR63, используются в предикации и ветвлении.

  • Branch Registers (BRs) – регистры переходов используемые в ветвлении (branching), BR0-BR7.

  • Instruction Pointer (IP) – указатель инструкции – регистр, который содержит адрес связки текущей выполняемой инструкции, либо байтовый адрес для инструкции IA-32.

  • Current Frame Marker (CFM) – маркер текущего окна – описывает текущее окно стека основных регистров и FR/PR ротацию.

  • Application Registers (ARs) – прикладные регистры – набор регистров специального назначения.

  • Performance Monitor Data Registers (PMD) – Регистры данных для аппаратного мониторинга производительности.

  • User Mask (UM) – маска пользователя – устанавливает однобитные значения используемые для настройки ловушек, мониторов производительности и наблюдения за использованием регистров с плавающей точкой.

  • Processor Identifiers (CPUID) – идентификаторы процессора – регистры, которые описывают свойства зависящие от конкретной реализации процессора.

Состав прикладных регистров IA-32, в целом, содержится внутри большого набора прикладных регистровItaniumи доступен инструкциямItanium. Но инструкцииIA-32, не имеют доступа к набору регистрамItanium. Детальнее соотношение регистров описано в разделе 6.2 «Модель состава прикладных регистровIA-32».

3.1.1 Резервируемые и игнорируемые регистры и поля

Регистры, которые не определены, являются либо зарезервированными, либо игнорируемыми. При обращении к зарезервированному региструвызывается ошибка «Запрещенная операция». Чтениеигнорируемого регистравозвращает ноль. Программа может записывать любое значение в игнорируемый регистр, но аппаратура проигнорирует эту запись. В наборах регистров изменяемого размера, регистры, которых нет в конкретном процессоре, являются зарезервированными. Обращение к одному из таких отсутствующих регистров приведет к ошибке «Зарезервированный регистр/поле». Если внутри заданных регистров есть поля, которые не определены, то такие поля являются либо зарезервированными, либо игнорируемыми. При чтениизарезервированных полейаппаратура будет всегда возвращать ноль. Программа всегда должна записывать нули в эти поля. В противном случае, при записи в такое поле не нулевого значения будет вызвана ошибка «Зарезервированный регистр/поле». Зарезервированные поля могут быть использованы в будущем.

При чтении игнорируемых полей аппаратура всегда возвращает 0 (если не отмечено иное). Программа может записывать в такое поле любое значение – аппаратура проигнорирует эту запись. В качестве исключения отметим, что некоторые игнорируемые поля IA-32, могут быть использованы в дальнейшем.

Таблица 3.1. обобщает, как процессор реагирует на обращение к зарезервированным и игнорируемым полям.

Табл.3.1. Реакция зарезервированных и игнорированных регистров и полей

Тип

Чтение

Запись

Резервирован.

Регистр

Вызов ошибки «Запрещенная операция»

Поле

0

При ненулевой записи вызывается ошибка «Зарезервированный регистр/поле»

Игнорируем.

Регистр

0

Запись игнорируется

Поле

0 (если иное не отмечено)

Запись игнорируется

Если регистр имеет неопределенное значение, то его поля являются зарезервированными. Программа всегда должна записывать только указанные значения в такие поля. В противном случае, запись резервированного значения вызовет ошибку «Зарезервированный регистр/поле». Некоторые регистры являются только читаемыми. Запись в такой регистр вызовет ошибку «Запрещенная операция».

НАБОР ПРИКЛАДНЫХ РЕГИСТРОВ

General registers

nats

Floating-point registers

Predicates

Branch registers

63

0

81

0

63

0

gr0

0

0

fr0

+0.0

pr0

1

br0

gr1

fr1

+1.0

pr1

br1

gr2

fr2

pr2

br2

banked

reg

gr16

pr15

br7

gr31

fr31

pr16

gr32

fr32

Instruction Pointer

63

0

IP

Current frame Marker

37

0

pr63

CFM

User Mask

5

0

gr127

fr127

Advanced Load

Performance Monitor

Address Table

Processor Identifiers

Data registers

63

0

63

0

cpuid0

pmd0

cpuid1

pmd1

cpuidn

pmdm

Application registers

63

0

ar0

KR0

ar7

KR7

ar16

RSC

ar17

BSP

ar18

BSPSTORE

ar19

RNAT

ar21

FCR

ar24

EFLAG

ar25

CSD

ar26

SSD

ar27

CFLG

ar28

FSR

ar29

FIR

ar30

FDR

ar32

CCV

ar36

UNAT

ar40

FPSR

ar44

ITC

ar64

PFS

ar65

LC

ar66

EC

ar127

Рис.3.1. Модель прикладных регистров.

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

  • Не зависеть от состояния любых резервированных полей. Маскировать все резервированные поля перед проверкой содержимого.

  • Не зависеть от состояния любых резервированных полей при сохранении в память или регистр.

  • Не зависеть от способности сохранения информации записанной в резервированные и игнорируемые поля.

  • Где возможно, загружайте резервируемые и игнорируемые поля значениями, предварительно считанными из того же регистра, либо загрузите их нулями.

Соседние файлы в папке M8