Home | History | Annotate | Line # | Download | only in i386
systfloat.S revision 1.1
      1  1.1  ross 
      2  1.1  ross /*
      3  1.1  ross ===============================================================================
      4  1.1  ross 
      5  1.1  ross This GNU assembler source file is part of TestFloat, Release 2a, a package
      6  1.1  ross of programs for testing the correctness of floating-point arithmetic
      7  1.1  ross complying to the IEC/IEEE Standard for Floating-Point.
      8  1.1  ross 
      9  1.1  ross Written by John R. Hauser.  More information is available through the Web
     10  1.1  ross page `http://HTTP.CS.Berkeley.EDU/~jhauser/arithmetic/TestFloat.html'.
     11  1.1  ross 
     12  1.1  ross THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort
     13  1.1  ross has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
     14  1.1  ross TIMES RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO
     15  1.1  ross PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
     16  1.1  ross AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
     17  1.1  ross 
     18  1.1  ross Derivative works are acceptable, even for commercial purposes, so long as
     19  1.1  ross (1) they include prominent notice that the work is derivative, and (2) they
     20  1.1  ross include prominent notice akin to these four paragraphs for those parts of
     21  1.1  ross this code that are retained.
     22  1.1  ross 
     23  1.1  ross ===============================================================================
     24  1.1  ross */
     25  1.1  ross 
     26  1.1  ross 	.text
     27  1.1  ross 
     28  1.1  ross /*
     29  1.1  ross -------------------------------------------------------------------------------
     30  1.1  ross -------------------------------------------------------------------------------
     31  1.1  ross */
     32  1.1  ross 	.align 2
     33  1.1  ross .globl _syst_int32_to_floatx80
     34  1.1  ross _syst_int32_to_floatx80:
     35  1.1  ross 	fildl 8(%esp)
     36  1.1  ross 	movl 4(%esp),%eax
     37  1.1  ross 	fstpt (%eax)
     38  1.1  ross 	ret $4
     39  1.1  ross 
     40  1.1  ross /*
     41  1.1  ross -------------------------------------------------------------------------------
     42  1.1  ross -------------------------------------------------------------------------------
     43  1.1  ross */
     44  1.1  ross 	.align 2
     45  1.1  ross .globl _syst_int64_to_floatx80
     46  1.1  ross _syst_int64_to_floatx80:
     47  1.1  ross 	fildq 8(%esp)
     48  1.1  ross 	movl 4(%esp),%eax
     49  1.1  ross 	fstpt (%eax)
     50  1.1  ross 	ret $4
     51  1.1  ross 
     52  1.1  ross /*
     53  1.1  ross -------------------------------------------------------------------------------
     54  1.1  ross -------------------------------------------------------------------------------
     55  1.1  ross */
     56  1.1  ross 	.align 2
     57  1.1  ross .globl _syst_float32_to_floatx80
     58  1.1  ross _syst_float32_to_floatx80:
     59  1.1  ross 	flds 8(%esp)
     60  1.1  ross 	movl 4(%esp),%eax
     61  1.1  ross 	fstpt (%eax)
     62  1.1  ross 	ret $4
     63  1.1  ross 
     64  1.1  ross /*
     65  1.1  ross -------------------------------------------------------------------------------
     66  1.1  ross -------------------------------------------------------------------------------
     67  1.1  ross */
     68  1.1  ross 	.align 2
     69  1.1  ross .globl _syst_float64_to_floatx80
     70  1.1  ross _syst_float64_to_floatx80:
     71  1.1  ross 	fldl 8(%esp)
     72  1.1  ross 	movl 4(%esp),%eax
     73  1.1  ross 	fstpt (%eax)
     74  1.1  ross 	ret $4
     75  1.1  ross 
     76  1.1  ross /*
     77  1.1  ross -------------------------------------------------------------------------------
     78  1.1  ross -------------------------------------------------------------------------------
     79  1.1  ross */
     80  1.1  ross 	.align 2
     81  1.1  ross .globl _syst_floatx80_to_int32
     82  1.1  ross _syst_floatx80_to_int32:
     83  1.1  ross 	fldt 4(%esp)
     84  1.1  ross 	subl $4,%esp
     85  1.1  ross 	fistpl (%esp)
     86  1.1  ross 	movl (%esp),%eax
     87  1.1  ross 	addl $4,%esp
     88  1.1  ross 	ret
     89  1.1  ross 
     90  1.1  ross /*
     91  1.1  ross -------------------------------------------------------------------------------
     92  1.1  ross -------------------------------------------------------------------------------
     93  1.1  ross */
     94  1.1  ross 	.align 2
     95  1.1  ross .globl _syst_floatx80_to_int64
     96  1.1  ross _syst_floatx80_to_int64:
     97  1.1  ross 	fldt 4(%esp)
     98  1.1  ross 	subl $8,%esp
     99  1.1  ross 	fistpq (%esp)
    100  1.1  ross 	movl (%esp),%eax
    101  1.1  ross 	movl 4(%esp),%edx
    102  1.1  ross 	addl $8,%esp
    103  1.1  ross 	ret
    104  1.1  ross 
    105  1.1  ross /*
    106  1.1  ross -------------------------------------------------------------------------------
    107  1.1  ross -------------------------------------------------------------------------------
    108  1.1  ross */
    109  1.1  ross 	.align 2
    110  1.1  ross .globl _syst_floatx80_to_float32
    111  1.1  ross _syst_floatx80_to_float32:
    112  1.1  ross 	fldt 4(%esp)
    113  1.1  ross 	subl $4,%esp
    114  1.1  ross 	fstps (%esp)
    115  1.1  ross 	movl (%esp),%eax
    116  1.1  ross 	addl $4,%esp
    117  1.1  ross 	ret
    118  1.1  ross 
    119  1.1  ross /*
    120  1.1  ross -------------------------------------------------------------------------------
    121  1.1  ross -------------------------------------------------------------------------------
    122  1.1  ross */
    123  1.1  ross 	.align 2
    124  1.1  ross .globl _syst_floatx80_to_float64
    125  1.1  ross _syst_floatx80_to_float64:
    126  1.1  ross 	fldt 4(%esp)
    127  1.1  ross 	subl $8,%esp
    128  1.1  ross 	fstpl (%esp)
    129  1.1  ross 	movl 4(%esp),%edx
    130  1.1  ross 	movl (%esp),%eax
    131  1.1  ross 	addl $8,%esp
    132  1.1  ross 	ret
    133  1.1  ross 
    134  1.1  ross /*
    135  1.1  ross -------------------------------------------------------------------------------
    136  1.1  ross -------------------------------------------------------------------------------
    137  1.1  ross */
    138  1.1  ross 	.align 2
    139  1.1  ross .globl _syst_floatx80_round_to_int
    140  1.1  ross _syst_floatx80_round_to_int:
    141  1.1  ross 	fldt 8(%esp)
    142  1.1  ross 	frndint
    143  1.1  ross 	movl 4(%esp),%eax
    144  1.1  ross 	fstpt (%eax)
    145  1.1  ross 	ret $4
    146  1.1  ross 
    147  1.1  ross /*
    148  1.1  ross -------------------------------------------------------------------------------
    149  1.1  ross -------------------------------------------------------------------------------
    150  1.1  ross */
    151  1.1  ross 	.align 2
    152  1.1  ross .globl _syst_floatx80_add
    153  1.1  ross _syst_floatx80_add:
    154  1.1  ross 	fldt 8(%esp)
    155  1.1  ross 	fldt 20(%esp)
    156  1.1  ross 	faddp
    157  1.1  ross 	movl 4(%esp),%eax
    158  1.1  ross 	fstpt (%eax)
    159  1.1  ross 	ret $4
    160  1.1  ross 
    161  1.1  ross /*
    162  1.1  ross -------------------------------------------------------------------------------
    163  1.1  ross -------------------------------------------------------------------------------
    164  1.1  ross */
    165  1.1  ross 	.align 2
    166  1.1  ross .globl _syst_floatx80_sub
    167  1.1  ross _syst_floatx80_sub:
    168  1.1  ross 	fldt 8(%esp)
    169  1.1  ross 	fldt 20(%esp)
    170  1.1  ross 	fsubrp
    171  1.1  ross 	movl 4(%esp),%eax
    172  1.1  ross 	fstpt (%eax)
    173  1.1  ross 	ret $4
    174  1.1  ross 
    175  1.1  ross /*
    176  1.1  ross -------------------------------------------------------------------------------
    177  1.1  ross -------------------------------------------------------------------------------
    178  1.1  ross */
    179  1.1  ross 	.align 2
    180  1.1  ross .globl _syst_floatx80_mul
    181  1.1  ross _syst_floatx80_mul:
    182  1.1  ross 	fldt 8(%esp)
    183  1.1  ross 	fldt 20(%esp)
    184  1.1  ross 	fmulp
    185  1.1  ross 	movl 4(%esp),%eax
    186  1.1  ross 	fstpt (%eax)
    187  1.1  ross 	ret $4
    188  1.1  ross 
    189  1.1  ross /*
    190  1.1  ross -------------------------------------------------------------------------------
    191  1.1  ross -------------------------------------------------------------------------------
    192  1.1  ross */
    193  1.1  ross 	.align 2
    194  1.1  ross .globl _syst_floatx80_div
    195  1.1  ross _syst_floatx80_div:
    196  1.1  ross 	fldt 8(%esp)
    197  1.1  ross 	fldt 20(%esp)
    198  1.1  ross 	fdivrp
    199  1.1  ross 	movl 4(%esp),%eax
    200  1.1  ross 	fstpt (%eax)
    201  1.1  ross 	ret $4
    202  1.1  ross 
    203  1.1  ross /*
    204  1.1  ross -------------------------------------------------------------------------------
    205  1.1  ross -------------------------------------------------------------------------------
    206  1.1  ross */
    207  1.1  ross 	.align 2
    208  1.1  ross .globl _syst_floatx80_rem
    209  1.1  ross _syst_floatx80_rem:
    210  1.1  ross 	fldt 20(%esp)
    211  1.1  ross 	fldt 8(%esp)
    212  1.1  ross floatx80_rem_loop:
    213  1.1  ross 	fprem1
    214  1.1  ross 	fnstsw %ax
    215  1.1  ross 	btw $10,%ax
    216  1.1  ross 	jc floatx80_rem_loop
    217  1.1  ross 	movl 4(%esp),%eax
    218  1.1  ross 	fstpt (%eax)
    219  1.1  ross 	fstp %st(0)
    220  1.1  ross 	ret $4
    221  1.1  ross 
    222  1.1  ross /*
    223  1.1  ross -------------------------------------------------------------------------------
    224  1.1  ross -------------------------------------------------------------------------------
    225  1.1  ross */
    226  1.1  ross 	.align 2
    227  1.1  ross .globl _syst_floatx80_sqrt
    228  1.1  ross _syst_floatx80_sqrt:
    229  1.1  ross 	fldt 8(%esp)
    230  1.1  ross 	fsqrt
    231  1.1  ross 	movl 4(%esp),%eax
    232  1.1  ross 	fstpt (%eax)
    233  1.1  ross 	ret $4
    234  1.1  ross 
    235  1.1  ross /*
    236  1.1  ross -------------------------------------------------------------------------------
    237  1.1  ross -------------------------------------------------------------------------------
    238  1.1  ross */
    239  1.1  ross 	.align 2
    240  1.1  ross .globl _syst_floatx80_eq
    241  1.1  ross _syst_floatx80_eq:
    242  1.1  ross 	fldt 16(%esp)
    243  1.1  ross 	fldt 4(%esp)
    244  1.1  ross 	fucompp
    245  1.1  ross 	fnstsw %ax
    246  1.1  ross 	andw $17664,%ax
    247  1.1  ross 	cmpw $16384,%ax
    248  1.1  ross 	seteb %al
    249  1.1  ross 	movzb %al,%eax
    250  1.1  ross 	ret
    251  1.1  ross 
    252  1.1  ross /*
    253  1.1  ross -------------------------------------------------------------------------------
    254  1.1  ross -------------------------------------------------------------------------------
    255  1.1  ross */
    256  1.1  ross 	.align 2
    257  1.1  ross .globl _syst_floatx80_le
    258  1.1  ross _syst_floatx80_le:
    259  1.1  ross 	fldt 4(%esp)
    260  1.1  ross 	fldt 16(%esp)
    261  1.1  ross 	fcompp
    262  1.1  ross 	fnstsw %ax
    263  1.1  ross 	notl %eax
    264  1.1  ross 	shrl $8,%eax
    265  1.1  ross 	andl $1,%eax
    266  1.1  ross 	ret
    267  1.1  ross 
    268  1.1  ross /*
    269  1.1  ross -------------------------------------------------------------------------------
    270  1.1  ross -------------------------------------------------------------------------------
    271  1.1  ross */
    272  1.1  ross 	.align 2
    273  1.1  ross .globl _syst_floatx80_lt
    274  1.1  ross _syst_floatx80_lt:
    275  1.1  ross 	fldt 4(%esp)
    276  1.1  ross 	fldt 16(%esp)
    277  1.1  ross 	fcompp
    278  1.1  ross 	fnstsw %ax
    279  1.1  ross 	andw $17664,%ax
    280  1.1  ross 	setzb %al
    281  1.1  ross 	movzb %al,%eax
    282  1.1  ross 	ret
    283  1.1  ross 
    284  1.1  ross /*
    285  1.1  ross -------------------------------------------------------------------------------
    286  1.1  ross -------------------------------------------------------------------------------
    287  1.1  ross */
    288  1.1  ross 	.align 2
    289  1.1  ross .globl _syst_floatx80_eq_signaling
    290  1.1  ross _syst_floatx80_eq_signaling:
    291  1.1  ross 	fldt 16(%esp)
    292  1.1  ross 	fldt 4(%esp)
    293  1.1  ross 	fcompp
    294  1.1  ross 	fnstsw %ax
    295  1.1  ross 	andw $17664,%ax
    296  1.1  ross 	cmpw $16384,%ax
    297  1.1  ross 	seteb %al
    298  1.1  ross 	movzb %al,%eax
    299  1.1  ross 	ret
    300  1.1  ross 
    301  1.1  ross /*
    302  1.1  ross -------------------------------------------------------------------------------
    303  1.1  ross -------------------------------------------------------------------------------
    304  1.1  ross */
    305  1.1  ross 	.align 2
    306  1.1  ross .globl _syst_floatx80_le_quiet
    307  1.1  ross _syst_floatx80_le_quiet:
    308  1.1  ross 	fldt 4(%esp)
    309  1.1  ross 	fldt 16(%esp)
    310  1.1  ross 	fucompp
    311  1.1  ross 	fnstsw %ax
    312  1.1  ross 	notl %eax
    313  1.1  ross 	shrl $8,%eax
    314  1.1  ross 	andl $1,%eax
    315  1.1  ross 	ret
    316  1.1  ross 
    317  1.1  ross /*
    318  1.1  ross -------------------------------------------------------------------------------
    319  1.1  ross -------------------------------------------------------------------------------
    320  1.1  ross */
    321  1.1  ross 	.align 2
    322  1.1  ross .globl _syst_floatx80_lt_quiet
    323  1.1  ross _syst_floatx80_lt_quiet:
    324  1.1  ross 	fldt 4(%esp)
    325  1.1  ross 	fldt 16(%esp)
    326  1.1  ross 	fucompp
    327  1.1  ross 	fnstsw %ax
    328  1.1  ross 	andw $17664,%ax
    329  1.1  ross 	setzb %al
    330  1.1  ross 	movzb %al,%eax
    331  1.1  ross 	ret
    332  1.1  ross 
    333