aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHongyu Wang <hongyu.wang@intel.com>2023-11-17 15:30:16 +0800
committerHongyu Wang <hongyu.wang@intel.com>2023-11-22 15:35:57 +0800
commitbd17d00a4bdee34876cc97bdf9a1f2316e0a6790 (patch)
tree80519ea6208197df49cd44bf400721969a2c6e05
parentd13e59b86c5cbeec6135ada3f6dc983289cac610 (diff)
downloadgcc-bd17d00a4bdee34876cc97bdf9a1f2316e0a6790.zip
gcc-bd17d00a4bdee34876cc97bdf9a1f2316e0a6790.tar.gz
gcc-bd17d00a4bdee34876cc97bdf9a1f2316e0a6790.tar.bz2
[APX PUSH2POP2] Adjust operand order for PUSH2POP2
The push2/pop2 operand order does not match the binutils implementation for AT&T syntax that it will first push operands[2] then operands[1]. Correct it by reverse operand order for AT&T syntax. gcc/ChangeLog: * config/i386/i386.md (push2_di): Adjust operand order for AT&T syntax. (pop2_di): Likewise. (push2p_di): Likewise. (pop2p_di): Likewise. gcc/testsuite/ChangeLog: * gcc.target/i386/apx-push2pop2-1.c: Adjust output scan. * gcc.target/i386/apx-push2pop2_force_drap-1.c: Likewise.
-rw-r--r--gcc/config/i386/i386.md8
-rw-r--r--gcc/testsuite/gcc.target/i386/apx-push2pop2-1.c8
-rw-r--r--gcc/testsuite/gcc.target/i386/apx-push2pop2_force_drap-1.c8
3 files changed, 12 insertions, 12 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 03e4ddd..99bb909 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -3772,7 +3772,7 @@
(match_operand:DI 2 "register_operand" "r")]
UNSPEC_APXPUSH2))]
"TARGET_APX_PUSH2POP2"
- "push2\t%1, %2"
+ "push2\t{%2, %1|%1, %2}"
[(set_attr "mode" "TI")
(set_attr "type" "multi")
(set_attr "prefix" "evex")])
@@ -3784,7 +3784,7 @@
(set (match_operand:DI 2 "register_operand" "=r")
(unspec:DI [(const_int 0)] UNSPEC_APXPOP2_HIGH))])]
"TARGET_APX_PUSH2POP2"
- "pop2\t%0, %2"
+ "pop2\t{%2, %0|%0, %2}"
[(set_attr "mode" "TI")
(set_attr "prefix" "evex")])
@@ -3811,7 +3811,7 @@
UNSPEC_APXPUSH2))
(unspec:DI [(const_int 0)] UNSPEC_APX_PPX)]
"TARGET_APX_PUSH2POP2 && TARGET_APX_PPX"
- "push2p\t%1, %2"
+ "push2p\t{%2, %1|%1, %2}"
[(set_attr "mode" "TI")
(set_attr "type" "multi")
(set_attr "prefix" "evex")])
@@ -3824,7 +3824,7 @@
(unspec:DI [(const_int 0)] UNSPEC_APXPOP2_HIGH))
(unspec:DI [(const_int 0)] UNSPEC_APX_PPX)])]
"TARGET_APX_PUSH2POP2 && TARGET_APX_PPX"
- "pop2p\t%0, %2"
+ "pop2p\t{%2, %0|%0, %2}"
[(set_attr "mode" "TI")
(set_attr "prefix" "evex")])
diff --git a/gcc/testsuite/gcc.target/i386/apx-push2pop2-1.c b/gcc/testsuite/gcc.target/i386/apx-push2pop2-1.c
index c531127..d78c96d 100644
--- a/gcc/testsuite/gcc.target/i386/apx-push2pop2-1.c
+++ b/gcc/testsuite/gcc.target/i386/apx-push2pop2-1.c
@@ -24,11 +24,11 @@ void foo ()
/* { dg-final { scan-assembler-times ".cfi_def_cfa_offset 16" 2 } } */
/* { dg-final { scan-assembler-times "pushq\[^\n\r]*%r15(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_offset 15, -16(?:\n|\[ \\t\]+#)" 1 } } */
-/* { dg-final { scan-assembler-times "push2\[\\t \]*\[^\n\r]*%r14\[^\n\r]*%r13\[^\n\r]*(?:\n|\[ \\t\]+#)" 1 } } */
+/* { dg-final { scan-assembler-times "push2\[\\t \]*\[^\n\r]*%r13\[^\n\r]*%r14\[^\n\r]*(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_def_cfa_offset 32" 2 } } */
/* { dg-final { scan-assembler-times ".cfi_offset 14, -24(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_offset 13, -32(?:\n|\[ \\t\]+#)" 1 } } */
-/* { dg-final { scan-assembler-times "push2\[\\t \]*\[^\n\r]*%r12\[^\n\r]*%rbp\[^\n\r]*(?:\n|\[ \\t\]+#)" 1 } } */
+/* { dg-final { scan-assembler-times "push2\[\\t \]*\[^\n\r]*%rbp\[^\n\r]*%r12\[^\n\r]*(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_def_cfa_offset 48" 2 } } */
/* { dg-final { scan-assembler-times ".cfi_offset 12, -40(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_offset 6, -48(?:\n|\[ \\t\]+#)" 1 } } */
@@ -36,10 +36,10 @@ void foo ()
/* { dg-final { scan-assembler-times ".cfi_def_cfa_offset 56" 2 } } */
/* { dg-final { scan-assembler-times ".cfi_offset 3, -56(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times "popq\[^\n\r]*rbx(?:\n|\[ \\t\]+#)" 1 } } */
-/* { dg-final { scan-assembler-times "pop2\[\\t \]*\[^\n\r]*%rbp\[^\n\r]*%r12\[^\n\r]*(?:\n|\[ \\t\]+#)" 1 } } */
+/* { dg-final { scan-assembler-times "pop2\[\\t \]*\[^\n\r]*%r12\[^\n\r]*%rbp\[^\n\r]*(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_restore 12(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_restore 6(?:\n|\[ \\t\]+#)" 1 } } */
-/* { dg-final { scan-assembler-times "pop2\[\\t \]*\[^\n\r]*%r13\[^\n\r]*%r14\[^\n\r]*(?:\n|\[ \\t\]+#)" 1 } } */
+/* { dg-final { scan-assembler-times "pop2\[\\t \]*\[^\n\r]*%r14\[^\n\r]*%r13\[^\n\r]*(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_restore 14(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_restore 13(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times "popq\[^\n\r]*%r15(?:\n|\[ \\t\]+#)" 1 } } */
diff --git a/gcc/testsuite/gcc.target/i386/apx-push2pop2_force_drap-1.c b/gcc/testsuite/gcc.target/i386/apx-push2pop2_force_drap-1.c
index 022113b..3cac7b1 100644
--- a/gcc/testsuite/gcc.target/i386/apx-push2pop2_force_drap-1.c
+++ b/gcc/testsuite/gcc.target/i386/apx-push2pop2_force_drap-1.c
@@ -8,11 +8,11 @@
/* { dg-final { scan-assembler-times ".cfi_def_cfa_offset 16" 2 } } */
/* { dg-final { scan-assembler-times "pushq\[^\n\r]*%r15(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_offset 15, -16(?:\n|\[ \\t\]+#)" 1 } } */
-/* { dg-final { scan-assembler-times "push2\[\\t \]*\[^\n\r]*%r14\[^\n\r]*%r13\[^\n\r]*(?:\n|\[ \\t\]+#)" 1 } } */
+/* { dg-final { scan-assembler-times "push2\[\\t \]*\[^\n\r]*%r13\[^\n\r]*%r14\[^\n\r]*(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_def_cfa_offset 32" 2 } } */
/* { dg-final { scan-assembler-times ".cfi_offset 14, -24(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_offset 13, -32(?:\n|\[ \\t\]+#)" 1 } } */
-/* { dg-final { scan-assembler-times "push2\[\\t \]*\[^\n\r]*%r12\[^\n\r]*%rbp\[^\n\r]*(?:\n|\[ \\t\]+#)" 1 } } */
+/* { dg-final { scan-assembler-times "push2\[\\t \]*\[^\n\r]*%rbp\[^\n\r]*%r12\[^\n\r]*(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_def_cfa_offset 48" 2 } } */
/* { dg-final { scan-assembler-times ".cfi_offset 12, -40(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_offset 6, -48(?:\n|\[ \\t\]+#)" 1 } } */
@@ -20,10 +20,10 @@
/* { dg-final { scan-assembler-times ".cfi_def_cfa_offset 56" 2 } } */
/* { dg-final { scan-assembler-times ".cfi_offset 3, -56(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times "popq\[^\n\r]*rbx(?:\n|\[ \\t\]+#)" 1 } } */
-/* { dg-final { scan-assembler-times "pop2\[\\t \]*\[^\n\r]*%rbp\[^\n\r]*%r12\[^\n\r]*(?:\n|\[ \\t\]+#)" 1 } } */
+/* { dg-final { scan-assembler-times "pop2\[\\t \]*\[^\n\r]*%r12\[^\n\r]*%rbp\[^\n\r]*(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_restore 12(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_restore 6(?:\n|\[ \\t\]+#)" 1 } } */
-/* { dg-final { scan-assembler-times "pop2\[\\t \]*\[^\n\r]*%r13\[^\n\r]*%r14\[^\n\r]*(?:\n|\[ \\t\]+#)" 1 } } */
+/* { dg-final { scan-assembler-times "pop2\[\\t \]*\[^\n\r]*%r14\[^\n\r]*%r13\[^\n\r]*(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_restore 14(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times ".cfi_restore 13(?:\n|\[ \\t\]+#)" 1 } } */
/* { dg-final { scan-assembler-times "popq\[^\n\r]*%r15(?:\n|\[ \\t\]+#)" 1 } } */