aboutsummaryrefslogtreecommitdiff
path: root/gcc/config/avr/avr.md
diff options
context:
space:
mode:
authorGeorg-Johann Lay <avr@gjlay.de>2012-02-23 15:35:27 +0000
committerGeorg-Johann Lay <gjl@gcc.gnu.org>2012-02-23 15:35:27 +0000
commitf71f1418cf5d50077cba55eaa2abfe843957c78a (patch)
tree2974c5dda57380338cdc65c273f09926e34a8859 /gcc/config/avr/avr.md
parenta348dc7ff9f28f7ac5ba4688b0c532b6710acb9b (diff)
downloadgcc-f71f1418cf5d50077cba55eaa2abfe843957c78a.zip
gcc-f71f1418cf5d50077cba55eaa2abfe843957c78a.tar.gz
gcc-f71f1418cf5d50077cba55eaa2abfe843957c78a.tar.bz2
avr.md (code_stdname): Add ior, xor.
* config/avr/avr.md (code_stdname): Add ior, xor. (xior): New code iterator. (*<code_stdname><mode>qi.byte0): Use xior instead of ior. (*<code_stdname><mode>qi.byte1-3): Ditto. From-SVN: r184509
Diffstat (limited to 'gcc/config/avr/avr.md')
-rw-r--r--gcc/config/avr/avr.md24
1 files changed, 16 insertions, 8 deletions
diff --git a/gcc/config/avr/avr.md b/gcc/config/avr/avr.md
index b217d03..c42f67a 100644
--- a/gcc/config/avr/avr.md
+++ b/gcc/config/avr/avr.md
@@ -231,6 +231,8 @@
(define_code_iterator any_extend [sign_extend zero_extend])
(define_code_iterator any_extend2 [sign_extend zero_extend])
+(define_code_iterator xior [xor ior])
+
;; Define code attributes
(define_code_attr extend_su
[(sign_extend "s")
@@ -254,6 +256,8 @@
[(ashift "ashl")
(ashiftrt "ashr")
(lshiftrt "lshr")
+ (ior "ior")
+ (xor "xor")
(rotate "rotl")])
;;========================================================================
@@ -5960,24 +5964,28 @@
;; in particular when subreg lowering (-fsplit-wide-types) is turned on.
;; That switch obfuscates things here and in many other places.
-(define_insn_and_split "*ior<mode>qi.byte0"
+;; "*iorhiqi.byte0" "*iorpsiqi.byte0" "*iorsiqi.byte0"
+;; "*xorhiqi.byte0" "*xorpsiqi.byte0" "*xorsiqi.byte0"
+(define_insn_and_split "*<code_stdname><mode>qi.byte0"
[(set (match_operand:HISI 0 "register_operand" "=r")
- (ior:HISI
+ (xior:HISI
(zero_extend:HISI (match_operand:QI 1 "register_operand" "r"))
(match_operand:HISI 2 "register_operand" "0")))]
""
"#"
"reload_completed"
[(set (match_dup 3)
- (ior:QI (match_dup 3)
- (match_dup 1)))]
+ (xior:QI (match_dup 3)
+ (match_dup 1)))]
{
operands[3] = simplify_gen_subreg (QImode, operands[0], <MODE>mode, 0);
})
-(define_insn_and_split "*ior<mode>qi.byte1-3"
+;; "*iorhiqi.byte1-3" "*iorpsiqi.byte1-3" "*iorsiqi.byte1-3"
+;; "*xorhiqi.byte1-3" "*xorpsiqi.byte1-3" "*xorsiqi.byte1-3"
+(define_insn_and_split "*<code_stdname><mode>qi.byte1-3"
[(set (match_operand:HISI 0 "register_operand" "=r")
- (ior:HISI
+ (xior:HISI
(ashift:HISI (zero_extend:HISI (match_operand:QI 1 "register_operand" "r"))
(match_operand:QI 2 "const_8_16_24_operand" "n"))
(match_operand:HISI 3 "register_operand" "0")))]
@@ -5985,8 +5993,8 @@
"#"
"&& reload_completed"
[(set (match_dup 4)
- (ior:QI (match_dup 4)
- (match_dup 1)))]
+ (xior:QI (match_dup 4)
+ (match_dup 1)))]
{
int byteno = INTVAL(operands[2]) / BITS_PER_UNIT;
operands[4] = simplify_gen_subreg (QImode, operands[0], <MODE>mode, byteno);