home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / mint / mntlib18 / _floatsi.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1993-08-03  |  2.0 KB  |  105 lines

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