home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / gnu / libsrc87 / _cmpsf2.s < prev    next >
Encoding:
Text File  |  1993-07-30  |  2.4 KB  |  136 lines

  1. | single floating point compare routine
  2. |
  3. | written by Olaf Flebbe (flebbe@tat.physik.uni-tuebingen.de)
  4. | Based on a 68k floating point packet from Kai-Uwe Bloem, itself based
  5. | on a 80x86 floating point packet from comp.os.minix, written by P.Housel
  6. | Revision 2.0: olaf 12-92.
  7. |
  8.  
  9.     .text
  10.     .even
  11.     .globl    ___eqsf2, ___nesf2
  12.     .globl    ___gtsf2, ___lesf2
  13.     .globl    ___gesf2, ___ltsf2
  14.     | additional entry points for gcc 1.X    
  15.     .globl    __cmpsf2, ___cmpsf2
  16.  
  17. __cmpsf2:
  18. ___cmpsf2:
  19. ___eqsf2:
  20. ___nesf2:
  21.     moveml    sp@(4),d0-d1    | get numbers to compare with
  22.     tstl    d0        | check sign bit
  23.     bpl    1f
  24.     negl    d0
  25.     bchg    #31,d0        | toggle sign bit
  26.  
  27. 1:    tstl    d1        | check sign bit
  28.     bpl    2f
  29.     negl    d1        | negate
  30.     bchg    #31,d1        | toggle sign bit
  31.  
  32. 2:    cmpl    d1,d0
  33.     bne    4f
  34.     bclr    #31,d1
  35.     cmpl    #0x7f800000,d1        | NaN is not equal NaN !
  36.     bgt    4f
  37.     clrl    d0
  38.     rts
  39.  
  40. 4:    moveql    #1,d0
  41.     rts
  42.  
  43. ___gtsf2:
  44.     moveml    sp@(4),d0-d1    | get numbers to compare with
  45.     tstl    d0        | check sign bit
  46.     bpl    1f
  47.     negl    d0        | negate
  48.     bchg    #31,d0        | toggle sign bit
  49.  
  50. 1:    tstl    d1        | check sign bit
  51.     bpl    2f
  52.     negl    d1        | negate
  53.     bchg    #31,d1        | toggle sign bit
  54.  
  55. 2:    cmpl    d1,d0
  56.     bgt    4f        | d0 > d1 Test if NaN (should be false!)
  57. 3:    clrl    d0        | Test is false.
  58.     rts
  59.  
  60. 4:    bclr    #31,d0        
  61.     cmpl    #0x7f800000,d0    | First operand == NaN =?
  62.     bgt    3b
  63.     moveql    #1,d0        | Test True
  64.     rts
  65.  
  66. ___lesf2:
  67.     moveml    sp@(4),d0-d1    | get numbers to compare with
  68.     tstl    d0        | check sign bit
  69.     bpl    1f
  70.     negl    d0        | negate
  71.     bchg    #31,d0        | toggle sign bit
  72.  
  73. 1:    tstl    d1        | check sign bit
  74.     bpl    2f
  75.     negl    d1        | negate
  76.     bchg    #31,d1        | toggle sign bit
  77.  
  78. 2:    cmpl    d1,d0
  79.     ble    4f
  80. 3:    moveql    #1,d0        | Test is false
  81.     rts
  82. 4:    bclr    #31,d0        
  83.     cmpl    #0x7f800000,d0    | First operand == NaN =?
  84.     bgt    3b
  85.     clrl    d0        | Test true
  86.     rts
  87.  
  88. ___gesf2:
  89.     moveml    sp@(4),d0-d1    | get numbers to compare with
  90.     tstl    d0        | check sign bit
  91.     bpl    1f
  92.     negl    d0        | negate
  93.     bchg    #31,d0        | toggle sign bit
  94.  
  95. 1:    tstl    d1        | check sign bit
  96.     bpl    2f
  97.     negl    d1        | negate
  98.     bchg    #31,d1        | toggle sign bit
  99.  
  100. 2:    cmpl    d1,d0
  101.     bge    4f
  102. 3:    moveql    #-1,d0        | False
  103.     rts
  104.  
  105. 4:    bclr    #31,d0        
  106.     cmpl    #0x7f800000,d0    | First operand == NaN =?
  107.     bgt    3b
  108.     clrl    d0        | Test True
  109.     rts
  110.  
  111. ___ltsf2:
  112.     moveml    sp@(4),d0-d1    | get numbers to compare with
  113.     tstl    d0        | check sign bit
  114.     bpl    1f
  115.     negl    d0        | negate
  116.     bchg    #31,d0        | toggle sign bit
  117.  
  118. 1:    tstl    d1        | check sign bit
  119.     bpl    2f
  120.     negl    d1        | negate
  121.     bchg    #31,d1        | toggle sign bit
  122.  
  123. 2:    cmpl    d1,d0
  124.     blt    4f
  125. 3:    clrl    d0
  126.     rts
  127. 4:    bclr    #31,d0        
  128.     cmpl    #0x7f800000,d0    | First operand == NaN =?
  129.     bgt    3b
  130. 5:    moveql    #-1,d0        | Test True
  131.     rts
  132.  
  133.  
  134.  
  135.