Revision fd728f2f
b/fpu/softfloat.c | ||
---|---|---|
6667 | 6667 |
|
6668 | 6668 |
uint32 float64_to_uint32_round_to_zero( float64 a STATUS_PARAM ) |
6669 | 6669 |
{ |
6670 |
int64_t v; |
|
6670 |
uint64_t v;
|
|
6671 | 6671 |
uint32 res; |
6672 |
int old_exc_flags = get_float_exception_flags(status); |
|
6672 | 6673 |
|
6673 |
v = float64_to_int64_round_to_zero(a STATUS_VAR); |
|
6674 |
if (v < 0) { |
|
6675 |
res = 0; |
|
6676 |
float_raise( float_flag_invalid STATUS_VAR); |
|
6677 |
} else if (v > 0xffffffff) { |
|
6674 |
v = float64_to_uint64_round_to_zero(a STATUS_VAR); |
|
6675 |
if (v > 0xffffffff) { |
|
6678 | 6676 |
res = 0xffffffff; |
6679 |
float_raise( float_flag_invalid STATUS_VAR); |
|
6680 | 6677 |
} else { |
6681 |
res = v;
|
|
6678 |
return v;
|
|
6682 | 6679 |
} |
6680 |
set_float_exception_flags(old_exc_flags, status); |
|
6681 |
float_raise(float_flag_invalid STATUS_VAR); |
|
6683 | 6682 |
return res; |
6684 | 6683 |
} |
6685 | 6684 |
|
Also available in: Unified diff