home *** CD-ROM | disk | FTP | other *** search
/ Atari FTP / ATARI_FTP_0693.zip / ATARI_FTP_0693 / Mint / mntlib32.zoo / _fltsi.cpp < prev    next >
Text File  |  1993-06-17  |  2KB  |  87 lines

  1. |
  2. | long integer to double float conversion routine
  3. |
  4.     .text
  5.     .even
  6.     .globl    __floatsidf, ___floatsidf
  7.  
  8. __floatsidf:
  9. ___floatsidf:
  10. #ifdef __M68881__
  11. |
  12. | Written by M.Ritzert
  13. | 22.11.91
  14. | ritzert@dfg.dbp.de
  15. |
  16.     fintrzd a7@(4),fp0        | load long int to fp0
  17.     fmoved    fp0,a7@-        | get double from fp0
  18.     moveml    a7@+,d0-d1
  19.      rts
  20.  
  21. #endif    __M68881__
  22. #ifdef    sfp004
  23. |
  24. | Written by M.Ritzert
  25. | 5.10.90
  26. | ritzert@dfg.dbp.de
  27. |
  28.  
  29. | addresses of the 68881 data port. This choice is fastest when much data is
  30. | transferred between the two processors.
  31.  
  32. comm =     -6    |    fpu command reg
  33. resp =    -16    |    fpu response reg
  34. zahl =      0    |    fpu data reg
  35.  
  36. | waiting loop ...
  37. |
  38. | wait:
  39. | ww:    cmpiw    #0x8900,a1@(resp)
  40. |     beq    ww
  41. | is coded directly by
  42. |    .long    0x0c688900, 0xfff067f8
  43.  
  44.     lea    0xfffffa50:w,a0
  45.     movew    #0x4000,a0@(comm)    | load long int to fp0
  46.     cmpiw    #0x8900,a0@(resp)    | check
  47.     movel    a7@(4),a0@
  48.     movew    #0x7400,a0@(comm)    | get double from fp0
  49.     .long    0x0c688900, 0xfff067f8
  50.     movel    a0@,d0
  51.     movel    a0@,d1
  52.     rts
  53.  
  54. #endif    sfp004
  55. #if !defined    (__M68881__) && !defined (sfp004)
  56. |
  57. | written by Kai-Uwe Bloem (I5110401@dbstu1.bitnet).
  58. | Based on a 80x86 floating point packet from comp.os.minix, written by P.Housel
  59. |
  60. | Revision 1.2, kub 01-90 :
  61. | added support for denormalized numbers
  62. |
  63. | Revision 1.1, kub 12-89 :
  64. | Ported over to 68k assembler
  65. |
  66. | Revision 1.0:
  67. | original 8088 code from P.S.Housel
  68.  
  69. BIAS8    =    0x3FF-1
  70.  
  71.     movel    sp@(4),d0    | get the 4-byte integer
  72.     moveml    d2-d7,sp@-    | save registers to make norm_df happy
  73.  
  74.     movel    d0,d4        | prepare result mantissa
  75.     moveq    #0,d5
  76.     movew    #BIAS8+32-11,d0    | radix point after 32 bits
  77. 0:
  78.     movel    d4,d2        | set sign flag
  79.     bge    1f        | nonnegative
  80.     negl    d4        | take absolute value
  81. 1:
  82.     swap    d2        | follow norm_df conventions
  83.     clrw    d1        | set rounding = 0
  84.     jmp    norm_df
  85.  
  86. #endif    /* !__M68881__ && !sfp004    */
  87.