| .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 |
| |
| |
| |