removes conversion functions in favor of more explicit conversions
This commit is contained in:
parent
0e35a2a8c9
commit
cd3ec0b79d
File diff suppressed because it is too large
Load Diff
@ -39,6 +39,7 @@
|
||||
|
||||
extern "C" {
|
||||
uint32_t fget_flags();
|
||||
|
||||
// half precision
|
||||
uint16_t fadd_h(uint16_t v1, uint16_t v2, uint8_t mode);
|
||||
uint16_t fsub_h(uint16_t v1, uint16_t v2, uint8_t mode);
|
||||
@ -46,7 +47,6 @@ uint16_t fmul_h(uint16_t v1, uint16_t v2, uint8_t mode);
|
||||
uint16_t fdiv_h(uint16_t v1, uint16_t v2, uint8_t mode);
|
||||
uint16_t fsqrt_h(uint16_t v1, uint8_t mode);
|
||||
uint16_t fcmp_h(uint16_t v1, uint16_t v2, uint16_t op);
|
||||
uint16_t fcvt_h(uint16_t v1, uint16_t op, uint8_t mode);
|
||||
uint16_t fmadd_h(uint16_t v1, uint16_t v2, uint16_t v3, uint16_t op, uint8_t mode);
|
||||
uint16_t fsel_h(uint16_t v1, uint16_t v2, uint16_t op);
|
||||
uint16_t fsqrt_h(uint16_t v1, uint8_t mode);
|
||||
@ -62,13 +62,12 @@ uint32_t fmul_s(uint32_t v1, uint32_t v2, uint8_t mode);
|
||||
uint32_t fdiv_s(uint32_t v1, uint32_t v2, uint8_t mode);
|
||||
uint32_t fsqrt_s(uint32_t v1, uint8_t mode);
|
||||
uint32_t fcmp_s(uint32_t v1, uint32_t v2, uint32_t op);
|
||||
uint32_t fcvt_s(uint32_t v1, uint32_t op, uint8_t mode);
|
||||
uint32_t fmadd_s(uint32_t v1, uint32_t v2, uint32_t v3, uint32_t op, uint8_t mode);
|
||||
uint32_t fsel_s(uint32_t v1, uint32_t v2, uint32_t op);
|
||||
uint32_t fclass_s(uint32_t v1);
|
||||
uint32_t frsqrt7_s(uint32_t v);
|
||||
uint32_t frec7_s(uint32_t v, uint8_t mode);
|
||||
uint32_t unbox_s(uint64_t v);
|
||||
uint32_t unbox_s(uint8_t FLEN, uint64_t v);
|
||||
|
||||
// double precision
|
||||
uint64_t fadd_d(uint64_t v1, uint64_t v2, uint8_t mode);
|
||||
@ -77,43 +76,51 @@ uint64_t fmul_d(uint64_t v1, uint64_t v2, uint8_t mode);
|
||||
uint64_t fdiv_d(uint64_t v1, uint64_t v2, uint8_t mode);
|
||||
uint64_t fsqrt_d(uint64_t v1, uint8_t mode);
|
||||
uint64_t fcmp_d(uint64_t v1, uint64_t v2, uint32_t op);
|
||||
uint64_t fcvt_d(uint64_t v1, uint32_t op, uint8_t mode);
|
||||
uint64_t fmadd_d(uint64_t v1, uint64_t v2, uint64_t v3, uint32_t op, uint8_t mode);
|
||||
uint64_t fsel_d(uint64_t v1, uint64_t v2, uint32_t op);
|
||||
uint64_t fclass_d(uint64_t v1);
|
||||
uint64_t frsqrt7_d(uint64_t v);
|
||||
uint64_t frec7_d(uint64_t v, uint8_t mode);
|
||||
|
||||
// conversions
|
||||
uint32_t fconv_d2f(uint64_t v1, uint8_t mode);
|
||||
uint64_t fconv_f2d(uint32_t v1, uint8_t mode);
|
||||
uint64_t fcvt_32_64(uint32_t v1, uint32_t op, uint8_t mode);
|
||||
uint32_t fcvt_64_32(uint64_t v1, uint32_t op, uint8_t mode);
|
||||
uint64_t unbox_d(uint8_t FLEN, uint64_t v);
|
||||
|
||||
// conversion: float to float
|
||||
uint32_t f16tof32(uint16_t val, uint8_t rm);
|
||||
uint64_t f16tof64(uint16_t val, uint8_t rm);
|
||||
|
||||
uint16_t f32tof16(uint32_t val, uint8_t rm);
|
||||
uint64_t f32tof64(uint32_t val, uint8_t rm);
|
||||
|
||||
uint16_t f64tof16(uint64_t val, uint8_t rm);
|
||||
uint32_t f64tof32(uint64_t val, uint8_t rm);
|
||||
|
||||
// conversions: float to unsigned
|
||||
uint32_t f16toui32(uint16_t v, uint8_t rm);
|
||||
uint64_t f16toui64(uint16_t v, uint8_t rm);
|
||||
uint32_t f32toui32(uint32_t v, uint8_t rm);
|
||||
uint64_t f32toui64(uint32_t v, uint8_t rm);
|
||||
uint32_t f64toui32(uint64_t v, uint8_t rm);
|
||||
uint64_t f64toui64(uint64_t v, uint8_t rm);
|
||||
|
||||
// conversions: float to signed
|
||||
uint32_t f16toi32(uint16_t v, uint8_t rm);
|
||||
uint64_t f16toi64(uint16_t v, uint8_t rm);
|
||||
uint32_t f32toi32(uint32_t v, uint8_t rm);
|
||||
uint64_t f32toi64(uint32_t v, uint8_t rm);
|
||||
uint32_t f64toi32(uint64_t v, uint8_t rm);
|
||||
uint64_t f64toi64(uint64_t v, uint8_t rm);
|
||||
|
||||
// conversions: unsigned to float
|
||||
uint16_t ui32tof16(uint32_t v, uint8_t rm);
|
||||
uint16_t ui64tof16(uint64_t v, uint8_t rm);
|
||||
uint32_t ui32tof32(uint32_t v, uint8_t rm);
|
||||
uint32_t ui64tof32(uint64_t v, uint8_t rm);
|
||||
uint64_t ui32tof64(uint32_t v, uint8_t rm);
|
||||
uint64_t ui64tof64(uint64_t v, uint8_t rm);
|
||||
|
||||
// conversions: signed to float
|
||||
uint16_t i32tof16(uint32_t v, uint8_t rm);
|
||||
uint16_t i64tof16(uint64_t v, uint8_t rm);
|
||||
uint32_t i32tof32(uint32_t v, uint8_t rm);
|
||||
uint32_t i64tof32(uint64_t v, uint8_t rm);
|
||||
uint64_t i32tof64(uint32_t v, uint8_t rm);
|
||||
uint64_t i64tof64(uint64_t v, uint8_t rm);
|
||||
}
|
||||
#endif /* _VM_FP_FUNCTIONS_H_ */
|
||||
|
@ -1329,69 +1329,21 @@ template <typename dest_elem_size_t, typename src_elem_size_t> dest_elem_size_t
|
||||
template <typename dest_elem_size_t, typename src_elem_size_t> dest_elem_size_t fp_i_to_f(uint8_t, src_elem_size_t);
|
||||
template <typename dest_elem_t, typename src_elem_t> dest_elem_t fp_f_to_f(uint8_t rm, src_elem_t val);
|
||||
|
||||
template <> inline uint16_t fp_f_to_ui<uint16_t, uint16_t>(uint8_t rm, uint16_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return f16_to_ui32(float16_t{v2}, rm, true);
|
||||
}
|
||||
template <> inline uint32_t fp_f_to_ui<uint32_t, uint32_t>(uint8_t rm, uint32_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return f32_to_ui32(float32_t{v2}, rm, true);
|
||||
}
|
||||
template <> inline uint64_t fp_f_to_ui<uint64_t, uint64_t>(uint8_t rm, uint64_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return f64_to_ui64(float64_t{v2}, rm, true);
|
||||
}
|
||||
template <> inline uint16_t fp_f_to_ui<uint16_t, uint16_t>(uint8_t rm, uint16_t v2) { return f16toui32(v2, rm); }
|
||||
template <> inline uint32_t fp_f_to_ui<uint32_t, uint32_t>(uint8_t rm, uint32_t v2) { return f32toui32(v2, rm); }
|
||||
template <> inline uint64_t fp_f_to_ui<uint64_t, uint64_t>(uint8_t rm, uint64_t v2) { return f64toui64(v2, rm); }
|
||||
|
||||
template <> inline uint16_t fp_f_to_i<uint16_t, uint16_t>(uint8_t rm, uint16_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return f16_to_i32(float16_t{v2}, rm, true);
|
||||
}
|
||||
template <> inline uint32_t fp_f_to_i<uint32_t, uint32_t>(uint8_t rm, uint32_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return f32_to_i32(float32_t{v2}, rm, true);
|
||||
}
|
||||
template <> inline uint64_t fp_f_to_i<uint64_t, uint64_t>(uint8_t rm, uint64_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return f64_to_i64(float64_t{v2}, rm, true);
|
||||
}
|
||||
template <> inline uint16_t fp_f_to_i<uint16_t, uint16_t>(uint8_t rm, uint16_t v2) { return f16toi32(v2, rm); }
|
||||
template <> inline uint32_t fp_f_to_i<uint32_t, uint32_t>(uint8_t rm, uint32_t v2) { return f32toi32(v2, rm); }
|
||||
template <> inline uint64_t fp_f_to_i<uint64_t, uint64_t>(uint8_t rm, uint64_t v2) { return f64toi64(v2, rm); }
|
||||
|
||||
template <> inline uint16_t fp_ui_to_f<uint16_t, uint16_t>(uint8_t rm, uint16_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return ui32_to_f16(v2).v;
|
||||
}
|
||||
template <> inline uint32_t fp_ui_to_f<uint32_t, uint32_t>(uint8_t rm, uint32_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return ui32_to_f32(v2).v;
|
||||
}
|
||||
template <> inline uint64_t fp_ui_to_f<uint64_t, uint64_t>(uint8_t rm, uint64_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return ui64_to_f64(v2).v;
|
||||
}
|
||||
template <> inline uint16_t fp_ui_to_f<uint16_t, uint16_t>(uint8_t rm, uint16_t v2) { return ui32tof16(v2, rm); }
|
||||
template <> inline uint32_t fp_ui_to_f<uint32_t, uint32_t>(uint8_t rm, uint32_t v2) { return ui32tof32(v2, rm); }
|
||||
template <> inline uint64_t fp_ui_to_f<uint64_t, uint64_t>(uint8_t rm, uint64_t v2) { return ui64tof64(v2, rm); }
|
||||
|
||||
template <> inline uint16_t fp_i_to_f<uint16_t, uint16_t>(uint8_t rm, uint16_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return i32_to_f16(static_cast<int16_t>(v2)).v;
|
||||
}
|
||||
template <> inline uint32_t fp_i_to_f<uint32_t, uint32_t>(uint8_t rm, uint32_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return i32_to_f32(v2).v;
|
||||
}
|
||||
template <> inline uint64_t fp_i_to_f<uint64_t, uint64_t>(uint8_t rm, uint64_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return i64_to_f64(v2).v;
|
||||
}
|
||||
template <> inline uint16_t fp_i_to_f<uint16_t, uint16_t>(uint8_t rm, uint16_t v2) { return i32tof16(v2, rm); }
|
||||
template <> inline uint32_t fp_i_to_f<uint32_t, uint32_t>(uint8_t rm, uint32_t v2) { return i32tof32(v2, rm); }
|
||||
template <> inline uint64_t fp_i_to_f<uint64_t, uint64_t>(uint8_t rm, uint64_t v2) { return i64tof64(v2, rm); }
|
||||
|
||||
template <typename elem_t> std::function<elem_t(uint8_t, uint8_t&, elem_t)> get_fp_unary_fn(unsigned encoding_space, unsigned unary_op) {
|
||||
if(encoding_space == 0b010011) // VFUNARY1
|
||||
@ -1481,62 +1433,22 @@ void fp_vector_unary_op(uint8_t* V, unsigned encoding_space, unsigned unary_op,
|
||||
template <> inline uint16_t fp_f_to_ui<uint16_t, uint8_t>(uint8_t rm, uint8_t v2) {
|
||||
throw new std::runtime_error("Attempting illegal widening conversion");
|
||||
}
|
||||
template <> inline uint32_t fp_f_to_ui<uint32_t, uint16_t>(uint8_t rm, uint16_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return f16_to_ui32(float16_t{v2}, rm, true);
|
||||
}
|
||||
template <> inline uint64_t fp_f_to_ui<uint64_t, uint32_t>(uint8_t rm, uint32_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return f32_to_ui64(float32_t{v2}, rm, true);
|
||||
}
|
||||
template <> inline uint32_t fp_f_to_ui<uint32_t, uint16_t>(uint8_t rm, uint16_t v2) { return f16toui32(v2, rm); }
|
||||
template <> inline uint64_t fp_f_to_ui<uint64_t, uint32_t>(uint8_t rm, uint32_t v2) { return f32toui64(v2, rm); }
|
||||
|
||||
template <> inline uint16_t fp_f_to_i<uint16_t, uint8_t>(uint8_t rm, uint8_t v2) {
|
||||
throw new std::runtime_error("Attempting illegal widening conversion");
|
||||
}
|
||||
template <> inline uint32_t fp_f_to_i<uint32_t, uint16_t>(uint8_t rm, uint16_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return f16_to_i32(float16_t{v2}, rm, true);
|
||||
}
|
||||
template <> inline uint64_t fp_f_to_i<uint64_t, uint32_t>(uint8_t rm, uint32_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return f32_to_i64(float32_t{v2}, rm, true);
|
||||
}
|
||||
template <> inline uint32_t fp_f_to_i<uint32_t, uint16_t>(uint8_t rm, uint16_t v2) { return f16toi32(v2, rm); }
|
||||
template <> inline uint64_t fp_f_to_i<uint64_t, uint32_t>(uint8_t rm, uint32_t v2) { return f32toi64(v2, rm); }
|
||||
|
||||
template <> inline uint16_t fp_ui_to_f<uint16_t, uint8_t>(uint8_t rm, uint8_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return ui32_to_f16(v2).v;
|
||||
}
|
||||
template <> inline uint32_t fp_ui_to_f<uint32_t, uint16_t>(uint8_t rm, uint16_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return ui32_to_f32(v2).v;
|
||||
}
|
||||
template <> inline uint64_t fp_ui_to_f<uint64_t, uint32_t>(uint8_t rm, uint32_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return ui32_to_f64(v2).v;
|
||||
}
|
||||
template <> inline uint16_t fp_ui_to_f<uint16_t, uint8_t>(uint8_t rm, uint8_t v2) { return ui32tof16(v2, rm); }
|
||||
template <> inline uint32_t fp_ui_to_f<uint32_t, uint16_t>(uint8_t rm, uint16_t v2) { return ui32tof32(v2, rm); }
|
||||
template <> inline uint64_t fp_ui_to_f<uint64_t, uint32_t>(uint8_t rm, uint32_t v2) { return ui32tof64(v2, rm); }
|
||||
|
||||
template <> inline uint16_t fp_i_to_f<uint16_t, uint8_t>(uint8_t rm, uint8_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return i32_to_f16(static_cast<int8_t>(v2)).v;
|
||||
}
|
||||
template <> inline uint32_t fp_i_to_f<uint32_t, uint16_t>(uint8_t rm, uint16_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return i32_to_f32(static_cast<int16_t>(v2)).v;
|
||||
}
|
||||
template <> inline uint64_t fp_i_to_f<uint64_t, uint32_t>(uint8_t rm, uint32_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return i32_to_f64(v2).v;
|
||||
}
|
||||
template <> inline uint16_t fp_i_to_f<uint16_t, uint8_t>(uint8_t rm, uint8_t v2) { return i32tof16(v2, rm); }
|
||||
template <> inline uint32_t fp_i_to_f<uint32_t, uint16_t>(uint8_t rm, uint16_t v2) { return i32tof32(v2, rm); }
|
||||
template <> inline uint64_t fp_i_to_f<uint64_t, uint32_t>(uint8_t rm, uint32_t v2) { return i32tof64(v2, rm); }
|
||||
|
||||
template <> inline uint16_t fp_f_to_f<uint16_t, uint8_t>(uint8_t rm, uint8_t val) {
|
||||
throw new std::runtime_error("Attempting illegal widening conversion");
|
||||
@ -1605,65 +1517,25 @@ void fp_vector_unary_w(uint8_t* V, unsigned unary_op, uint64_t vl, uint64_t vsta
|
||||
vd_view[idx] = agnostic_behavior(vd_view[idx]);
|
||||
}
|
||||
|
||||
template <> inline uint8_t fp_f_to_ui<uint8_t, uint16_t>(uint8_t rm, uint16_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return f16_to_ui32(float16_t{v2}, rm, true);
|
||||
}
|
||||
template <> inline uint16_t fp_f_to_ui<uint16_t, uint32_t>(uint8_t rm, uint32_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return f32_to_ui32(float32_t{v2}, rm, true);
|
||||
}
|
||||
template <> inline uint32_t fp_f_to_ui<uint32_t, uint64_t>(uint8_t rm, uint64_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return f64_to_ui32(float64_t{v2}, rm, true);
|
||||
}
|
||||
template <> inline uint8_t fp_f_to_ui<uint8_t, uint16_t>(uint8_t rm, uint16_t v2) { return f16toui32(v2, rm); }
|
||||
template <> inline uint16_t fp_f_to_ui<uint16_t, uint32_t>(uint8_t rm, uint32_t v2) { return f32toui32(v2, rm); }
|
||||
template <> inline uint32_t fp_f_to_ui<uint32_t, uint64_t>(uint8_t rm, uint64_t v2) { return f64toui32(v2, rm); }
|
||||
|
||||
template <> inline uint8_t fp_f_to_i<uint8_t, uint16_t>(uint8_t rm, uint16_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return f16_to_i32(float16_t{v2}, rm, true);
|
||||
}
|
||||
template <> inline uint16_t fp_f_to_i<uint16_t, uint32_t>(uint8_t rm, uint32_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return f32_to_i32(float32_t{v2}, rm, true);
|
||||
}
|
||||
template <> inline uint32_t fp_f_to_i<uint32_t, uint64_t>(uint8_t rm, uint64_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return f64_to_i32(float64_t{v2}, rm, true);
|
||||
}
|
||||
template <> inline uint8_t fp_f_to_i<uint8_t, uint16_t>(uint8_t rm, uint16_t v2) { return f16toi32(v2, rm); }
|
||||
template <> inline uint16_t fp_f_to_i<uint16_t, uint32_t>(uint8_t rm, uint32_t v2) { return f32toi32(v2, rm); }
|
||||
template <> inline uint32_t fp_f_to_i<uint32_t, uint64_t>(uint8_t rm, uint64_t v2) { return f64toi32(v2, rm); }
|
||||
|
||||
template <> inline uint8_t fp_ui_to_f<uint8_t, uint16_t>(uint8_t rm, uint16_t v2) {
|
||||
throw new std::runtime_error("Attempting illegal narrowing conversion");
|
||||
}
|
||||
template <> inline uint16_t fp_ui_to_f<uint16_t, uint32_t>(uint8_t rm, uint32_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return ui32_to_f16(v2).v;
|
||||
}
|
||||
template <> inline uint32_t fp_ui_to_f<uint32_t, uint64_t>(uint8_t rm, uint64_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return ui64_to_f32(v2).v;
|
||||
}
|
||||
template <> inline uint16_t fp_ui_to_f<uint16_t, uint32_t>(uint8_t rm, uint32_t v2) { return ui32tof16(v2, rm); }
|
||||
template <> inline uint32_t fp_ui_to_f<uint32_t, uint64_t>(uint8_t rm, uint64_t v2) { return ui64tof32(v2, rm); }
|
||||
|
||||
template <> inline uint8_t fp_i_to_f<uint8_t, uint16_t>(uint8_t rm, uint16_t v2) {
|
||||
throw new std::runtime_error("Attempting illegal narrowing conversion");
|
||||
}
|
||||
template <> inline uint16_t fp_i_to_f<uint16_t, uint32_t>(uint8_t rm, uint32_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return i32_to_f16(v2).v;
|
||||
}
|
||||
template <> inline uint32_t fp_i_to_f<uint32_t, uint64_t>(uint8_t rm, uint64_t v2) {
|
||||
softfloat_exceptionFlags = 0;
|
||||
softfloat_roundingMode = rm;
|
||||
return i64_to_f32(v2).v;
|
||||
}
|
||||
template <> inline uint16_t fp_i_to_f<uint16_t, uint32_t>(uint8_t rm, uint32_t v2) { return i32tof16(v2, rm); }
|
||||
template <> inline uint32_t fp_i_to_f<uint32_t, uint64_t>(uint8_t rm, uint64_t v2) { return i64tof32(v2, rm); }
|
||||
|
||||
template <> inline uint8_t fp_f_to_f<uint8_t, uint16_t>(uint8_t rm, uint16_t val) {
|
||||
throw new std::runtime_error("Attempting illegal narrowing conversion");
|
||||
|
Loading…
x
Reference in New Issue
Block a user