55 lines
565 B
ArmAsm
55 lines
565 B
ArmAsm
|
.title "H8/500 DIVIDE"
|
||
|
!! 2 byte integer Divide code for the H8/500
|
||
|
!!
|
||
|
!! Steve Chamberlain
|
||
|
!! sac@cygnus.com
|
||
|
!!
|
||
|
!!
|
||
|
|
||
|
!! args in r1 and r4, result in r0/r1
|
||
|
|
||
|
#if __CODE__==32
|
||
|
#define RET prts
|
||
|
#else
|
||
|
#define RET rts
|
||
|
#endif
|
||
|
.global __divmodhi4
|
||
|
|
||
|
|
||
|
__divmodhi4:
|
||
|
clr.w r0
|
||
|
tst.w r1 ! neg arg1
|
||
|
bpl PU
|
||
|
|
||
|
|
||
|
neg.w r1
|
||
|
NU: tst.w r4
|
||
|
bmi NN
|
||
|
|
||
|
NP: divxu.w r4,r0
|
||
|
neg.w r0
|
||
|
neg.w r1
|
||
|
RET
|
||
|
|
||
|
NN: neg.w r4
|
||
|
divxu.w r4,r0
|
||
|
neg.w r0 ! get rem sign right
|
||
|
RET
|
||
|
|
||
|
|
||
|
PU:
|
||
|
tst.w r4
|
||
|
bpl PP
|
||
|
|
||
|
|
||
|
PN: neg.w r4
|
||
|
divxu.w r4,r0
|
||
|
neg.w r1
|
||
|
RET
|
||
|
|
||
|
PP: divxu.w r4,r0 ! rem in r0, q in r1
|
||
|
RET
|
||
|
|
||
|
|
||
|
|