home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / gnu / mntlib16 / _truncdf.s < prev    next >
Encoding:
Text File  |  1993-07-29  |  1.3 KB  |  57 lines

  1. | double float to single float conversion routine
  2. |
  3. | written by Kai-Uwe Bloem (I5110401@dbstu1.bitnet).
  4. | Based on a 80x86 floating point packet from comp.os.minix, written by P.Housel
  5. |
  6. |
  7. | Revision 1.2, kub 01-90 :
  8. | added support for denormalized numbers
  9. |
  10. | Revision 1.1, kub 12-89 :
  11. | Ported over to 68k assembler
  12. |
  13. | Revision 1.0:
  14. | original 8088 code from P.S.Housel
  15.  
  16. BIAS4    =    0x7F-1
  17. BIAS8    =    0x3FF-1
  18.  
  19.     .text
  20.     .even
  21.     .globl    __truncdfsf2, ___truncdfsf2
  22.  
  23. __truncdfsf2:
  24. ___truncdfsf2:
  25.     lea    sp@(4),a0    | parameter pointer
  26.     moveml    d2-d5,sp@-    | save regs
  27.     moveml    a0@,d4-d5    | get number
  28.  
  29.     movew    a0@,d0        | extract exponent
  30.     movew    d0,d2        | extract sign
  31.     lsrw    #4,d0
  32.     andw    #0x7ff,d0    | kill sign bit
  33.  
  34.     andl    #0x0fffff,d4    | remove exponent from mantissa
  35.     tstw    d0        | check for zero exponent - no leading "1"
  36.     beq    0f        | for denormalized numbers
  37.     orl    #0x100000,d4    | restore implied leading "1"
  38.     bra    1f
  39. 0:    addw    #1,d0        | "normalize" exponent
  40. 1:
  41.     addw    #BIAS4-BIAS8,d0    | adjust bias
  42.  
  43.     addl    d5,d5        | shift up to realign mantissa for floats
  44.     addxl    d4,d4
  45.     addl    d5,d5
  46.     addxl    d4,d4
  47.     addl    d5,d5
  48.     addxl    d4,d4
  49.  
  50.     movel    d5,d1        | set rounding bits
  51.     roll    #8,d1
  52.     andl    #0x00ffffff,d5    | check to see if sticky bit should be set
  53.     beq    2f
  54.     orb    #1,d1        | set sticky bit
  55. 2:
  56.     jmp    norm_sf        | (leave regs on stack for norm_sf)
  57.