ref: fbe78d46877a32a8d825d8c93acfdc4466f8ffc3
parent: 1cff9ab4e8412d5c6b6a3cbca720fbc4bcccecd9
author: cinap_lenrek <[email protected]>
date: Wed Mar 25 10:19:05 EDT 2015
mpdigdiv.s: aaaaand its gone!
--- /dev/null
+++ b/sys/src/libmp/mips/_mpdigdiv.s
@@ -1,0 +1,41 @@
+/*
+ * This only works on R[45]000 chips that allow 64 bit
+ * integer arithmetic even when uding 32 bit addresses
+ *
+ * R1 = dividend*
+ * R2 = dividend[low]
+ * R3 = dividend[high]
+ * R4 = 32 bit divisor
+ * R5 = quotient*
+ */
+TEXT mpdigdiv(SB),$0
+
+ MOVW 0(R1),R2
+ MOVW 4(R1),R3
+ MOVW divisor+4(FP),R4
+ MOVW quotient+8(FP),R5
+
+ /* divisor == 0 */
+ BEQ R4,_digovfl
+
+ /* dividend >= 2^32 * divisor */
+ SGTU R4,R3,R7
+ BEQ R7,_digovfl
+
+_digdiv1:
+ SLLV $32,R2
+ SLLV $32,R3
+ SRLV $32,R2
+ ADDVU R2,R3
+ SLLV $32,R4
+ SRLV $32,R4
+ DIVVU R4,R3
+ MOVW LO,R1
+ MOVW R1,0(R5)
+ RET
+
+_digovfl:
+ MOVW $-1,R1
+ MOVW R1,0(R5)
+ RET
+
--- a/sys/src/libmp/mips/mpdigdiv.s
+++ /dev/null
@@ -1,41 +1,0 @@
-/*
- * This only works on R[45]000 chips that allow 64 bit
- * integer arithmetic even when uding 32 bit addresses
- *
- * R1 = dividend*
- * R2 = dividend[low]
- * R3 = dividend[high]
- * R4 = 32 bit divisor
- * R5 = quotient*
- */
-TEXT mpdigdiv(SB),$0
-
- MOVW 0(R1),R2
- MOVW 4(R1),R3
- MOVW divisor+4(FP),R4
- MOVW quotient+8(FP),R5
-
- /* divisor == 0 */
- BEQ R4,_digovfl
-
- /* dividend >= 2^32 * divisor */
- SGTU R4,R3,R7
- BEQ R7,_digovfl
-
-_digdiv1:
- SLLV $32,R2
- SLLV $32,R3
- SRLV $32,R2
- ADDVU R2,R3
- SLLV $32,R4
- SRLV $32,R4
- DIVVU R4,R3
- MOVW LO,R1
- MOVW R1,0(R5)
- RET
-
-_digovfl:
- MOVW $-1,R1
- MOVW R1,0(R5)
- RET
-