From de70c973ca71e90b437988bf54d8dc1ed420d7d2 Mon Sep 17 00:00:00 2001 From: dje Date: Sun, 18 Feb 2007 20:55:31 +0000 Subject: [PATCH] 2007-02-18 David Edelsohn Roger Sayle * config/rs6000/rs6000.md (bswapsi2): New define_insn and splitter. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@122104 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/config/rs6000/rs6000.md | 27 +++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 751d6c16231..c797248648b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2007-02-18 David Edelsohn + Roger Sayle + + * config/rs6000/rs6000.md (bswapsi2): New define_insn and splitter. + 2007-02-18 Sandra Loosemore * calls.c (initialize_argument_information): Pass original EXP diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 21959a53f0f..54202e489f4 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -2186,6 +2186,33 @@ DONE; }) +(define_insn "bswapsi2" + [(set (match_operand:SI 0 "reg_or_mem_operand" "=r,Z,&r") + (bswap:SI (match_operand:SI 1 "reg_or_mem_operand" "Z,r,r")))] + "" + "@ + {lbrx|lwbrx} %0,%y1 + {stbrx|stwbrx} %1,%y0 + #" + [(set_attr "length" "4,4,12")]) + +(define_split + [(set (match_operand:SI 0 "gpc_reg_operand" "") + (bswap:SI (match_operand:SI 1 "gpc_reg_operand" "")))] + "reload_completed" + [(set (match_dup 0) + (rotate:SI (match_dup 1) (const_int 8))) + (set (zero_extract:SI (match_dup 0) + (const_int 8) + (const_int 0)) + (match_dup 1)) + (set (zero_extract:SI (match_dup 0) + (const_int 8) + (const_int 16)) + (rotate:SI (match_dup 1) + (const_int 16)))] + "") + (define_expand "mulsi3" [(use (match_operand:SI 0 "gpc_reg_operand" "")) (use (match_operand:SI 1 "gpc_reg_operand" "")) -- 2.11.0