t = 97 u = 98 v = 99 Q = 131 link = 64 /* * takes R(t)||Q ÷ R(u) * * returns quo in Q * returns rem in R(t) */ TEXT _divul_(SB), $-4 DSTEP0L R(t), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPL R(u), R(t) DSTEPLL R(u), R(t) DSTEPRL R(u), R(t) JMP (R(v)) /* * takes Q||f2 ÷ f1 * * returns rem in Q * returns quo in t */ TEXT _divul(SB),$-4 MFSR R(Q), R(t) /* pick up high num in R(t) */ ORL $0, R0, R(u) /* put low num in Q */ MTSR R(u), R(Q) MOVL $0, R(u) ORL R0, R(u), R(u) /* put den in R(u) */ CALL R(v), _divul_(SB) MFSR R(Q), R0 MTSR R(t), R(Q) JMP (R(link)) /* * takes Q||f2 ÷ f1 * * returns rem in Q * returns quo in t */ TEXT _divl(SB),$-4 MFSR R(Q), R(t) /* pick up high num R(t) */ JMPT R(t), nnum ORL $0, R0, R(u) /* put low num in Q */ MTSR R(u), R(Q) MOVL $0, R(u) ORL R0, R(u), R(u) /* put den in R(u) */ JMPT R(u), pnumnden CALL R(v), _divul_(SB) MFSR R(Q), R0 MTSR R(t), R(Q) JMP (R(link)) pnumnden: /* botch returns pos rem */ ISUBL $0, R(u) CALL R(v), _divul_(SB) MFSR R(Q), R(u) MTSR R(t), R(Q) ISUBL $0, R(u), R0 /* return neg quo */ JMP (R(link)) /* * numerator is negative. * do 64-bit negate. */ nnum: CPEQL $0, R0, R(u) /* is low num 0? */ JMPT R(u), nnul1 ISUBL $0, R0, R(u) /* negate R(t)||R0 -> R(t)||R(u) */ XNORL $0, R(t) JMP nnul2 nnul1: MOVL $0, R(u) /* negate R(t)||0 -> R(t)||R(u) */ ISUBL $0, R(t) nnul2: MTSR R(u), R(Q) MOVL $0, R(u) ORL R0, R(u), R(u) /* put den in R(u) */ JMPT R(u), nnumnden CALL R(v), _divul_(SB) MFSR R(Q), R(u) MTSR R(t), R(Q) ISUBL $0, R(u), R0 /* return neg quo */ JMP (R(link)) nnumnden: /* botch returns pos rem */ ISUBL $0, R(u) CALL R(v), _divul_(SB) MFSR R(Q), R0 MTSR R(t), R(Q) JMP (R(link))