summaryrefslogtreecommitdiff
path: root/newlib/libc/machine/h8500/divhi3.S
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/machine/h8500/divhi3.S')
-rw-r--r--newlib/libc/machine/h8500/divhi3.S54
1 files changed, 54 insertions, 0 deletions
diff --git a/newlib/libc/machine/h8500/divhi3.S b/newlib/libc/machine/h8500/divhi3.S
new file mode 100644
index 00000000000..ee313511036
--- /dev/null
+++ b/newlib/libc/machine/h8500/divhi3.S
@@ -0,0 +1,54 @@
+ .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
+
+
+