dsp56800 Freescale Semiconductor, Inc, dsp56800 Datasheet - Page 69

no-image

dsp56800

Manufacturer Part Number
dsp56800
Description
16-bit Digital Signal Controllers
Manufacturer
Freescale Semiconductor, Inc
Datasheet
Freescale Semiconductor
;
;
;
;
;
;
;
MULT_S32_X_S32:
; Multiply lwr1 * lwr2 and save lowest 16-bits of result
CORRECT_RES1:
; Multiply two cross products and save next lowest 16-bits of result
; Multiply upr1 * upr2 and save highest 32-bits of result
; The corresponding algorithm for integer multiplication of 32-bit values
; would be the same as for fractional with the addition of a final arithmetic
; right shift of the 64-bit result.
Signed 32x32 => 64 Multiplication Subroutine
Parameters:
R1 = ptr to lowest word of one operand
R2 = ptr to lowest word of one operand
R3 = ptr to where results are stored
CLR
; Operation
; ---------
MOVE
ANDC
MOVE
MPYSU
TSTW
BGE
MOVE
ADD
MOVE
; Operation
; ---------
MOVE
MOVE
MOVE
MOVE
MACSU
MOVE
MOVE
MACSU
MOVE
; Operation
; ---------
MOVE
MOVE
MOVE
MAC
MOVE
MOVE
RTS
Example 3-16. Multiplying Two Fractional Double-Precision Values
B
X:(R1),Y0
#CLRMSB,Y0
X:(R2)+,Y1
Y0,Y1,A
X:(R1)+
CORRECT_RES1 ;
Y1,B1
B,A
A0,X:(R3)+
A1,X:TMP
A2,A
X:TMP,A0
X:(R1)-,X0
X0,Y1,A
X:(R1),Y1
X:(R2),Y0
Y0,Y1,A
A0,X:(R3)+
A1,X:TMP
A2,A
X:TMP,A0
X0,Y0,A
A0,X:(R3)+
A1,X:(R3)+
; clears B2 portion
;
; -----
;
;
;
;
;
;
;
;
;
; -----
;
;
;
;
;
;
;
;
;
;
; -----
;
;
;
;
;
;
Data Arithmetic Logic Unit
X0
---
---
---
---
check if MSB set in original lwr1 value
perform correction if this was true
---
---
---
X0
(arithmetic 16-bit right shift of 36-bit accum)
----
----
upr1
upr1
upr1
upr1
upr1
upr1
X0
(arithmetic 16-bit right shift of 36-bit accum)
upr1
upr1
upr1
---
---
-----
-----
-----
Y1
---
---
lwr2
lwr2
lwr2
lwr2
lwr2
Y1
----
----
lwr2
lwr2
lwr1
lwr1
lwr1
lwr1
Y1
lwr1
lwr1
lwr1
---
---
-----
-----
-----
Y0
lwr1
lwr1'
lwr1'
lwr1'
lwr1'
lwr1'
lwr1'
Y0
----
----
lwr1'
lwr1'
lwr1'
upr2
upr2
upr2
Y0
upr2
upr2
upr2
---
---
Fractional and Integer Data ALU Arithmetic
-------------------
-------------------
-------------------
A
-----
-----
-----
lwr1'.s * lwr2.u
-----
lwr1.u * lwr2.u
lwr1.u * lwr2.u
A
-----
A = product1 >> 16
A = product1 >> 16
A+upr1.s*lwr2.u
A+upr1.s*lwr2.u
A+upr1.s*lwr2.u
A+upr1.s*lwr2.u+upr2.s*lwr1.u
A = result w/ cross prods
A
-----
A = result >> 16
A + upr1.s * upr2.s
-----
-----
3-25

Related parts for dsp56800