home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Frozen Fish 1: Amiga
/
FrozenFish-Apr94.iso
/
bbs
/
alib
/
d2xx
/
d269
/
propgadget.lha
/
PropGadget
/
mult.asm
< prev
next >
Wrap
Assembly Source File
|
1989-11-06
|
2KB
|
70 lines
; Famines will not be stopped by LAKs carrying placards in parades;
; famines will be stopped by engineers producing machines that make
; man more productive. deTrebo
;
; Jerry J. Trantow
; 1560 A East Irving Place
; Milwaukee, Wi 53202-1460
; 8 Jan 89 Needed a 64 bit mult for Calculating Gadgetry
; 9 Jan 89 Not pretty, but it works
; 9 Jan 89 Started a 64 bit divide (div.asm)
; 14 Jan 89 Changed a,b to be passed by value
;
; unsigned 32x32 bit multiple into a QUAD (64)
;
; Note that with an 020 these can be done in 1 or 2 instructions mulu.l, divu.l
; QUAD = | 16 | 16 | 16 | 16 |
; | al*bl |
; | ah*bl+al*bh |
; | ah*bh |
IFD LATTICE
CSECT text
XDEF _QuadMult68000
ELSE
public _QuadMult68000
ENDC
_QuadMult68000:
link a5,#0
movem.l a2/d3/d4/d5/d6,-(sp) ; push registers on the stack
clr.l d3 ; clear these for later
clr.l d4
clr.l d5
clr.l d6
move.w 8(a5),d3 ; high SHORT of a
move.w 10(a5),d4 ; low SHORT of a
move.w 12(a5),d5 ; high SHORT b
move.w 14(a5),d6
move.l 16(a5),a2 ; points to c
move.w d4,d0 ; al
mulu.w d6,d0 ; bl*al
move.l d0,4(a2) ; c=bl*al (Lowest 4 bytes of the QUAD)
move.w d4,d0 ; al
mulu.w d5,d0 ; al*bh
move.l d0,(a2) ; temp storage in high bytes of c
move.w d3,d0 ; ah
mulu.w d6,d0 ; bl*ah
clr.l d1 ; Used with the carry
add.l (a2),d0 ; al*bh+bl*ah
bcc .99
move.l #10000,d1 ; save the carry
.99 move.l d1,(a2) ; clear temp storage (propogate carry)
add.l d0,2(a2) ; c=(al*bh+bl*ah)*2^16 (Middle bytes of QUAD c)
bcc .777 ; another carry bit to worry about
move.w #1,(a2) ; carry was set
.777 move.w d3,d0 ; ah
mulu.w d5,d0 ; bh*ah
add.l d0,(a2) ; c=(ah*bh)*2^32 (High bytes of QUAD c)
.98 movem.l (sp)+,a2/d3/d4/d5/d6
unlk a5
rts
end