home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d1xx / d101 / psintrp.lha / PsIntrp / lmath.a < prev    next >
Text File  |  1987-09-05  |  2KB  |  125 lines

  1.  
  2.    xdef     ldivs
  3.    xdef     ldivu
  4.    xdef     lmulu   * really signed
  5.    xdef     lmoddivu
  6.  
  7.    section  one
  8.  
  9. * divide D1 by D2
  10. * quotient in D1; remainder in D0
  11. lmoddivu
  12.    cmp.l     #$00FFFF,D2
  13.    bgt       .bigdiv
  14.    move.w    D1,A1
  15.    clr.w     D1
  16.    swap      D1
  17.    divu      D2,D1
  18.    move.l    D1,D0
  19.    swap      D1
  20.    move.w    A1,D0
  21.    divu      D2,D0
  22.    move.w    D0,D1
  23.    clr.w     D0
  24.    swap      D0
  25.    rts       
  26. .bigdiv
  27.    move.l    D1,D0
  28.    clr.w     D0
  29.    swap      D0
  30.    swap      D1
  31.    clr.w     D1
  32.    move.l    D2,A1
  33.    moveq     #$0F,D2
  34. 1$ add.l     D1,D1
  35.    addx.l    D0,D0
  36.    cmp.l     D0,A1
  37.    bgt       2$
  38.    sub.l     A1,D0
  39.    addq.w    #1,D1
  40. 2$ dbra      D2,1$
  41.    rts       
  42.  
  43. lmulu
  44.    move.l    D2,-(SP)
  45.    move.l    D0,D2
  46.    mulu      D1,D2
  47.    move.l    D2,A0
  48.    move.l    D0,D2
  49.    swap      D2
  50.    mulu      D1,D2
  51.    swap      D1
  52.    mulu      D1,D0
  53.    add.l     D2,D0
  54.    swap      D0
  55.    clr.w     D0
  56.    add.l     D0,A0
  57.    move.l    A0,D0
  58.    move.l    (SP)+,D2
  59.    rts       
  60.  
  61. * remainder after unsigned divide D0 by D1
  62.  
  63. *   move.l    D2,-(SP)
  64. *   move.l    D1,D2
  65. *   move.l    D0,D1
  66. *   bsr       lmoddivu
  67. *   move.l    (SP)+,D2
  68. *   rts       
  69.  
  70. * unsigned divide D0 by D1
  71. ldivu
  72.    move.l    D2,-(SP)
  73.    move.l    D1,D2
  74.    move.l    D0,D1
  75.    bsr       lmoddivu
  76.    move.l    D1,D0
  77.    move.l    (SP)+,D2
  78.    rts
  79.  
  80. * signed remainder after signed divide D0 by D1
  81. *   move.l    D2,-(SP)
  82. *   move.l    D1,D2
  83. *   bge       lab736A
  84. *   neg.l     D2
  85. *lab736A
  86. *   move.l    D0,D1
  87. *   moveq     #0,D0
  88. *   tst.l     D1
  89. *   bge       lab7376
  90. *   neg.l     D1
  91. *   not.l     D0
  92. *lab7376
  93. *   move.l    D0,A0
  94. *   bsr       lmoddivu
  95. *   move.w    A0,D2
  96. *   beq       lab7382
  97. *   neg.l     D0
  98. *lab7382
  99. *   move.l    (SP)+,D2
  100. *   rts       
  101.  
  102. ldivs
  103.    move.l    D2,-(SP)
  104.    move.l    D0,A0
  105.    moveq     #0,D0
  106.    move.l    D1,D2
  107.    bge       1$      same as bpl
  108.    neg.l     D2
  109.    not.l     D0
  110. 1$ move.l    A0,D1
  111.    bge       2$      same as bpl
  112.    neg.l     D1
  113.    not.l     D0
  114. 2$ move.l    D0,A0
  115.    bsr       lmoddivu
  116.    move.l    A0,D2
  117.    beq       3$      were signs the same?
  118.    neg.l     D1
  119. 3$ move.l    D1,D0
  120.    move.l    (SP)+,D2
  121.    rts
  122.  
  123.    end
  124.  
  125.