diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-04-25 19:40:31 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-04-25 19:40:31 +0000 |
commit | b828abf1a797a35c674001a31c4155cb5932f6c5 (patch) | |
tree | d914897361013a3a4fbb4d54ab0e5282746ff053 /gcc/config/i386/i386.md | |
parent | 89336bc382c4b9b7551b33551a5dee9d64f62e4c (diff) | |
download | gcc-b828abf1a797a35c674001a31c4155cb5932f6c5.tar.gz |
PR target/53110
* config/i386/i386.md (and<mode>3): For andq $0xffffffff, reg
instead expand it as zero extension.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@186839 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/i386/i386.md')
-rw-r--r-- | gcc/config/i386/i386.md | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 0b2fe554639..60439f9fbd6 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -7694,7 +7694,17 @@ (and:SWIM (match_operand:SWIM 1 "nonimmediate_operand") (match_operand:SWIM 2 "<general_szext_operand>")))] "" - "ix86_expand_binary_operator (AND, <MODE>mode, operands); DONE;") +{ + if (<MODE>mode == DImode + && GET_CODE (operands[2]) == CONST_INT + && INTVAL (operands[2]) == (HOST_WIDE_INT) 0xffffffff + && REG_P (operands[1])) + emit_insn (gen_zero_extendsidi2 (operands[0], + gen_lowpart (SImode, operands[1]))); + else + ix86_expand_binary_operator (AND, <MODE>mode, operands); + DONE; +}) (define_insn "*anddi_1" [(set (match_operand:DI 0 "nonimmediate_operand" "=r,rm,r,r") |