mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-30 01:44:36 +00:00
Fix auto_cast matrix bug
This commit is contained in:
@@ -2363,12 +2363,23 @@ gb_internal lbValue lb_emit_conv(lbProcedure *p, lbValue value, Type *t) {
|
||||
GB_ASSERT(src->kind == Type_Matrix);
|
||||
lbAddr v = lb_add_local_generated(p, t, true);
|
||||
|
||||
if (is_matrix_square(dst) && is_matrix_square(dst)) {
|
||||
if (dst->Matrix.row_count == src->Matrix.row_count &&
|
||||
dst->Matrix.column_count == src->Matrix.column_count) {
|
||||
for (i64 j = 0; j < dst->Matrix.column_count; j++) {
|
||||
for (i64 i = 0; i < dst->Matrix.row_count; i++) {
|
||||
lbValue d = lb_emit_matrix_epi(p, v.addr, i, j);
|
||||
lbValue s = lb_emit_matrix_ev(p, value, i, j);
|
||||
s = lb_emit_conv(p, s, dst->Matrix.elem);
|
||||
lb_emit_store(p, d, s);
|
||||
}
|
||||
}
|
||||
} else if (is_matrix_square(dst) && is_matrix_square(dst)) {
|
||||
for (i64 j = 0; j < dst->Matrix.column_count; j++) {
|
||||
for (i64 i = 0; i < dst->Matrix.row_count; i++) {
|
||||
if (i < src->Matrix.row_count && j < src->Matrix.column_count) {
|
||||
lbValue d = lb_emit_matrix_epi(p, v.addr, i, j);
|
||||
lbValue s = lb_emit_matrix_ev(p, value, i, j);
|
||||
s = lb_emit_conv(p, s, dst->Matrix.elem);
|
||||
lb_emit_store(p, d, s);
|
||||
} else if (i == j) {
|
||||
lbValue d = lb_emit_matrix_epi(p, v.addr, i, j);
|
||||
|
||||
Reference in New Issue
Block a user