mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-03 14:18:47 +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);
|
GB_ASSERT(src->kind == Type_Matrix);
|
||||||
lbAddr v = lb_add_local_generated(p, t, true);
|
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 j = 0; j < dst->Matrix.column_count; j++) {
|
||||||
for (i64 i = 0; i < dst->Matrix.row_count; i++) {
|
for (i64 i = 0; i < dst->Matrix.row_count; i++) {
|
||||||
if (i < src->Matrix.row_count && j < src->Matrix.column_count) {
|
if (i < src->Matrix.row_count && j < src->Matrix.column_count) {
|
||||||
lbValue d = lb_emit_matrix_epi(p, v.addr, i, j);
|
lbValue d = lb_emit_matrix_epi(p, v.addr, i, j);
|
||||||
lbValue s = lb_emit_matrix_ev(p, value, 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);
|
lb_emit_store(p, d, s);
|
||||||
} else if (i == j) {
|
} else if (i == j) {
|
||||||
lbValue d = lb_emit_matrix_epi(p, v.addr, i, j);
|
lbValue d = lb_emit_matrix_epi(p, v.addr, i, j);
|
||||||
|
|||||||
Reference in New Issue
Block a user