Commit 11bccb05 authored by Alyssa Rosenzweig's avatar Alyssa Rosenzweig 💜 Committed by Marge Bot
Browse files

pan/bi: Respect shift when printing immediates

We allow packing multiple immediates in, but we were missing this in the
Signed-off-by: Alyssa Rosenzweig's avatarAlyssa Rosenzweig <>
Part-of: <mesa/mesa!4276>
parent 3f786ed1
......@@ -166,7 +166,7 @@ bi_print_index(FILE *fp, bi_instruction *ins, unsigned index)
else if (index & BIR_INDEX_UNIFORM)
fprintf(fp, "u%u", index & ~BIR_INDEX_UNIFORM);
else if (index & BIR_INDEX_CONSTANT)
fprintf(fp, "#0x%" PRIx64, ins->constant.u64);
fprintf(fp, "#0x%" PRIx64, bi_get_immediate(ins, index));
else if (index & BIR_INDEX_ZERO)
fprintf(fp, "#0");
else if (index & BIR_IS_REG)
......@@ -136,3 +136,11 @@ bi_bytemask_of_read_components(bi_instruction *ins, unsigned node)
return mask;
bi_get_immediate(bi_instruction *ins, unsigned index)
assert(index & BIR_INDEX_CONSTANT);
unsigned shift = index & ~BIR_INDEX_CONSTANT;
return ins->constant.u64 >> shift;
......@@ -394,7 +394,7 @@ bi_remove_instruction(bi_instruction *ins)
* Fixed register: do not allocate register, do not collect $200.
* Uniform: access a uniform register given by low bits.
* Constant: access the specified constant
* Constant: access the specified constant (specifies a bit offset / shift)
* Zero: special cased to avoid wasting a constant
* Passthrough: a bifrost_packed_src to passthrough T/T0/T1
......@@ -537,6 +537,7 @@ uint16_t bi_from_bytemask(uint16_t bytemask, unsigned bytes);
unsigned bi_get_component_count(bi_instruction *ins, unsigned s);
unsigned bi_load32_components(bi_instruction *ins);
uint16_t bi_bytemask_of_read_components(bi_instruction *ins, unsigned node);
uint64_t bi_get_immediate(bi_instruction *ins, unsigned index);
/* BIR passes */
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment