pan/bi: Pack LOAD/STORE
LOAD is the same as LOAD_UNIFORM (same instruction, I need to
deduplicate the IR), STORE is basically the same as LOAD.
Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7206>
diff --git a/src/panfrost/bifrost/bi_pack.c b/src/panfrost/bifrost/bi_pack.c
index 9f0884b..9f3cd9c 100644
--- a/src/panfrost/bifrost/bi_pack.c
+++ b/src/panfrost/bifrost/bi_pack.c
@@ -790,11 +790,11 @@
(sz == 16) ? pan_pack_add_isub_v2s16(clause, bundle.add, regs) :
pan_pack_add_isub_s32(clause, bundle.add, regs);
}
- case BI_LOAD:
- unreachable("Packing todo");
case BI_LOAD_ATTR:
return pan_pack_add_ld_attr_imm(clause, bundle.add, regs);
+ case BI_LOAD:
case BI_LOAD_UNIFORM:
+ assert(u32 || s32 || f32);
switch (bundle.add->vector_channels) {
case 1: return pan_pack_add_load_i32(clause, bundle.add, regs);
case 2: return pan_pack_add_load_i64(clause, bundle.add, regs);
@@ -835,8 +835,16 @@
unreachable("TODO");
}
case BI_MOV:
- case BI_STORE:
unreachable("Packing todo");
+ case BI_STORE:
+ assert(src0_u32 || src0_s32 || src0_f32);
+ switch (bundle.add->vector_channels) {
+ case 1: return pan_pack_add_store_i32(clause, bundle.add, regs);
+ case 2: return pan_pack_add_store_i64(clause, bundle.add, regs);
+ case 3: return pan_pack_add_store_i96(clause, bundle.add, regs);
+ case 4: return pan_pack_add_store_i128(clause, bundle.add, regs);
+ default: unreachable("Invalid channel count");
+ }
case BI_STORE_VAR:
return pan_pack_add_st_cvt(clause, bundle.add, regs);
case BI_SPECIAL: