sim_fpu_2d (const sim_fpu *s)
{
sim_fpu_map val;
- val.i = pack_fpu (s, 1);
+ if (sim_fpu_is_snan (s))
+ {
+ /* gag SNaN's */
+ sim_fpu n = *s;
+ n.class = sim_fpu_class_qnan;
+ val.i = pack_fpu (&n, 1);
+ }
+ else
+ {
+ val.i = pack_fpu (s, 1);
+ }
return val.d;
}
/* A number of useful constants */
-EXTERN_SIM_FPU (const sim_fpu) sim_fpu_zero = {
+#if EXTERN_SIM_FPU_P
+const sim_fpu sim_fpu_zero = {
sim_fpu_class_zero,
};
-EXTERN_SIM_FPU (const sim_fpu) sim_fpu_qnan = {
+const sim_fpu sim_fpu_qnan = {
sim_fpu_class_qnan,
};
-EXTERN_SIM_FPU (const sim_fpu) sim_fpu_one = {
+const sim_fpu sim_fpu_one = {
sim_fpu_class_number, 0, IMPLICIT_1, 1
};
-EXTERN_SIM_FPU (const sim_fpu) sim_fpu_two = {
+const sim_fpu sim_fpu_two = {
sim_fpu_class_number, 0, IMPLICIT_1, 2
};
-EXTERN_SIM_FPU (const sim_fpu) sim_fpu_max32 = {
+const sim_fpu sim_fpu_max32 = {
sim_fpu_class_number, 0, LSMASK64 (NR_FRAC_GUARD, NR_GUARDS32), NORMAL_EXPMAX32
};
-EXTERN_SIM_FPU (const sim_fpu) sim_fpu_max64 = {
+const sim_fpu sim_fpu_max64 = {
sim_fpu_class_number, 0, LSMASK64 (NR_FRAC_GUARD, NR_GUARDS64), NORMAL_EXPMAX64
};
+#endif
/* For debugging */