home *** CD-ROM | disk | FTP | other *** search
- GET h.asmregs
-
- AREA |C$$code|,CODE,READONLY
-
- EXPORT |__rt_sdiv|
- |__rt_sdiv|
- B |x$divide|
-
- EXPORT |__rt_udiv|
- |__rt_udiv|
- B |x$udivide|
-
- EXPORT |__umodsi3|
- |__umodsi3|
- MOV a3, a1
- MOV a1, a2
- MOV a2, a3
- B |x$uremainder|
-
- EXPORT |__udivsi3|
- |__udivsi3|
- MOV a3, a1
- MOV a1, a2
- MOV a2, a3
- B |x$udivide|
-
- EXPORT |__modsi3|
- |__modsi3|
- MOV a3, a1
- MOV a1, a2
- MOV a2, a3
- B |x$remainder|
-
- EXPORT |__divsi3|
- |__divsi3|
- MOV a3, a1
- MOV a1, a2
- MOV a2, a3
- B |x$divide|
-
- EXPORT |x$divtest|
- |x$divtest|
- MOV pc,lr
-
- EXPORT |x$remainder|
- |x$remainder|
- STMFD sp!,{lr}
- BL |x$divide|
- MOV a1,a2
- LDMFD sp!,{pc}
-
- EXPORT |x$uremainder|
- |x$uremainder|
- STMFD sp!,{lr}
- BL |x$udivide|
- MOV a1,a2
- LDMFD sp!,{pc}
-
- |x$overflow|
- MVN a1,#0
- MOV pc,lr
-
- EXPORT |x$udivide| ; a1 = a2 / a1; a2 = a2 % a1
- |x$udivide|
- CMP a1,#1
- BLO |x$overflow|
- BEQ |x$divide_l0|
- MOV ip,#0
- MOVS a2,a2
- BPL |x$divide_l1|
- ORR ip,ip,#&20000000; ip bit &20000000 = -ve a2
- MOVS a2,a2,LSR #1
- ORRCS ip,ip,#&10000000; ip bit &10000000 = bit 0 of a2
- B |x$divide_l1|
-
- |x$divide_l0| ; a1 == 1
- MOV a1,a2
- MOV a2,#0
- MOV pc,lr
-
- EXPORT |x$divide| ; a1 = a2 / a1; a2 = a2 % a1
- |x$divide|
- CMP a1,#1
- BLO |x$overflow|
- BEQ |x$divide_l0|
- ANDS ip,a1,#&80000000
- RSBMI a1,a1,#0
- ANDS a3,a2,#&80000000
- EOR ip,ip,a3
- RSBMI a2,a2,#0
- ORR ip,a3,ip,LSR #1 ; ip bit &40000000 = -ve division
- ; ip bit &80000000 = -ve remainder
-
- |x$divide_l1|
- MOV a3,#1
- MOV a4,#0
-
- CMP a2,a1
- BLO |x$divide_b0|
- CMP a2,a1,LSL #1
- BLO |x$divide_b1|
- CMP a2,a1,LSL #2
- BLO |x$divide_b2|
- CMP a2,a1,LSL #3
- BLO |x$divide_b3|
- CMP a2,a1,LSL #4
- BLO |x$divide_b4|
- CMP a2,a1,LSL #5
- BLO |x$divide_b5|
- CMP a2,a1,LSL #6
- BLO |x$divide_b6|
- CMP a2,a1,LSL #7
- BLO |x$divide_b7|
- CMP a2,a1,LSL #8
- BLO |x$divide_b8|
- CMP a2,a1,LSL #9
- BLO |x$divide_b9|
- CMP a2,a1,LSL #10
- BLO |x$divide_b10|
- CMP a2,a1,LSL #11
- BLO |x$divide_b11|
- CMP a2,a1,LSL #12
- BLO |x$divide_b12|
- CMP a2,a1,LSL #13
- BLO |x$divide_b13|
- CMP a2,a1,LSL #14
- BLO |x$divide_b14|
- CMP a2,a1,LSL #15
- BLO |x$divide_b15|
- CMP a2,a1,LSL #16
- BLO |x$divide_b16|
- CMP a2,a1,LSL #17
- BLO |x$divide_b17|
- CMP a2,a1,LSL #18
- BLO |x$divide_b18|
- CMP a2,a1,LSL #19
- BLO |x$divide_b19|
- CMP a2,a1,LSL #20
- BLO |x$divide_b20|
- CMP a2,a1,LSL #21
- BLO |x$divide_b21|
- CMP a2,a1,LSL #22
- BLO |x$divide_b22|
- CMP a2,a1,LSL #23
- BLO |x$divide_b23|
- CMP a2,a1,LSL #24
- BLO |x$divide_b24|
- CMP a2,a1,LSL #25
- BLO |x$divide_b25|
- CMP a2,a1,LSL #26
- BLO |x$divide_b26|
- CMP a2,a1,LSL #27
- BLO |x$divide_b27|
- CMP a2,a1,LSL #28
- BLO |x$divide_b28|
- CMP a2,a1,LSL #29
- BLO |x$divide_b29|
- CMP a2,a1,LSL #30
- BLO |x$divide_b30|
- CMP a2,a1,LSL #31
- SUBHS a2,a2,a1,LSL #31
- ADDHS a4,a4,a3,LSL #31
- CMP a2,a1,LSL #30
- SUBHS a2,a2,a1,LSL #30
- ADDHS a4,a4,a3,LSL #30
- |x$divide_b30|
- CMP a2,a1,LSL #29
- SUBHS a2,a2,a1,LSL #29
- ADDHS a4,a4,a3,LSL #29
- |x$divide_b29|
- CMP a2,a1,LSL #28
- SUBHS a2,a2,a1,LSL #28
- ADDHS a4,a4,a3,LSL #28
- |x$divide_b28|
- CMP a2,a1,LSL #27
- SUBHSS a2,a2,a1,LSL #27
- ADDHS a4,a4,a3,LSL #27
- |x$divide_b27|
- CMP a2,a1,LSL #26
- SUBHS a2,a2,a1,LSL #26
- ADDHS a4,a4,a3,LSL #26
- |x$divide_b26|
- CMP a2,a1,LSL #25
- SUBHS a2,a2,a1,LSL #25
- ADDHS a4,a4,a3,LSL #25
- |x$divide_b25|
- CMP a2,a1,LSL #24
- SUBHS a2,a2,a1,LSL #24
- ADDHS a4,a4,a3,LSL #24
- |x$divide_b24|
- CMP a2,a1,LSL #23
- SUBHS a2,a2,a1,LSL #23
- ADDHS a4,a4,a3,LSL #23
- |x$divide_b23|
- CMP a2,a1,LSL #22
- SUBHS a2,a2,a1,LSL #22
- ADDHS a4,a4,a3,LSL #22
- |x$divide_b22|
- CMP a2,a1,LSL #21
- SUBHS a2,a2,a1,LSL #21
- ADDHS a4,a4,a3,LSL #21
- |x$divide_b21|
- CMP a2,a1,LSL #20
- SUBHS a2,a2,a1,LSL #20
- ADDHS a4,a4,a3,LSL #20
- |x$divide_b20|
- CMP a2,a1,LSL #19
- SUBHS a2,a2,a1,LSL #19
- ADDHS a4,a4,a3,LSL #19
- |x$divide_b19|
- CMP a2,a1,LSL #18
- SUBHS a2,a2,a1,LSL #18
- ADDHS a4,a4,a3,LSL #18
- |x$divide_b18|
- CMP a2,a1,LSL #17
- SUBHS a2,a2,a1,LSL #17
- ADDHS a4,a4,a3,LSL #17
- |x$divide_b17|
- CMP a2,a1,LSL #16
- SUBHS a2,a2,a1,LSL #16
- ADDHS a4,a4,a3,LSL #16
- |x$divide_b16|
- CMP a2,a1,LSL #15
- SUBHS a2,a2,a1,LSL #15
- ADDHS a4,a4,a3,LSL #15
- |x$divide_b15|
- CMP a2,a1,LSL #14
- SUBHS a2,a2,a1,LSL #14
- ADDHS a4,a4,a3,LSL #14
- |x$divide_b14|
- CMP a2,a1,LSL #13
- SUBHS a2,a2,a1,LSL #13
- ADDHS a4,a4,a3,LSL #13
- |x$divide_b13|
- CMP a2,a1,LSL #12
- SUBHS a2,a2,a1,LSL #12
- ADDHS a4,a4,a3,LSL #12
- |x$divide_b12|
- CMP a2,a1,LSL #11
- SUBHS a2,a2,a1,LSL #11
- ADDHS a4,a4,a3,LSL #11
- |x$divide_b11|
- CMP a2,a1,LSL #10
- SUBHS a2,a2,a1,LSL #10
- ADDHS a4,a4,a3,LSL #10
- |x$divide_b10|
- CMP a2,a1,LSL #9
- SUBHS a2,a2,a1,LSL #9
- ADDHS a4,a4,a3,LSL #9
- |x$divide_b9|
- CMP a2,a1,LSL #8
- SUBHS a2,a2,a1,LSL #8
- ADDHS a4,a4,a3,LSL #8
- |x$divide_b8|
- CMP a2,a1,LSL #7
- SUBHS a2,a2,a1,LSL #7
- ADDHS a4,a4,a3,LSL #7
- |x$divide_b7|
- CMP a2,a1,LSL #6
- SUBHS a2,a2,a1,LSL #6
- ADDHS a4,a4,a3,LSL #6
- |x$divide_b6|
- CMP a2,a1,LSL #5
- SUBHS a2,a2,a1,LSL #5
- ADDHS a4,a4,a3,LSL #5
- |x$divide_b5|
- CMP a2,a1,LSL #4
- SUBHS a2,a2,a1,LSL #4
- ADDHS a4,a4,a3,LSL #4
- |x$divide_b4|
- CMP a2,a1,LSL #3
- SUBHS a2,a2,a1,LSL #3
- ADDHS a4,a4,a3,LSL #3
- |x$divide_b3|
- CMP a2,a1,LSL #2
- SUBHS a2,a2,a1,LSL #2
- ADDHS a4,a4,a3,LSL #2
- |x$divide_b2|
- CMP a2,a1,LSL #1
- SUBHS a2,a2,a1,LSL #1
- ADDHS a4,a4,a3,LSL #1
- |x$divide_b1|
- CMP a2,a1
- SUBHS a2,a2,a1
- ADDHS a4,a4,a3
- |x$divide_b0|
-
- TST ip,#&20000000
- BNE |x$udivide_l1|
- MOV a1,a4
- CMP ip,#0
- RSBMI a2,a2,#0
- MOVS ip,ip,LSL #1
- RSBMI a1,a1,#0
- MOV pc,lr
-
- |x$udivide_l1|
- TST ip,#&10000000
- MOV a2,a2,LSL #1
- ORRNE a2,a2,#1
- MOV a4,a4,LSL #1
- CMP a2,a1
- SUBHS a2,a2,a1
- ADDHS a4,a4,a3
- MOV a1,a4
- MOV pc,lr
-
- END
-