diff options
author | Pierre Moreau <[email protected]> | 2017-06-12 22:53:52 +0200 |
---|---|---|
committer | Samuel Pitoiset <[email protected]> | 2017-06-25 15:23:46 +0200 |
commit | afb8f2d4a346041adf54d45729963a55a625ac1f (patch) | |
tree | eb93958b69f4da430ac293aa4dc69222046b370b /src/gallium/drivers/nouveau | |
parent | e25950808f4eeec31861bf13b60e4cba8b3a7aef (diff) |
nv50/ir: Properly fold constants in SPLIT operation
Fixes: b7d9677d ("nv50/ir: constant fold OP_SPLIT")
Cc: [email protected]
Signed-off-by: Pierre Moreau <[email protected]>
Reviewed-by: Ilia Mirkin <[email protected]>
Diffstat (limited to 'src/gallium/drivers/nouveau')
-rw-r--r-- | src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp index 4c92a1efb51..5dac2f64f0a 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp @@ -938,8 +938,9 @@ ConstantFolding::opnd(Instruction *i, ImmediateValue &imm0, int s) bld.setPosition(i, false); uint8_t size = i->getDef(0)->reg.size; - uint32_t mask = (1ULL << size) - 1; - assert(size <= 32); + uint8_t bitsize = size * 8; + uint32_t mask = (1ULL << bitsize) - 1; + assert(bitsize <= 32); uint64_t val = imm0.reg.data.u64; for (int8_t d = 0; i->defExists(d); ++d) { @@ -947,7 +948,7 @@ ConstantFolding::opnd(Instruction *i, ImmediateValue &imm0, int s) assert(def->reg.size == size); newi = bld.mkMov(def, bld.mkImm((uint32_t)(val & mask)), TYPE_U32); - val >>= size; + val >>= bitsize; } delete_Instruction(prog, i); break; |