Example 2–16. Rewriting the iircas4 ( ) Function in Linear Assembly
.def
_iircas4_sa
_iircas4_sa:
.cproc
.no_mdep
.reg
BD0,BD1,AA,AB,AJ0,AF0,AE0,AG0,AH0,AY0,AK0,AM0,BD00
.reg
BA2,BB2,BJ1,BF1,BE1,BG1,BH1,BY1,BK1,BM1
LDW
.D2
LDW
.D2
.mptr
C,
.mptr
BD, bank+4, 8
LOOP:
.trip
10
LDW
.D2T1
LDW
.D2T1
LDW
.D1T2
LDW
.D1T2
MPYH
.1
MPYHL
.1
MPYH
.1
MPYHL
.1
ADD
.1
ADD
.1
ADD
.1
ADD
.1
MV
.2
MV
.2
MV
.2
STW
.D1T1
MPYH
.2
MPYHL
.2
MPYH
.2
MPYHL
.2
ADD
.2
ADD
.2
ADD
.2
ADD
.2
STW
.D1T2
SUB
.1
[AI]
B
.1
STW
.D2T1
STW
.D2T2
.endproc
AI,C,BD,AY
*+AY[0],AY0
*+AY[1],BY1
bank+0, 8
*C++, AA
*C++, AB
*BD[0], BD0
*BD[1], BD1
BD1, AA, AE0
BD0, AA, AJ0
BD1, AB, AG0
BD0, AB, AF0
AJ0, AE0, AH0
AH0, AY0, AK0
AF0, AG0, AM0
AM0, AK0, AY0
AA,BA2
AB,BB2
BD0,BD00
AK0, *BD[1]
BD00, BA2, BE1
AK0, BA2, BJ1
BD00, BB2, BG1
AK0, BB2, BF1
BJ1, BY1, BH1
BH1, BE1, BK1
BF1, BG1, BM1
BM1, BK1, BY1
BK1, *BD++[2]
AI,1,AI
LOOP
AY0,*+AY[0]
BY1,*+AY[1]
; a0 = c[i][0], a1 = c[i][1]
; b0 = c[i][2], b1 = c[i][3]
; d0 = d[i][0]
; d1 = d[i][1]
; e0 = (d1 >> 16) * a1
; j0 = (d0 >> 16) * a0
; g0 = (d1 >> 16) * b1
; f0 = (d0 >> 16) * b0
; h0 = j0 + e0
; k0 = h0 + y0
; m0 = f0 + g0
; y0 = m0 + k0
; d[i][1] = k0
; e1 = (d0 >> 16) * a1
; j1 = (k0 >> 16) * a0
; g1 = (d0 >> 16) * b1
; f1 = (k0 >> 16) * b0
; h1 = j1 + y1
; k1 = h1 + e1
; m1 = f1 + g1
; y1 = m1 + k1
; d[i][0] = k1
; i––
; for
Compiler Optimization Tutorial
Lesson 5: Writing Linear Assembly
2-29
Need help?
Do you have a question about the TMS320C6000 and is the answer not in the manual?
Questions and answers