home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / unix / riscbsd / datafile / _btriscbsd / booter / s / div < prev    next >
Encoding:
Text File  |  1994-09-20  |  5.3 KB  |  309 lines

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