| ! Copyright (C) 2012 Imagination Technologies Ltd. |
| ! |
| ! Signed/unsigned 64-bit division routines. |
| ! |
| |
| .text |
| .global _div_u64 |
| .type _div_u64,function |
| |
| _div_u64: |
| $L1: |
| ORS A0.3,D1Ar3,D0Ar4 |
| BNE $L3 |
| $L2: |
| MOV D0Re0,D0Ar2 |
| MOV D1Re0,D1Ar1 |
| MOV PC,D1RtP |
| $L3: |
| CMP D1Ar3,D1Ar1 |
| CMPEQ D0Ar4,D0Ar2 |
| MOV D0Re0,#1 |
| MOV D1Re0,#0 |
| BHS $L6 |
| $L4: |
| ADDS D0Ar6,D0Ar4,D0Ar4 |
| ADD D1Ar5,D1Ar3,D1Ar3 |
| ADDCS D1Ar5,D1Ar5,#1 |
| CMP D1Ar5,D1Ar3 |
| CMPEQ D0Ar6,D0Ar4 |
| BLO $L6 |
| $L5: |
| MOV D0Ar4,D0Ar6 |
| MOV D1Ar3,D1Ar5 |
| ADDS D0Re0,D0Re0,D0Re0 |
| ADD D1Re0,D1Re0,D1Re0 |
| ADDCS D1Re0,D1Re0,#1 |
| CMP D1Ar3,D1Ar1 |
| CMPEQ D0Ar4,D0Ar2 |
| BLO $L4 |
| $L6: |
| ORS A0.3,D1Re0,D0Re0 |
| MOV D0Ar6,#0 |
| MOV D1Ar5,D0Ar6 |
| BEQ $L10 |
| $L7: |
| CMP D1Ar1,D1Ar3 |
| CMPEQ D0Ar2,D0Ar4 |
| BLO $L9 |
| $L8: |
| ADDS D0Ar6,D0Ar6,D0Re0 |
| ADD D1Ar5,D1Ar5,D1Re0 |
| ADDCS D1Ar5,D1Ar5,#1 |
| |
| SUBS D0Ar2,D0Ar2,D0Ar4 |
| SUB D1Ar1,D1Ar1,D1Ar3 |
| SUBCS D1Ar1,D1Ar1,#1 |
| $L9: |
| LSL A0.3,D1Re0,#31 |
| LSR D0Re0,D0Re0,#1 |
| LSR D1Re0,D1Re0,#1 |
| OR D0Re0,D0Re0,A0.3 |
| LSL A0.3,D1Ar3,#31 |
| LSR D0Ar4,D0Ar4,#1 |
| LSR D1Ar3,D1Ar3,#1 |
| OR D0Ar4,D0Ar4,A0.3 |
| ORS A0.3,D1Re0,D0Re0 |
| BNE $L7 |
| $L10: |
| MOV D0Re0,D0Ar6 |
| MOV D1Re0,D1Ar5 |
| MOV PC,D1RtP |
| .size _div_u64,.-_div_u64 |
| |
| .text |
| .global _div_s64 |
| .type _div_s64,function |
| _div_s64: |
| MSETL [A0StP],D0FrT,D0.5 |
| XOR D0.5,D0Ar2,D0Ar4 |
| XOR D1.5,D1Ar1,D1Ar3 |
| TSTT D1Ar1,#HI(0x80000000) |
| BZ $L25 |
| |
| NEGS D0Ar2,D0Ar2 |
| NEG D1Ar1,D1Ar1 |
| SUBCS D1Ar1,D1Ar1,#1 |
| $L25: |
| TSTT D1Ar3,#HI(0x80000000) |
| BZ $L27 |
| |
| NEGS D0Ar4,D0Ar4 |
| NEG D1Ar3,D1Ar3 |
| SUBCS D1Ar3,D1Ar3,#1 |
| $L27: |
| CALLR D1RtP,_div_u64 |
| TSTT D1.5,#HI(0x80000000) |
| BZ $L29 |
| |
| NEGS D0Re0,D0Re0 |
| NEG D1Re0,D1Re0 |
| SUBCS D1Re0,D1Re0,#1 |
| $L29: |
| |
| GETL D0FrT,D1RtP,[A0StP+#(-16)] |
| GETL D0.5,D1.5,[A0StP+#(-8)] |
| SUB A0StP,A0StP,#16 |
| MOV PC,D1RtP |
| .size _div_s64,.-_div_s64 |