;****************************************************************************** ;* FUNCTION muls24x8_32.inc ;* Multiply 24x8 -> 32 bit (signed * signed) ;* ;* AH AM AL BL E3 E2 E1 E0 ;* R22:R21:R20 x R16 -> R5:R4:R3:R2 ;* ;* Scratch Registers: - ;* 19 cycles + 4 (RET) = 23 Cycles ;* ;****************************************************************************** muls_24x8: push r10 clr r10 muls r22,r16 ; AH x BL movw r5:r4,r1:r0 ; r1:r0 -> E3:E2 mulsu r16,r20 ; AL x BL -> BL x AL movw r3:r2,r1:r0 ; r1:r0 -> E1:E0 sbc r4,r10 sbc r5,r10 mulsu r16,r21 ; BL x AM sbc r5,r10 add r3,r0 ; r0 -> E1 adc r4,r1 ; r1 -> E2 adc r5,r10 ; T0 -> E3 pop r10 ret