From: Keuchel, R. <rai...@al...> - 2013-09-20 11:51:04
|
The inline code for mul8x8 could be replaced by a mul insn. I have also written a naïve library function for 16*16 mul which I must optimize. See below. u16 mul8(u8 m1, u8 m2) { return m1 * m2; } _mul8_start:: _mul8: ;test1.c:105: return m1 * m2; ld hl, #3+0 add hl, sp ld e, (hl) ld iy,#2 add iy,sp ld h,0 (iy) ld l, #0x00 ld d, l ld b, #0x08 00103$: add hl,hl jr NC,00104$ add hl,de 00104$: djnz 00103$ ret _mul8_end:: .area _CODE ; u32 mul32_1616(u16 m1, u16 m2) .globl mul32_1616 ; R0R1R2R3 = R6R7 * R4R5 _mul32_1616: ;; /* these swappings should be removed */ ld de, 2(sp) ld hl, 4(sp) add sp, #-8 ld 4(iy), d ld 5(iy), e ld 6(iy), h ld 7(iy), l ld ix, sp ld iy, sp ;swi ;; /* ;; MUL16_16: ;; ;Multiply R5 by R7 ;; MOV A,R5 ;Move the R5 into the Accumulator ;; MOV B,R7 ;Move R7 into B ;; MUL AB ;Multiply the two values ;; MOV R2,B ;Move B (the high-byte) into R2 ;; MOV R3,A ;Move A (the low-byte) into R3 ;; */ ld l, 5(ix) ld b, 7(ix) mul hl, b ld 2(iy), h ld 3(iy), l ;; /* ;; ;Multiply R5 by R6 ;; MOV A,R5 ;Move R5 back into the Accumulator ;; MOV B,R6 ;Move R6 into B ;; MUL AB ;Multiply the two values ;; ADD A,R2 ;Add the low-byte into the value already in R2 ;; MOV R2,A ;Move the resulting value back into R2 ;; MOV A,B ;Move the high-byte into the accumulator ;; ADDC A,#00h ;Add zero (plus the carry, if any) ;; MOV R1,A ;Move the resulting answer into R1 ;; MOV A,#00h ;Load the accumulator with zero ;; ADDC A,#00h ;Add zero (plus the carry, if any) ;; MOV R0,A ;Move the resulting answer to R0. ;; */ ld l, 5(ix) ld b, 6(ix) mul hl, b ld a, 2(ix) add a, l ld 2(ix), a ld a, h adc a, #0 ld 1(iy), a ld a, #0 adc a, #0 ld 0(iy), a ;; /* ;; ;Multiply R4 by R7 ;; MOV A,R4 ;Move R4 into the Accumulator ;; MOV B,R7 ;Move R7 into B ;; MUL AB ;Multiply the two values ;; ADD A,R2 ;Add the low-byte into the value already in R2 ;; MOV R2,A ;Move the resulting value back into R2 ;; MOV A,B ;Move the high-byte into the accumulator ;; ADDC A,R1 ;Add the current value of R1 (plus any carry) ;; MOV R1,A ;Move the resulting answer into R1. ;; MOV A,#00h ;Load the accumulator with zero ;; ADDC A,R0 ;Add the current value of R0 (plus any carry) ;; MOV R0,A ;Move the resulting answer to R0. ;; */ ld l, 4(ix) ld b, 7(ix) mul hl, b ld a, 2(ix) add a, l ld 2(iy), a ld a, h adc a, 1(ix) ld 1(iy), a ld a, #0 adc a, 0(ix) ld 0(iy), a ;; /* ;; ;Multiply R4 by R6 ;; MOV A,R4 ;Move R4 back into the Accumulator ;; MOV B,R6 ;Move R6 into B ;; MUL AB ;Multiply the two values ;; ADD A,R1 ;Add the low-byte into the value already in R1 ;; MOV R1,A ;Move the resulting value back into R1 ;; MOV A,B ;Move the high-byte into the accumulator ;; ADDC A,R0 ;Add it to the value already in R0 (plus any carry) ;; MOV R0,A ;Move the resulting answer back to R0 ;; */ ld l, 4(ix) ld b, 6(ix) mul hl, b ld a, 1(ix) add a, l ld 1(iy), a ld a, h adc a, 0(ix) ld 0(iy), a ;; /* ;; ;Return - answer is now in R0, R1, R2, and R3 ;; */ ;; /* these swappings should be removed */ ld d, 0(ix) ld e, 1(ix) ld h, 2(ix) ld l, 3(ix) ;swi add sp, #8 ret Rainer Keuchel Entwicklungsleiter Enterprise Content Management Allgeier IT Solutions GmbH Hans-Bredow-Str. 60 28307 Bremen Tel: +49 421 43841-294 Fax: +49 (0) 421 438419294 E-Mail: rai...@al... Internet: www.allgeier-it.de ALLGEIER IT SOLUTIONS GmbH Amtsgericht Bremen | HRB 20924 Geschäftsführer: Hubert Rohrer, Johannes Häringslack, Ralf Nitzgen St.-Nr. 803/11449 | USt.-ID-Nr. DE114397847 Diese E-Mail enthält vertrauliche und/oder rechtlich geschützte Informationen. Wenn Sie nicht der richtige Adressat sind oder diese E-Mail irrtümlich erhalten haben, informieren Sie bitte sofort den Absender und vernichten Sie diese Mail. Das unerlaubte Kopieren sowie die unbefugte Weitergabe dieser E-Mail sind nicht gestattet. This message (and any associated files) is intended only for the use of pk...@sp..., sdc...@li... and may contain information that is confidential, subject to copyright or constitutes a trade secret. If you are not pk...@sp..., sdc...@li... you are hereby notified that any dissemination, copying or distribution of this message, or files associated with this message, is strictly prohibited. If you have received this message in error, please notify us immediately by replying to the message and deleting it from your computer. Any views or opinions presented are solely those of the author rai...@al... and do not necessarily represent those of the company. |