home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / gnu / mntlib16.lzh / MNTLIB16 / _EXTENDS.S < prev    next >
Text File  |  1993-07-29  |  1KB  |  46 lines

  1. | single float to double 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    __extendsfdf2, ___extendsfdf2
  22.  
  23. __extendsfdf2:
  24. ___extendsfdf2:
  25.     lea    sp@(4),a0    | parameter pointer
  26.     moveml    d2-d7,sp@-    | save regs to keep norm_df happy
  27.     movel    a0@,d4        | get number
  28.     clrl    d5        | prepare double mantissa
  29.  
  30.     movew    a0@,d0        | extract exponent
  31.     movew    d0,d2        | extract sign
  32.     lsrw    #7,d0
  33.     andw    #0xff,d0    | kill sign bit (exponent is 8 bits)
  34.  
  35.     andl    #0x7fffff,d4    | remove exponent from mantissa
  36.     tstw    d0        | check for zero exponent - no leading "1"
  37.     beq    0f        | for denormalized numbers
  38.     orl    #0x800000,d4    | restore implied leading "1"
  39.     bra    1f
  40. 0:    addw    #1,d0        | "normalize" exponent
  41. 1:
  42.     addw    #BIAS8-BIAS4-3,d0    | adjust bias, account for shift
  43.     clrw    d1        | dummy rounding info
  44.  
  45.     jmp    norm_df
  46.