Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Для VLIW нельзя не пилить свой компилятор
И куча команд nop 5 указывает, что ждать результатов действительно приходится.Это могут быть delay slot-ы, о которых я выше уже отписался.
sum:
CMPGT .L2 B4,0,B0
|| ZERO .L1 A5
|| ZERO .S2 B5
|| ZERO .S1 A3
[!B0] B .S2 _END
NOP 5
MVC CSR,B6
AND B6,-2,B0
MVC B0,CSR
AND .L2 B4,1,B1
|| ADD .S2X 4,A4,B2
|| SHR .S1X B4,1,A2
[B1] LDW .D1 *A4++[2],A3
|| [!A2] B .S2 _END
|| [A2] SUB .L1 A2,1,A2
LDW .D1 *A4++[2],A0
|| LDW .D2 *B2++[2],B0
|| [A2] SUB .S1 A2,1,A2
|| [A2] B .S2 _LOOP
LDW .D1 *A4++[2],A0
|| LDW .D2 *B2++[2],B0
|| [A2] SUB .S1 A2,1,A2
|| [A2] B .S2 _LOOP
LDW .D1 *A4++[2],A0
|| LDW .D2 *B2++[2],B0
|| [A2] SUB .S1 A2,1,A2
|| [A2] B .S2 _LOOP
LDW .D1 *A4++[2],A0
|| LDW .D2 *B2++[2],B0
|| [A2] SUB .S1 A2,1,A2
|| [A2] B .S2 _LOOP
LDW .D1 *A4++[2],A0
|| LDW .D2 *B2++[2],B0
|| [A2] SUB .S1 A2,1,A2
|| [A2] B .S2 _LOOP
_LOOP:
ADD .L1 A5,A0,A5
|| ADD .L2 B5,B0,B5
|| LDW .D1 *A4++[2],A0
|| LDW .D2 *B2++[2],B0
|| [A2] SUB .S1 A2,1,A2
|| [A2] B .S2 _LOOP
_END:
B .S2 B3
MVC B6,CSR
ADD .L1 A5,A3,A4
ADD .L1X A4,B5,A4
NOP 2
.ref _c_int00 ;точка входа
_c_int00:
;///////////////////////////////////////
.data ;секция данных
array1: .ushort 1,2,3,1,2,6,7,8,1,1,1,1,1,2,1,2,3,4,5,6,7,8,1,2,6 ;создаем массив 32 разрядных чисел
size .set 23 ;размер массива(>1)(препроцессорная константа)
;///////////////////////////////////////
.text ;секция кода
;Инициализация:
MVKL .S1 array1,A7 ;загружаем адрес массива1 в A3
MVKH .S1 array1,A7
; ADD .S1 A3, 2, A7
MVK .S2 size,B2 ;загружаем колво элементов массива в A2
; SUB .L2 B2,1,B2
MVK .S1 1,A5 ;ПРОИЗВЕДЕНИЕ ТЕКУЩИХ элементов массива
MVK .S1 2,A6 ;сумма произведений
MVKL .S1 0X20001, A12
MVKH .S1 0X20001, A12
MVK .S1 0,A1
MVK .S1 0,A4 ;GGGG
MVK .S1 0,A8
SUB .D2 B2,1,B2
||LDW .D1 *A7, A0
||ADD .S1 A7,2,A7
NOP 4
SUB .D2 B2,1,B2
||LDW .D1 *A7, A0
||ADD .S1 A7,2,A7
NOP 4
||LDW .D1 *A7, A0
||ADD .S1 A7,2,A7
NOP 4
||LDW .D1 *A7, A0
||ADD .S1 A7,2,A7
NOP 4
SUB .D2 B2,1,B2
||LDW .D1 *A7, A0
||ADD .S1 A7,2,A7
SUB .D2 B2,1,B2
||LDW .D1 *A7, A0
||ADD .S1 A7,2,A7
SUB .D2 B2,1,B2
||LDW .D1 *A7, A0
||ADD .S1 A7,2,A7
LOOP:
[B2] B .S2 LOOP
||SUB .D2 B2,1,B2
||LDW .D1 *A7, A0
||CMPEQ .L1 A0,A12,A2
||ADD .S1 A7,2,A7
||[A2] ADD .L2 B4,1,B4
SUB .D2 B2,1,B2
||LDW .D1 *A7, A0
||CMPEQ .L1 A0,A12,A2
||ADD .S1 A7,2,A7
||[A2] ADD .L2 B4,1,B4
SUB .D2 B2,1,B2
||LDW .D1 *A7, A0
||CMPEQ .L1 A0,A12,A2
||ADD .S1 A7,2,A7
||[A2] ADD .L2 B4,1,B4
SUB .D2 B2,1,B2
||LDW .D1 *A7, A0
||CMPEQ .L1 A0,A12,A2
||ADD .S1 A7,2,A7
||[A2] ADD .L2 B4,1,B4
SUB .D2 B2,1,B2
||LDW .D1 *A7, A0
||CMPEQ .L1 A0,A12,A2
||ADD .S1 A7,2,A7
||[A2] ADD .L2 B4,1,B4
SUB .D2 B2,1,B2
||LDW .D1 *A7, A0
||CMPEQ .L1 A0,A12,A2
||ADD .S1 A7,2,A7
||[A2] ADD .L2 B4,1,B4
THEEND:
NOP
.global find12
find12:
AND .L2 B4,3,B2
|| SHR .S1X B4,2,A2
|| ADD .D2XA4,4,B4
|| ZERO .L1 A0
|| ZERO .S2 B0
|| MV .D1 A6,A8
ZERO .L2 B2
|| SUB .L1 A2,2,A2
|| MV .D2XA6,B8
|| MVC CSR,B9
AND B9,-2,B1
MVC B1,CSR
|| LDW .D1 *A4++[2],A5 ;; [0@0]
|| LDW .D2 *B4++[2],B5 ;; [0@0]
NOP 2
LDW .D1 *A4++[2],A5 ;; [0@3]
|| LDW .D2 *B4++[2],B5 ;; [0@3]
NOP
CMPEQ .L1 A5,A8,A1 ;; [5@0]
|| SHR .S1 A5,16,A7 ;; [5@0]
LDW .D1 *A4++[2],A5 ;; [0@6]
|| LDW .D2 *B4++[2],B5 ;; [0@6]
|| ADD .S1 A0,A1,A0 ;; [6@0]
|| B .S2 _F12LOOP
SUB .D2 B5,B8,B1 ;; [7@0]
|| SHL .S1X B5,16,A6 ;; [7@0]
|| SHR .S2 B5,16,B7 ;; [7@0]
|| ZERO .L2 B6 ;; [7@0]
|| [A2] SUB .D1 A2,1,A2 ;; [7@0]
CMPEQ .L1 A5,A8,A1 ;; [5]
|| SHL .S2X A5,16,B6 ;; [5]
|| SHR .S1 A5,16,A7 ;; [5]
|| [!B1] ADD .L2 B0,1,B0 ;; [8]
|| ADD .D1 A6,A7,A6 ;; [8]
|| ADD .D2 B2,B6,B2 ;; [8]
_F12LOOP:
LDW .D1 *A4++[2],A5 ;; [0]
|| LDW .D2 *B4++[2],B5 ;; [0]
|| ADD .S1 A0,A1,A0 ;; [6]
|| ADD .L2 B6,B7,B6 ;; [6]
|| CMPEQ .L1 A6,A8,A1 ;; [9]
|| [A2] B .S2 _F12LOOP ;; [9]
SUB .D2 B5,B8,B1 ;; [7]
|| SHL .S1X B5,16,A6 ;; [7]
|| SHR .S2 B5,16,B7 ;; [7]
|| CMPEQ .L2 B6,B8,B6 ;; [7]
|| [A2] SUB .D1 A2,1,A2 ;; [7]
|| ADD .L1 A0,A1,A0 ;; [10]
CMPEQ .L1 A5,A8,A1 ;; [5]
|| SHL .S2X A5,16,B6 ;; [5]
|| SHR .S1 A5,16,A7 ;; [5]
|| [!B1] ADD .L2 B0,1,B0 ;; [8]
|| ADD .D1 A6,A7,A6 ;; [8]
|| ADD .D2 B2,B6,B2 ;; [8]
;; end loop
B .S2 B3
CMPEQ .L1 A6,A8,A1 ;; [9]
ADD .L2 B0,B2,B0
ADD .L1 A0,A1,A0 ;; [10]
ADD .L1X A0,B0,A4
MVC .S2 B9,CSR
Обзор и сравнительное тестирование ПЭВМ «Эльбрус 401‑PC». Часть третья — средства разработки