summaryrefslogtreecommitdiff
path: root/gcc/config/i386/constraints.md
diff options
context:
space:
mode:
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>2017-05-30 17:18:25 +0000
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>2017-05-30 17:18:25 +0000
commitc8bc21975193413ddda62f7aac988326e9846c58 (patch)
treef12efd36a58a9af8380bfbc533ceb787e1f9949d /gcc/config/i386/constraints.md
parent1b144f1382f9ce9f65527340cf4d29703c95949d (diff)
downloadgcc-c8bc21975193413ddda62f7aac988326e9846c58.tar.gz
PR target/80833
* config/i386/constraints.md (Yd): New constraint. (Ye): Ditto. * config/i386/i386.md (*movti_internal): Add (?r, Ye) and (?Yd, r) alternatives. Update insn attributes. * config/i386/i386.md (*movti_internal): Add (?r, *Ye) and (?*Yd, r) alternatives. Update insn attributes. (double-mode inter-unit splitters): Add new GR<->XMM splitters. testsuite/ChangeLog: PR target/80833 * gcc.target/i386/pr80833-1.c: New test. * gcc.target/i386/pr80833-2.c: Ditto. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@248691 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/i386/constraints.md')
-rw-r--r--gcc/config/i386/constraints.md26
1 files changed, 24 insertions, 2 deletions
diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md
index 816704fd2e1..f94e274358b 100644
--- a/gcc/config/i386/constraints.md
+++ b/gcc/config/i386/constraints.md
@@ -102,18 +102,24 @@
;; c SSE inter-unit conversions enabled
;; i SSE2 inter-unit moves to SSE register enabled
;; j SSE2 inter-unit moves from SSE register enabled
+;; d any EVEX encodable SSE register for AVX512BW target or any SSE register
+;; for SSE4_1 target, when inter-unit moves to SSE register are enabled
+;; e any EVEX encodable SSE register for AVX512BW target or any SSE register
+;; for SSE4_1 target, when inter-unit moves from SSE register are enabled
;; m MMX inter-unit moves to MMX register enabled
;; n MMX inter-unit moves from MMX register enabled
+;; p Integer register when TARGET_PARTIAL_REG_STALL is disabled
;; a Integer register when zero extensions with AND are disabled
;; b Any register that can be used as the GOT base when calling
;; ___tls_get_addr: that is, any general register except EAX
;; and ESP, for -fno-plt if linker supports it. Otherwise,
;; EBX.
-;; p Integer register when TARGET_PARTIAL_REG_STALL is disabled
;; f x87 register when 80387 floating point arithmetic is enabled
;; r SSE regs not requiring REX prefix when prefixes avoidance is enabled
;; and all SSE regs otherwise
-;; h EVEX encodable SSE register with number factor of four
+;; v any EVEX encodable SSE register for AVX512VL target,
+;; otherwise any SSE register
+;; h EVEX encodable SSE register with number factor of four
(define_register_constraint "Yz" "TARGET_SSE ? SSE_FIRST_REG : NO_REGS"
"First SSE register (@code{%xmm0}).")
@@ -130,6 +136,22 @@
"TARGET_SSE2 && TARGET_INTER_UNIT_MOVES_FROM_VEC ? ALL_SSE_REGS : NO_REGS"
"@internal Any SSE register, when SSE2 and inter-unit moves from vector registers are enabled.")
+(define_register_constraint "Yd"
+ "TARGET_INTER_UNIT_MOVES_TO_VEC
+ ? (TARGET_AVX512BW
+ ? ALL_SSE_REGS
+ : (TARGET_SSE4_1 ? SSE_REGS : NO_REGS))
+ : NO_REGS"
+ "@internal Any EVEX encodable SSE register (@code{%xmm0-%xmm31}) for AVX512BW target or any SSE register for SSE4_1 target, when inter-unit moves to vector registers are enabled.")
+
+(define_register_constraint "Ye"
+ "TARGET_INTER_UNIT_MOVES_FROM_VEC
+ ? (TARGET_AVX512BW
+ ? ALL_SSE_REGS
+ : (TARGET_SSE4_1 ? SSE_REGS : NO_REGS))
+ : NO_REGS"
+ "@internal Any EVEX encodable SSE register (@code{%xmm0-%xmm31}) for AVX512BW target or any SSE register for SSE4_1 target, when inter-unit moves from vector registers are enabled.")
+
(define_register_constraint "Ym"
"TARGET_MMX && TARGET_INTER_UNIT_MOVES_TO_VEC ? MMX_REGS : NO_REGS"
"@internal Any MMX register, when inter-unit moves to vector registers are enabled.")