Revision 6aae3df1 target-arm/helper.c
b/target-arm/helper.c | ||
---|---|---|
2708 | 2708 |
} |
2709 | 2709 |
|
2710 | 2710 |
#define float32_two make_float32(0x40000000) |
2711 |
#define float32_three make_float32(0x40400000) |
|
2712 |
#define float32_one_point_five make_float32(0x3fc00000) |
|
2711 | 2713 |
|
2712 | 2714 |
float32 HELPER(recps_f32)(float32 a, float32 b, CPUState *env) |
2713 | 2715 |
{ |
... | ... | |
2722 | 2724 |
float32 HELPER(rsqrts_f32)(float32 a, float32 b, CPUState *env) |
2723 | 2725 |
{ |
2724 | 2726 |
float_status *s = &env->vfp.standard_fp_status; |
2725 |
float32 two = int32_to_float32(2, s); |
|
2726 |
float32 three = int32_to_float32(3, s); |
|
2727 | 2727 |
float32 product; |
2728 | 2728 |
if ((float32_is_infinity(a) && float32_is_zero_or_denormal(b)) || |
2729 | 2729 |
(float32_is_infinity(b) && float32_is_zero_or_denormal(a))) { |
2730 |
product = float32_zero; |
|
2731 |
} else { |
|
2732 |
product = float32_mul(a, b, s); |
|
2730 |
return float32_one_point_five; |
|
2733 | 2731 |
} |
2734 |
return float32_div(float32_sub(three, product, s), two, s); |
|
2732 |
product = float32_mul(a, b, s); |
|
2733 |
return float32_div(float32_sub(float32_three, product, s), float32_two, s); |
|
2735 | 2734 |
} |
2736 | 2735 |
|
2737 | 2736 |
/* NEON helpers. */ |
Also available in: Unified diff