* Thread Spawn message function control bits:
* @{
*/
-F(ts_resource_select, /* 4+ */ MD( 4), MD( 4), /* 12+ */ -1, -1)
-F(ts_request_type, /* 4+ */ MD( 1), MD( 1), /* 12+ */ -1, -1)
+FC(ts_resource_select, /* 4+ */ MD( 4), MD( 4), /* 12+ */ -1, -1, devinfo->gen < 11)
+FC(ts_request_type, /* 4+ */ MD( 1), MD( 1), /* 12+ */ -1, -1, devinfo->gen < 11)
F(ts_opcode, /* 4+ */ MD( 0), MD( 0), /* 12+ */ MD12(0), MD12(0))
/** @} */
} dt;
(void) devinfo;
dt.d = value;
- brw_inst_set_bits(insn, 127, 64, dt.u);
+
+ if (devinfo->gen >= 12) {
+ brw_inst_set_bits(insn, 95, 64, dt.u >> 32);
+ brw_inst_set_bits(insn, 127, 96, dt.u & 0xFFFFFFFF);
+ } else {
+ brw_inst_set_bits(insn, 127, 64, dt.u);
+ }
}
static inline void
brw_inst *insn, uint64_t value)
{
(void) devinfo;
- brw_inst_set_bits(insn, 127, 64, value);
+ if (devinfo->gen >= 12) {
+ brw_inst_set_bits(insn, 95, 64, value >> 32);
+ brw_inst_set_bits(insn, 127, 96, value & 0xFFFFFFFF);
+ } else {
+ brw_inst_set_bits(insn, 127, 64, value);
+ }
}
/** @} */
static inline uint64_t
brw_inst_bits(const brw_inst *inst, unsigned high, unsigned low)
{
+ assert(high < 128);
assert(high >= low);
/* We assume the field doesn't cross 64-bit boundaries. */
const unsigned word = high / 64;
static inline void
brw_inst_set_bits(brw_inst *inst, unsigned high, unsigned low, uint64_t value)
{
+ assert(high < 128);
assert(high >= low);
const unsigned word = high / 64;
assert(word == low / 64);
F(debug_control, /* 4+ */ 7, 7, /* 12+ */ 7, 7)
F(hw_opcode, /* 4+ */ 6, 0, /* 12+ */ 6, 0) /* Same location as brw_inst */
+static inline unsigned
+brw_compact_inst_imm(const struct gen_device_info *devinfo,
+ const brw_compact_inst *inst)
+{
+ if (devinfo->gen >= 12) {
+ return brw_compact_inst_bits(inst, 63, 52);
+ } else {
+ return (brw_compact_inst_bits(inst, 39, 35) << 8) |
+ (brw_compact_inst_bits(inst, 63, 56));
+ }
+}
+
/**
* (Gen8+) Compacted three-source instructions:
* @{