Lines Matching full:env

47 static void check_ieee_exceptions(CPUSPARCState *env, uintptr_t ra)  in check_ieee_exceptions()  argument
49 target_ulong status = get_float_exception_flags(&env->fp_status); in check_ieee_exceptions()
54 set_float_exception_flags(0, &env->fp_status); in check_ieee_exceptions()
73 if (cexc & (env->fsr >> FSR_TEM_SHIFT)) { in check_ieee_exceptions()
75 env->fsr_cexc_ftt = cexc | FSR_FTT_IEEE_EXCP; in check_ieee_exceptions()
76 cpu_raise_exception_ra(env, TT_FP_EXCP, ra); in check_ieee_exceptions()
80 env->fsr |= cexc << FSR_AEXC_SHIFT; in check_ieee_exceptions()
84 env->fsr_cexc_ftt = cexc; in check_ieee_exceptions()
87 float32 helper_fadds(CPUSPARCState *env, float32 src1, float32 src2) in helper_fadds() argument
89 float32 ret = float32_add(src1, src2, &env->fp_status); in helper_fadds()
90 check_ieee_exceptions(env, GETPC()); in helper_fadds()
94 float32 helper_fsubs(CPUSPARCState *env, float32 src1, float32 src2) in helper_fsubs() argument
96 float32 ret = float32_sub(src1, src2, &env->fp_status); in helper_fsubs()
97 check_ieee_exceptions(env, GETPC()); in helper_fsubs()
101 float32 helper_fmuls(CPUSPARCState *env, float32 src1, float32 src2) in helper_fmuls() argument
103 float32 ret = float32_mul(src1, src2, &env->fp_status); in helper_fmuls()
104 check_ieee_exceptions(env, GETPC()); in helper_fmuls()
108 float32 helper_fdivs(CPUSPARCState *env, float32 src1, float32 src2) in helper_fdivs() argument
110 float32 ret = float32_div(src1, src2, &env->fp_status); in helper_fdivs()
111 check_ieee_exceptions(env, GETPC()); in helper_fdivs()
115 float64 helper_faddd(CPUSPARCState *env, float64 src1, float64 src2) in helper_faddd() argument
117 float64 ret = float64_add(src1, src2, &env->fp_status); in helper_faddd()
118 check_ieee_exceptions(env, GETPC()); in helper_faddd()
122 float64 helper_fsubd(CPUSPARCState *env, float64 src1, float64 src2) in helper_fsubd() argument
124 float64 ret = float64_sub(src1, src2, &env->fp_status); in helper_fsubd()
125 check_ieee_exceptions(env, GETPC()); in helper_fsubd()
129 float64 helper_fmuld(CPUSPARCState *env, float64 src1, float64 src2) in helper_fmuld() argument
131 float64 ret = float64_mul(src1, src2, &env->fp_status); in helper_fmuld()
132 check_ieee_exceptions(env, GETPC()); in helper_fmuld()
136 float64 helper_fdivd(CPUSPARCState *env, float64 src1, float64 src2) in helper_fdivd() argument
138 float64 ret = float64_div(src1, src2, &env->fp_status); in helper_fdivd()
139 check_ieee_exceptions(env, GETPC()); in helper_fdivd()
143 Int128 helper_faddq(CPUSPARCState *env, Int128 src1, Int128 src2) in helper_faddq() argument
145 float128 ret = float128_add(f128_in(src1), f128_in(src2), &env->fp_status); in helper_faddq()
146 check_ieee_exceptions(env, GETPC()); in helper_faddq()
150 Int128 helper_fsubq(CPUSPARCState *env, Int128 src1, Int128 src2) in helper_fsubq() argument
152 float128 ret = float128_sub(f128_in(src1), f128_in(src2), &env->fp_status); in helper_fsubq()
153 check_ieee_exceptions(env, GETPC()); in helper_fsubq()
157 Int128 helper_fmulq(CPUSPARCState *env, Int128 src1, Int128 src2) in helper_fmulq() argument
159 float128 ret = float128_mul(f128_in(src1), f128_in(src2), &env->fp_status); in helper_fmulq()
160 check_ieee_exceptions(env, GETPC()); in helper_fmulq()
164 Int128 helper_fdivq(CPUSPARCState *env, Int128 src1, Int128 src2) in helper_fdivq() argument
166 float128 ret = float128_div(f128_in(src1), f128_in(src2), &env->fp_status); in helper_fdivq()
167 check_ieee_exceptions(env, GETPC()); in helper_fdivq()
171 float64 helper_fsmuld(CPUSPARCState *env, float32 src1, float32 src2) in helper_fsmuld() argument
173 float64 ret = float64_mul(float32_to_float64(src1, &env->fp_status), in helper_fsmuld()
174 float32_to_float64(src2, &env->fp_status), in helper_fsmuld()
175 &env->fp_status); in helper_fsmuld()
176 check_ieee_exceptions(env, GETPC()); in helper_fsmuld()
180 Int128 helper_fdmulq(CPUSPARCState *env, float64 src1, float64 src2) in helper_fdmulq() argument
182 float128 ret = float128_mul(float64_to_float128(src1, &env->fp_status), in helper_fdmulq()
183 float64_to_float128(src2, &env->fp_status), in helper_fdmulq()
184 &env->fp_status); in helper_fdmulq()
185 check_ieee_exceptions(env, GETPC()); in helper_fdmulq()
190 float32 helper_fitos(CPUSPARCState *env, int32_t src) in helper_fitos() argument
192 float32 ret = int32_to_float32(src, &env->fp_status); in helper_fitos()
193 check_ieee_exceptions(env, GETPC()); in helper_fitos()
197 float64 helper_fitod(CPUSPARCState *env, int32_t src) in helper_fitod() argument
199 float64 ret = int32_to_float64(src, &env->fp_status); in helper_fitod()
200 check_ieee_exceptions(env, GETPC()); in helper_fitod()
204 Int128 helper_fitoq(CPUSPARCState *env, int32_t src) in helper_fitoq() argument
206 float128 ret = int32_to_float128(src, &env->fp_status); in helper_fitoq()
207 check_ieee_exceptions(env, GETPC()); in helper_fitoq()
212 float32 helper_fxtos(CPUSPARCState *env, int64_t src) in helper_fxtos() argument
214 float32 ret = int64_to_float32(src, &env->fp_status); in helper_fxtos()
215 check_ieee_exceptions(env, GETPC()); in helper_fxtos()
219 float64 helper_fxtod(CPUSPARCState *env, int64_t src) in helper_fxtod() argument
221 float64 ret = int64_to_float64(src, &env->fp_status); in helper_fxtod()
222 check_ieee_exceptions(env, GETPC()); in helper_fxtod()
226 Int128 helper_fxtoq(CPUSPARCState *env, int64_t src) in helper_fxtoq() argument
228 float128 ret = int64_to_float128(src, &env->fp_status); in helper_fxtoq()
229 check_ieee_exceptions(env, GETPC()); in helper_fxtoq()
235 float32 helper_fdtos(CPUSPARCState *env, float64 src) in helper_fdtos() argument
237 float32 ret = float64_to_float32(src, &env->fp_status); in helper_fdtos()
238 check_ieee_exceptions(env, GETPC()); in helper_fdtos()
242 float64 helper_fstod(CPUSPARCState *env, float32 src) in helper_fstod() argument
244 float64 ret = float32_to_float64(src, &env->fp_status); in helper_fstod()
245 check_ieee_exceptions(env, GETPC()); in helper_fstod()
249 float32 helper_fqtos(CPUSPARCState *env, Int128 src) in helper_fqtos() argument
251 float32 ret = float128_to_float32(f128_in(src), &env->fp_status); in helper_fqtos()
252 check_ieee_exceptions(env, GETPC()); in helper_fqtos()
256 Int128 helper_fstoq(CPUSPARCState *env, float32 src) in helper_fstoq() argument
258 float128 ret = float32_to_float128(src, &env->fp_status); in helper_fstoq()
259 check_ieee_exceptions(env, GETPC()); in helper_fstoq()
263 float64 helper_fqtod(CPUSPARCState *env, Int128 src) in helper_fqtod() argument
265 float64 ret = float128_to_float64(f128_in(src), &env->fp_status); in helper_fqtod()
266 check_ieee_exceptions(env, GETPC()); in helper_fqtod()
270 Int128 helper_fdtoq(CPUSPARCState *env, float64 src) in helper_fdtoq() argument
272 float128 ret = float64_to_float128(src, &env->fp_status); in helper_fdtoq()
273 check_ieee_exceptions(env, GETPC()); in helper_fdtoq()
278 int32_t helper_fstoi(CPUSPARCState *env, float32 src) in helper_fstoi() argument
280 int32_t ret = float32_to_int32_round_to_zero(src, &env->fp_status); in helper_fstoi()
281 check_ieee_exceptions(env, GETPC()); in helper_fstoi()
285 int32_t helper_fdtoi(CPUSPARCState *env, float64 src) in helper_fdtoi() argument
287 int32_t ret = float64_to_int32_round_to_zero(src, &env->fp_status); in helper_fdtoi()
288 check_ieee_exceptions(env, GETPC()); in helper_fdtoi()
292 int32_t helper_fqtoi(CPUSPARCState *env, Int128 src) in helper_fqtoi() argument
295 &env->fp_status); in helper_fqtoi()
296 check_ieee_exceptions(env, GETPC()); in helper_fqtoi()
301 int64_t helper_fstox(CPUSPARCState *env, float32 src) in helper_fstox() argument
303 int64_t ret = float32_to_int64_round_to_zero(src, &env->fp_status); in helper_fstox()
304 check_ieee_exceptions(env, GETPC()); in helper_fstox()
308 int64_t helper_fdtox(CPUSPARCState *env, float64 src) in helper_fdtox() argument
310 int64_t ret = float64_to_int64_round_to_zero(src, &env->fp_status); in helper_fdtox()
311 check_ieee_exceptions(env, GETPC()); in helper_fdtox()
315 int64_t helper_fqtox(CPUSPARCState *env, Int128 src) in helper_fqtox() argument
318 &env->fp_status); in helper_fqtox()
319 check_ieee_exceptions(env, GETPC()); in helper_fqtox()
324 float32 helper_fsqrts(CPUSPARCState *env, float32 src) in helper_fsqrts() argument
326 float32 ret = float32_sqrt(src, &env->fp_status); in helper_fsqrts()
327 check_ieee_exceptions(env, GETPC()); in helper_fsqrts()
331 float64 helper_fsqrtd(CPUSPARCState *env, float64 src) in helper_fsqrtd() argument
333 float64 ret = float64_sqrt(src, &env->fp_status); in helper_fsqrtd()
334 check_ieee_exceptions(env, GETPC()); in helper_fsqrtd()
338 Int128 helper_fsqrtq(CPUSPARCState *env, Int128 src) in helper_fsqrtq() argument
340 float128 ret = float128_sqrt(f128_in(src), &env->fp_status); in helper_fsqrtq()
341 check_ieee_exceptions(env, GETPC()); in helper_fsqrtq()
345 float32 helper_fmadds(CPUSPARCState *env, float32 s1, in helper_fmadds() argument
348 float32 ret = float32_muladd_scalbn(s1, s2, s3, sc, op, &env->fp_status); in helper_fmadds()
349 check_ieee_exceptions(env, GETPC()); in helper_fmadds()
353 float64 helper_fmaddd(CPUSPARCState *env, float64 s1, in helper_fmaddd() argument
356 float64 ret = float64_muladd_scalbn(s1, s2, s3, sc, op, &env->fp_status); in helper_fmaddd()
357 check_ieee_exceptions(env, GETPC()); in helper_fmaddd()
361 float32 helper_fnadds(CPUSPARCState *env, float32 src1, float32 src2) in helper_fnadds() argument
363 float32 ret = float32_add(src1, src2, &env->fp_status); in helper_fnadds()
372 check_ieee_exceptions(env, GETPC()); in helper_fnadds()
376 float32 helper_fnmuls(CPUSPARCState *env, float32 src1, float32 src2) in helper_fnmuls() argument
378 float32 ret = float32_mul(src1, src2, &env->fp_status); in helper_fnmuls()
384 check_ieee_exceptions(env, GETPC()); in helper_fnmuls()
388 float64 helper_fnaddd(CPUSPARCState *env, float64 src1, float64 src2) in helper_fnaddd() argument
390 float64 ret = float64_add(src1, src2, &env->fp_status); in helper_fnaddd()
399 check_ieee_exceptions(env, GETPC()); in helper_fnaddd()
403 float64 helper_fnmuld(CPUSPARCState *env, float64 src1, float64 src2) in helper_fnmuld() argument
405 float64 ret = float64_mul(src1, src2, &env->fp_status); in helper_fnmuld()
411 check_ieee_exceptions(env, GETPC()); in helper_fnmuld()
415 float64 helper_fnsmuld(CPUSPARCState *env, float32 src1, float32 src2) in helper_fnsmuld() argument
417 float64 ret = float64_mul(float32_to_float64(src1, &env->fp_status), in helper_fnsmuld()
418 float32_to_float64(src2, &env->fp_status), in helper_fnsmuld()
419 &env->fp_status); in helper_fnsmuld()
425 check_ieee_exceptions(env, GETPC()); in helper_fnsmuld()
429 static uint32_t finish_fcmp(CPUSPARCState *env, FloatRelation r, uintptr_t ra) in finish_fcmp() argument
431 check_ieee_exceptions(env, ra); in finish_fcmp()
453 uint32_t helper_fcmps(CPUSPARCState *env, float32 src1, float32 src2) in helper_fcmps() argument
455 FloatRelation r = float32_compare_quiet(src1, src2, &env->fp_status); in helper_fcmps()
456 return finish_fcmp(env, r, GETPC()); in helper_fcmps()
459 uint32_t helper_fcmpes(CPUSPARCState *env, float32 src1, float32 src2) in helper_fcmpes() argument
461 FloatRelation r = float32_compare(src1, src2, &env->fp_status); in helper_fcmpes()
462 return finish_fcmp(env, r, GETPC()); in helper_fcmpes()
465 uint32_t helper_fcmpd(CPUSPARCState *env, float64 src1, float64 src2) in helper_fcmpd() argument
467 FloatRelation r = float64_compare_quiet(src1, src2, &env->fp_status); in helper_fcmpd()
468 return finish_fcmp(env, r, GETPC()); in helper_fcmpd()
471 uint32_t helper_fcmped(CPUSPARCState *env, float64 src1, float64 src2) in helper_fcmped() argument
473 FloatRelation r = float64_compare(src1, src2, &env->fp_status); in helper_fcmped()
474 return finish_fcmp(env, r, GETPC()); in helper_fcmped()
477 uint32_t helper_fcmpq(CPUSPARCState *env, Int128 src1, Int128 src2) in helper_fcmpq() argument
480 &env->fp_status); in helper_fcmpq()
481 return finish_fcmp(env, r, GETPC()); in helper_fcmpq()
484 uint32_t helper_fcmpeq(CPUSPARCState *env, Int128 src1, Int128 src2) in helper_fcmpeq() argument
487 &env->fp_status); in helper_fcmpeq()
488 return finish_fcmp(env, r, GETPC()); in helper_fcmpeq()
491 uint32_t helper_flcmps(CPUSPARCState *env, float32 src1, float32 src2) in helper_flcmps() argument
497 float_status discard = env->fp_status; in helper_flcmps()
519 uint32_t helper_flcmpd(CPUSPARCState *env, float64 src1, float64 src2) in helper_flcmpd() argument
521 float_status discard = env->fp_status; in helper_flcmpd()
543 target_ulong cpu_get_fsr(CPUSPARCState *env) in cpu_get_fsr() argument
545 target_ulong fsr = env->fsr | env->fsr_cexc_ftt; in cpu_get_fsr()
547 fsr |= env->fcc[0] << FSR_FCC0_SHIFT; in cpu_get_fsr()
549 fsr |= (uint64_t)env->fcc[1] << FSR_FCC1_SHIFT; in cpu_get_fsr()
550 fsr |= (uint64_t)env->fcc[2] << FSR_FCC2_SHIFT; in cpu_get_fsr()
551 fsr |= (uint64_t)env->fcc[3] << FSR_FCC3_SHIFT; in cpu_get_fsr()
553 fsr |= env->fsr_qne; in cpu_get_fsr()
557 fsr |= env->def.fpu_version; in cpu_get_fsr()
562 target_ulong helper_get_fsr(CPUSPARCState *env) in helper_get_fsr() argument
564 return cpu_get_fsr(env); in helper_get_fsr()
567 static void set_fsr_nonsplit(CPUSPARCState *env, target_ulong fsr) in set_fsr_nonsplit() argument
571 env->fsr = fsr & (FSR_RD_MASK | FSR_TEM_MASK | FSR_AEXC_MASK); in set_fsr_nonsplit()
588 set_float_rounding_mode(rnd_mode, &env->fp_status); in set_fsr_nonsplit()
591 void cpu_put_fsr(CPUSPARCState *env, target_ulong fsr) in cpu_put_fsr() argument
593 env->fsr_cexc_ftt = fsr & (FSR_CEXC_MASK | FSR_FTT_MASK); in cpu_put_fsr()
595 env->fcc[0] = extract32(fsr, FSR_FCC0_SHIFT, 2); in cpu_put_fsr()
597 env->fcc[1] = extract64(fsr, FSR_FCC1_SHIFT, 2); in cpu_put_fsr()
598 env->fcc[2] = extract64(fsr, FSR_FCC2_SHIFT, 2); in cpu_put_fsr()
599 env->fcc[3] = extract64(fsr, FSR_FCC3_SHIFT, 2); in cpu_put_fsr()
601 env->fsr_qne = fsr & FSR_QNE; in cpu_put_fsr()
604 set_fsr_nonsplit(env, fsr); in cpu_put_fsr()
607 void helper_set_fsr_nofcc_noftt(CPUSPARCState *env, uint32_t fsr) in helper_set_fsr_nofcc_noftt() argument
609 env->fsr_cexc_ftt &= FSR_FTT_MASK; in helper_set_fsr_nofcc_noftt()
610 env->fsr_cexc_ftt |= fsr & FSR_CEXC_MASK; in helper_set_fsr_nofcc_noftt()
611 set_fsr_nonsplit(env, fsr); in helper_set_fsr_nofcc_noftt()
614 void helper_set_fsr_nofcc(CPUSPARCState *env, uint32_t fsr) in helper_set_fsr_nofcc() argument
616 env->fsr_cexc_ftt = fsr & (FSR_CEXC_MASK | FSR_FTT_MASK); in helper_set_fsr_nofcc()
617 set_fsr_nonsplit(env, fsr); in helper_set_fsr_nofcc()