Revision 7a0e1f41 target-sparc/op_helper.c
b/target-sparc/op_helper.c | ||
---|---|---|
1 |
#include <math.h> |
|
2 |
#include <fenv.h> |
|
3 | 1 |
#include "exec.h" |
4 | 2 |
|
5 | 3 |
//#define DEBUG_MMU |
... | ... | |
24 | 22 |
|
25 | 23 |
void do_fabss(void) |
26 | 24 |
{ |
27 |
FT0 = fabsf(FT1);
|
|
25 |
FT0 = float32_abs(FT1);
|
|
28 | 26 |
} |
29 | 27 |
|
30 | 28 |
void do_fsqrts(void) |
31 | 29 |
{ |
32 |
FT0 = sqrtf(FT1);
|
|
30 |
FT0 = float32_sqrt(FT1, &env->fp_status);
|
|
33 | 31 |
} |
34 | 32 |
|
35 | 33 |
void do_fsqrtd(void) |
36 | 34 |
{ |
37 |
DT0 = sqrt(DT1);
|
|
35 |
DT0 = float64_sqrt(DT1, &env->fp_status);
|
|
38 | 36 |
} |
39 | 37 |
|
40 | 38 |
void do_fcmps (void) |
... | ... | |
252 | 250 |
|
253 | 251 |
void helper_ldfsr(void) |
254 | 252 |
{ |
253 |
int rnd_mode; |
|
255 | 254 |
switch (env->fsr & FSR_RD_MASK) { |
256 | 255 |
case FSR_RD_NEAREST: |
257 |
fesetround(FE_TONEAREST);
|
|
256 |
rnd_mode = float_round_nearest_even;
|
|
258 | 257 |
break; |
259 | 258 |
case FSR_RD_ZERO: |
260 |
fesetround(FE_TOWARDZERO);
|
|
259 |
rnd_mode = float_round_to_zero;
|
|
261 | 260 |
break; |
262 | 261 |
case FSR_RD_POS: |
263 |
fesetround(FE_UPWARD);
|
|
262 |
rnd_mode = float_round_up;
|
|
264 | 263 |
break; |
265 | 264 |
case FSR_RD_NEG: |
266 |
fesetround(FE_DOWNWARD);
|
|
265 |
rnd_mode = float_round_down;
|
|
267 | 266 |
break; |
268 | 267 |
} |
268 |
set_float_rounding_mode(rnd_mode, &env->fp_status); |
|
269 | 269 |
} |
270 | 270 |
|
271 | 271 |
void cpu_get_fp64(uint64_t *pmant, uint16_t *pexp, double f) |
Also available in: Unified diff