summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2021-08-04 08:26:30 +0300
committerRichard Henderson <richard.henderson@linaro.org>2021-10-13 09:14:35 -0700
commit76e366e728549b3324cc2dee6745d6a4f1af18e6 (patch)
treeb84f199a26a96adc4e85a0ed43eb48fb0cb8ff39
parentd2ba80265739d1699dd33b93ed7db8d46e875ab6 (diff)
downloadfocaccia-qemu-76e366e728549b3324cc2dee6745d6a4f1af18e6.tar.gz
focaccia-qemu-76e366e728549b3324cc2dee6745d6a4f1af18e6.zip
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>
-rw-r--r--tcg/tcg-op.c7
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: