summaryrefslogtreecommitdiff
path: root/gcc/config/i386/constraints.md
diff options
context:
space:
mode:
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>2012-04-09 09:57:13 +0000
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>2012-04-09 09:57:13 +0000
commit259ad1be81da18d872d0c62f267c51d0372acf72 (patch)
tree23e7af90aa24af732316cc754ee0cff9a03ebe6c /gcc/config/i386/constraints.md
parent1f894d5de8f051dc8886427fe13de49a3392419e (diff)
downloadgcc-259ad1be81da18d872d0c62f267c51d0372acf72.tar.gz
PR target/52883
* config/i386/predicates.md (x86_64_zext_general_operand): Prevent VOIDmode immediate operands. * config/i386/constraints.md (Wz): New constraint. * config/i386/i386.md (*zero_extendsidi2_rex64): Use Wz instead of Z. testsuite/ChangeLog: PR target/52883 * gcc.target/i386/pr52883.c: New testcase. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@186243 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/i386/constraints.md')
-rw-r--r--gcc/config/i386/constraints.md12
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/config/i386/constraints.md b/gcc/config/i386/constraints.md
index 9537d934ade..fda1a0488e8 100644
--- a/gcc/config/i386/constraints.md
+++ b/gcc/config/i386/constraints.md
@@ -18,7 +18,7 @@
;; <http://www.gnu.org/licenses/>.
;;; Unused letters:
-;;; B H T W
+;;; B H T
;;; h k v
;; Integer register constraints.
@@ -199,6 +199,16 @@
instructions)."
(match_operand 0 "x86_64_immediate_operand"))
+;; We use W prefix to denote any number of
+;; constant-or-symbol-reference constraints
+
+(define_constraint "Wz"
+ "32-bit unsigned integer constant, or a symbolic reference known
+ to fit that range (for zero-extending conversion operations that
+ require non-VOIDmode immediate operands)."
+ (and (match_operand 0 "x86_64_zext_immediate_operand")
+ (match_test "GET_MODE (op) != VOIDmode")))
+
(define_constraint "Z"
"32-bit unsigned integer constant, or a symbolic reference known
to fit that range (for immediate operands in zero-extending x86-64