for rnd_mode in rnd_modes:
if rnd_mode == '_rtne':
conv_expr = """
- if (bit_size > 16) {
+ if (bit_size > 32) {
+ dst = _mesa_half_to_float(_mesa_double_to_float16_rtne(src0));
+ } else if (bit_size > 16) {
dst = _mesa_half_to_float(_mesa_float_to_float16_rtne(src0));
} else {
dst = src0;
"""
elif rnd_mode == '_rtz':
conv_expr = """
- if (bit_size > 16) {
+ if (bit_size > 32) {
+ dst = _mesa_half_to_float(_mesa_double_to_float16_rtz(src0));
+ } else if (bit_size > 16) {
dst = _mesa_half_to_float(_mesa_float_to_float16_rtz(src0));
} else {
dst = src0;
}
"""
else:
- conv_expr = "src0"
+ conv_expr = """
+ if (bit_size > 32) {
+ if (nir_is_rounding_mode_rtz(execution_mode, 16))
+ dst = _mesa_half_to_float(_mesa_double_to_float16_rtz(src0));
+ else
+ dst = _mesa_half_to_float(_mesa_double_to_float16_rtne(src0));
+ } else if (bit_size > 16) {
+ if (nir_is_rounding_mode_rtz(execution_mode, 16))
+ dst = _mesa_half_to_float(_mesa_float_to_float16_rtz(src0));
+ else
+ dst = _mesa_half_to_float(_mesa_float_to_float16_rtne(src0));
+ } else {
+ dst = src0;
+ }
+ """
unop_numeric_convert("{0}2{1}{2}{3}".format(src_t[0],
dst_t[0],