Software Pipelining
Example 6–33. Assembly Code for Floating-Point Dot Product (Software Pipelined
With Smallest Code Size)
B
.S2
||
MVK
.S1
B
.S2
||
ZERO
.L1
||
ZERO
.L2
B
.S2
||
ZERO
.L1
||
ZERO
.L2
B
.S2
||
ZERO
.L1
||
ZERO
.L2
B
.S2
||
ZERO
.L1
||
ZERO
.L2
LOOP:
LDDW
.D1
||
LDDW
.D2
||
MPYSP .M1X
||
MPYSP .M2X
||
ADDSP .L1
||
ADDSP .L2
||[A1] B
.S2
||[A1] SUB
.S1
; Branch occurs here
ADDSP .L1X
ADDSP .L2X
ADDSP .L1X
ADDSP .L2X
NOP
ADDSP .L1X
NOP
ADDSP .L2X
NOP
ADDSP .L1X
NOP
6-56
LOOP
; branch to loop
53,A1
; set up loop counter
LOOP
;* branch to loop
A7
; zero out mpysp input
B7
; zero out mpysp input
LOOP
;** branch to loop
A8
; zero out sum0 accumulator
B8
; zero out sum0 accumulator
LOOP
;*** branch to loop
A5
; zero out addsp input
B5
; zero out addsp input
LOOP
;**** branch to loop
A6
; zero out mpysp input
B6
; zero out mpysp input
A4++,A7:A6
;********* load ai & ai + 1 from memory
B4++,B7:B6
;********* load bi & bi + 1 from memory
A6,B6,A5
;**** pi = a0
A7,B7,B5
;**** pi1 = a1
A5,A8,A8
; sum0 += (ai
B5,B8,B8
; sum1 += (ai+1
LOOP
;***** branch to loop
A1,1,A1
;****** decrement loop counter
A8,B8,A0
; sum(0) = sum0(0) + sum1(0)
A8,B8,B0
; sum(1) = sum0(1) + sum1(1)
A8,B8,A0
; sum(2) = sum0(2) + sum1(2)
A8,B8,B0
; sum(3) = sum0(3) + sum1(3)
; wait for B0
A0,B0,A5
; sum(01) = sum(0) + sum(1)
; wait for next B0
A0,B0,B5
; sum(23) = sum(2) + sum(3)
3
A5,B5,A4
; sum = sum(01) + sum(23)
3
;
b0
b1
bi)
bi+1)
Need help?
Do you have a question about the TMS320C6000 and is the answer not in the manual?
Questions and answers