typedef enum {
midgard_outmod_none = 0,
midgard_outmod_pos = 1,
- midgard_outmod_int = 2,
+ /* 0x2 unknown */
midgard_outmod_sat = 3
-} midgard_outmod;
+} midgard_outmod_float;
+
+typedef enum {
+ midgard_outmod_int_saturate = 0,
+ midgard_outmod_uint_saturate = 1,
+ midgard_outmod_int_wrap = 2,
+ midgard_outmod_int_high = 3, /* Overflowed portion */
+} midgard_outmod_int;
typedef enum {
midgard_reg_mode_8 = 0,
midgard_reg_mode_16 = 1,
midgard_reg_mode_32 = 2,
- midgard_reg_mode_64 = 3 /* TODO: verify */
+ midgard_reg_mode_64 = 3
} midgard_reg_mode;
typedef enum {
midgard_int_sign_extend = 0,
midgard_int_zero_extend = 1,
midgard_int_normal = 2,
- midgard_int_reserved = 3
+ midgard_int_shift = 3
} midgard_int_mod;
#define MIDGARD_FLOAT_MOD_ABS (1 << 0)
unsigned src1 : 13;
unsigned src2 : 13;
midgard_dest_override dest_override : 2;
- midgard_outmod outmod : 2;
+ midgard_outmod_float outmod : 2;
unsigned mask : 8;
}
midgard_vector_alu;
unsigned src1 : 6;
unsigned src2 : 11;
unsigned unknown : 1;
- midgard_outmod outmod : 2;
+ unsigned outmod : 2;
bool output_full : 1;
unsigned output_component : 3;
}
unsigned in_reg_select : 1;
unsigned in_reg_upper : 1;
+ unsigned in_reg_swizzle : 8;
- unsigned in_reg_swizzle_left : 2;
- unsigned in_reg_swizzle_right : 2;
-
- unsigned unknown1 : 2;
-
- unsigned unknown8 : 4;
+ unsigned unknown8 : 2;
unsigned out_full : 1;