home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1993 #1 / NN_1993_1.iso / spool / comp / unix / bsd / 11074 / fixunsdfsi.S < prev   
Encoding:
Text File  |  1993-01-09  |  880 b   |  51 lines

  1.     .file    "__fixdfsi.s"
  2. .text
  3.     .align 2
  4. .globl ___fixunsdfsi
  5. ___fixunsdfsi:
  6.     pushl    %ebp
  7.     movl    %esp,%ebp
  8.     subl    $12,%esp
  9.     fstcw    -4(%ebp)  
  10.     movw    -4(%ebp),%ax
  11.     orw    $0x0c00,%ax  
  12.     movw    %ax,-2(%ebp) 
  13.     fldcw    -2(%ebp)     
  14.     fldl    8(%ebp)
  15.  
  16.     fcoml    fbiggestsigned    /* bigger than biggest signed? */
  17.     fstsw    %ax
  18.     sahf
  19.     jnb    1f
  20.     
  21.     fistpl    -12(%ebp)    
  22.     movl    -12(%ebp),%eax
  23.     jmp    2f
  24.  
  25. 1:    fsubl    fbiggestsigned    /* reduce for proper conversion */
  26.     fistpl    -12(%ebp)        /* convert */
  27.     movl    -12(%ebp),%eax
  28.     orl    $0x80000000,%eax    /* restore bias */
  29.  
  30. 2:    fldcw    -4(%ebp)     
  31.     leave
  32.     ret
  33.  
  34.     fcoml    fbiggestsigned    /* bigger than biggest signed? */
  35.     fstsw    %ax
  36.     sahf
  37.     jnb    1f
  38.     
  39.     fistpl    4(%esp)
  40.     movl    4(%esp),%eax
  41.     ret
  42.  
  43. 1:    fsubl    fbiggestsigned    /* reduce for proper conversion */
  44.     fistpl    4(%esp)        /* convert */
  45.     movl    4(%esp),%eax
  46.     orl    $0x80000000,%eax    /* restore bias */
  47.     ret
  48.  
  49.     .data
  50. fbiggestsigned:    .double    0r2147483648.0
  51.