diff options
author | Richard Henderson <richard.henderson@linaro.org> | 2021-08-04 08:26:30 +0300 |
---|---|---|
committer | Richard Henderson <richard.henderson@linaro.org> | 2021-10-13 09:14:35 -0700 |
commit | 76e366e728549b3324cc2dee6745d6a4f1af18e6 (patch) | |
tree | b84f199a26a96adc4e85a0ed43eb48fb0cb8ff39 /tcg/tcg-op.c | |
parent | d2ba80265739d1699dd33b93ed7db8d46e875ab6 (diff) |
tcg: Canonicalize alignment flags in MemOp
Having observed e.g. al8+leq in dumps, canonicalize to al+leq.
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'tcg/tcg-op.c')
-rw-r--r-- | tcg/tcg-op.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/tcg/tcg-op.c b/tcg/tcg-op.c index b1cfd36f29..61b492d89f 100644 --- a/tcg/tcg-op.c +++ b/tcg/tcg-op.c @@ -2765,7 +2765,12 @@ void tcg_gen_lookup_and_goto_ptr(void) static inline MemOp tcg_canonicalize_memop(MemOp op, bool is64, bool st) { /* Trigger the asserts within as early as possible. */ - (void)get_alignment_bits(op); + unsigned a_bits = get_alignment_bits(op); + + /* Prefer MO_ALIGN+MO_XX over MO_ALIGN_XX+MO_XX */ + if (a_bits == (op & MO_SIZE)) { + op = (op & ~MO_AMASK) | MO_ALIGN; + } switch (op & MO_SIZE) { case MO_8: |