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: