]> Git Repo - qemu.git/commitdiff
target/arm: Promote consecutive memory ops for aa32
authorRichard Henderson <[email protected]>
Wed, 24 Oct 2018 06:50:20 +0000 (07:50 +0100)
committerPeter Maydell <[email protected]>
Wed, 24 Oct 2018 06:51:37 +0000 (07:51 +0100)
For a sequence of loads or stores from a single register,
little-endian operations can be promoted to an 8-byte op.
This can reduce the number of operations by a factor of 8.

Signed-off-by: Richard Henderson <[email protected]>
Message-id: 20181011205206[email protected]
Reviewed-by: Philippe Mathieu-Daudé <[email protected]>
Reviewed-by: Peter Maydell <[email protected]>
Signed-off-by: Peter Maydell <[email protected]>
target/arm/translate.c

index 7f209b4ae2ba5acf7f727e6d9cc7619dfc7b94c6..83e88242082a5e2fd39bb051ad6d1871ec389c2b 100644 (file)
@@ -5011,6 +5011,16 @@ static int disas_neon_ls_insn(DisasContext *s, uint32_t insn)
         if (size == 3 && (interleave | spacing) != 1) {
             return 1;
         }
+        /* For our purposes, bytes are always little-endian.  */
+        if (size == 0) {
+            endian = MO_LE;
+        }
+        /* Consecutive little-endian elements from a single register
+         * can be promoted to a larger little-endian operation.
+         */
+        if (interleave == 1 && endian == MO_LE) {
+            size = 3;
+        }
         tmp64 = tcg_temp_new_i64();
         addr = tcg_temp_new_i32();
         tmp2 = tcg_const_i32(1 << size);
This page took 0.042127 seconds and 4 git commands to generate.