home *** CD-ROM | disk | FTP | other *** search
/ APDL Public Domain 1 / APDL_PD1A.iso / program / c / gnu_c / virtual / !Virtual / s / divide < prev    next >
Encoding:
Text File  |  1992-05-31  |  5.1 KB  |  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.