From d5a80781aa1adf124aba98a453316b4fd8654bf8 Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Thu, 23 Sep 2021 13:56:27 -0700 Subject: [PATCH] freedreno/afuc: Avoid ubsan warns about shifting to the top bit of 'int' I think maybe it's being promoted to int due to the mismatched bitfield sizes of the uint32_t values being referenced here? Part-of: --- src/freedreno/afuc/disasm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/freedreno/afuc/disasm.c b/src/freedreno/afuc/disasm.c index d7b322a1022..0bf00ef8f4d 100644 --- a/src/freedreno/afuc/disasm.c +++ b/src/freedreno/afuc/disasm.c @@ -402,7 +402,7 @@ disasm_instr(uint32_t *instrs, unsigned pc) printf(" << %u", instr->movi.shift); if ((instr->movi.dst == REG_ADDR) && (instr->movi.shift >= 16)) { - uint32_t val = instr->movi.uimm << instr->movi.shift; + uint32_t val = (uint32_t)instr->movi.uimm << (uint32_t)instr->movi.shift; val &= ~0x40000; /* b18 seems to be a flag */ if ((val & 0x00ffffff) == 0) { @@ -439,7 +439,7 @@ disasm_instr(uint32_t *instrs, unsigned pc) } } - print_gpu_reg(instr->movi.uimm << instr->movi.shift); + print_gpu_reg((uint32_t)instr->movi.uimm << (uint32_t)instr->movi.shift); break; }