Lines Matching +full:ls +full:- +full:bits
1 /* SPDX-License-Identifier: GPL-2.0 */
3 /*---------------------------------------------------------------------------+
10 | Australia. E-mail billm@suburbia.net |
20 | Return value is the tag of the answer, or-ed with FPU_Exception if |
21 | one was raised, or -1 on internal error. |
26 +---------------------------------------------------------------------------*/
28 /*---------------------------------------------------------------------------+
47 | must be non-zero. |
48 | If the significand extension is non-zero then the significand is |
50 | greater than zero and less than one ls bit of the significand. |
52 | non-zero values: |
53 | less than 0x80000000 <=> the significand is less than 1/2 an ls |
56 | exactly 0x80000000 <=> the significand is exactly 1/2 an ls bit |
59 | greater than 0x80000000 <=> the significand is more than 1/2 an ls |
63 +---------------------------------------------------------------------------*/
65 /*---------------------------------------------------------------------------+
73 +---------------------------------------------------------------------------*/
90 /* Make the code re-entrant by putting
96 /* Not re-entrant, so we can gain speed by putting
138 jle L_Make_denorm /* The number is a de-normal */
140 movb $0,FPU_denormal /* 0 -> not a de-normal */
143 movb $0,FPU_bits_lost /* No bits yet lost in rounding */
157 /* With the precision control bits set to 01 "(reserved)", a real 80486
158 behaves as if the precision control bits were set to 11 "64 bits" */
184 cmpl RC_DOWN,%ecx /* Towards -infinity */
218 /* Possibly half, we need to check the ls bits */
231 andl $0xffffff00,%eax /* Truncate to 24 bits */
245 andl $0xffffff00,%eax /* Truncate to 24 bits */
264 cmpl RC_DOWN,%ecx /* Towards -infinity */
297 /* Possibly half, we need to check the ls bits */
308 andl $0xfffff800,%ebx /* Truncate to 53 bits */
321 andl $0xfffff800,%ebx /* Truncate to 53 bits */
338 cmpl RC_DOWN,%ecx /* Towards -infinity */
367 /* Now test for round-to-even */
445 * round-up.
470 * Shift the number right the required number of bits, which will
485 cmpw $64,%cx /* shrd only works for 0..31 bits */
488 cmpw $32,%cx /* shrd only works for 0..31 bits */
493 * is for a small de-normalising shift.
494 * Shift by [1..31] bits
498 setne %ch /* Save whether %edx is non-zero */
507 /* Shift by [32..63] bits */
518 orl %edx,%edx /* test these 32 bits */
528 /* Shift by [64..) bits */
550 /* This is easy, %eax must be non-zero, so.. */
563 /* Undo the de-normalisation. */
584 orl %eax,%eax /* ms bits */
587 orl %eax,%eax /* ms bits */
600 testb $0xff,FPU_bits_lost /* bits lost == underflow */
645 /* The number may have been changed to a non-denormal */
707 mov $-1,%eax