home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Source / GNU / gcc / config / sparc / lb1spl.asm < prev    next >
Assembly Source File  |  1994-11-17  |  4KB  |  247 lines

  1. /* This is an assembly language implementation of libgcc1.c for the sparclite
  2.    processor.
  3.  
  4.    These routines are all from the Sparclite User's Guide, slightly edited
  5.    to match the desired calling convention, and also to optimize them.  */
  6.  
  7. #ifdef L_udivsi3
  8. .text
  9.     .align 4
  10.     .global .udiv
  11.     .proc    04
  12. .udiv:
  13.     wr    %g0,%g0,%y    ! Not a delayed write for sparclite
  14.     tst    %g0
  15.     divscc    %o0,%o1,%g1
  16.     divscc    %g1,%o1,%g1
  17.     divscc    %g1,%o1,%g1
  18.     divscc    %g1,%o1,%g1
  19.     divscc    %g1,%o1,%g1
  20.     divscc    %g1,%o1,%g1
  21.     divscc    %g1,%o1,%g1
  22.     divscc    %g1,%o1,%g1
  23.     divscc    %g1,%o1,%g1
  24.     divscc    %g1,%o1,%g1
  25.     divscc    %g1,%o1,%g1
  26.     divscc    %g1,%o1,%g1
  27.     divscc    %g1,%o1,%g1
  28.     divscc    %g1,%o1,%g1
  29.     divscc    %g1,%o1,%g1
  30.     divscc    %g1,%o1,%g1
  31.     divscc    %g1,%o1,%g1
  32.     divscc    %g1,%o1,%g1
  33.     divscc    %g1,%o1,%g1
  34.     divscc    %g1,%o1,%g1
  35.     divscc    %g1,%o1,%g1
  36.     divscc    %g1,%o1,%g1
  37.     divscc    %g1,%o1,%g1
  38.     divscc    %g1,%o1,%g1
  39.     divscc    %g1,%o1,%g1
  40.     divscc    %g1,%o1,%g1
  41.     divscc    %g1,%o1,%g1
  42.     divscc    %g1,%o1,%g1
  43.     divscc    %g1,%o1,%g1
  44.     divscc    %g1,%o1,%g1
  45.     divscc    %g1,%o1,%g1
  46.     retl
  47.     divscc    %g1,%o1,%o0
  48. #endif
  49.  
  50. #ifdef L_umodsi3
  51. .text
  52.     .align 4
  53.     .global .urem
  54.     .proc    04
  55. .urem:
  56.     wr    %g0,%g0,%y    ! Not a delayed write for sparclite
  57.     tst    %g0
  58.     divscc    %o0,%o1,%g1
  59.     divscc    %g1,%o1,%g1
  60.     divscc    %g1,%o1,%g1
  61.     divscc    %g1,%o1,%g1
  62.     divscc    %g1,%o1,%g1
  63.     divscc    %g1,%o1,%g1
  64.     divscc    %g1,%o1,%g1
  65.     divscc    %g1,%o1,%g1
  66.     divscc    %g1,%o1,%g1
  67.     divscc    %g1,%o1,%g1
  68.     divscc    %g1,%o1,%g1
  69.     divscc    %g1,%o1,%g1
  70.     divscc    %g1,%o1,%g1
  71.     divscc    %g1,%o1,%g1
  72.     divscc    %g1,%o1,%g1
  73.     divscc    %g1,%o1,%g1
  74.     divscc    %g1,%o1,%g1
  75.     divscc    %g1,%o1,%g1
  76.     divscc    %g1,%o1,%g1
  77.     divscc    %g1,%o1,%g1
  78.     divscc    %g1,%o1,%g1
  79.     divscc    %g1,%o1,%g1
  80.     divscc    %g1,%o1,%g1
  81.     divscc    %g1,%o1,%g1
  82.     divscc    %g1,%o1,%g1
  83.     divscc    %g1,%o1,%g1
  84.     divscc    %g1,%o1,%g1
  85.     divscc    %g1,%o1,%g1
  86.     divscc    %g1,%o1,%g1
  87.     divscc    %g1,%o1,%g1
  88.     divscc    %g1,%o1,%g1
  89.     divscc    %g1,%o1,%g1
  90.     bl 1f
  91.     rd    %y,%o0
  92.     retl
  93.     nop
  94. 1:    retl
  95.     add    %o0,%o1,%o0
  96. #endif
  97.  
  98. #ifdef L_divsi3
  99. .text
  100.     .align 4
  101.     .global .div
  102.     .proc    04
  103. ! ??? This routine could be made faster if was optimized, and if it was
  104. ! rewritten to only calculate the quotient.
  105. .div:
  106.     wr    %g0,%g0,%y    ! Not a delayed write for sparclite
  107.     mov    %o1,%o4
  108.     tst    %o1
  109.     bl,a    1f
  110.     sub    %g0,%o4,%o4
  111. 1:    tst    %o0
  112.     bl,a    2f
  113.     mov    -1,%y
  114. 2:    divscc    %o0,%o4,%g1
  115.     divscc    %g1,%o4,%g1
  116.     divscc    %g1,%o4,%g1
  117.     divscc    %g1,%o4,%g1
  118.     divscc    %g1,%o4,%g1
  119.     divscc    %g1,%o4,%g1
  120.     divscc    %g1,%o4,%g1
  121.     divscc    %g1,%o4,%g1
  122.     divscc    %g1,%o4,%g1
  123.     divscc    %g1,%o4,%g1
  124.     divscc    %g1,%o4,%g1
  125.     divscc    %g1,%o4,%g1
  126.     divscc    %g1,%o4,%g1
  127.     divscc    %g1,%o4,%g1
  128.     divscc    %g1,%o4,%g1
  129.     divscc    %g1,%o4,%g1
  130.     divscc    %g1,%o4,%g1
  131.     divscc    %g1,%o4,%g1
  132.     divscc    %g1,%o4,%g1
  133.     divscc    %g1,%o4,%g1
  134.     divscc    %g1,%o4,%g1
  135.     divscc    %g1,%o4,%g1
  136.     divscc    %g1,%o4,%g1
  137.     divscc    %g1,%o4,%g1
  138.     divscc    %g1,%o4,%g1
  139.     divscc    %g1,%o4,%g1
  140.     divscc    %g1,%o4,%g1
  141.     divscc    %g1,%o4,%g1
  142.     divscc    %g1,%o4,%g1
  143.     divscc    %g1,%o4,%g1
  144.     divscc    %g1,%o4,%g1
  145.     divscc    %g1,%o4,%g1
  146.     be    6f
  147.     mov    %y,%o3
  148.     bg    4f
  149.     addcc    %o3,%o4,%g0
  150.     be,a    6f
  151.     mov    %g0,%o3
  152.     tst    %o0
  153.     bl    5f
  154.     tst    %g1
  155.     ba    5f
  156.     add    %o3,%o4,%o3
  157. 4:    subcc    %o3,%o4,%g0
  158.     be,a    6f
  159.     mov    %g0,%o3
  160.     tst    %o0
  161.     bge    5f
  162.     tst    %g1
  163.     sub    %o3,%o4,%o3
  164. 5:    bl,a    6f
  165.     add    %g1,1,%g1
  166. 6:    tst    %o1
  167.     bl,a    7f
  168.     sub    %g0,%g1,%g1
  169. 7:    retl
  170.     mov    %g1,%o0        ! Quotient is in %g1.
  171. #endif
  172.  
  173. #ifdef L_modsi3
  174. .text
  175.     .align 4
  176.     .global .rem
  177.     .proc    04
  178. ! ??? This routine could be made faster if was optimized, and if it was
  179. ! rewritten to only calculate the remainder.
  180. .rem:
  181.     wr    %g0,%g0,%y    ! Not a delayed write for sparclite
  182.     mov    %o1,%o4
  183.     tst    %o1
  184.     bl,a    1f
  185.     sub    %g0,%o4,%o4
  186. 1:    tst    %o0
  187.     bl,a    2f
  188.     mov    -1,%y
  189. 2:    divscc    %o0,%o4,%g1
  190.     divscc    %g1,%o4,%g1
  191.     divscc    %g1,%o4,%g1
  192.     divscc    %g1,%o4,%g1
  193.     divscc    %g1,%o4,%g1
  194.     divscc    %g1,%o4,%g1
  195.     divscc    %g1,%o4,%g1
  196.     divscc    %g1,%o4,%g1
  197.     divscc    %g1,%o4,%g1
  198.     divscc    %g1,%o4,%g1
  199.     divscc    %g1,%o4,%g1
  200.     divscc    %g1,%o4,%g1
  201.     divscc    %g1,%o4,%g1
  202.     divscc    %g1,%o4,%g1
  203.     divscc    %g1,%o4,%g1
  204.     divscc    %g1,%o4,%g1
  205.     divscc    %g1,%o4,%g1
  206.     divscc    %g1,%o4,%g1
  207.     divscc    %g1,%o4,%g1
  208.     divscc    %g1,%o4,%g1
  209.     divscc    %g1,%o4,%g1
  210.     divscc    %g1,%o4,%g1
  211.     divscc    %g1,%o4,%g1
  212.     divscc    %g1,%o4,%g1
  213.     divscc    %g1,%o4,%g1
  214.     divscc    %g1,%o4,%g1
  215.     divscc    %g1,%o4,%g1
  216.     divscc    %g1,%o4,%g1
  217.     divscc    %g1,%o4,%g1
  218.     divscc    %g1,%o4,%g1
  219.     divscc    %g1,%o4,%g1
  220.     divscc    %g1,%o4,%g1
  221.     be    6f
  222.     mov    %y,%o3
  223.     bg    4f
  224.     addcc    %o3,%o4,%g0
  225.     be,a    6f
  226.     mov    %g0,%o3
  227.     tst    %o0
  228.     bl    5f
  229.     tst    %g1
  230.     ba    5f
  231.     add    %o3,%o4,%o3
  232. 4:    subcc    %o3,%o4,%g0
  233.     be,a    6f
  234.     mov    %g0,%o3
  235.     tst    %o0
  236.     bge    5f
  237.     tst    %g1
  238.     sub    %o3,%o4,%o3
  239. 5:    bl,a    6f
  240.     add    %g1,1,%g1
  241. 6:    tst    %o1
  242.     bl,a    7f
  243.     sub    %g0,%g1,%g1
  244. 7:    retl
  245.     mov    %o3,%o0        ! Remainder is in %o3.
  246. #endif
  247.