home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 9 / FreshFishVol9-CD2.bin / bbs / gnu / libnix-0.8-src.lha / libnix-0.8 / sources / nix / math / __udivsi3.c < prev   
Encoding:
C/C++ Source or Header  |  1994-12-12  |  840 b   |  69 lines

  1. asm("
  2.         .globl    ___umodsi3
  3.         .globl    ___udivsi3
  4.         .globl    ___udivsi4
  5.  
  6. | D1.L = D0.L % D1.L unsigned
  7.  
  8. ___umodsi3:    moveml    sp@(4:W),d0/d1
  9.         jbsr    ___udivsi4
  10.         movel    d1,d0
  11.         rts
  12.  
  13. | D0.L = D0.L / D1.L unsigned
  14.  
  15. ___udivsi3:    moveml    sp@(4:W),d0/d1
  16. ___udivsi4:"
  17.  
  18. #ifdef OS_20_ONLY
  19.  
  20. #ifndef SMALL_DATA
  21. "
  22.         movel    _UtilityBase,a0"
  23. #else
  24. "
  25.         movel    a4@(_UtilityBase:W),a0"
  26. #endif
  27. "
  28.         jmp    a0@(-156:W)"
  29.  
  30. #else
  31. "
  32.         movel    d3,sp@-
  33.         movel    d2,sp@-
  34.         movel    d1,d3
  35.         swap    d1
  36.         tstw    d1
  37.         bnes    LC4
  38.         movew    d0,d2
  39.         clrw    d0
  40.         swap    d0
  41.         divu    d3,d0
  42.         movel    d0,d1
  43.         swap    d0
  44.         movew    d2,d1
  45.         divu    d3,d1
  46.         movew    d1,d0
  47.         clrw    d1
  48.         swap    d1
  49.         jra    LC1
  50. LC4:        movel    d0,d1
  51.         swap    d0
  52.         clrw    d0
  53.         clrw    d1
  54.         swap    d1
  55.         moveq    #16-1,d2
  56. LC3:        addl    d0,d0
  57.         addxl    d1,d1
  58.         cmpl    d1,d3
  59.         bhis    LC2
  60.         subl    d3,d1
  61.         addqw    #1,d0
  62. LC2:        dbra    d2,LC3
  63. LC1:        movel    sp@+,d2
  64.         movel    sp@+,d3
  65.         rts"
  66.  
  67. #endif
  68. );
  69.