|
;******************************************************************************
;*
;* FUNCTION
;* mac16x16_32
;* DECRIPTION
;* Signed multiply accumulate of two 16bits numbers with
;* a 32bits result.
;* USAGE
;* r19:r18:r17:r16 += r23:r22 * r21:r20
;* STATISTICS
;* Cycles : 23 + ret
;* Words : 19 + ret
;* Register usage: r0 to r2 and r16 to r23 (11 registers)
;*
;******************************************************************************mac16x16_32:
clr r2muls r23, r21 ; (signed)ah * (signed)bh
add r18, r0
adc r19, r1mul r22, r20 ; al * bl
add r16, r0
adc r17, r1
adc r18, r2
adc r19, r2mulsu r23, r20 ; (signed)ah * bl
sbc r19, r2
add r17, r0
adc r18, r1
adc r19, r2mulsu r21, r22 ; (signed)bh * al
sbc r19, r2
add r17, r0
adc r18, r1
adc r19, r2ret
mac16x16_32_method_B: ; uses two temporary registers
; (r4,r5), but reduces cycles/words
; by 1
clr r2muls r23, r21 ; (signed)ah * (signed)bh
movw r5:r4,r1:r0mul r22, r20 ; al * bl
add r16, r0
adc r17, r1
adc r18, r4
adc r19, r5mulsu r23, r20 ; (signed)ah * bl
sbc r19, r2
add r17, r0
adc r18, r1
adc r19, r2mulsu r21, r22 ; (signed)bh * al
sbc r19, r2
add r17, r0
adc r18, r1
adc r19, r2ret
E-mail: info@telesys.ru