unsigned unk4 : 1; // part of nextClauseType?
} __attribute__((packed));
+enum bifrost_packed_src {
+ BIFROST_SRC_PORT0 = 0,
+ BIFROST_SRC_PORT1 = 1,
+ BIFROST_SRC_PORT3 = 2,
+ BIFROST_SRC_STAGE = 3,
+ BIFROST_SRC_CONST_LO = 4,
+ BIFROST_SRC_CONST_HI = 5,
+ BIFROST_SRC_PASS_FMA = 6,
+ BIFROST_SRC_PASS_ADD = 7,
+};
+
struct bifrost_fma_inst {
unsigned src0 : 3;
unsigned op : 20;
BIFROST_SRC0_WINS = 0x3,
};
+#define BIFROST_FMA_OP_FADD32 (0x58 >> 2)
+
struct bifrost_fma_add {
unsigned src0 : 3;
unsigned src1 : 3;
unsigned op : 6;
} __attribute__((packed));
+#define BIFROST_FMA_OP_FMA (0x00)
+
+struct bifrost_fma_fma {
+ unsigned src0 : 3;
+ unsigned src1 : 3;
+ unsigned src2 : 3;
+ unsigned src_expand : 3;
+ unsigned src0_abs : 1;
+ unsigned unk : 4;
+ unsigned src0_neg : 1;
+ unsigned src2_neg : 1;
+ unsigned src1_abs : 1;
+ unsigned src2_abs : 1;
+ unsigned op : 5;
+} __attribute__((packed));
+
enum bifrost_csel_cond {
BIFROST_FEQ_F = 0x0,
BIFROST_FGT_F = 0x1,
BIFROST_INTERP_EXPLICIT = 0x3
};
+#define BIFROST_ADD_OP_LD_VAR_16 (0x1a << 1)
+#define BIFROST_ADD_OP_LD_VAR_32 (0x0a << 1)
+
struct bifrost_ld_var {
unsigned src0 : 3;