home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Mint / mntlib32.zoo / purec / pclong.s < prev    next >
Text File  |  1992-06-28  |  5KB  |  302 lines

  1. ; Pure C long arithmetics
  2.  
  3. ; Diese Routinen sind der PCSTDLIB "mehr als ähnlich". Da reine Rechen-
  4. ; vorschriften keinem Urheberrechtsschutz unterliegen, habe ich sie
  5. ; hier übernommen. Im übrigen sind sie für alle, die Pure C nicht
  6. ; haben, komplett nutzlos...
  7.  
  8. .globl _ulmul
  9. .globl _uldiv
  10. .globl _ulmod
  11. .globl _lmul
  12. .globl _ldiv
  13. .globl _lmod
  14.  
  15. .module _ulmul:
  16.  
  17.     move.l    d0,d2
  18.     swap      d2
  19.     tst.w     d2
  20.     bne.b     L2
  21.     move.l    d1,d2
  22.     swap      d2
  23.     tst.w     d2
  24.     bne.b     L1
  25.     mulu      d1,d0
  26.     rts
  27.  
  28. L1:    mulu      d0,d2
  29.     swap      d2
  30.     mulu      d1,d0
  31.     add.l     d2,d0
  32.     rts
  33.  
  34. L2:    mulu      d1,d2
  35.     swap      d2
  36.     mulu      d1,d0
  37.     add.l     d2,d0
  38.     rts
  39.  
  40. .endmod
  41.  
  42. .module _uldiv:
  43.  
  44.     move.l    d1,d2
  45.     swap      d2
  46.     tst.w     d2
  47.     bne.b     L2
  48.     move.l    d0,d2
  49.     swap      d2
  50.     tst.w     d2
  51.     bne.b     L1
  52.     divu      d1,d0
  53.     swap      d0
  54.     clr.w     d0
  55.     swap      d0
  56.     rts
  57.  
  58. L1:    clr.w     d0
  59.     swap      d0
  60.     swap      d2
  61.     divu      d1,d0
  62.     movea.w   d0,a0
  63.     move.w    d2,d0
  64.     divu      d1,d0
  65.     swap      d0
  66.     move.w    a0,d0
  67.     swap      d0
  68.     rts
  69.  
  70. L2:    movea.l   d1,a0
  71.     swap      d0
  72.     moveq.l   #$00,d1
  73.     move.w    d0,d1
  74.     clr.w     d0
  75.     moveq.l   #$0f,d2
  76.     add.l     d0,d0
  77.     addx.l    d1,d1
  78. L3:    sub.l     a0,d1
  79.     bcc.b     L4
  80.     add.l     a0,d1
  81. L4:    addx.l    d0,d0
  82.     addx.l    d1,d1
  83.     dbra      d2,L3
  84.     not.w     d0
  85.     rts
  86.  
  87. .endmod
  88.  
  89. .module _ulmod:
  90.  
  91.     move.l    d1,d2
  92.     swap      d2
  93.     tst.w     d2
  94.     bne.b     L2
  95.     move.l    d0,d2
  96.     swap      d2
  97.     tst.w     d2
  98.     bne.b     L1
  99.     divu      d1,d0
  100.     clr.w     d0
  101.     swap      d0
  102.     rts
  103.  
  104. L1:    clr.w     d0
  105.     swap      d0
  106.     swap      d2
  107.     divu      d1,d0
  108.     move.w    d2,d0
  109.     divu      d1,d0
  110.     clr.w     d0
  111.     swap      d0
  112.     rts
  113.  
  114. L2:    movea.l   d1,a0
  115.     move.l    d0,d1
  116.     clr.w     d0
  117.     swap      d0
  118.     swap      d1
  119.     clr.w     d1
  120.     moveq.l   #$0f,d2
  121.     add.l     d1,d1
  122.     addx.l    d0,d0
  123. L3:    sub.l     a0,d0
  124.     bcc.b     L4
  125.     add.l     a0,d0
  126. L4:    addx.l    d1,d1
  127.     addx.l    d0,d0
  128.     dbra      d2,L3
  129.     roxr.l    #1,d0
  130.     rts
  131.  
  132. .endmod
  133.  
  134. .module _lmul:
  135.  
  136.     move.l    d0,d2
  137.     bpl.b     L1
  138.     neg.l     d0
  139. L1:    eor.l     d1,d2
  140.     movea.l   d2,a0
  141.     tst.l     d1
  142.     bpl.b     L2
  143.     neg.l     d1
  144. L2:    move.l    d0,d2
  145.     swap      d2
  146.     tst.w     d2
  147.     bne.b     L6
  148.     move.l    d1,d2
  149.     swap      d2
  150.     tst.w     d2
  151.     bne.b     L4
  152.     mulu      d1,d0
  153.     move.l    a0,d2
  154.     bpl.b     L3
  155.     neg.l     d0
  156. L3:    rts
  157.  
  158. L4:    mulu      d0,d2
  159.     swap      d2
  160.     mulu      d1,d0
  161.     add.l     d2,d0
  162.     move.l    a0,d2
  163.     bpl.b     L5
  164.     neg.l     d0
  165. L5:    rts
  166.  
  167. L6:    mulu      d1,d2
  168.     swap      d2
  169.     mulu      d1,d0
  170.     add.l     d2,d0
  171.     move.l    a0,d2
  172.     bpl.b     L7
  173.     neg.l     d0
  174. L7:    rts
  175.  
  176. .endmod
  177.  
  178. .module _ldiv:
  179.  
  180.     move.l    d0,d2
  181.     bpl.b     L1
  182.     neg.l     d0
  183. L1:    eor.l     d1,d2
  184.     movea.l   d2,a1
  185.     tst.l     d1
  186.     bpl.b     L2
  187.     neg.l     d1
  188. L2:    move.l    d1,d2
  189.     swap      d2
  190.     tst.w     d2
  191.     bne.b     L6
  192.     move.l    d0,d2
  193.     swap      d2
  194.     tst.w     d2
  195.     bne.b     L4
  196.     divu      d1,d0
  197.     swap      d0
  198.     clr.w     d0
  199.     swap      d0
  200.     move.l    a1,d2
  201.     bpl.b     L3
  202.     neg.l     d0
  203. L3:    rts
  204.  
  205. L4:    clr.w     d0
  206.     swap      d0
  207.     swap      d2
  208.     divu      d1,d0
  209.     movea.w   d0,a0
  210.     move.w    d2,d0
  211.     divu      d1,d0
  212.     swap      d0
  213.     move.w    a0,d0
  214.     swap      d0
  215.     move.l    a1,d2
  216.     bpl.b     L5
  217.     neg.l     d0
  218. L5:    rts
  219.  
  220. L6:    movea.l   d1,a0
  221.     swap      d0
  222.     moveq.l   #$00,d1
  223.     move.w    d0,d1
  224.     clr.w     d0
  225.     moveq.l   #$0f,d2
  226.     add.l     d0,d0
  227.     addx.l    d1,d1
  228. L7:    sub.l     a0,d1
  229.     bcc.b     L8
  230.     add.l     a0,d1
  231. L8:    addx.l    d0,d0
  232.     addx.l    d1,d1
  233.     dbra      d2,L7
  234.     not.w     d0
  235.     move.l    a1,d2
  236.     bpl.b     L9
  237.     neg.l     d0
  238. L9:    rts
  239.  
  240. .endmod
  241.  
  242. .module _lmod:
  243.  
  244.     movea.l   d0,a1
  245.     move.l    d0,d2
  246.     bpl.b     L1
  247.     neg.l     d0
  248. L1:    tst.l     d1
  249.     bpl.b     L2
  250.     neg.l     d1
  251. L2:    move.l    d1,d2
  252.     swap      d2
  253.     tst.w     d2
  254.     bne.b     L6
  255.     move.l    d0,d2
  256.     swap      d2
  257.     tst.w     d2
  258.     bne.b     L4
  259.     divu      d1,d0
  260.     clr.w     d0
  261.     swap      d0
  262.     move.l    a1,d2
  263.     bpl.b     L3
  264.     neg.l     d0
  265. L3:    rts
  266.  
  267. L4:    clr.w     d0
  268.     swap      d0
  269.     swap      d2
  270.     divu      d1,d0
  271.     move.w    d2,d0
  272.     divu      d1,d0
  273.     clr.w     d0
  274.     swap      d0
  275.     move.l    a1,d2
  276.     bpl.b     L5
  277.     neg.l     d0
  278. L5:    rts
  279.  
  280. L6:    movea.l   d1,a0
  281.     move.l    d0,d1
  282.     clr.w     d0
  283.     swap      d0
  284.     swap      d1
  285.     clr.w     d1
  286.     moveq.l   #$0f,d2
  287.     add.l     d1,d1
  288.     addx.l    d0,d0
  289. L7:    sub.l     a0,d0
  290.     bcc.b     L8
  291.     add.l     a0,d0
  292. L8:    addx.l    d1,d1
  293.     addx.l    d0,d0
  294.     dbra      d2,L7
  295.     roxr.l    #1,d0
  296.     move.l    a1,d2
  297.     bpl.b     L9
  298.     neg.l     d0
  299. L9:    rts
  300.  
  301. .endmod
  302.