return ::f32(x);
}
-sv_float64_t (sv_proc_t::f64)(sv_freg_t v)
+sv_float64_t (sv_proc_t::f64)(sv_freg_t x)
{
- return ::f64(v);
+ switch (x.get_elwidth())
+ {
+ // 8-bit
+ case 1: throw trap_illegal_instruction(0); // XXX for now
+ // 16-bit data, up-convert to f32
+ case 2:
+ {
+ sv_reg_t x64(x.to_uint64());
+ float16_t f_16 = f16(x);
+ fprintf(stderr, "f16-to-f64 %lx\n", (uint64_t)x64);
+ return f16_to_f64(f_16);
+ }
+ case 3:
+ {
+ sv_reg_t x64(x.to_uint64());
+ float32_t f_32 = f32(x);
+ fprintf(stderr, "f32-to-f64 %lx\n", (uint64_t)x64);
+ return f32_to_f64(f_32);
+ }
+ default: break;
+ }
+ return ::f64(x);
}
sv_float64_t (sv_proc_t::f64)(sv_reg_t const& v)