Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MProc / M9 / Архитектура часть 5..doc
Скачиваний:
17
Добавлен:
16.04.2013
Размер:
349.18 Кб
Скачать

5.3. Инструкции с плавающей точкой

Этот раздел описывает инструкции с плавающей точкой. Детали описаны в томе 3 «Справочник набора инструкций».

5.3.1. Инструкции доступа к памяти

Существуют инструкции загрузки и сохранения чисел с плавающей точкой, для одинарного, двойного, двойного расширенного типов данных с плавающей точкой, а также для параллельных FPили целых типов данных со знаком либо без знака. Режимы адресации для инструкций загрузки и сохранения чисел с плавающей точкой, те же самые, что и для инструкций загрузки и сохранения целых чисел. Исключением являются инструкции парной загрузки чисел с плавающей точкой, которые могут иметь явно указанный базовый регистр с постинкрементом. Дополнительные подсказки памяти для инструкций загрузки и сохранения чисел с плавающей точкой, те же самые, что и для инструкций загрузки и сохранения целых чисел (см. раздел 4.4.6 «Управление иерархией памяти и непротиворечивость»). В табл.5.7 перечислены типы инструкций загрузки и сохранения с плавающей точкой. Инструкции парной загрузки и сохранения с плавающей точкой, требуют двух приемных регистров (см. раздел «Парная загрузка с плавающей точкой» в третьем томе). Инструкциям сохранения с плавающей точкой (stfs, stfd, stfe) требуется, чтобы значения в регистрах с плавающей точкой были такого типа, чтобы преобразование данных при сохранении было корректным.

Табл.5.7. Инструкции доступа к данным с плавающей точкой

Операции

Загрузка в FR

Парная загрузка в FR

Сохранение из FR

С одинарной точностью

ldfs

ldfps

stfs

Целочисленная/Параллельная FP

ldf8

ldfp8

stf8

С двойной точностью

ldfd

ldfpd

stfd

С расширенной точностью

ldfe

stfe

Сливания/Заливания

ldf.fill

stf.spill

Безуспешные спекулятивные загрузки записывают NaTValв приемный регистр или регистры (см. раздел 4.4.4). СохранениеNaTValв память вызовет ошибку «Употребление регистрового значенияNaT», исключением является инструкция сливания (stf.spill).

Сохранение и восстановление регистров завершается инструкциями сливания и заливания (stf.spill, ldf.fill) использующими 16-битовое содержимое памяти. Они являются единственными инструкциями, которые могут быть использованы для сохранения и восстановления фактического содержимого регистров, т.к. они не вызывают ошибку приNaTVal. Они сохраняют и восстанавливают все типы (единичный, двойной, расширенный регистровые форматы и целые или параллельныеFP) и гарантируют совместимость с возможными будущими архитектурными расширениями.

Рисунки 5.4, 5.5, 5.6, 5.7, 5.8 и 5.9 описывают как происходит преобразование данных при обмене между регистром с плавающей точкой и памятью для различных типов данных и для различных инструкций загрузки/сохранения и сливания/заливания.

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

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

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

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

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

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

При загрузке и сохранении с плавающей точкой поддерживаются оба способа упорядочивания байт – и по возрастанию, и по убыванию. Для одинарного и двойного форматов памяти, упорядочивание байтов идентично для 32-битных и 64-битных целых типов (см. раздел 3.2.3). Упорядочивание байтов для двойного расширенного формата и для операций сливания/заливания показано на рис.5.10.

Форматы памяти

Формат регистра с плавающей точкой

Сливания/заливания (128-битные)

LE

BE

0

7

0

7

0

s0

0

0

1

s1

1

0

2

s2

2

0

3

s3

3

0

4

s4

4

0

5

s5

5

se2

6

s6

6

e1

7

s7

7

e0

8

e0

8

s7

9

e1

9

s6

10

se2

10

s5

11

0

11

s4

12

0

12

s3

13

0

13

s2

14

0

14

s1

15

0

15

s0

Двойной-расши­ренный (80 бит)

LE

BE

0

7

0

7

0

s0

0

se1’

1

s1

1

e0’

2

s2

2

s7

3

s3

3

s6

4

s4

4

s5

5

s5

5

s4

6

s6

6

s3

7

s7

7

s2

8

e0’

8

s1

9

se1’

9

s0

(82-битный)

81

63

0

s

порядок

мантисса

se2

e1

e0

s7

s6

s5

s4

s3

s2

s1

s0

se1’

e0’

s7

s6

s5

s4

s3

s2

s1

s0

Рис.5.10. Форматы памяти с плавающей точкой при сливании/заливании и при двойной расширенной точности.