pan/bi: Structify ADD unit add/min/max
[mesa.git] / src / panfrost / midgard / midgard_emit.c
index 4d58217ceeb96fab140f28e4528009b31cb82f1c..0c5d60efa4a90677ebb7cc0741125b7faf5b29df 100644 (file)
@@ -196,11 +196,17 @@ mir_pack_swizzle_alu(midgard_instruction *ins)
                         if (mode == midgard_reg_mode_32) {
                                 bool lo = ins->swizzle[i][0] >= COMPONENT_Z;
                                 bool hi = ins->swizzle[i][1] >= COMPONENT_Z;
+                                unsigned mask = mir_bytemask(ins);
 
-                                /* TODO: can we mix halves? */
-                                assert(lo == hi);
+                                if (mask & 0xFF) {
+                                        /* We can't mix halves... */
+                                        if (mask & 0xFF00)
+                                                assert(lo == hi);
 
-                                src[i].rep_low |= lo;
+                                        src[i].rep_low |= lo;
+                                } else {
+                                        src[i].rep_low |= hi;
+                                }
                         } else if (mode < midgard_reg_mode_32) {
                                 unreachable("Cannot encode 8/16 swizzle in 64-bit");
                         }
@@ -366,11 +372,11 @@ emit_alu_bundle(compiler_context *ctx,
                         source = &scalarized;
                 }
 
-                memcpy(util_dynarray_grow_bytes(emission, 1, size), source, size);
+                memcpy(util_dynarray_grow_bytes(emission, size, 1), source, size);
         }
 
         /* Emit padding (all zero) */
-        memset(util_dynarray_grow_bytes(emission, 1, bundle->padding), 0, bundle->padding);
+        memset(util_dynarray_grow_bytes(emission, bundle->padding, 1), 0, bundle->padding);
 
         /* Tack on constants */