123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- /*
- * calls _divul with
- * absolute value arguments
- */
- TEXT _divsl(SB), $0
- MOVL R0, TOS
- MOVL b+4(FP), R0
- BPL y1
- NEGL R0
- MOVL R0, TOS
- MOVL a+0(FP), R0
- BPL y3
- NEGL R0
- MOVL R0, TOS
- /* neg/neg */
- JSR _divul(SB)
- MOVL TOS, R0
- MOVL R0, a+0(FP)
- MOVL TOS, R0
- NEGL R0
- MOVL R0, b+4(FP)
- MOVL TOS, R0
- RTS
- y1: MOVL R0, TOS
- MOVL a+0(FP), R0
- BPL y2
- NEGL R0
- MOVL R0, TOS
- /* neg/pos */
- JSR _divul(SB)
- MOVL TOS, R0
- NEGL R0
- MOVL R0, a+0(FP)
- MOVL TOS, R0
- NEGL R0
- MOVL R0, b+4(FP)
- MOVL TOS, R0
- RTS
- y2: MOVL R0, TOS
- /* pos/pos */
- JSR _divul(SB)
- MOVL TOS, R0
- MOVL R0, a+0(FP)
- MOVL TOS, R0
- MOVL R0, b+4(FP)
- MOVL TOS, R0
- RTS
- y3: MOVL R0, TOS
- /* pos/neg */
- JSR _divul(SB)
- MOVL TOS, R0
- NEGL R0
- MOVL R0, a+0(FP)
- MOVL TOS, R0
- MOVL R0, b+4(FP)
- MOVL TOS, R0
- RTS
- /*
- * for(i=1;; i++) {
- * if(den & (1<<31))
- * break;
- * den <<= 1;
- * }
- *
- * for(; i; i--) {
- * quo <<= 1;
- * if(num >= den) {
- * num -= den;
- * quo |= 1;
- * }
- * den >>= 1;
- * }
- */
- TEXT _divul(SB), $0
- MOVL R0, TOS /* i */
- MOVL R1, TOS /* num */
- MOVL R2, TOS /* den */
- MOVL R3, TOS /* quo */
- MOVL $0, R0
- MOVL $0, R3
- MOVL a+0(FP), R1
- MOVL b+4(FP), R2
- BEQ xout
- BMI x1
- ADDL $1, R0
- LSLL $1, R2
- BPL -2(PC)
- x1: LSLL $1, R3
- CMPL R1, R2
- BCS 3(PC)
- SUBL R2, R1
- ORL $1, R3
- LSRL $1, R2
- DBMI R0, x1
- MOVL R3, a+0(FP)
- MOVL R1, b+4(FP)
- xout:
- MOVL TOS, R3
- MOVL TOS, R2
- MOVL TOS, R1
- MOVL TOS, R0
- RTS
- /*
- * x = 0;
- * for(i=0; i<32; i++) {
- * if(a & 1)
- * x += b;
- * a >>= 1;
- * b <<= 1;
- * }
- * a = x;
- */
- TEXT _mull(SB), $0
- MOVL R0, TOS /* i */
- MOVL R1, TOS /* a */
- MOVL R2, TOS /* b */
- MOVL R3, TOS /* x */
- MOVL a+0(FP), R1
- MOVL b+4(FP), R2
- MOVL $32, R0
- CLRL R3
- z1: ROTRL $1, R1
- BCC 2(PC)
- ADDL R2, R3
- LSLL $1, R2
- DBEQ R0, z1
- MOVL R3, b+4(FP)
- MOVL TOS, R3
- MOVL TOS, R2
- MOVL TOS, R1
- MOVL TOS, R0
- RTS
- TEXT _ccr(SB), $0
- PEA (A0)
- SUBL A0, A0
- BCC 2(PC)
- LEA 1(A0), A0
- BVC 2(PC)
- LEA 2(A0), A0
- BNE 2(PC)
- LEA 4(A0), A0
- BPL 2(PC)
- LEA 8(A0), A0
- MOVW A0, a+0(FP)
- MOVL TOS, A0
- RTS
|