aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2020-09-23 12:11:45 -0700
committerH.J. Lu <hjl.tools@gmail.com>2020-09-30 05:34:37 -0700
commit46183c96d2aea8181efb6bc3cfdb221987fe002d (patch)
tree1e4fce32da5981a4c7bf6e62dcb6167563d9b80e /gcc/config
parent4c0eb14bc8553d6e97f1cf70276c6a4fa67b7c38 (diff)
downloadgcc-46183c96d2aea8181efb6bc3cfdb221987fe002d.zip
gcc-46183c96d2aea8181efb6bc3cfdb221987fe002d.tar.gz
gcc-46183c96d2aea8181efb6bc3cfdb221987fe002d.tar.bz2
x86: Use SET operation in MOVDIRI and MOVDIR64B
Since MOVDIRI and MOVDIR64B write to memory, similar to UNSPEC_MOVNT, use SET operation in MOVDIRI and MOVDIR64B patterns with UNSPEC instead of UNSPECV. gcc/ PR target/97184 * config/i386/i386.md (UNSPECV_MOVDIRI): Renamed to ... (UNSPEC_MOVDIRI): This. (UNSPECV_MOVDIR64B): Renamed to ... (UNSPEC_MOVDIR64B): This. (movdiri<mode>): Use SET operation. (@movdir64b_<mode>): Likewise. gcc/testsuite/ PR target/97184 * gcc.target/i386/movdir64b.c: New test. * gcc.target/i386/movdiri32.c: Likewise. * gcc.target/i386/movdiri64.c: Likewise. * lib/target-supports.exp (check_effective_target_movdir): New.
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/i386/i386.md20
1 files changed, 10 insertions, 10 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 93aae81..9dd12cf 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -186,6 +186,10 @@
;; IRET support
UNSPEC_INTERRUPT_RETURN
+
+ ;; For MOVDIRI and MOVDIR64B support
+ UNSPEC_MOVDIRI
+ UNSPEC_MOVDIR64B
])
(define_c_enum "unspecv" [
@@ -280,10 +284,6 @@
UNSPECV_SETSSBSY
UNSPECV_CLRSSBSY
- ;; For MOVDIRI and MOVDIR64B support
- UNSPECV_MOVDIRI
- UNSPECV_MOVDIR64B
-
;; For TSXLDTRK support
UNSPECV_XSUSLDTRK
UNSPECV_XRESLDTRK
@@ -21531,17 +21531,17 @@
;; MOVDIRI and MOVDIR64B
(define_insn "movdiri<mode>"
- [(unspec_volatile:SWI48 [(match_operand:SWI48 0 "memory_operand" "m")
- (match_operand:SWI48 1 "register_operand" "r")]
- UNSPECV_MOVDIRI)]
+ [(set (match_operand:SWI48 0 "memory_operand" "=m")
+ (unspec:SWI48 [(match_operand:SWI48 1 "register_operand" "r")]
+ UNSPEC_MOVDIRI))]
"TARGET_MOVDIRI"
"movdiri\t{%1, %0|%0, %1}"
[(set_attr "type" "other")])
(define_insn "@movdir64b_<mode>"
- [(unspec_volatile:XI [(match_operand:P 0 "register_operand" "r")
- (match_operand:XI 1 "memory_operand")]
- UNSPECV_MOVDIR64B)]
+ [(set (mem:XI (match_operand:P 0 "register_operand" "r"))
+ (unspec:XI [(match_operand:XI 1 "memory_operand" "m")]
+ UNSPEC_MOVDIR64B))]
"TARGET_MOVDIR64B"
"movdir64b\t{%1, %0|%0, %1}"
[(set_attr "type" "other")])