mirror of
https://github.com/Ed94/Odin.git
synced 2026-06-22 05:34:59 -07:00
Implement f16 functionality
This commit is contained in:
+24
-4
@@ -418,21 +418,24 @@ void ir_print_type(irFileBuffer *f, irModule *m, Type *t, bool in_struct) {
|
||||
}
|
||||
return;
|
||||
|
||||
// case Basic_f16: ir_write_str_lit(f, "half"); return;
|
||||
case Basic_f32: ir_write_str_lit(f, "float"); return;
|
||||
case Basic_f64: ir_write_str_lit(f, "double"); return;
|
||||
case Basic_f16: ir_write_str_lit(f, "half"); return;
|
||||
case Basic_f32: ir_write_str_lit(f, "float"); return;
|
||||
case Basic_f64: ir_write_str_lit(f, "double"); return;
|
||||
|
||||
|
||||
case Basic_f16le: ir_write_str_lit(f, "half"); return;
|
||||
case Basic_f32le: ir_write_str_lit(f, "float"); return;
|
||||
case Basic_f64le: ir_write_str_lit(f, "double"); return;
|
||||
|
||||
case Basic_f16be: ir_write_str_lit(f, "half"); return;
|
||||
case Basic_f32be: ir_write_str_lit(f, "float"); return;
|
||||
case Basic_f64be: ir_write_str_lit(f, "double"); return;
|
||||
|
||||
// case Basic_complex32: ir_write_str_lit(f, "%%..complex32"); return;
|
||||
case Basic_complex32: ir_write_str_lit(f, "%%..complex32"); return;
|
||||
case Basic_complex64: ir_write_str_lit(f, "%..complex64"); return;
|
||||
case Basic_complex128: ir_write_str_lit(f, "%..complex128"); return;
|
||||
|
||||
case Basic_quaternion64: ir_write_str_lit(f, "%..quaternion64"); return;
|
||||
case Basic_quaternion128: ir_write_str_lit(f, "%..quaternion128"); return;
|
||||
case Basic_quaternion256: ir_write_str_lit(f, "%..quaternion256"); return;
|
||||
|
||||
@@ -873,6 +876,23 @@ void ir_print_exact_value(irFileBuffer *f, irModule *m, ExactValue value, Type *
|
||||
}
|
||||
#else
|
||||
switch (type->Basic.kind) {
|
||||
case Basic_f16:
|
||||
ir_fprintf(f, "fptrunc (float bitcast (i32 %u to float) to half)", u_32);
|
||||
break;
|
||||
case Basic_f16le:
|
||||
if (build_context.endian_kind != TargetEndian_Little) {
|
||||
u_32 = gb_endian_swap32(u_32);
|
||||
}
|
||||
ir_fprintf(f, "fptrunc (float bitcast (i32 %u to float) to half)", u_32);
|
||||
break;
|
||||
case Basic_f16be:
|
||||
if (build_context.endian_kind != TargetEndian_Big) {
|
||||
u_32 = gb_endian_swap32(u_32);
|
||||
}
|
||||
ir_fprintf(f, "fptrunc (float bitcast (i32 %u to float) to half)", u_32);
|
||||
break;
|
||||
|
||||
|
||||
case Basic_f32:
|
||||
ir_fprintf(f, "bitcast (i32 %u to float)", u_32);
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user