OSDN Git Service

2007-02-18 David Edelsohn <edelsohn@gnu.org>
authordje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 18 Feb 2007 20:55:31 +0000 (20:55 +0000)
committerdje <dje@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 18 Feb 2007 20:55:31 +0000 (20:55 +0000)
            Roger Sayle  <roger@eyesopen.com>

        * 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
gcc/config/rs6000/rs6000.md

index 751d6c1..c797248 100644 (file)
@@ -1,3 +1,8 @@
+2007-02-18  David Edelsohn  <edelsohn@gnu.org>
+           Roger Sayle  <roger@eyesopen.com>
+
+       * config/rs6000/rs6000.md (bswapsi2): New define_insn and splitter.
+
 2007-02-18  Sandra Loosemore  <sandra@codesourcery.com>
 
        * calls.c (initialize_argument_information): Pass original EXP
index 21959a5..54202e4 100644 (file)
     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" ""))