OSDN Git Service

tcg: Canonicalize alignment flags in MemOp
authorRichard Henderson <richard.henderson@linaro.org>
Wed, 4 Aug 2021 05:26:30 +0000 (08:26 +0300)
committerRichard Henderson <richard.henderson@linaro.org>
Wed, 13 Oct 2021 16:14:35 +0000 (09:14 -0700)
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>
tcg/tcg-op.c

index b1cfd36..61b492d 100644 (file)
@@ -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: