home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / utilities / utilst / virtual / !Virtual / s / divide < prev    next >
Text File  |  1993-04-20  |  7KB  |  297 lines

  1.  
  2. a1 RN 0
  3. a2 RN 1
  4. a3 RN 2
  5. a4 RN 3
  6. v1 RN 4
  7. v2 RN 5
  8. v3 RN 6
  9. v4 RN 7
  10. v5 RN 8
  11. v6 RN 9
  12. fp RN 10
  13. ip RN 11
  14. sp RN 12
  15. lr RN 14
  16. pc RN 15
  17.  
  18. f0 FN 0
  19. f1 FN 1
  20. f2 FN 2
  21. f3 FN 3
  22. f4 FN 4
  23. f5 FN 5
  24. f6 FN 6
  25. f7 FN 7
  26.  
  27.         AREA    |C$$code|,CODE,READONLY
  28.  
  29.         EXPORT  |x$divtest|
  30. |x$divtest|
  31.         MOVS    pc,lr
  32.  
  33.         EXPORT  |x$remainder|
  34. |x$remainder|
  35.         STMFD   sp!,{lr}
  36.         BL      |x$divide|
  37.         MOV     a1,a2
  38.         LDMFD   sp!,{pc}^
  39.  
  40.         EXPORT  |x$uremainder|
  41. |x$uremainder|
  42.         STMFD   sp!,{lr}
  43.         BL      |x$udivide|
  44.         MOV     a1,a2
  45.         LDMFD   sp!,{pc}^
  46.  
  47. |x$overflow|
  48.         MVN     a1,#0
  49.         MOVS    pc,lr
  50.  
  51.         EXPORT  |x$udivide|     ; a1 = a2 / a1; a2 = a2 % a1
  52. |x$udivide|
  53.         CMP     a1,#1
  54.         BLO     |x$overflow|
  55.         BEQ     |x$divide_l0|
  56.         MOV     ip,#0
  57.         MOVS    a2,a2
  58.         BPL     |x$divide_l1|
  59.         ORR     ip,ip,#&20000000; ip bit &20000000 = -ve a2
  60.         MOVS    a2,a2,LSR #1
  61.         ORRCS   ip,ip,#&10000000; ip bit &10000000 = bit 0 of a2
  62.         B       |x$divide_l1|
  63.  
  64. |x$divide_l0|                   ; a1 == 1
  65.         MOV     a1,a2
  66.         MOV     a2,#0
  67.         MOVS    pc,lr
  68.  
  69.         EXPORT  |x$divide|      ; a1 = a2 / a1; a2 = a2 % a1
  70. |x$divide|
  71.         CMP     a1,#1
  72.         BLO     |x$overflow|
  73.         BEQ     |x$divide_l0|
  74.         ANDS    ip,a1,#&80000000
  75.         RSBMI   a1,a1,#0
  76.         ANDS    a3,a2,#&80000000
  77.         EOR     ip,ip,a3
  78.         RSBMI   a2,a2,#0
  79.         ORR     ip,a3,ip,LSR #1 ; ip bit &40000000 = -ve division
  80.                                 ; ip bit &80000000 = -ve remainder
  81.  
  82. |x$divide_l1|
  83.         MOV     a3,#1
  84.         MOV     a4,#0
  85.  
  86.         CMP     a2,a1
  87.         BLO     |x$divide_b0|
  88.         CMP     a2,a1,LSL #1
  89.         BLO     |x$divide_b1|
  90.         CMP     a2,a1,LSL #2
  91.         BLO     |x$divide_b2|
  92.         CMP     a2,a1,LSL #3
  93.         BLO     |x$divide_b3|
  94.         CMP     a2,a1,LSL #4
  95.         BLO     |x$divide_b4|
  96.         CMP     a2,a1,LSL #5
  97.         BLO     |x$divide_b5|
  98.         CMP     a2,a1,LSL #6
  99.         BLO     |x$divide_b6|
  100.         CMP     a2,a1,LSL #7
  101.         BLO     |x$divide_b7|
  102.         CMP     a2,a1,LSL #8
  103.         BLO     |x$divide_b8|
  104.         CMP     a2,a1,LSL #9
  105.         BLO     |x$divide_b9|
  106.         CMP     a2,a1,LSL #10
  107.         BLO     |x$divide_b10|
  108.         CMP     a2,a1,LSL #11
  109.         BLO     |x$divide_b11|
  110.         CMP     a2,a1,LSL #12
  111.         BLO     |x$divide_b12|
  112.         CMP     a2,a1,LSL #13
  113.         BLO     |x$divide_b13|
  114.         CMP     a2,a1,LSL #14
  115.         BLO     |x$divide_b14|
  116.         CMP     a2,a1,LSL #15
  117.         BLO     |x$divide_b15|
  118.         CMP     a2,a1,LSL #16
  119.         BLO     |x$divide_b16|
  120.         CMP     a2,a1,LSL #17
  121.         BLO     |x$divide_b17|
  122.         CMP     a2,a1,LSL #18
  123.         BLO     |x$divide_b18|
  124.         CMP     a2,a1,LSL #19
  125.         BLO     |x$divide_b19|
  126.         CMP     a2,a1,LSL #20
  127.         BLO     |x$divide_b20|
  128.         CMP     a2,a1,LSL #21
  129.         BLO     |x$divide_b21|
  130.         CMP     a2,a1,LSL #22
  131.         BLO     |x$divide_b22|
  132.         CMP     a2,a1,LSL #23
  133.         BLO     |x$divide_b23|
  134.         CMP     a2,a1,LSL #24
  135.         BLO     |x$divide_b24|
  136.         CMP     a2,a1,LSL #25
  137.         BLO     |x$divide_b25|
  138.         CMP     a2,a1,LSL #26
  139.         BLO     |x$divide_b26|
  140.         CMP     a2,a1,LSL #27
  141.         BLO     |x$divide_b27|
  142.         CMP     a2,a1,LSL #28
  143.         BLO     |x$divide_b28|
  144.         CMP     a2,a1,LSL #29
  145.         BLO     |x$divide_b29|
  146.         CMP     a2,a1,LSL #30
  147.         BLO     |x$divide_b30|
  148.         CMP     a2,a1,LSL #31
  149.         SUBHS   a2,a2,a1,LSL #31
  150.         ADDHS   a4,a4,a3,LSL #31
  151.         CMP     a2,a1,LSL #30
  152.         SUBHS   a2,a2,a1,LSL #30
  153.         ADDHS   a4,a4,a3,LSL #30
  154. |x$divide_b30|
  155.         CMP     a2,a1,LSL #29
  156.         SUBHS   a2,a2,a1,LSL #29
  157.         ADDHS   a4,a4,a3,LSL #29
  158. |x$divide_b29|
  159.         CMP     a2,a1,LSL #28
  160.         SUBHS   a2,a2,a1,LSL #28
  161.         ADDHS   a4,a4,a3,LSL #28
  162. |x$divide_b28|
  163.         CMP     a2,a1,LSL #27
  164.         SUBHSS  a2,a2,a1,LSL #27
  165.         ADDHS   a4,a4,a3,LSL #27
  166. |x$divide_b27|
  167.         CMP     a2,a1,LSL #26
  168.         SUBHS   a2,a2,a1,LSL #26
  169.         ADDHS   a4,a4,a3,LSL #26
  170. |x$divide_b26|
  171.         CMP     a2,a1,LSL #25
  172.         SUBHS   a2,a2,a1,LSL #25
  173.         ADDHS   a4,a4,a3,LSL #25
  174. |x$divide_b25|
  175.         CMP     a2,a1,LSL #24
  176.         SUBHS   a2,a2,a1,LSL #24
  177.         ADDHS   a4,a4,a3,LSL #24
  178. |x$divide_b24|
  179.         CMP     a2,a1,LSL #23
  180.         SUBHS   a2,a2,a1,LSL #23
  181.         ADDHS   a4,a4,a3,LSL #23
  182. |x$divide_b23|
  183.         CMP     a2,a1,LSL #22
  184.         SUBHS   a2,a2,a1,LSL #22
  185.         ADDHS   a4,a4,a3,LSL #22
  186. |x$divide_b22|
  187.         CMP     a2,a1,LSL #21
  188.         SUBHS   a2,a2,a1,LSL #21
  189.         ADDHS   a4,a4,a3,LSL #21
  190. |x$divide_b21|
  191.         CMP     a2,a1,LSL #20
  192.         SUBHS   a2,a2,a1,LSL #20
  193.         ADDHS   a4,a4,a3,LSL #20
  194. |x$divide_b20|
  195.         CMP     a2,a1,LSL #19
  196.         SUBHS   a2,a2,a1,LSL #19
  197.         ADDHS   a4,a4,a3,LSL #19
  198. |x$divide_b19|
  199.         CMP     a2,a1,LSL #18
  200.         SUBHS   a2,a2,a1,LSL #18
  201.         ADDHS   a4,a4,a3,LSL #18
  202. |x$divide_b18|
  203.         CMP     a2,a1,LSL #17
  204.         SUBHS   a2,a2,a1,LSL #17
  205.         ADDHS   a4,a4,a3,LSL #17
  206. |x$divide_b17|
  207.         CMP     a2,a1,LSL #16
  208.         SUBHS   a2,a2,a1,LSL #16
  209.         ADDHS   a4,a4,a3,LSL #16
  210. |x$divide_b16|
  211.         CMP     a2,a1,LSL #15
  212.         SUBHS   a2,a2,a1,LSL #15
  213.         ADDHS   a4,a4,a3,LSL #15
  214. |x$divide_b15|
  215.         CMP     a2,a1,LSL #14
  216.         SUBHS   a2,a2,a1,LSL #14
  217.         ADDHS   a4,a4,a3,LSL #14
  218. |x$divide_b14|
  219.         CMP     a2,a1,LSL #13
  220.         SUBHS   a2,a2,a1,LSL #13
  221.         ADDHS   a4,a4,a3,LSL #13
  222. |x$divide_b13|
  223.         CMP     a2,a1,LSL #12
  224.         SUBHS   a2,a2,a1,LSL #12
  225.         ADDHS   a4,a4,a3,LSL #12
  226. |x$divide_b12|
  227.         CMP     a2,a1,LSL #11
  228.         SUBHS   a2,a2,a1,LSL #11
  229.         ADDHS   a4,a4,a3,LSL #11
  230. |x$divide_b11|
  231.         CMP     a2,a1,LSL #10
  232.         SUBHS   a2,a2,a1,LSL #10
  233.         ADDHS   a4,a4,a3,LSL #10
  234. |x$divide_b10|
  235.         CMP     a2,a1,LSL #9
  236.         SUBHS   a2,a2,a1,LSL #9
  237.         ADDHS   a4,a4,a3,LSL #9
  238. |x$divide_b9|
  239.         CMP     a2,a1,LSL #8
  240.         SUBHS   a2,a2,a1,LSL #8
  241.         ADDHS   a4,a4,a3,LSL #8
  242. |x$divide_b8|
  243.         CMP     a2,a1,LSL #7
  244.         SUBHS   a2,a2,a1,LSL #7
  245.         ADDHS   a4,a4,a3,LSL #7
  246. |x$divide_b7|
  247.         CMP     a2,a1,LSL #6
  248.         SUBHS   a2,a2,a1,LSL #6
  249.         ADDHS   a4,a4,a3,LSL #6
  250. |x$divide_b6|
  251.         CMP     a2,a1,LSL #5
  252.         SUBHS   a2,a2,a1,LSL #5
  253.         ADDHS   a4,a4,a3,LSL #5
  254. |x$divide_b5|
  255.         CMP     a2,a1,LSL #4
  256.         SUBHS   a2,a2,a1,LSL #4
  257.         ADDHS   a4,a4,a3,LSL #4
  258. |x$divide_b4|
  259.         CMP     a2,a1,LSL #3
  260.         SUBHS   a2,a2,a1,LSL #3
  261.         ADDHS   a4,a4,a3,LSL #3
  262. |x$divide_b3|
  263.         CMP     a2,a1,LSL #2
  264.         SUBHS   a2,a2,a1,LSL #2
  265.         ADDHS   a4,a4,a3,LSL #2
  266. |x$divide_b2|
  267.         CMP     a2,a1,LSL #1
  268.         SUBHS   a2,a2,a1,LSL #1
  269.         ADDHS   a4,a4,a3,LSL #1
  270. |x$divide_b1|
  271.         CMP     a2,a1
  272.         SUBHS   a2,a2,a1
  273.         ADDHS   a4,a4,a3
  274. |x$divide_b0|
  275.  
  276.         TST     ip,#&20000000
  277.         BNE     |x$udivide_l1|
  278.         MOV     a1,a4
  279.         CMP     ip,#0
  280.         RSBMI   a2,a2,#0
  281.         MOVS    ip,ip,LSL #1
  282.         RSBMI   a1,a1,#0
  283.         MOVS    pc,lr
  284.  
  285. |x$udivide_l1|
  286.         TST     ip,#&10000000
  287.         MOV     a2,a2,LSL #1
  288.         ORRNE   a2,a2,#1
  289.         MOV     a4,a4,LSL #1
  290.         CMP     a2,a1
  291.         SUBHS   a2,a2,a1
  292.         ADDHS   a4,a4,a3
  293.         MOV     a1,a4
  294.         MOVS    pc,lr
  295.  
  296.         END
  297.