rs6000: Remove TARGET_SPE and TARGET_SPE_ABI and friends
authorSegher Boessenkool <segher@kernel.crashing.org>
Wed, 7 Jun 2017 15:22:33 +0000 (17:22 +0200)
committerSegher Boessenkool <segher@gcc.gnu.org>
Wed, 7 Jun 2017 15:22:33 +0000 (17:22 +0200)
* config/rs6000/rs6000-common.c (rs6000_handle_option): Remove
SPE ABI handling.
* config/rs6000/paired.md (paired_negv2sf2): Rename to negv2sf2.
(paired_absv2sf2, paired_addv2sf3, paired_subv2sf3, paired_mulv2sf3,
paired_divv2sf3): Similar.
* config/rs6000/predicates.md: Replace TARGET_SPE, TARGET_SPE_ABI,
SPE_VECTOR_MODE and SPE_HIGH_REGNO_P by 0; simplify.
* config/rs6000/rs6000-builtin.def: Delete RS6000_BUILTIN_E and
RS6000_BUILTIN_S.
Delete BU_SPE_1, BU_SPE_2, BU_SPE_3, BU_SPE_E, BU_SPE_P, and BU_SPE_X.
Rename the paired_* instruction patterns.
* config/rs6000/rs6000-c.c (rs6000_target_modify_macros): Do not
define __SPE__.
* config/rs6000/rs6000-protos.h (invalid_e500_subreg): Delete.
* config/rs6000/rs6000.c: Delete RS6000_BUILTIN_E and RS6000_BUILTIN_S.
(struct rs6000_stack): Delete fields spe_gp_save_offset, spe_gp_size,
spe_padding_size, and spe_64bit_regs_used.  Replace TARGET_SPE and
TARGET_SPE_ABI with 0, simplify.  Replace SPE_VECTOR_MODE with
PAIRED_VECTOR_MODE.
(struct machine_function): Delete field spe_insn_chain_scanned_p.
(spe_func_has_64bit_regs_p): Delete.
(spe_expand_predicate_builtin): Delete.
(spe_expand_evsel_builtin): Delete.
(TARGET_DWARF_REGISTER_SPAN): Do not define.
(TARGET_MEMBER_TYPE_FORCES_BLK): Do not define.
(invalid_e500_subreg): Delete.
(rs6000_legitimize_address): Always force_reg op2 as well, for
paired single memory accesses.
(rs6000_member_type_forces_blk): Delete.
(rs6000_spe_function_arg): Delete.
(rs6000_expand_unop_builtin): Delete SPE handling.
(rs6000_expand_binop_builtin): Ditto.
(spe_expand_stv_builtin): Delete.
(bdesc_2arg_spe): Delete.
(spe_expand_builtin): Delete.
(spe_expand_predicate_builtin): Delete.
(spe_expand_evsel_builtin): Delete.
(rs6000_invalid_builtin): Remove RS6000_BTM_SPE handling.
(spe_init_builtins): Delete.
(spe_func_has_64bit_regs_p): Delete.
(savres_routine_name): Delete "info" parameter.  Adjust callers.
(rs6000_emit_stack_reset): Ditto.
(rs6000_dwarf_register_span): Delete.
* config/rs6000/rs6000.h (TARGET_SPE_ABI, TARGET_SPE,
UNITS_PER_SPE_WORD, SPE_HIGH_REGNO_P, SPE_SIMD_REGNO_P,
SPE_VECTOR_MODE, RS6000_BTM_SPE, RS6000_BUILTIN_E, RS6000_BUILTIN_S):
Delete.
* config/rs6000/rs6000.md (FIRST_SPE_HIGH_REGNO, LAST_SPE_HIGH_REGNO):
Delete.
* config/rs6000/rs6000.opt (-mabi=spe, -mabi=no-spe): Delete.
* config/rs6000/spe.md: Delete every pattern that uses TARGET_SPE.
* config/rs6000/vector.md (absv2sf2, negv2sf2, addv2sf3, subv2sf3,
mulv2sf3, divv2sf3): Delete expanders.

From-SVN: r248980

13 files changed:
gcc/ChangeLog
gcc/common/config/rs6000/rs6000-common.c
gcc/config/rs6000/paired.md
gcc/config/rs6000/predicates.md
gcc/config/rs6000/rs6000-builtin.def
gcc/config/rs6000/rs6000-c.c
gcc/config/rs6000/rs6000-protos.h
gcc/config/rs6000/rs6000.c
gcc/config/rs6000/rs6000.h
gcc/config/rs6000/rs6000.md
gcc/config/rs6000/rs6000.opt
gcc/config/rs6000/spe.md
gcc/config/rs6000/vector.md

index c7f9ebc93bd4b2ee33a5eb3bc2a87714e94a0685..444ffb9c8246e81792da7df9b99bf8958b55031d 100644 (file)
@@ -1,3 +1,59 @@
+2017-06-07  Segher Boessenkool  <segher@kernel.crashing.org>
+
+       * config/rs6000/rs6000-common.c (rs6000_handle_option): Remove
+       SPE ABI handling.
+       * config/rs6000/paired.md (paired_negv2sf2): Rename to negv2sf2.
+       (paired_absv2sf2, paired_addv2sf3, paired_subv2sf3, paired_mulv2sf3,
+       paired_divv2sf3): Similar.
+       * config/rs6000/predicates.md: Replace TARGET_SPE, TARGET_SPE_ABI,
+       SPE_VECTOR_MODE and SPE_HIGH_REGNO_P by 0; simplify.
+       * config/rs6000/rs6000-builtin.def: Delete RS6000_BUILTIN_E and
+       RS6000_BUILTIN_S.
+       Delete BU_SPE_1, BU_SPE_2, BU_SPE_3, BU_SPE_E, BU_SPE_P, and BU_SPE_X.
+       Rename the paired_* instruction patterns.
+       * config/rs6000/rs6000-c.c (rs6000_target_modify_macros): Do not
+       define __SPE__.
+       * config/rs6000/rs6000-protos.h (invalid_e500_subreg): Delete.
+       * config/rs6000/rs6000.c: Delete RS6000_BUILTIN_E and RS6000_BUILTIN_S.
+       (struct rs6000_stack): Delete fields spe_gp_save_offset, spe_gp_size,
+       spe_padding_size, and spe_64bit_regs_used.  Replace TARGET_SPE and
+       TARGET_SPE_ABI with 0, simplify.  Replace SPE_VECTOR_MODE with
+       PAIRED_VECTOR_MODE.
+       (struct machine_function): Delete field spe_insn_chain_scanned_p.
+       (spe_func_has_64bit_regs_p): Delete.
+       (spe_expand_predicate_builtin): Delete.
+       (spe_expand_evsel_builtin): Delete.
+       (TARGET_DWARF_REGISTER_SPAN): Do not define.
+       (TARGET_MEMBER_TYPE_FORCES_BLK): Do not define.
+       (invalid_e500_subreg): Delete.
+       (rs6000_legitimize_address): Always force_reg op2 as well, for
+       paired single memory accesses.
+       (rs6000_member_type_forces_blk): Delete.
+       (rs6000_spe_function_arg): Delete.
+       (rs6000_expand_unop_builtin): Delete SPE handling.
+       (rs6000_expand_binop_builtin): Ditto.
+       (spe_expand_stv_builtin): Delete.
+       (bdesc_2arg_spe): Delete.
+       (spe_expand_builtin): Delete.
+       (spe_expand_predicate_builtin): Delete.
+       (spe_expand_evsel_builtin): Delete.
+       (rs6000_invalid_builtin): Remove RS6000_BTM_SPE handling.
+       (spe_init_builtins): Delete.
+       (spe_func_has_64bit_regs_p): Delete.
+       (savres_routine_name): Delete "info" parameter.  Adjust callers.
+       (rs6000_emit_stack_reset): Ditto.
+       (rs6000_dwarf_register_span): Delete.
+       * config/rs6000/rs6000.h (TARGET_SPE_ABI, TARGET_SPE,
+       UNITS_PER_SPE_WORD, SPE_HIGH_REGNO_P, SPE_SIMD_REGNO_P,
+       SPE_VECTOR_MODE, RS6000_BTM_SPE, RS6000_BUILTIN_E, RS6000_BUILTIN_S):
+       Delete.
+       * config/rs6000/rs6000.md (FIRST_SPE_HIGH_REGNO, LAST_SPE_HIGH_REGNO):
+       Delete.
+       * config/rs6000/rs6000.opt (-mabi=spe, -mabi=no-spe): Delete.
+       * config/rs6000/spe.md: Delete every pattern that uses TARGET_SPE.
+       * config/rs6000/vector.md (absv2sf2, negv2sf2, addv2sf3, subv2sf3,
+       mulv2sf3, divv2sf3): Delete expanders.
+
 2017-06-07  Segher Boessenkool  <segher@kernel.crashing.org>
 
        config/rs6000/rs6000.md (UNSPEC_MV_CR_GT): Delete.
index 3c0106ae555d80ded696a735d7213ef1e8588f4b..07537543ddcc40d1ab820ccd9671224129d83241 100644 (file)
@@ -207,15 +207,6 @@ rs6000_handle_option (struct gcc_options *opts, struct gcc_options *opts_set,
       break;
 #endif
 
-    case OPT_mabi_altivec:
-      /* Enabling the AltiVec ABI turns off the SPE ABI.  */
-      opts->x_rs6000_spe_abi = 0;
-      break;
-
-    case OPT_mabi_spe:
-      opts->x_rs6000_altivec_abi = 0;
-      break;
-
     case OPT_mlong_double_:
       if (value != 64 && value != 128)
        {
index 09123eec8871ab44c738f86f5e5eee209b98f549..c9f95867c0f5d183467ceb092023dc032fb0b0fa 100644 (file)
@@ -26,7 +26,7 @@
    UNSPEC_EXTODD_V2SF
   ])
 
-(define_insn "paired_negv2sf2"
+(define_insn "negv2sf2"
   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
        (neg:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")))]
   "TARGET_PAIRED_FLOAT"
@@ -40,7 +40,7 @@
   "ps_rsqrte %0,%1"
   [(set_attr "type" "fp")])
 
-(define_insn "paired_absv2sf2"
+(define_insn "absv2sf2"
   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
        (abs:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")))]
   "TARGET_PAIRED_FLOAT"
@@ -54,7 +54,7 @@
   "ps_nabs %0,%1"
   [(set_attr "type" "fp")])
 
-(define_insn "paired_addv2sf3"
+(define_insn "addv2sf3"
   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
        (plus:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "%f")
                   (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
@@ -62,7 +62,7 @@
   "ps_add %0,%1,%2"
   [(set_attr "type" "fp")])
 
-(define_insn "paired_subv2sf3"
+(define_insn "subv2sf3"
   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
         (minus:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
                     (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
@@ -70,7 +70,7 @@
   "ps_sub %0,%1,%2"
   [(set_attr "type" "fp")])
 
-(define_insn "paired_mulv2sf3"
+(define_insn "mulv2sf3"
   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
        (mult:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "%f")
                   (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
@@ -85,7 +85,7 @@
   "ps_res %0,%1"
   [(set_attr "type" "fp")])
 
-(define_insn "paired_divv2sf3"
+(define_insn "divv2sf3"
   [(set (match_operand:V2SF 0 "gpc_reg_operand" "=f")
        (div:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "f")
                  (match_operand:V2SF 2 "gpc_reg_operand" "f")))]
index 11aecbd1b89c0cc226dd485da84ea4b7b81255d6..4edfdbbe0d9e0bc71a6a1605b783441cd35f8b77 100644 (file)
 (define_predicate "gpc_reg_operand"
   (match_operand 0 "register_operand")
 {
-  if (TARGET_SPE && invalid_e500_subreg (op, mode))
-    return 0;
-
   if (GET_CODE (op) == SUBREG)
     {
       if (TARGET_NO_SF_SUBREG && sf_subreg_operand (op, mode))
 (define_predicate "int_reg_operand"
   (match_operand 0 "register_operand")
 {
-  if (TARGET_SPE && invalid_e500_subreg (op, mode))
-    return 0;
-
   if (GET_CODE (op) == SUBREG)
     {
       if (TARGET_NO_SF_SUBREG && sf_subreg_operand (op, mode))
 (define_predicate "int_reg_operand_not_pseudo"
   (match_operand 0 "register_operand")
 {
-  if (TARGET_SPE && invalid_e500_subreg (op, mode))
-    return 0;
-
   if (GET_CODE (op) == SUBREG)
     op = SUBREG_REG (op);
 
       return easy_altivec_constant (op, mode);
     }
 
-  if (SPE_VECTOR_MODE (mode))
-    {
-      int cst, cst2;
-      if (zero_constant (op, mode))
-       return true;
-      if (GET_MODE_CLASS (mode) != MODE_VECTOR_INT)
-        return false;
-
-      /* Limit SPE vectors to 15 bits signed.  These we can generate with:
-          li r0, CONSTANT1
-          evmergelo r0, r0, r0
-          li r0, CONSTANT2
-
-        I don't know how efficient it would be to allow bigger constants,
-        considering we'll have an extra 'ori' for every 'li'.  I doubt 5
-        instructions is better than a 64-bit memory load, but I don't
-        have the e500 timing specs.  */
-      if (mode == V2SImode)
-       {
-         cst  = INTVAL (CONST_VECTOR_ELT (op, 0));
-         cst2 = INTVAL (CONST_VECTOR_ELT (op, 1));
-         return cst  >= -0x7fff && cst <= 0x7fff
-                && cst2 >= -0x7fff && cst2 <= 0x7fff;
-       }
-    }
-
   return false;
 })
 
       && easy_vector_constant (op, mode))
     return 1;
 
-  /* Do not allow invalid E500 subregs.  */
-  if (TARGET_SPE
-      && GET_CODE (op) == SUBREG
-      && invalid_e500_subreg (op, mode))
-    return 0;
-
   /* For floating-point or multi-word mode, the only remaining valid type
      is a register.  */
   if (SCALAR_FLOAT_MODE_P (mode)
   return gpc_reg_operand (op, mode);
 })
 
-;; Return true if OP is a non-immediate operand and not an invalid
-;; SUBREG operation on the e500.
+;; Return true if OP is a non-immediate operand.
 (define_predicate "rs6000_nonimmediate_operand"
   (match_code "reg,subreg,mem")
 {
-  if (TARGET_SPE
-      && GET_CODE (op) == SUBREG
-      && invalid_e500_subreg (op, mode))
-    return 0;
-
   return nonimmediate_operand (op, mode);
 })
 
index de6b2ccee1f2b13f98042c427d7a30c92ad3b690..241c4395ce918a8446bad28f97e0918eda81a49a 100644 (file)
    RS6000_BUILTIN_3 -- 3 arg builtins
    RS6000_BUILTIN_A -- ABS builtins
    RS6000_BUILTIN_D -- DST builtins
-   RS6000_BUILTIN_E -- SPE EVSEL builtins.
    RS6000_BUILTIN_H -- HTM builtins
    RS6000_BUILTIN_P -- Altivec, VSX, ISA 2.07 vector predicate builtins
    RS6000_BUILTIN_Q -- Paired floating point VSX predicate builtins
-   RS6000_BUILTIN_S -- SPE predicate builtins
    RS6000_BUILTIN_X -- special builtins
 
    Each of the above macros takes 4 arguments:
   #error "RS6000_BUILTIN_D is not defined."
 #endif
 
-#ifndef RS6000_BUILTIN_E
-  #error "RS6000_BUILTIN_E is not defined."
-#endif
-
 #ifndef RS6000_BUILTIN_H
   #error "RS6000_BUILTIN_H is not defined."
 #endif
   #error "RS6000_BUILTIN_Q is not defined."
 #endif
 
-#ifndef RS6000_BUILTIN_S
-  #error "RS6000_BUILTIN_S is not defined."
-#endif
-
 #ifndef RS6000_BUILTIN_X
   #error "RS6000_BUILTIN_X is not defined."
 #endif
                     | RS6000_BTC_VOID),                                \
                    CODE_FOR_ ## ICODE)                 /* ICODE */
 
-/* SPE convenience macros.  */
-#define BU_SPE_1(ENUM, NAME, ATTR, ICODE)                              \
-  RS6000_BUILTIN_1 (SPE_BUILTIN_ ## ENUM,              /* ENUM */      \
-                   "__builtin_spe_" NAME,              /* NAME */      \
-                   RS6000_BTM_SPE,                     /* MASK */      \
-                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
-                    | RS6000_BTC_UNARY),                               \
-                   CODE_FOR_ ## ICODE)                 /* ICODE */
-
-#define BU_SPE_2(ENUM, NAME, ATTR, ICODE)                              \
-  RS6000_BUILTIN_2 (SPE_BUILTIN_ ## ENUM,              /* ENUM */      \
-                   "__builtin_spe_" NAME,              /* NAME */      \
-                   RS6000_BTM_SPE,                     /* MASK */      \
-                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
-                    | RS6000_BTC_BINARY),                              \
-                   CODE_FOR_ ## ICODE)                 /* ICODE */
-
-#define BU_SPE_3(ENUM, NAME, ATTR, ICODE)                              \
-  RS6000_BUILTIN_3 (SPE_BUILTIN_ ## ENUM,              /* ENUM */      \
-                   "__builtin_spe_" NAME,              /* NAME */      \
-                   RS6000_BTM_SPE,                     /* MASK */      \
-                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
-                    | RS6000_BTC_TERNARY),                             \
-                   CODE_FOR_ ## ICODE)                 /* ICODE */
-
-#define BU_SPE_E(ENUM, NAME, ATTR, ICODE)                              \
-  RS6000_BUILTIN_E (SPE_BUILTIN_ ## ENUM,              /* ENUM */      \
-                   "__builtin_spe_" NAME,              /* NAME */      \
-                   RS6000_BTM_SPE,                     /* MASK */      \
-                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
-                    | RS6000_BTC_EVSEL),                               \
-                   CODE_FOR_ ## ICODE)                 /* ICODE */
-
-#define BU_SPE_P(ENUM, NAME, ATTR, ICODE)                              \
-  RS6000_BUILTIN_S (SPE_BUILTIN_ ## ENUM,              /* ENUM */      \
-                   "__builtin_spe_" NAME,              /* NAME */      \
-                   RS6000_BTM_SPE,                     /* MASK */      \
-                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
-                    | RS6000_BTC_PREDICATE),                           \
-                   CODE_FOR_ ## ICODE)                 /* ICODE */
-
-#define BU_SPE_X(ENUM, NAME, ATTR)                                     \
-  RS6000_BUILTIN_X (SPE_BUILTIN_ ## ENUM,              /* ENUM */      \
-                   "__builtin_spe_" NAME,              /* NAME */      \
-                   RS6000_BTM_SPE,                     /* MASK */      \
-                   (RS6000_BTC_ ## ATTR                /* ATTR */      \
-                    | RS6000_BTC_SPECIAL),                             \
-                   CODE_FOR_nothing)                   /* ICODE */
-
 /* Paired floating point convenience macros.  */
 #define BU_PAIRED_1(ENUM, NAME, ATTR, ICODE)                           \
   RS6000_BUILTIN_1 (PAIRED_BUILTIN_ ## ENUM,           /* ENUM */      \
@@ -2370,10 +2311,10 @@ BU_PAIRED_3 (SUM1,            "sum1",           FP,     paired_sum1)
 BU_PAIRED_3 (SELV2SF4,        "selv2sf4",       CONST,         selv2sf4)
 
 /* 2 argument paired floating point builtins.  */
-BU_PAIRED_2 (DIVV2SF3,       "divv2sf3",       FP,     paired_divv2sf3)
-BU_PAIRED_2 (ADDV2SF3,       "addv2sf3",       FP,     paired_addv2sf3)
-BU_PAIRED_2 (SUBV2SF3,       "subv2sf3",       FP,     paired_subv2sf3)
-BU_PAIRED_2 (MULV2SF3,       "mulv2sf3",       FP,     paired_mulv2sf3)
+BU_PAIRED_2 (DIVV2SF3,       "divv2sf3",       FP,     divv2sf3)
+BU_PAIRED_2 (ADDV2SF3,       "addv2sf3",       FP,     addv2sf3)
+BU_PAIRED_2 (SUBV2SF3,       "subv2sf3",       FP,     subv2sf3)
+BU_PAIRED_2 (MULV2SF3,       "mulv2sf3",       FP,     mulv2sf3)
 BU_PAIRED_2 (MULS0,          "muls0",          FP,     paired_muls0)
 BU_PAIRED_2 (MULS1,          "muls1",          FP,     paired_muls1)
 BU_PAIRED_2 (MERGE00,        "merge00",        CONST,  paired_merge00)
@@ -2382,9 +2323,9 @@ BU_PAIRED_2 (MERGE10,           "merge10",        CONST,  paired_merge10)
 BU_PAIRED_2 (MERGE11,        "merge11",        CONST,  paired_merge11)
 
 /* 1 argument paired floating point builtin functions.  */
-BU_PAIRED_1 (ABSV2SF2,       "absv2sf2",       CONST,  paired_absv2sf2)
+BU_PAIRED_1 (ABSV2SF2,       "absv2sf2",       CONST,  absv2sf2)
 BU_PAIRED_1 (NABSV2SF2,              "nabsv2sf2",      CONST,  nabsv2sf2)
-BU_PAIRED_1 (NEGV2SF2,       "negv2sf2",       CONST,  paired_negv2sf2)
+BU_PAIRED_1 (NEGV2SF2,       "negv2sf2",       CONST,  negv2sf2)
 BU_PAIRED_1 (SQRTV2SF2,              "sqrtv2sf2",      FP,     sqrtv2sf2)
 BU_PAIRED_1 (RESV2SF,        "resv2sf2",       FP,     resv2sf2)
 
@@ -2395,248 +2336,6 @@ BU_PAIRED_X (LX,              "lx",             MISC)
 /* Paired predicates.  */
 BU_PAIRED_P (CMPU0,    "cmpu0",        CONST,  paired_cmpu0)
 BU_PAIRED_P (CMPU1,    "cmpu1",        CONST,  paired_cmpu1)
-\f
-/* PowerPC E500 builtins (SPE).  */
-
-BU_SPE_2 (EVADDW,      "evaddw",       MISC,   addv2si3)
-BU_SPE_2 (EVAND,       "evand",        MISC,   andv2si3)
-BU_SPE_2 (EVANDC,      "evandc",       MISC,   spe_evandc)
-BU_SPE_2 (EVDIVWS,     "evdivws",      MISC,   divv2si3)
-BU_SPE_2 (EVDIVWU,     "evdivwu",      MISC,   spe_evdivwu)
-BU_SPE_2 (EVEQV,       "eveqv",        MISC,   spe_eveqv)
-BU_SPE_2 (EVFSADD,     "evfsadd",      MISC,   spe_evfsadd)
-BU_SPE_2 (EVFSDIV,     "evfsdiv",      MISC,   spe_evfsdiv)
-BU_SPE_2 (EVFSMUL,     "evfsmul",      MISC,   spe_evfsmul)
-BU_SPE_2 (EVFSSUB,     "evfssub",      MISC,   spe_evfssub)
-BU_SPE_2 (EVMERGEHI,   "evmergehi",    MISC,   spe_evmergehi)
-BU_SPE_2 (EVMERGEHILO, "evmergehilo",  MISC,   spe_evmergehilo)
-BU_SPE_2 (EVMERGELO,   "evmergelo",    MISC,   spe_evmergelo)
-BU_SPE_2 (EVMERGELOHI, "evmergelohi",  MISC,   spe_evmergelohi)
-BU_SPE_2 (EVMHEGSMFAA, "evmhegsmfaa",  MISC,   spe_evmhegsmfaa)
-BU_SPE_2 (EVMHEGSMFAN, "evmhegsmfan",  MISC,   spe_evmhegsmfan)
-BU_SPE_2 (EVMHEGSMIAA, "evmhegsmiaa",  MISC,   spe_evmhegsmiaa)
-BU_SPE_2 (EVMHEGSMIAN, "evmhegsmian",  MISC,   spe_evmhegsmian)
-BU_SPE_2 (EVMHEGUMIAA, "evmhegumiaa",  MISC,   spe_evmhegumiaa)
-BU_SPE_2 (EVMHEGUMIAN, "evmhegumian",  MISC,   spe_evmhegumian)
-BU_SPE_2 (EVMHESMF,    "evmhesmf",     MISC,   spe_evmhesmf)
-BU_SPE_2 (EVMHESMFA,   "evmhesmfa",    MISC,   spe_evmhesmfa)
-BU_SPE_2 (EVMHESMFAAW, "evmhesmfaaw",  MISC,   spe_evmhesmfaaw)
-BU_SPE_2 (EVMHESMFANW, "evmhesmfanw",  MISC,   spe_evmhesmfanw)
-BU_SPE_2 (EVMHESMI,    "evmhesmi",     MISC,   spe_evmhesmi)
-BU_SPE_2 (EVMHESMIA,   "evmhesmia",    MISC,   spe_evmhesmia)
-BU_SPE_2 (EVMHESMIAAW, "evmhesmiaaw",  MISC,   spe_evmhesmiaaw)
-BU_SPE_2 (EVMHESMIANW, "evmhesmianw",  MISC,   spe_evmhesmianw)
-BU_SPE_2 (EVMHESSF,    "evmhessf",     MISC,   spe_evmhessf)
-BU_SPE_2 (EVMHESSFA,   "evmhessfa",    MISC,   spe_evmhessfa)
-BU_SPE_2 (EVMHESSFAAW, "evmhessfaaw",  MISC,   spe_evmhessfaaw)
-BU_SPE_2 (EVMHESSFANW, "evmhessfanw",  MISC,   spe_evmhessfanw)
-BU_SPE_2 (EVMHESSIAAW, "evmhessiaaw",  MISC,   spe_evmhessiaaw)
-BU_SPE_2 (EVMHESSIANW, "evmhessianw",  MISC,   spe_evmhessianw)
-BU_SPE_2 (EVMHEUMI,    "evmheumi",     MISC,   spe_evmheumi)
-BU_SPE_2 (EVMHEUMIA,   "evmheumia",    MISC,   spe_evmheumia)
-BU_SPE_2 (EVMHEUMIAAW, "evmheumiaaw",  MISC,   spe_evmheumiaaw)
-BU_SPE_2 (EVMHEUMIANW, "evmheumianw",  MISC,   spe_evmheumianw)
-BU_SPE_2 (EVMHEUSIAAW, "evmheusiaaw",  MISC,   spe_evmheusiaaw)
-BU_SPE_2 (EVMHEUSIANW, "evmheusianw",  MISC,   spe_evmheusianw)
-BU_SPE_2 (EVMHOGSMFAA, "evmhogsmfaa",  MISC,   spe_evmhogsmfaa)
-BU_SPE_2 (EVMHOGSMFAN, "evmhogsmfan",  MISC,   spe_evmhogsmfan)
-BU_SPE_2 (EVMHOGSMIAA, "evmhogsmiaa",  MISC,   spe_evmhogsmiaa)
-BU_SPE_2 (EVMHOGSMIAN, "evmhogsmian",  MISC,   spe_evmhogsmian)
-BU_SPE_2 (EVMHOGUMIAA, "evmhogumiaa",  MISC,   spe_evmhogumiaa)
-BU_SPE_2 (EVMHOGUMIAN, "evmhogumian",  MISC,   spe_evmhogumian)
-BU_SPE_2 (EVMHOSMF,    "evmhosmf",     MISC,   spe_evmhosmf)
-BU_SPE_2 (EVMHOSMFA,   "evmhosmfa",    MISC,   spe_evmhosmfa)
-BU_SPE_2 (EVMHOSMFAAW, "evmhosmfaaw",  MISC,   spe_evmhosmfaaw)
-BU_SPE_2 (EVMHOSMFANW, "evmhosmfanw",  MISC,   spe_evmhosmfanw)
-BU_SPE_2 (EVMHOSMI,    "evmhosmi",     MISC,   spe_evmhosmi)
-BU_SPE_2 (EVMHOSMIA,   "evmhosmia",    MISC,   spe_evmhosmia)
-BU_SPE_2 (EVMHOSMIAAW, "evmhosmiaaw",  MISC,   spe_evmhosmiaaw)
-BU_SPE_2 (EVMHOSMIANW, "evmhosmianw",  MISC,   spe_evmhosmianw)
-BU_SPE_2 (EVMHOSSF,    "evmhossf",     MISC,   spe_evmhossf)
-BU_SPE_2 (EVMHOSSFA,   "evmhossfa",    MISC,   spe_evmhossfa)
-BU_SPE_2 (EVMHOSSFAAW, "evmhossfaaw",  MISC,   spe_evmhossfaaw)
-BU_SPE_2 (EVMHOSSFANW, "evmhossfanw",  MISC,   spe_evmhossfanw)
-BU_SPE_2 (EVMHOSSIAAW, "evmhossiaaw",  MISC,   spe_evmhossiaaw)
-BU_SPE_2 (EVMHOSSIANW, "evmhossianw",  MISC,   spe_evmhossianw)
-BU_SPE_2 (EVMHOUMI,    "evmhoumi",     MISC,   spe_evmhoumi)
-BU_SPE_2 (EVMHOUMIA,   "evmhoumia",    MISC,   spe_evmhoumia)
-BU_SPE_2 (EVMHOUMIAAW, "evmhoumiaaw",  MISC,   spe_evmhoumiaaw)
-BU_SPE_2 (EVMHOUMIANW, "evmhoumianw",  MISC,   spe_evmhoumianw)
-BU_SPE_2 (EVMHOUSIAAW, "evmhousiaaw",  MISC,   spe_evmhousiaaw)
-BU_SPE_2 (EVMHOUSIANW, "evmhousianw",  MISC,   spe_evmhousianw)
-BU_SPE_2 (EVMWHSMF,    "evmwhsmf",     MISC,   spe_evmwhsmf)
-BU_SPE_2 (EVMWHSMFA,   "evmwhsmfa",    MISC,   spe_evmwhsmfa)
-BU_SPE_2 (EVMWHSMI,    "evmwhsmi",     MISC,   spe_evmwhsmi)
-BU_SPE_2 (EVMWHSMIA,   "evmwhsmia",    MISC,   spe_evmwhsmia)
-BU_SPE_2 (EVMWHSSF,    "evmwhssf",     MISC,   spe_evmwhssf)
-BU_SPE_2 (EVMWHSSFA,   "evmwhssfa",    MISC,   spe_evmwhssfa)
-BU_SPE_2 (EVMWHUMI,    "evmwhumi",     MISC,   spe_evmwhumi)
-BU_SPE_2 (EVMWHUMIA,   "evmwhumia",    MISC,   spe_evmwhumia)
-BU_SPE_2 (EVMWLSMIAAW, "evmwlsmiaaw",  MISC,   spe_evmwlsmiaaw)
-BU_SPE_2 (EVMWLSMIANW, "evmwlsmianw",  MISC,   spe_evmwlsmianw)
-BU_SPE_2 (EVMWLSSIAAW, "evmwlssiaaw",  MISC,   spe_evmwlssiaaw)
-BU_SPE_2 (EVMWLSSIANW, "evmwlssianw",  MISC,   spe_evmwlssianw)
-BU_SPE_2 (EVMWLUMI,    "evmwlumi",     MISC,   spe_evmwlumi)
-BU_SPE_2 (EVMWLUMIA,   "evmwlumia",    MISC,   spe_evmwlumia)
-BU_SPE_2 (EVMWLUMIAAW, "evmwlumiaaw",  MISC,   spe_evmwlumiaaw)
-BU_SPE_2 (EVMWLUMIANW, "evmwlumianw",  MISC,   spe_evmwlumianw)
-BU_SPE_2 (EVMWLUSIAAW, "evmwlusiaaw",  MISC,   spe_evmwlusiaaw)
-BU_SPE_2 (EVMWLUSIANW, "evmwlusianw",  MISC,   spe_evmwlusianw)
-BU_SPE_2 (EVMWSMF,     "evmwsmf",      MISC,   spe_evmwsmf)
-BU_SPE_2 (EVMWSMFA,    "evmwsmfa",     MISC,   spe_evmwsmfa)
-BU_SPE_2 (EVMWSMFAA,   "evmwsmfaa",    MISC,   spe_evmwsmfaa)
-BU_SPE_2 (EVMWSMFAN,   "evmwsmfan",    MISC,   spe_evmwsmfan)
-BU_SPE_2 (EVMWSMI,     "evmwsmi",      MISC,   spe_evmwsmi)
-BU_SPE_2 (EVMWSMIA,    "evmwsmia",     MISC,   spe_evmwsmia)
-BU_SPE_2 (EVMWSMIAA,   "evmwsmiaa",    MISC,   spe_evmwsmiaa)
-BU_SPE_2 (EVMWSMIAN,   "evmwsmian",    MISC,   spe_evmwsmian)
-BU_SPE_2 (EVMWSSF,     "evmwssf",      MISC,   spe_evmwssf)
-BU_SPE_2 (EVMWSSFA,    "evmwssfa",     MISC,   spe_evmwssfa)
-BU_SPE_2 (EVMWSSFAA,   "evmwssfaa",    MISC,   spe_evmwssfaa)
-BU_SPE_2 (EVMWSSFAN,   "evmwssfan",    MISC,   spe_evmwssfan)
-BU_SPE_2 (EVMWUMI,     "evmwumi",      MISC,   spe_evmwumi)
-BU_SPE_2 (EVMWUMIA,    "evmwumia",     MISC,   spe_evmwumia)
-BU_SPE_2 (EVMWUMIAA,   "evmwumiaa",    MISC,   spe_evmwumiaa)
-BU_SPE_2 (EVMWUMIAN,   "evmwumian",    MISC,   spe_evmwumian)
-BU_SPE_2 (EVNAND,      "evnand",       MISC,   spe_evnand)
-BU_SPE_2 (EVNOR,       "evnor",        MISC,   spe_evnor)
-BU_SPE_2 (EVOR,                "evor",         MISC,   spe_evor)
-BU_SPE_2 (EVORC,       "evorc",        MISC,   spe_evorc)
-BU_SPE_2 (EVRLW,       "evrlw",        MISC,   spe_evrlw)
-BU_SPE_2 (EVSLW,       "evslw",        MISC,   spe_evslw)
-BU_SPE_2 (EVSRWS,      "evsrws",       MISC,   spe_evsrws)
-BU_SPE_2 (EVSRWU,      "evsrwu",       MISC,   spe_evsrwu)
-BU_SPE_2 (EVSUBFW,     "evsubfw",      MISC,   subv2si3)
-
-/* SPE binary operations expecting a 5-bit unsigned literal.  */
-BU_SPE_2 (EVADDIW,     "evaddiw",      MISC,   spe_evaddiw)
-
-BU_SPE_2 (EVRLWI,      "evrlwi",       MISC,   spe_evrlwi)
-BU_SPE_2 (EVSLWI,      "evslwi",       MISC,   spe_evslwi)
-BU_SPE_2 (EVSRWIS,     "evsrwis",      MISC,   spe_evsrwis)
-BU_SPE_2 (EVSRWIU,     "evsrwiu",      MISC,   spe_evsrwiu)
-BU_SPE_2 (EVSUBIFW,    "evsubifw",     MISC,   spe_evsubifw)
-BU_SPE_2 (EVMWHSSFAA,  "evmwhssfaa",   MISC,   spe_evmwhssfaa)
-BU_SPE_2 (EVMWHSSMAA,  "evmwhssmaa",   MISC,   spe_evmwhssmaa)
-BU_SPE_2 (EVMWHSMFAA,  "evmwhsmfaa",   MISC,   spe_evmwhsmfaa)
-BU_SPE_2 (EVMWHSMIAA,  "evmwhsmiaa",   MISC,   spe_evmwhsmiaa)
-BU_SPE_2 (EVMWHUSIAA,  "evmwhusiaa",   MISC,   spe_evmwhusiaa)
-BU_SPE_2 (EVMWHUMIAA,  "evmwhumiaa",   MISC,   spe_evmwhumiaa)
-BU_SPE_2 (EVMWHSSFAN,  "evmwhssfan",   MISC,   spe_evmwhssfan)
-BU_SPE_2 (EVMWHSSIAN,  "evmwhssian",   MISC,   spe_evmwhssian)
-BU_SPE_2 (EVMWHSMFAN,  "evmwhsmfan",   MISC,   spe_evmwhsmfan)
-BU_SPE_2 (EVMWHSMIAN,  "evmwhsmian",   MISC,   spe_evmwhsmian)
-BU_SPE_2 (EVMWHUSIAN,  "evmwhusian",   MISC,   spe_evmwhusian)
-BU_SPE_2 (EVMWHUMIAN,  "evmwhumian",   MISC,   spe_evmwhumian)
-BU_SPE_2 (EVMWHGSSFAA, "evmwhgssfaa",  MISC,   spe_evmwhgssfaa)
-BU_SPE_2 (EVMWHGSMFAA, "evmwhgsmfaa",  MISC,   spe_evmwhgsmfaa)
-BU_SPE_2 (EVMWHGSMIAA, "evmwhgsmiaa",  MISC,   spe_evmwhgsmiaa)
-BU_SPE_2 (EVMWHGUMIAA, "evmwhgumiaa",  MISC,   spe_evmwhgumiaa)
-BU_SPE_2 (EVMWHGSSFAN, "evmwhgssfan",  MISC,   spe_evmwhgssfan)
-BU_SPE_2 (EVMWHGSMFAN, "evmwhgsmfan",  MISC,   spe_evmwhgsmfan)
-BU_SPE_2 (EVMWHGSMIAN, "evmwhgsmian",  MISC,   spe_evmwhgsmian)
-BU_SPE_2 (EVMWHGUMIAN, "evmwhgumian",  MISC,   spe_evmwhgumian)
-BU_SPE_2 (BRINC,       "brinc",        MISC,   spe_brinc)
-BU_SPE_2 (EVXOR,       "evxor",        MISC,   xorv2si3)
-
-/* SPE predicate builtins.  */
-BU_SPE_P (EVCMPEQ,     "evcmpeq",      MISC,   spe_evcmpeq)
-BU_SPE_P (EVCMPGTS,    "evcmpgts",     MISC,   spe_evcmpgts)
-BU_SPE_P (EVCMPGTU,    "evcmpgtu",     MISC,   spe_evcmpgtu)
-BU_SPE_P (EVCMPLTS,    "evcmplts",     MISC,   spe_evcmplts)
-BU_SPE_P (EVCMPLTU,    "evcmpltu",     MISC,   spe_evcmpltu)
-BU_SPE_P (EVFSCMPEQ,   "evfscmpeq",    MISC,   spe_evfscmpeq)
-BU_SPE_P (EVFSCMPGT,   "evfscmpgt",    MISC,   spe_evfscmpgt)
-BU_SPE_P (EVFSCMPLT,   "evfscmplt",    MISC,   spe_evfscmplt)
-BU_SPE_P (EVFSTSTEQ,   "evfststeq",    MISC,   spe_evfststeq)
-BU_SPE_P (EVFSTSTGT,   "evfststgt",    MISC,   spe_evfststgt)
-BU_SPE_P (EVFSTSTLT,   "evfststlt",    MISC,   spe_evfststlt)
-
-/* SPE evsel builtins.  */
-BU_SPE_E (EVSEL_CMPGTS,         "evsel_gts",     MISC, spe_evcmpgts)
-BU_SPE_E (EVSEL_CMPGTU,         "evsel_gtu",     MISC, spe_evcmpgtu)
-BU_SPE_E (EVSEL_CMPLTS,         "evsel_lts",     MISC, spe_evcmplts)
-BU_SPE_E (EVSEL_CMPLTU,         "evsel_ltu",     MISC, spe_evcmpltu)
-BU_SPE_E (EVSEL_CMPEQ,  "evsel_eq",      MISC, spe_evcmpeq)
-BU_SPE_E (EVSEL_FSCMPGT, "evsel_fsgt",   MISC, spe_evfscmpgt)
-BU_SPE_E (EVSEL_FSCMPLT, "evsel_fslt",   MISC, spe_evfscmplt)
-BU_SPE_E (EVSEL_FSCMPEQ, "evsel_fseq",   MISC, spe_evfscmpeq)
-BU_SPE_E (EVSEL_FSTSTGT, "evsel_fststgt", MISC,        spe_evfststgt)
-BU_SPE_E (EVSEL_FSTSTLT, "evsel_fststlt", MISC,        spe_evfststlt)
-BU_SPE_E (EVSEL_FSTSTEQ, "evsel_fststeq", MISC,        spe_evfststeq)
-
-BU_SPE_1 (EVABS,       "evabs",        CONST,  absv2si2)
-BU_SPE_1 (EVADDSMIAAW, "evaddsmiaaw",  CONST,  spe_evaddsmiaaw)
-BU_SPE_1 (EVADDSSIAAW, "evaddssiaaw",  CONST,  spe_evaddssiaaw)
-BU_SPE_1 (EVADDUMIAAW, "evaddumiaaw",  CONST,  spe_evaddumiaaw)
-BU_SPE_1 (EVADDUSIAAW, "evaddusiaaw",  CONST,  spe_evaddusiaaw)
-BU_SPE_1 (EVCNTLSW,    "evcntlsw",     CONST,  spe_evcntlsw)
-BU_SPE_1 (EVCNTLZW,    "evcntlzw",     CONST,  spe_evcntlzw)
-BU_SPE_1 (EVEXTSB,     "evextsb",      CONST,  spe_evextsb)
-BU_SPE_1 (EVEXTSH,     "evextsh",      CONST,  spe_evextsh)
-BU_SPE_1 (EVFSABS,     "evfsabs",      CONST,  spe_evfsabs)
-BU_SPE_1 (EVFSCFSF,    "evfscfsf",     CONST,  spe_evfscfsf)
-BU_SPE_1 (EVFSCFSI,    "evfscfsi",     CONST,  spe_evfscfsi)
-BU_SPE_1 (EVFSCFUF,    "evfscfuf",     CONST,  spe_evfscfuf)
-BU_SPE_1 (EVFSCFUI,    "evfscfui",     CONST,  spe_evfscfui)
-BU_SPE_1 (EVFSCTSF,    "evfsctsf",     CONST,  spe_evfsctsf)
-BU_SPE_1 (EVFSCTSI,    "evfsctsi",     CONST,  spe_evfsctsi)
-BU_SPE_1 (EVFSCTSIZ,   "evfsctsiz",    CONST,  spe_evfsctsiz)
-BU_SPE_1 (EVFSCTUF,    "evfsctuf",     CONST,  spe_evfsctuf)
-BU_SPE_1 (EVFSCTUI,    "evfsctui",     CONST,  spe_evfsctui)
-BU_SPE_1 (EVFSCTUIZ,   "evfsctuiz",    CONST,  spe_evfsctuiz)
-BU_SPE_1 (EVFSNABS,    "evfsnabs",     CONST,  spe_evfsnabs)
-BU_SPE_1 (EVFSNEG,     "evfsneg",      CONST,  spe_evfsneg)
-BU_SPE_1 (EVMRA,       "evmra",        CONST,  spe_evmra)
-BU_SPE_1 (EVNEG,       "evneg",        CONST,  negv2si2)
-BU_SPE_1 (EVRNDW,      "evrndw",       CONST,  spe_evrndw)
-BU_SPE_1 (EVSUBFSMIAAW,        "evsubfsmiaaw", CONST,  spe_evsubfsmiaaw)
-BU_SPE_1 (EVSUBFSSIAAW,        "evsubfssiaaw", CONST,  spe_evsubfssiaaw)
-BU_SPE_1 (EVSUBFUMIAAW,        "evsubfumiaaw", CONST,  spe_evsubfumiaaw)
-BU_SPE_1 (EVSUBFUSIAAW,        "evsubfusiaaw", CONST,  spe_evsubfusiaaw)
-
-/* SPE builtins that are handled as special cases.  */
-BU_SPE_X (EVLDD,             "evldd",          MISC)
-BU_SPE_X (EVLDDX,            "evlddx",         MISC)
-BU_SPE_X (EVLDH,             "evldh",          MISC)
-BU_SPE_X (EVLDHX,            "evldhx",         MISC)
-BU_SPE_X (EVLDW,             "evldw",          MISC)
-BU_SPE_X (EVLDWX,            "evldwx",         MISC)
-BU_SPE_X (EVLHHESPLAT,       "evlhhesplat",    MISC)
-BU_SPE_X (EVLHHESPLATX,              "evlhhesplatx",   MISC)
-BU_SPE_X (EVLHHOSSPLAT,              "evlhhossplat",   MISC)
-BU_SPE_X (EVLHHOSSPLATX,      "evlhhossplatx", MISC)
-BU_SPE_X (EVLHHOUSPLAT,              "evlhhousplat",   MISC)
-BU_SPE_X (EVLHHOUSPLATX,      "evlhhousplatx", MISC)
-BU_SPE_X (EVLWHE,            "evlwhe",         MISC)
-BU_SPE_X (EVLWHEX,           "evlwhex",        MISC)
-BU_SPE_X (EVLWHOS,           "evlwhos",        MISC)
-BU_SPE_X (EVLWHOSX,          "evlwhosx",       MISC)
-BU_SPE_X (EVLWHOU,           "evlwhou",        MISC)
-BU_SPE_X (EVLWHOUX,          "evlwhoux",       MISC)
-BU_SPE_X (EVLWHSPLAT,        "evlwhsplat",     MISC)
-BU_SPE_X (EVLWHSPLATX,       "evlwhsplatx",    MISC)
-BU_SPE_X (EVLWWSPLAT,        "evlwwsplat",     MISC)
-BU_SPE_X (EVLWWSPLATX,       "evlwwsplatx",    MISC)
-BU_SPE_X (EVSPLATFI,         "evsplatfi",      MISC)
-BU_SPE_X (EVSPLATI,          "evsplati",       MISC)
-BU_SPE_X (EVSTDD,            "evstdd",         MISC)
-BU_SPE_X (EVSTDDX,           "evstddx",        MISC)
-BU_SPE_X (EVSTDH,            "evstdh",         MISC)
-BU_SPE_X (EVSTDHX,           "evstdhx",        MISC)
-BU_SPE_X (EVSTDW,            "evstdw",         MISC)
-BU_SPE_X (EVSTDWX,           "evstdwx",        MISC)
-BU_SPE_X (EVSTWHE,           "evstwhe",        MISC)
-BU_SPE_X (EVSTWHEX,          "evstwhex",       MISC)
-BU_SPE_X (EVSTWHO,           "evstwho",        MISC)
-BU_SPE_X (EVSTWHOX,          "evstwhox",       MISC)
-BU_SPE_X (EVSTWWE,           "evstwwe",        MISC)
-BU_SPE_X (EVSTWWEX,          "evstwwex",       MISC)
-BU_SPE_X (EVSTWWO,           "evstwwo",        MISC)
-BU_SPE_X (EVSTWWOX,          "evstwwox",       MISC)
-BU_SPE_X (MFSPEFSCR,         "mfspefscr",      MISC)
-BU_SPE_X (MTSPEFSCR,         "mtspefscr",      MISC)
-
 \f
 /* Power7 builtins, that aren't VSX instructions.  */
 BU_SPECIAL_X (POWER7_BUILTIN_BPERMD, "__builtin_bpermd", RS6000_BTM_POPCNTD,
index 3dc22237a7925fc8a19dfe59ddd92a740aa177d0..230c2b4d3114cf2ffcfb42eca8beae2a8e96210f 100644 (file)
@@ -611,10 +611,6 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags,
     rs6000_define_or_undefine_macro (define_p, "__UPPER_REGS_SF__");
 
   /* options from the builtin masks.  */
-  /* Note that RS6000_BTM_SPE is enabled only if TARGET_SPE
-     (e.g. -mspe).  */
-  if ((bu_mask & RS6000_BTM_SPE) != 0)
-    rs6000_define_or_undefine_macro (define_p, "__SPE__");
   /* Note that RS6000_BTM_PAIRED is enabled only if
      TARGET_PAIRED_FLOAT is enabled (e.g. -mpaired).  */
   if ((bu_mask & RS6000_BTM_PAIRED) != 0)
index 2955d971c28ac693daf5dd8e39bb428daf0fc54b..8a231f5166c7045f02f84534697f36590edaaf75 100644 (file)
@@ -41,7 +41,6 @@ extern int small_data_operand (rtx, machine_mode);
 extern bool mem_operand_gpr (rtx, machine_mode);
 extern bool mem_operand_ds_form (rtx, machine_mode);
 extern bool toc_relative_expr_p (const_rtx, bool);
-extern bool invalid_e500_subreg (rtx, machine_mode);
 extern void validate_condition_mode (enum rtx_code, machine_mode);
 extern bool legitimate_constant_pool_address_p (const_rtx, machine_mode,
                                                bool);
index 23e08ca531d9520cc0d15b0912afc6061dd7f24e..ac5e2de5398b1916135198d4b91ac0467cc808bc 100644 (file)
@@ -108,7 +108,6 @@ typedef struct rs6000_stack {
   int lr_save_offset;          /* offset to save LR from initial SP */
   int cr_save_offset;          /* offset to save CR from initial SP */
   int vrsave_save_offset;      /* offset to save VRSAVE from initial SP */
-  int spe_gp_save_offset;      /* offset to save spe 64-bit gprs  */
   int varargs_save_offset;     /* offset to save the varargs registers */
   int ehrd_offset;             /* offset to EH return data */
   int ehcr_offset;             /* offset to EH CR field data */
@@ -123,10 +122,7 @@ typedef struct rs6000_stack {
   int cr_size;                 /* size to hold CR if not in fixed area */
   int vrsave_size;             /* size to hold VRSAVE */
   int altivec_padding_size;    /* size of altivec alignment padding */
-  int spe_gp_size;             /* size of 64-bit GPR save size for SPE */
-  int spe_padding_size;
   HOST_WIDE_INT total_size;    /* total bytes allocated for stack */
-  int spe_64bit_regs_used;
   int savres_strategy;
 } rs6000_stack_t;
 
@@ -134,8 +130,6 @@ typedef struct rs6000_stack {
    This is added to the cfun structure.  */
 typedef struct GTY(()) machine_function
 {
-  /* Whether the instruction chain has been scanned already.  */
-  int spe_insn_chain_scanned_p;
   /* Flags if __builtin_return_address (n) with n >= 1 was used.  */
   int ra_needs_full_frame;
   /* Flags if __builtin_return_address (0) was used.  */
@@ -1278,11 +1272,9 @@ struct processor_costs ppca2_cost = {
 #undef RS6000_BUILTIN_3
 #undef RS6000_BUILTIN_A
 #undef RS6000_BUILTIN_D
-#undef RS6000_BUILTIN_E
 #undef RS6000_BUILTIN_H
 #undef RS6000_BUILTIN_P
 #undef RS6000_BUILTIN_Q
-#undef RS6000_BUILTIN_S
 #undef RS6000_BUILTIN_X
 
 #define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) \
@@ -1303,9 +1295,6 @@ struct processor_costs ppca2_cost = {
 #define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)  \
   { NAME, ICODE, MASK, ATTR },
 
-#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)  \
-  { NAME, ICODE, MASK, ATTR },
-
 #define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)  \
   { NAME, ICODE, MASK, ATTR },
 
@@ -1315,9 +1304,6 @@ struct processor_costs ppca2_cost = {
 #define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)  \
   { NAME, ICODE, MASK, ATTR },
 
-#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)  \
-  { NAME, ICODE, MASK, ATTR },
-
 #define RS6000_BUILTIN_X(ENUM, NAME, MASK, ATTR, ICODE)  \
   { NAME, ICODE, MASK, ATTR },
 
@@ -1339,11 +1325,9 @@ static const struct rs6000_builtin_info_type rs6000_builtin_info[] =
 #undef RS6000_BUILTIN_3
 #undef RS6000_BUILTIN_A
 #undef RS6000_BUILTIN_D
-#undef RS6000_BUILTIN_E
 #undef RS6000_BUILTIN_H
 #undef RS6000_BUILTIN_P
 #undef RS6000_BUILTIN_Q
-#undef RS6000_BUILTIN_S
 #undef RS6000_BUILTIN_X
 
 /* Support for -mveclibabi=<xxx> to control which vector library to use.  */
@@ -1351,7 +1335,6 @@ static tree (*rs6000_veclib_handler) (combined_fn, tree, tree);
 
 \f
 static bool rs6000_debug_legitimate_address_p (machine_mode, rtx, bool);
-static bool spe_func_has_64bit_regs_p (void);
 static struct machine_function * rs6000_init_machine_status (void);
 static int rs6000_ra_ever_killed (void);
 static tree rs6000_handle_longcall_attribute (tree *, tree, tree, int, bool *);
@@ -1381,10 +1364,7 @@ static tree builtin_function_type (machine_mode, machine_mode,
 static void rs6000_common_init_builtins (void);
 static void paired_init_builtins (void);
 static rtx paired_expand_predicate_builtin (enum insn_code, tree, rtx);
-static void spe_init_builtins (void);
 static void htm_init_builtins (void);
-static rtx spe_expand_predicate_builtin (enum insn_code, tree, rtx);
-static rtx spe_expand_evsel_builtin (enum insn_code, tree, rtx);
 static int rs6000_emit_int_cmove (rtx, rtx, rtx, rtx);
 static rs6000_stack_t *rs6000_stack_info (void);
 static void is_altivec_return_reg (rtx, void *);
@@ -1799,15 +1779,9 @@ static const struct attribute_spec rs6000_attribute_table[] =
 #undef TARGET_ADDRESS_COST
 #define TARGET_ADDRESS_COST hook_int_rtx_mode_as_bool_0
 
-#undef TARGET_DWARF_REGISTER_SPAN
-#define TARGET_DWARF_REGISTER_SPAN rs6000_dwarf_register_span
-
 #undef TARGET_INIT_DWARF_REG_SIZES_EXTRA
 #define TARGET_INIT_DWARF_REG_SIZES_EXTRA rs6000_init_dwarf_reg_sizes_extra
 
-#undef TARGET_MEMBER_TYPE_FORCES_BLK
-#define TARGET_MEMBER_TYPE_FORCES_BLK rs6000_member_type_forces_blk
-
 #undef TARGET_PROMOTE_FUNCTION_MODE
 #define TARGET_PROMOTE_FUNCTION_MODE rs6000_promote_function_mode
 
@@ -2076,9 +2050,6 @@ rs6000_hard_regno_nregs_internal (int regno, machine_mode mode)
                ? UNITS_PER_VSX_WORD
                : UNITS_PER_FP_WORD);
 
-  else if (SPE_SIMD_REGNO_P (regno) && TARGET_SPE && SPE_VECTOR_MODE (mode))
-    reg_size = UNITS_PER_SPE_WORD;
-
   else if (ALTIVEC_REGNO_P (regno))
     reg_size = UNITS_PER_ALTIVEC_WORD;
 
@@ -2181,10 +2152,6 @@ rs6000_hard_regno_mode_ok (int regno, machine_mode mode)
     return (VECTOR_MEM_ALTIVEC_OR_VSX_P (mode)
            || mode == V1TImode);
 
-  /* ...but GPRs can hold SIMD data on the SPE in one register.  */
-  if (SPE_SIMD_REGNO_P (regno) && TARGET_SPE && SPE_VECTOR_MODE (mode))
-    return 1;
-
   /* We cannot put non-VSX TImode or PTImode anywhere except general register
      and it must be able to fit within the register set.  */
 
@@ -2835,9 +2802,6 @@ rs6000_debug_reg_global (void)
   if (rs6000_altivec_abi)
     fprintf (stderr, DEBUG_FMT_S, "altivec_abi", "true");
 
-  if (rs6000_spe_abi)
-    fprintf (stderr, DEBUG_FMT_S, "spe_abi", "true");
-
   if (rs6000_darwin64_abi)
     fprintf (stderr, DEBUG_FMT_S, "darwin64_abi", "true");
 
@@ -3897,7 +3861,6 @@ rs6000_builtin_mask_calculate (void)
   return (((TARGET_ALTIVEC)                ? RS6000_BTM_ALTIVEC   : 0)
          | ((TARGET_CMPB)                  ? RS6000_BTM_CMPB      : 0)
          | ((TARGET_VSX)                   ? RS6000_BTM_VSX       : 0)
-         | ((TARGET_SPE)                   ? RS6000_BTM_SPE       : 0)
          | ((TARGET_PAIRED_FLOAT)          ? RS6000_BTM_PAIRED    : 0)
          | ((TARGET_FRE)                   ? RS6000_BTM_FRE       : 0)
          | ((TARGET_FRES)                  ? RS6000_BTM_FRES      : 0)
@@ -4234,26 +4197,15 @@ rs6000_option_override_internal (bool global_init_p)
       (rs6000_cpu == PROCESSOR_PPC8540
        || rs6000_cpu == PROCESSOR_PPC8548);
 
-    if (!global_options_set.x_rs6000_spe_abi)
-      rs6000_spe_abi = spe_capable_cpu;
-
     if (!global_options_set.x_rs6000_spe)
       rs6000_spe = spe_capable_cpu;
   }
 
-  if (global_options_set.x_rs6000_spe_abi
-      && rs6000_spe_abi
-      && !TARGET_SPE_ABI)
-    error ("not configured for SPE ABI");
-
-  if (global_options_set.x_rs6000_spe
-      && rs6000_spe
-      && !TARGET_SPE)
+  if (global_options_set.x_rs6000_spe && rs6000_spe)
     error ("not configured for SPE instruction set");
 
   if (main_target_opt != NULL
-      && ((main_target_opt->x_rs6000_spe_abi != rs6000_spe_abi)
-          || (main_target_opt->x_rs6000_spe != rs6000_spe)))
+      && main_target_opt->x_rs6000_spe != rs6000_spe)
     error ("target attribute or pragma changes SPE ABI");
 
   if (rs6000_cpu == PROCESSOR_PPCE300C2 || rs6000_cpu == PROCESSOR_PPCE300C3
@@ -4262,13 +4214,6 @@ rs6000_option_override_internal (bool global_init_p)
     {
       if (TARGET_ALTIVEC)
        error ("AltiVec not supported in this target");
-      if (TARGET_SPE)
-       error ("SPE not supported in this target");
-    }
-  if (rs6000_cpu == PROCESSOR_PPCE6500)
-    {
-      if (TARGET_SPE)
-       error ("SPE not supported in this target");
     }
 
   /* If we are optimizing big endian systems for space, use the load/store
@@ -5902,15 +5847,6 @@ rs6000_preferred_simd_mode (machine_mode mode)
        return V16QImode;
       default:;
       }
-  if (TARGET_SPE)
-    switch (mode)
-      {
-      case SFmode:
-       return V2SFmode;
-      case SImode:
-       return V2SImode;
-      default:;
-      }
   if (TARGET_PAIRED_FLOAT
       && mode == SFmode)
     return V2SFmode;
@@ -7015,7 +6951,7 @@ xxspltib_constant_p (rtx op,
 const char *
 output_vec_const_move (rtx *operands)
 {
-  int cst, cst2, shift;
+  int shift;
   machine_mode mode;
   rtx dest, vec;
 
@@ -7107,23 +7043,7 @@ output_vec_const_move (rtx *operands)
        }
     }
 
-  gcc_assert (TARGET_SPE);
-
-  /* Vector constant 0 is handled as a splitter of V2SI, and in the
-     pattern of V1DI, V4HI, and V2SF.
-
-     FIXME: We should probably return # and add post reload
-     splitters for these, but this way is so easy ;-).  */
-  cst = INTVAL (CONST_VECTOR_ELT (vec, 0));
-  cst2 = INTVAL (CONST_VECTOR_ELT (vec, 1));
-  operands[1] = CONST_VECTOR_ELT (vec, 0);
-  operands[2] = CONST_VECTOR_ELT (vec, 1);
-  if (cst == cst2)
-    return "li %0,%1\n\tevmergelo %0,%0,%0";
-  else if (WORDS_BIG_ENDIAN)
-    return "li %0,%1\n\tevmergelo %0,%0,%0\n\tli %0,%2";
-  else
-    return "li %0,%2\n\tevmergelo %0,%0,%0\n\tli %0,%1";
+  gcc_unreachable ();
 }
 
 /* Initialize TARGET of vector PAIRED to VALS.  */
@@ -8195,21 +8115,6 @@ rs6000_split_v4si_init (rtx operands[])
     gcc_unreachable ();
 }
 
-/* Return TRUE if OP is an invalid SUBREG operation on the e500.  */
-
-bool
-invalid_e500_subreg (rtx op, machine_mode mode)
-{
-  if (TARGET_SPE
-      && GET_CODE (op) == SUBREG
-      && mode == SImode
-      && REG_P (SUBREG_REG (op))
-      && SPE_VECTOR_MODE (GET_MODE (SUBREG_REG (op))))
-    return true;
-
-  return false;
-}
-
 /* Return alignment of TYPE.  Existing alignment is ALIGN.  HOW
    selects whether the alignment is abi mandated, optional, or
    both abi and optional alignment.  */
@@ -8221,8 +8126,7 @@ rs6000_data_alignment (tree type, unsigned int align, enum data_align how)
     {
       if (TREE_CODE (type) == VECTOR_TYPE)
        {
-         if ((TARGET_SPE && SPE_VECTOR_MODE (TYPE_MODE (type)))
-             || (TARGET_PAIRED_FLOAT && PAIRED_VECTOR_MODE (TYPE_MODE (type))))
+         if (TARGET_PAIRED_FLOAT && PAIRED_VECTOR_MODE (TYPE_MODE (type)))
            {
              if (align < 64)
                align = 64;
@@ -8347,13 +8251,6 @@ small_data_operand (rtx op ATTRIBUTE_UNUSED,
   if (DEFAULT_ABI != ABI_V4)
     return 0;
 
-  /* Vector and float memory instructions have a limited offset on the
-     SPE, so using a vector or float variable directly as an operand is
-     not useful.  */
-  if (TARGET_SPE
-      && (SPE_VECTOR_MODE (mode) || FLOAT_MODE_P (mode)))
-    return 0;
-
   if (GET_CODE (op) == SYMBOL_REF)
     sym_ref = op;
 
@@ -9106,7 +9003,7 @@ rs6000_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
       && GET_CODE (XEXP (x, 1)) == CONST_INT
       && ((unsigned HOST_WIDE_INT) (INTVAL (XEXP (x, 1)) + 0x8000)
          >= 0x10000 - extra)
-      && !SPE_VECTOR_MODE (mode))
+      && !PAIRED_VECTOR_MODE (mode))
     {
       HOST_WIDE_INT high_int, low_int;
       rtx sum;
@@ -9131,11 +9028,11 @@ rs6000_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
       return gen_rtx_PLUS (Pmode, XEXP (x, 0),
                           force_reg (Pmode, force_operand (XEXP (x, 1), 0)));
     }
-  else if (SPE_VECTOR_MODE (mode))
+  else if (PAIRED_VECTOR_MODE (mode))
     {
       if (mode == DImode)
        return x;
-      /* We accept [reg + reg] and [reg + OFFSET].  */
+      /* We accept [reg + reg].  */
 
       if (GET_CODE (x) == PLUS)
        {
@@ -9144,13 +9041,7 @@ rs6000_legitimize_address (rtx x, rtx oldx ATTRIBUTE_UNUSED,
          rtx y;
 
          op1 = force_reg (Pmode, op1);
-
-         if (GET_CODE (op2) != REG
-             && (GET_CODE (op2) != CONST_INT
-                 || !SPE_CONST_OFFSET_OK (INTVAL (op2))
-                 || (GET_MODE_SIZE (mode) > 8
-                     && !SPE_CONST_OFFSET_OK (INTVAL (op2) + 8))))
-           op2 = force_reg (Pmode, op2);
+         op2 = force_reg (Pmode, op2);
 
          /* We can't always do [reg + reg] for these, because [reg +
             reg + offset] is not a legitimate addressing mode.  */
@@ -9894,7 +9785,7 @@ rs6000_legitimize_reload_address (rtx x, machine_mode mode,
       && INT_REG_OK_FOR_BASE_P (XEXP (x, 0), 1)
       && CONST_INT_P (XEXP (x, 1))
       && reg_offset_p
-      && !SPE_VECTOR_MODE (mode)
+      && !PAIRED_VECTOR_MODE (mode)
       && (quad_offset_p || !VECTOR_MODE_P (mode) || VECTOR_MEM_NONE_P (mode)))
     {
       HOST_WIDE_INT val = INTVAL (XEXP (x, 1));
@@ -9935,7 +9826,7 @@ rs6000_legitimize_reload_address (rtx x, machine_mode mode,
       && reg_offset_p
       && !quad_offset_p
       && (!VECTOR_MODE_P (mode) || VECTOR_MEM_NONE_P (mode))
-      && !SPE_VECTOR_MODE (mode)
+      && !PAIRED_VECTOR_MODE (mode)
 #if TARGET_MACHO
       && DEFAULT_ABI == ABI_DARWIN
       && (flag_pic || MACHO_DYNAMIC_NO_PIC_P)
@@ -10409,20 +10300,6 @@ rs6000_conditional_register_usage (void)
     fixed_regs[RS6000_PIC_OFFSET_TABLE_REGNUM]
       = call_used_regs[RS6000_PIC_OFFSET_TABLE_REGNUM] = 1;
 
-  if (TARGET_SPE)
-    {
-      global_regs[SPEFSCR_REGNO] = 1;
-      /* We used to use r14 as FIXED_SCRATCH to address SPE 64-bit
-         registers in prologues and epilogues.  We no longer use r14
-         for FIXED_SCRATCH, but we're keeping r14 out of the allocation
-         pool for link-compatibility with older versions of GCC.  Once
-         "old" code has died out, we can return r14 to the allocation
-         pool.  */
-      fixed_regs[14]
-       = call_used_regs[14]
-       = call_really_used_regs[14] = 1;
-    }
-
   if (!TARGET_ALTIVEC && !TARGET_VSX)
     {
       for (i = FIRST_ALTIVEC_REGNO; i <= LAST_ALTIVEC_REGNO; ++i)
@@ -11326,25 +11203,6 @@ rs6000_emit_move (rtx dest, rtx source, machine_mode mode)
  emit_set:
   emit_insn (gen_rtx_SET (operands[0], operands[1]));
 }
-
-/* Return true if a structure, union or array containing FIELD should be
-   accessed using `BLKMODE'.
-
-   For the SPE, simd types are V2SI, and gcc can be tempted to put the
-   entire thing in a DI and use subregs to access the internals.
-   store_bit_field() will force (subreg:DI (reg:V2SI x))'s to the
-   back-end.  Because a single GPR can hold a V2SI, but not a DI, the
-   best thing to do is set structs to BLKmode and avoid Severe Tire
-   Damage.
-
-   On e500 v2, DF and DI modes suffer from the same anomaly.  DF can
-   fit into 1, whereas DI still needs two.  */
-
-static bool
-rs6000_member_type_forces_blk (const_tree field, machine_mode)
-{
-  return (TARGET_SPE && TREE_CODE (TREE_TYPE (field)) == VECTOR_TYPE);
-}
 \f
 /* Nonzero if we can use a floating-point register to pass this arg.  */
 #define USE_FP_FOR_ARG_P(CUM,MODE)             \
@@ -11803,7 +11661,7 @@ init_cumulative_args (CUMULATIVE_ARGS *cum, tree fntype,
                rs6000_passes_long_double = true;
            }
          if (ALTIVEC_OR_VSX_VECTOR_MODE (return_mode)
-             || SPE_VECTOR_MODE (return_mode))
+             || PAIRED_VECTOR_MODE (return_mode))
            rs6000_passes_vector = true;
        }
     }
@@ -11981,7 +11839,7 @@ rs6000_function_arg_boundary (machine_mode mode, const_tree type)
     return 64;
   else if (FLOAT128_VECTOR_P (mode))
     return 128;
-  else if (SPE_VECTOR_MODE (mode)
+  else if (PAIRED_VECTOR_MODE (mode)
           || (type && TREE_CODE (type) == VECTOR_TYPE
               && int_size_in_bytes (type) >= 8
               && int_size_in_bytes (type) < 16))
@@ -12263,7 +12121,7 @@ rs6000_function_arg_advance_1 (CUMULATIVE_ARGS *cum, machine_mode mode,
            rs6000_passes_long_double = true;
        }
       if ((named && ALTIVEC_OR_VSX_VECTOR_MODE (mode))
-         || (SPE_VECTOR_MODE (mode)
+         || (PAIRED_VECTOR_MODE (mode)
              && !cum->stdarg
              && cum->sysv_gregno <= GP_ARG_MAX_REG))
        rs6000_passes_vector = true;
@@ -12322,11 +12180,6 @@ rs6000_function_arg_advance_1 (CUMULATIVE_ARGS *cum, machine_mode mode,
            }
        }
     }
-  else if (TARGET_SPE_ABI && TARGET_SPE && SPE_VECTOR_MODE (mode)
-          && !cum->stdarg
-          && cum->sysv_gregno <= GP_ARG_MAX_REG)
-    cum->sysv_gregno++;
-
   else if (TARGET_MACHO && rs6000_darwin64_struct_check_p (mode, type))
     {
       int size = int_size_in_bytes (type);
@@ -12458,44 +12311,6 @@ rs6000_function_arg_advance (cumulative_args_t cum, machine_mode mode,
                                 0);
 }
 
-/* Determine where to put a SIMD argument on the SPE.  */
-static rtx
-rs6000_spe_function_arg (const CUMULATIVE_ARGS *cum, machine_mode mode,
-                        const_tree type)
-{
-  int gregno = cum->sysv_gregno;
-
-  if (cum->stdarg)
-    {
-      int n_words = rs6000_arg_size (mode, type);
-
-      /* SPE vectors are put in odd registers.  */
-      if (n_words == 2 && (gregno & 1) == 0)
-       gregno += 1;
-
-      if (gregno + n_words - 1 <= GP_ARG_MAX_REG)
-       {
-         rtx r1, r2;
-         machine_mode m = SImode;
-
-         r1 = gen_rtx_REG (m, gregno);
-         r1 = gen_rtx_EXPR_LIST (m, r1, const0_rtx);
-         r2 = gen_rtx_REG (m, gregno + 1);
-         r2 = gen_rtx_EXPR_LIST (m, r2, GEN_INT (4));
-         return gen_rtx_PARALLEL (mode, gen_rtvec (2, r1, r2));
-       }
-      else
-       return NULL_RTX;
-    }
-  else
-    {
-      if (gregno <= GP_ARG_MAX_REG)
-       return gen_rtx_REG (mode, gregno);
-      else
-       return NULL_RTX;
-    }
-}
-
 /* A subroutine of rs6000_darwin64_record_arg.  Assign the bits of the
    structure between cum->intoffset and bitpos to integer registers.  */
 
@@ -12862,17 +12677,12 @@ rs6000_function_arg (cumulative_args_t cum_v, machine_mode mode,
          && (cum->call_cookie & CALL_LIBCALL) == 0
          && (cum->stdarg
              || (cum->nargs_prototype < 0
-                 && (cum->prototype || TARGET_NO_PROTOTYPE))))
-       {
-         /* For the SPE, we need to crxor CR6 always.  */
-         if (TARGET_SPE_ABI)
-           return GEN_INT (cum->call_cookie | CALL_V4_SET_FP_ARGS);
-         else if (TARGET_HARD_FLOAT)
-           return GEN_INT (cum->call_cookie
-                           | ((cum->fregno == FP_ARG_MIN_REG)
-                              ? CALL_V4_SET_FP_ARGS
-                              : CALL_V4_CLEAR_FP_ARGS));
-       }
+                 && (cum->prototype || TARGET_NO_PROTOTYPE)))
+         && TARGET_HARD_FLOAT)
+       return GEN_INT (cum->call_cookie
+                       | ((cum->fregno == FP_ARG_MIN_REG)
+                          ? CALL_V4_SET_FP_ARGS
+                          : CALL_V4_CLEAR_FP_ARGS));
 
       return GEN_INT (cum->call_cookie & ~CALL_LIBCALL);
     }
@@ -12957,8 +12767,6 @@ rs6000_function_arg (cumulative_args_t cum_v, machine_mode mode,
          return gen_rtx_REG (part_mode, GP_ARG_MIN_REG + align_words);
        }
     }
-  else if (TARGET_SPE_ABI && TARGET_SPE && SPE_VECTOR_MODE (mode))
-    return rs6000_spe_function_arg (cum, mode, type);
 
   else if (abi == ABI_V4)
     {
@@ -14100,11 +13908,9 @@ def_builtin (const char *name, tree type, enum rs6000_builtins code)
 #undef RS6000_BUILTIN_3
 #undef RS6000_BUILTIN_A
 #undef RS6000_BUILTIN_D
-#undef RS6000_BUILTIN_E
 #undef RS6000_BUILTIN_H
 #undef RS6000_BUILTIN_P
 #undef RS6000_BUILTIN_Q
-#undef RS6000_BUILTIN_S
 #undef RS6000_BUILTIN_X
 
 #define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE)
@@ -14115,11 +13921,9 @@ def_builtin (const char *name, tree type, enum rs6000_builtins code)
 
 #define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_X(ENUM, NAME, MASK, ATTR, ICODE)
 
 static const struct builtin_description bdesc_3arg[] =
@@ -14135,11 +13939,9 @@ static const struct builtin_description bdesc_3arg[] =
 #undef RS6000_BUILTIN_3
 #undef RS6000_BUILTIN_A
 #undef RS6000_BUILTIN_D
-#undef RS6000_BUILTIN_E
 #undef RS6000_BUILTIN_H
 #undef RS6000_BUILTIN_P
 #undef RS6000_BUILTIN_Q
-#undef RS6000_BUILTIN_S
 #undef RS6000_BUILTIN_X
 
 #define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE)
@@ -14150,11 +13952,9 @@ static const struct builtin_description bdesc_3arg[] =
 #define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE) \
   { MASK, ICODE, NAME, ENUM },
 
-#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_X(ENUM, NAME, MASK, ATTR, ICODE)
 
 static const struct builtin_description bdesc_dst[] =
@@ -14170,11 +13970,9 @@ static const struct builtin_description bdesc_dst[] =
 #undef RS6000_BUILTIN_3
 #undef RS6000_BUILTIN_A
 #undef RS6000_BUILTIN_D
-#undef RS6000_BUILTIN_E
 #undef RS6000_BUILTIN_H
 #undef RS6000_BUILTIN_P
 #undef RS6000_BUILTIN_Q
-#undef RS6000_BUILTIN_S
 #undef RS6000_BUILTIN_X
 
 #define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE)
@@ -14185,11 +13983,9 @@ static const struct builtin_description bdesc_dst[] =
 #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_X(ENUM, NAME, MASK, ATTR, ICODE)
 
 static const struct builtin_description bdesc_2arg[] =
@@ -14203,11 +13999,9 @@ static const struct builtin_description bdesc_2arg[] =
 #undef RS6000_BUILTIN_3
 #undef RS6000_BUILTIN_A
 #undef RS6000_BUILTIN_D
-#undef RS6000_BUILTIN_E
 #undef RS6000_BUILTIN_H
 #undef RS6000_BUILTIN_P
 #undef RS6000_BUILTIN_Q
-#undef RS6000_BUILTIN_S
 #undef RS6000_BUILTIN_X
 
 #define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE)
@@ -14216,13 +14010,11 @@ static const struct builtin_description bdesc_2arg[] =
 #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE) \
   { MASK, ICODE, NAME, ENUM },
 
 #define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_X(ENUM, NAME, MASK, ATTR, ICODE)
 
 /* AltiVec predicates.  */
@@ -14232,74 +14024,6 @@ static const struct builtin_description bdesc_altivec_preds[] =
 #include "rs6000-builtin.def"
 };
 
-/* SPE predicates.  */
-#undef RS6000_BUILTIN_0
-#undef RS6000_BUILTIN_1
-#undef RS6000_BUILTIN_2
-#undef RS6000_BUILTIN_3
-#undef RS6000_BUILTIN_A
-#undef RS6000_BUILTIN_D
-#undef RS6000_BUILTIN_E
-#undef RS6000_BUILTIN_H
-#undef RS6000_BUILTIN_P
-#undef RS6000_BUILTIN_Q
-#undef RS6000_BUILTIN_S
-#undef RS6000_BUILTIN_X
-
-#define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_2(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE) \
-  { MASK, ICODE, NAME, ENUM },
-
-#define RS6000_BUILTIN_X(ENUM, NAME, MASK, ATTR, ICODE)
-
-static const struct builtin_description bdesc_spe_predicates[] =
-{
-#include "rs6000-builtin.def"
-};
-
-/* SPE evsel predicates.  */
-#undef RS6000_BUILTIN_0
-#undef RS6000_BUILTIN_1
-#undef RS6000_BUILTIN_2
-#undef RS6000_BUILTIN_3
-#undef RS6000_BUILTIN_A
-#undef RS6000_BUILTIN_D
-#undef RS6000_BUILTIN_E
-#undef RS6000_BUILTIN_H
-#undef RS6000_BUILTIN_P
-#undef RS6000_BUILTIN_Q
-#undef RS6000_BUILTIN_S
-#undef RS6000_BUILTIN_X
-
-#define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_1(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_2(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE) \
-  { MASK, ICODE, NAME, ENUM },
-
-#define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_X(ENUM, NAME, MASK, ATTR, ICODE)
-
-static const struct builtin_description bdesc_spe_evsel[] =
-{
-#include "rs6000-builtin.def"
-};
-
 /* PAIRED predicates.  */
 #undef RS6000_BUILTIN_0
 #undef RS6000_BUILTIN_1
@@ -14307,11 +14031,9 @@ static const struct builtin_description bdesc_spe_evsel[] =
 #undef RS6000_BUILTIN_3
 #undef RS6000_BUILTIN_A
 #undef RS6000_BUILTIN_D
-#undef RS6000_BUILTIN_E
 #undef RS6000_BUILTIN_H
 #undef RS6000_BUILTIN_P
 #undef RS6000_BUILTIN_Q
-#undef RS6000_BUILTIN_S
 #undef RS6000_BUILTIN_X
 
 #define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE)
@@ -14320,13 +14042,11 @@ static const struct builtin_description bdesc_spe_evsel[] =
 #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE) \
   { MASK, ICODE, NAME, ENUM },
 
-#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_X(ENUM, NAME, MASK, ATTR, ICODE)
 
 static const struct builtin_description bdesc_paired_preds[] =
@@ -14342,11 +14062,9 @@ static const struct builtin_description bdesc_paired_preds[] =
 #undef RS6000_BUILTIN_3
 #undef RS6000_BUILTIN_A
 #undef RS6000_BUILTIN_D
-#undef RS6000_BUILTIN_E
 #undef RS6000_BUILTIN_H
 #undef RS6000_BUILTIN_P
 #undef RS6000_BUILTIN_Q
-#undef RS6000_BUILTIN_S
 #undef RS6000_BUILTIN_X
 
 #define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE)
@@ -14357,11 +14075,9 @@ static const struct builtin_description bdesc_paired_preds[] =
   { MASK, ICODE, NAME, ENUM },
 
 #define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_X(ENUM, NAME, MASK, ATTR, ICODE)
 
 static const struct builtin_description bdesc_abs[] =
@@ -14378,11 +14094,9 @@ static const struct builtin_description bdesc_abs[] =
 #undef RS6000_BUILTIN_3
 #undef RS6000_BUILTIN_A
 #undef RS6000_BUILTIN_D
-#undef RS6000_BUILTIN_E
 #undef RS6000_BUILTIN_H
 #undef RS6000_BUILTIN_P
 #undef RS6000_BUILTIN_Q
-#undef RS6000_BUILTIN_S
 #undef RS6000_BUILTIN_X
 
 #define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE)
@@ -14393,11 +14107,9 @@ static const struct builtin_description bdesc_abs[] =
 #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_X(ENUM, NAME, MASK, ATTR, ICODE)
 
 static const struct builtin_description bdesc_1arg[] =
@@ -14413,11 +14125,9 @@ static const struct builtin_description bdesc_1arg[] =
 #undef RS6000_BUILTIN_3
 #undef RS6000_BUILTIN_A
 #undef RS6000_BUILTIN_D
-#undef RS6000_BUILTIN_E
 #undef RS6000_BUILTIN_H
 #undef RS6000_BUILTIN_P
 #undef RS6000_BUILTIN_Q
-#undef RS6000_BUILTIN_S
 #undef RS6000_BUILTIN_X
 
 #define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) \
@@ -14428,11 +14138,9 @@ static const struct builtin_description bdesc_1arg[] =
 #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_X(ENUM, NAME, MASK, ATTR, ICODE)
 
 static const struct builtin_description bdesc_0arg[] =
@@ -14447,11 +14155,9 @@ static const struct builtin_description bdesc_0arg[] =
 #undef RS6000_BUILTIN_3
 #undef RS6000_BUILTIN_A
 #undef RS6000_BUILTIN_D
-#undef RS6000_BUILTIN_E
 #undef RS6000_BUILTIN_H
 #undef RS6000_BUILTIN_P
 #undef RS6000_BUILTIN_Q
-#undef RS6000_BUILTIN_S
 #undef RS6000_BUILTIN_X
 
 #define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE)
@@ -14460,13 +14166,11 @@ static const struct builtin_description bdesc_0arg[] =
 #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE) \
   { MASK, ICODE, NAME, ENUM },
 
 #define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE)
-#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE)
 #define RS6000_BUILTIN_X(ENUM, NAME, MASK, ATTR, ICODE)
 
 static const struct builtin_description bdesc_htm[] =
@@ -14480,11 +14184,9 @@ static const struct builtin_description bdesc_htm[] =
 #undef RS6000_BUILTIN_3
 #undef RS6000_BUILTIN_A
 #undef RS6000_BUILTIN_D
-#undef RS6000_BUILTIN_E
 #undef RS6000_BUILTIN_H
 #undef RS6000_BUILTIN_P
 #undef RS6000_BUILTIN_Q
-#undef RS6000_BUILTIN_S
 
 /* Return true if a builtin function is overloaded.  */
 bool
@@ -14584,9 +14286,7 @@ rs6000_expand_unop_builtin (enum insn_code icode, tree exp, rtx target)
 
   if (icode == CODE_FOR_altivec_vspltisb
       || icode == CODE_FOR_altivec_vspltish
-      || icode == CODE_FOR_altivec_vspltisw
-      || icode == CODE_FOR_spe_evsplatfi
-      || icode == CODE_FOR_spe_evsplati)
+      || icode == CODE_FOR_altivec_vspltisw)
     {
       /* Only allow 5-bit *signed* literals.  */
       if (GET_CODE (op0) != CONST_INT
@@ -14672,24 +14372,7 @@ rs6000_expand_binop_builtin (enum insn_code icode, tree exp, rtx target)
       || icode == CODE_FOR_altivec_vctuxs
       || icode == CODE_FOR_altivec_vspltb
       || icode == CODE_FOR_altivec_vsplth
-      || icode == CODE_FOR_altivec_vspltw
-      || icode == CODE_FOR_spe_evaddiw
-      || icode == CODE_FOR_spe_evldd
-      || icode == CODE_FOR_spe_evldh
-      || icode == CODE_FOR_spe_evldw
-      || icode == CODE_FOR_spe_evlhhesplat
-      || icode == CODE_FOR_spe_evlhhossplat
-      || icode == CODE_FOR_spe_evlhhousplat
-      || icode == CODE_FOR_spe_evlwhe
-      || icode == CODE_FOR_spe_evlwhos
-      || icode == CODE_FOR_spe_evlwhou
-      || icode == CODE_FOR_spe_evlwhsplat
-      || icode == CODE_FOR_spe_evlwwsplat
-      || icode == CODE_FOR_spe_evrlwi
-      || icode == CODE_FOR_spe_evslwi
-      || icode == CODE_FOR_spe_evsrwis
-      || icode == CODE_FOR_spe_evsubifw
-      || icode == CODE_FOR_spe_evsrwiu)
+      || icode == CODE_FOR_altivec_vspltw)
     {
       /* Only allow 5-bit unsigned literals.  */
       STRIP_NOPS (arg1);
@@ -15054,39 +14737,6 @@ altivec_expand_lv_builtin (enum insn_code icode, tree exp, rtx target, bool blk)
   return target;
 }
 
-static rtx
-spe_expand_stv_builtin (enum insn_code icode, tree exp)
-{
-  tree arg0 = CALL_EXPR_ARG (exp, 0);
-  tree arg1 = CALL_EXPR_ARG (exp, 1);
-  tree arg2 = CALL_EXPR_ARG (exp, 2);
-  rtx op0 = expand_normal (arg0);
-  rtx op1 = expand_normal (arg1);
-  rtx op2 = expand_normal (arg2);
-  rtx pat;
-  machine_mode mode0 = insn_data[icode].operand[0].mode;
-  machine_mode mode1 = insn_data[icode].operand[1].mode;
-  machine_mode mode2 = insn_data[icode].operand[2].mode;
-
-  /* Invalid arguments.  Bail before doing anything stoopid!  */
-  if (arg0 == error_mark_node
-      || arg1 == error_mark_node
-      || arg2 == error_mark_node)
-    return const0_rtx;
-
-  if (! (*insn_data[icode].operand[2].predicate) (op0, mode2))
-    op0 = copy_to_mode_reg (mode2, op0);
-  if (! (*insn_data[icode].operand[0].predicate) (op1, mode0))
-    op1 = copy_to_mode_reg (mode0, op1);
-  if (! (*insn_data[icode].operand[1].predicate) (op2, mode1))
-    op2 = copy_to_mode_reg (mode1, op2);
-
-  pat = GEN_FCN (icode) (op1, op2, op0);
-  if (pat)
-    emit_insn (pat);
-  return NULL_RTX;
-}
-
 static rtx
 paired_expand_stv_builtin (enum insn_code icode, tree exp)
 {
@@ -16511,171 +16161,6 @@ paired_expand_builtin (tree exp, rtx target, bool * expandedp)
   return NULL_RTX;
 }
 
-/* Binops that need to be initialized manually, but can be expanded
-   automagically by rs6000_expand_binop_builtin.  */
-static const struct builtin_description bdesc_2arg_spe[] =
-{
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlddx, "__builtin_spe_evlddx", SPE_BUILTIN_EVLDDX },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evldwx, "__builtin_spe_evldwx", SPE_BUILTIN_EVLDWX },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evldhx, "__builtin_spe_evldhx", SPE_BUILTIN_EVLDHX },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlwhex, "__builtin_spe_evlwhex", SPE_BUILTIN_EVLWHEX },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlwhoux, "__builtin_spe_evlwhoux", SPE_BUILTIN_EVLWHOUX },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlwhosx, "__builtin_spe_evlwhosx", SPE_BUILTIN_EVLWHOSX },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlwwsplatx, "__builtin_spe_evlwwsplatx", SPE_BUILTIN_EVLWWSPLATX },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlwhsplatx, "__builtin_spe_evlwhsplatx", SPE_BUILTIN_EVLWHSPLATX },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlhhesplatx, "__builtin_spe_evlhhesplatx", SPE_BUILTIN_EVLHHESPLATX },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlhhousplatx, "__builtin_spe_evlhhousplatx", SPE_BUILTIN_EVLHHOUSPLATX },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlhhossplatx, "__builtin_spe_evlhhossplatx", SPE_BUILTIN_EVLHHOSSPLATX },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evldd, "__builtin_spe_evldd", SPE_BUILTIN_EVLDD },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evldw, "__builtin_spe_evldw", SPE_BUILTIN_EVLDW },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evldh, "__builtin_spe_evldh", SPE_BUILTIN_EVLDH },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlwhe, "__builtin_spe_evlwhe", SPE_BUILTIN_EVLWHE },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlwhou, "__builtin_spe_evlwhou", SPE_BUILTIN_EVLWHOU },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlwhos, "__builtin_spe_evlwhos", SPE_BUILTIN_EVLWHOS },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlwwsplat, "__builtin_spe_evlwwsplat", SPE_BUILTIN_EVLWWSPLAT },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlwhsplat, "__builtin_spe_evlwhsplat", SPE_BUILTIN_EVLWHSPLAT },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlhhesplat, "__builtin_spe_evlhhesplat", SPE_BUILTIN_EVLHHESPLAT },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlhhousplat, "__builtin_spe_evlhhousplat", SPE_BUILTIN_EVLHHOUSPLAT },
-  { RS6000_BTM_SPE, CODE_FOR_spe_evlhhossplat, "__builtin_spe_evlhhossplat", SPE_BUILTIN_EVLHHOSSPLAT }
-};
-
-/* Expand the builtin in EXP and store the result in TARGET.  Store
-   true in *EXPANDEDP if we found a builtin to expand.
-
-   This expands the SPE builtins that are not simple unary and binary
-   operations.  */
-static rtx
-spe_expand_builtin (tree exp, rtx target, bool *expandedp)
-{
-  tree fndecl = TREE_OPERAND (CALL_EXPR_FN (exp), 0);
-  tree arg1, arg0;
-  enum rs6000_builtins fcode = (enum rs6000_builtins) DECL_FUNCTION_CODE (fndecl);
-  enum insn_code icode;
-  machine_mode tmode, mode0;
-  rtx pat, op0;
-  const struct builtin_description *d;
-  size_t i;
-
-  *expandedp = true;
-
-  /* Syntax check for a 5-bit unsigned immediate.  */
-  switch (fcode)
-    {
-    case SPE_BUILTIN_EVSTDD:
-    case SPE_BUILTIN_EVSTDH:
-    case SPE_BUILTIN_EVSTDW:
-    case SPE_BUILTIN_EVSTWHE:
-    case SPE_BUILTIN_EVSTWHO:
-    case SPE_BUILTIN_EVSTWWE:
-    case SPE_BUILTIN_EVSTWWO:
-      arg1 = CALL_EXPR_ARG (exp, 2);
-      if (TREE_CODE (arg1) != INTEGER_CST
-         || TREE_INT_CST_LOW (arg1) & ~0x1f)
-       {
-         error ("argument 2 must be a 5-bit unsigned literal");
-         return const0_rtx;
-       }
-      break;
-    default:
-      break;
-    }
-
-  /* The evsplat*i instructions are not quite generic.  */
-  switch (fcode)
-    {
-    case SPE_BUILTIN_EVSPLATFI:
-      return rs6000_expand_unop_builtin (CODE_FOR_spe_evsplatfi,
-                                        exp, target);
-    case SPE_BUILTIN_EVSPLATI:
-      return rs6000_expand_unop_builtin (CODE_FOR_spe_evsplati,
-                                        exp, target);
-    default:
-      break;
-    }
-
-  d = bdesc_2arg_spe;
-  for (i = 0; i < ARRAY_SIZE (bdesc_2arg_spe); ++i, ++d)
-    if (d->code == fcode)
-      return rs6000_expand_binop_builtin (d->icode, exp, target);
-
-  d = bdesc_spe_predicates;
-  for (i = 0; i < ARRAY_SIZE (bdesc_spe_predicates); ++i, ++d)
-    if (d->code == fcode)
-      return spe_expand_predicate_builtin (d->icode, exp, target);
-
-  d = bdesc_spe_evsel;
-  for (i = 0; i < ARRAY_SIZE (bdesc_spe_evsel); ++i, ++d)
-    if (d->code == fcode)
-      return spe_expand_evsel_builtin (d->icode, exp, target);
-
-  switch (fcode)
-    {
-    case SPE_BUILTIN_EVSTDDX:
-      return spe_expand_stv_builtin (CODE_FOR_spe_evstddx, exp);
-    case SPE_BUILTIN_EVSTDHX:
-      return spe_expand_stv_builtin (CODE_FOR_spe_evstdhx, exp);
-    case SPE_BUILTIN_EVSTDWX:
-      return spe_expand_stv_builtin (CODE_FOR_spe_evstdwx, exp);
-    case SPE_BUILTIN_EVSTWHEX:
-      return spe_expand_stv_builtin (CODE_FOR_spe_evstwhex, exp);
-    case SPE_BUILTIN_EVSTWHOX:
-      return spe_expand_stv_builtin (CODE_FOR_spe_evstwhox, exp);
-    case SPE_BUILTIN_EVSTWWEX:
-      return spe_expand_stv_builtin (CODE_FOR_spe_evstwwex, exp);
-    case SPE_BUILTIN_EVSTWWOX:
-      return spe_expand_stv_builtin (CODE_FOR_spe_evstwwox, exp);
-    case SPE_BUILTIN_EVSTDD:
-      return spe_expand_stv_builtin (CODE_FOR_spe_evstdd, exp);
-    case SPE_BUILTIN_EVSTDH:
-      return spe_expand_stv_builtin (CODE_FOR_spe_evstdh, exp);
-    case SPE_BUILTIN_EVSTDW:
-      return spe_expand_stv_builtin (CODE_FOR_spe_evstdw, exp);
-    case SPE_BUILTIN_EVSTWHE:
-      return spe_expand_stv_builtin (CODE_FOR_spe_evstwhe, exp);
-    case SPE_BUILTIN_EVSTWHO:
-      return spe_expand_stv_builtin (CODE_FOR_spe_evstwho, exp);
-    case SPE_BUILTIN_EVSTWWE:
-      return spe_expand_stv_builtin (CODE_FOR_spe_evstwwe, exp);
-    case SPE_BUILTIN_EVSTWWO:
-      return spe_expand_stv_builtin (CODE_FOR_spe_evstwwo, exp);
-    case SPE_BUILTIN_MFSPEFSCR:
-      icode = CODE_FOR_spe_mfspefscr;
-      tmode = insn_data[icode].operand[0].mode;
-
-      if (target == 0
-         || GET_MODE (target) != tmode
-         || ! (*insn_data[icode].operand[0].predicate) (target, tmode))
-       target = gen_reg_rtx (tmode);
-
-      pat = GEN_FCN (icode) (target);
-      if (! pat)
-       return 0;
-      emit_insn (pat);
-      return target;
-    case SPE_BUILTIN_MTSPEFSCR:
-      icode = CODE_FOR_spe_mtspefscr;
-      arg0 = CALL_EXPR_ARG (exp, 0);
-      op0 = expand_normal (arg0);
-      mode0 = insn_data[icode].operand[0].mode;
-
-      if (arg0 == error_mark_node)
-       return const0_rtx;
-
-      if (! (*insn_data[icode].operand[0].predicate) (op0, mode0))
-       op0 = copy_to_mode_reg (mode0, op0);
-
-      pat = GEN_FCN (icode) (op0);
-      if (pat)
-       emit_insn (pat);
-      return NULL_RTX;
-    default:
-      break;
-    }
-
-  *expandedp = false;
-  return NULL_RTX;
-}
-
 static rtx
 paired_expand_predicate_builtin (enum insn_code icode, tree exp, rtx target)
 {
@@ -16748,164 +16233,6 @@ paired_expand_predicate_builtin (enum insn_code icode, tree exp, rtx target)
   return target;
 }
 
-static rtx
-spe_expand_predicate_builtin (enum insn_code icode, tree exp, rtx target)
-{
-  rtx pat, scratch, tmp;
-  tree form = CALL_EXPR_ARG (exp, 0);
-  tree arg0 = CALL_EXPR_ARG (exp, 1);
-  tree arg1 = CALL_EXPR_ARG (exp, 2);
-  rtx op0 = expand_normal (arg0);
-  rtx op1 = expand_normal (arg1);
-  machine_mode mode0 = insn_data[icode].operand[1].mode;
-  machine_mode mode1 = insn_data[icode].operand[2].mode;
-  int form_int;
-  enum rtx_code code;
-
-  if (TREE_CODE (form) != INTEGER_CST)
-    {
-      error ("argument 1 of __builtin_spe_predicate must be a constant");
-      return const0_rtx;
-    }
-  else
-    form_int = TREE_INT_CST_LOW (form);
-
-  gcc_assert (mode0 == mode1);
-
-  if (arg0 == error_mark_node || arg1 == error_mark_node)
-    return const0_rtx;
-
-  if (target == 0
-      || GET_MODE (target) != SImode
-      || ! (*insn_data[icode].operand[0].predicate) (target, SImode))
-    target = gen_reg_rtx (SImode);
-
-  if (! (*insn_data[icode].operand[1].predicate) (op0, mode0))
-    op0 = copy_to_mode_reg (mode0, op0);
-  if (! (*insn_data[icode].operand[2].predicate) (op1, mode1))
-    op1 = copy_to_mode_reg (mode1, op1);
-
-  scratch = gen_reg_rtx (CCmode);
-
-  pat = GEN_FCN (icode) (scratch, op0, op1);
-  if (! pat)
-    return const0_rtx;
-  emit_insn (pat);
-
-  /* There are 4 variants for each predicate: _any_, _all_, _upper_,
-     _lower_.  We use one compare, but look in different bits of the
-     CR for each variant.
-
-     There are 2 elements in each SPE simd type (upper/lower).  The CR
-     bits are set as follows:
-
-     BIT0  | BIT 1  | BIT 2   | BIT 3
-     U     |   L    | (U | L) | (U & L)
-
-     So, for an "all" relationship, BIT 3 would be set.
-     For an "any" relationship, BIT 2 would be set.  Etc.
-
-     Following traditional nomenclature, these bits map to:
-
-     BIT0  | BIT 1  | BIT 2   | BIT 3
-     LT    | GT     | EQ      | OV
-
-     Later, we will generate rtl to look in the LT/EQ/EQ/OV bits.
-  */
-
-  switch (form_int)
-    {
-      /* All variant.  OV bit.  */
-    case 0:
-      /* We need to get to the OV bit, which is the ORDERED bit.  We
-        could generate (ordered:SI (reg:CC xx) (const_int 0)), but
-        that's ugly and will make validate_condition_mode die.
-        So let's just use another pattern.  */
-      emit_insn (gen_move_from_CR_ov_bit (target, scratch));
-      return target;
-      /* Any variant.  EQ bit.  */
-    case 1:
-      code = EQ;
-      break;
-      /* Upper variant.  LT bit.  */
-    case 2:
-      code = LT;
-      break;
-      /* Lower variant.  GT bit.  */
-    case 3:
-      code = GT;
-      break;
-    default:
-      error ("argument 1 of __builtin_spe_predicate is out of range");
-      return const0_rtx;
-    }
-
-  tmp = gen_rtx_fmt_ee (code, SImode, scratch, const0_rtx);
-  emit_move_insn (target, tmp);
-
-  return target;
-}
-
-/* The evsel builtins look like this:
-
-     e = __builtin_spe_evsel_OP (a, b, c, d);
-
-   and work like this:
-
-     e[upper] = a[upper] *OP* b[upper] ? c[upper] : d[upper];
-     e[lower] = a[lower] *OP* b[lower] ? c[lower] : d[lower];
-*/
-
-static rtx
-spe_expand_evsel_builtin (enum insn_code icode, tree exp, rtx target)
-{
-  rtx pat, scratch;
-  tree arg0 = CALL_EXPR_ARG (exp, 0);
-  tree arg1 = CALL_EXPR_ARG (exp, 1);
-  tree arg2 = CALL_EXPR_ARG (exp, 2);
-  tree arg3 = CALL_EXPR_ARG (exp, 3);
-  rtx op0 = expand_normal (arg0);
-  rtx op1 = expand_normal (arg1);
-  rtx op2 = expand_normal (arg2);
-  rtx op3 = expand_normal (arg3);
-  machine_mode mode0 = insn_data[icode].operand[1].mode;
-  machine_mode mode1 = insn_data[icode].operand[2].mode;
-
-  gcc_assert (mode0 == mode1);
-
-  if (arg0 == error_mark_node || arg1 == error_mark_node
-      || arg2 == error_mark_node || arg3 == error_mark_node)
-    return const0_rtx;
-
-  if (target == 0
-      || GET_MODE (target) != mode0
-      || ! (*insn_data[icode].operand[0].predicate) (target, mode0))
-    target = gen_reg_rtx (mode0);
-
-  if (! (*insn_data[icode].operand[1].predicate) (op0, mode0))
-    op0 = copy_to_mode_reg (mode0, op0);
-  if (! (*insn_data[icode].operand[1].predicate) (op1, mode1))
-    op1 = copy_to_mode_reg (mode0, op1);
-  if (! (*insn_data[icode].operand[1].predicate) (op2, mode1))
-    op2 = copy_to_mode_reg (mode0, op2);
-  if (! (*insn_data[icode].operand[1].predicate) (op3, mode1))
-    op3 = copy_to_mode_reg (mode0, op3);
-
-  /* Generate the compare.  */
-  scratch = gen_reg_rtx (CCmode);
-  pat = GEN_FCN (icode) (scratch, op0, op1);
-  if (! pat)
-    return const0_rtx;
-  emit_insn (pat);
-
-  if (mode0 == V2SImode)
-    emit_insn (gen_spe_evsel (target, op2, op3, scratch));
-  else
-    emit_insn (gen_spe_evsel_fs (target, op2, op3, scratch));
-
-  return target;
-}
-
 /* Raise an error message for a builtin function that is called without the
    appropriate target options being set.  */
 
@@ -16927,8 +16254,6 @@ rs6000_invalid_builtin (enum rs6000_builtins fncode)
     error ("Builtin function %s requires the -maltivec option", name);
   else if ((fnmask & RS6000_BTM_PAIRED) != 0)
     error ("Builtin function %s requires the -mpaired option", name);
-  else if ((fnmask & RS6000_BTM_SPE) != 0)
-    error ("Builtin function %s requires the -mspe option", name);
   else if ((fnmask & (RS6000_BTM_DFP | RS6000_BTM_P8_VECTOR))
           == (RS6000_BTM_DFP | RS6000_BTM_P8_VECTOR))
     error ("Builtin function %s requires the -mhard-dfp and"
@@ -17451,13 +16776,6 @@ rs6000_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED,
     {
       ret = altivec_expand_builtin (exp, target, &success);
 
-      if (success)
-       return ret;
-    }
-  if (TARGET_SPE)
-    {
-      ret = spe_expand_builtin (exp, target, &success);
-
       if (success)
        return ret;
     }
@@ -17534,9 +16852,8 @@ rs6000_init_builtins (void)
   machine_mode mode;
 
   if (TARGET_DEBUG_BUILTIN)
-    fprintf (stderr, "rs6000_init_builtins%s%s%s%s\n",
+    fprintf (stderr, "rs6000_init_builtins%s%s%s\n",
             (TARGET_PAIRED_FLOAT) ? ", paired"  : "",
-            (TARGET_SPE)          ? ", spe"     : "",
             (TARGET_ALTIVEC)      ? ", altivec" : "",
             (TARGET_VSX)          ? ", vsx"     : "");
 
@@ -17735,14 +17052,12 @@ rs6000_init_builtins (void)
      use of the target attribute.  */
   if (TARGET_PAIRED_FLOAT)
     paired_init_builtins ();
-  if (TARGET_SPE)
-    spe_init_builtins ();
   if (TARGET_EXTRA_BUILTINS)
     altivec_init_builtins ();
   if (TARGET_HTM)
     htm_init_builtins ();
 
-  if (TARGET_EXTRA_BUILTINS || TARGET_SPE || TARGET_PAIRED_FLOAT)
+  if (TARGET_EXTRA_BUILTINS || TARGET_PAIRED_FLOAT)
     rs6000_common_init_builtins ();
 
   ftype = build_function_type_list (ieee128_float_type_node,
@@ -17833,214 +17148,6 @@ rs6000_builtin_decl (unsigned code, bool initialize_p ATTRIBUTE_UNUSED)
   return rs6000_builtin_decls[code];
 }
 
-static void
-spe_init_builtins (void)
-{
-  tree puint_type_node = build_pointer_type (unsigned_type_node);
-  tree pushort_type_node = build_pointer_type (short_unsigned_type_node);
-  const struct builtin_description *d;
-  size_t i;
-  HOST_WIDE_INT builtin_mask = rs6000_builtin_mask;
-
-  tree v2si_ftype_4_v2si
-    = build_function_type_list (opaque_V2SI_type_node,
-                                opaque_V2SI_type_node,
-                                opaque_V2SI_type_node,
-                                opaque_V2SI_type_node,
-                                opaque_V2SI_type_node,
-                                NULL_TREE);
-
-  tree v2sf_ftype_4_v2sf
-    = build_function_type_list (opaque_V2SF_type_node,
-                                opaque_V2SF_type_node,
-                                opaque_V2SF_type_node,
-                                opaque_V2SF_type_node,
-                                opaque_V2SF_type_node,
-                                NULL_TREE);
-
-  tree int_ftype_int_v2si_v2si
-    = build_function_type_list (integer_type_node,
-                                integer_type_node,
-                                opaque_V2SI_type_node,
-                                opaque_V2SI_type_node,
-                                NULL_TREE);
-
-  tree int_ftype_int_v2sf_v2sf
-    = build_function_type_list (integer_type_node,
-                                integer_type_node,
-                                opaque_V2SF_type_node,
-                                opaque_V2SF_type_node,
-                                NULL_TREE);
-
-  tree void_ftype_v2si_puint_int
-    = build_function_type_list (void_type_node,
-                                opaque_V2SI_type_node,
-                                puint_type_node,
-                                integer_type_node,
-                                NULL_TREE);
-
-  tree void_ftype_v2si_puint_char
-    = build_function_type_list (void_type_node,
-                                opaque_V2SI_type_node,
-                                puint_type_node,
-                                char_type_node,
-                                NULL_TREE);
-
-  tree void_ftype_v2si_pv2si_int
-    = build_function_type_list (void_type_node,
-                                opaque_V2SI_type_node,
-                                opaque_p_V2SI_type_node,
-                                integer_type_node,
-                                NULL_TREE);
-
-  tree void_ftype_v2si_pv2si_char
-    = build_function_type_list (void_type_node,
-                                opaque_V2SI_type_node,
-                                opaque_p_V2SI_type_node,
-                                char_type_node,
-                                NULL_TREE);
-
-  tree void_ftype_int
-    = build_function_type_list (void_type_node, integer_type_node, NULL_TREE);
-
-  tree int_ftype_void
-    = build_function_type_list (integer_type_node, NULL_TREE);
-
-  tree v2si_ftype_pv2si_int
-    = build_function_type_list (opaque_V2SI_type_node,
-                                opaque_p_V2SI_type_node,
-                                integer_type_node,
-                                NULL_TREE);
-
-  tree v2si_ftype_puint_int
-    = build_function_type_list (opaque_V2SI_type_node,
-                                puint_type_node,
-                                integer_type_node,
-                                NULL_TREE);
-
-  tree v2si_ftype_pushort_int
-    = build_function_type_list (opaque_V2SI_type_node,
-                                pushort_type_node,
-                                integer_type_node,
-                                NULL_TREE);
-
-  tree v2si_ftype_signed_char
-    = build_function_type_list (opaque_V2SI_type_node,
-                                signed_char_type_node,
-                                NULL_TREE);
-
-  add_builtin_type ("__ev64_opaque__", opaque_V2SI_type_node);
-
-  /* Initialize irregular SPE builtins.  */
-
-  def_builtin ("__builtin_spe_mtspefscr", void_ftype_int, SPE_BUILTIN_MTSPEFSCR);
-  def_builtin ("__builtin_spe_mfspefscr", int_ftype_void, SPE_BUILTIN_MFSPEFSCR);
-  def_builtin ("__builtin_spe_evstddx", void_ftype_v2si_pv2si_int, SPE_BUILTIN_EVSTDDX);
-  def_builtin ("__builtin_spe_evstdhx", void_ftype_v2si_pv2si_int, SPE_BUILTIN_EVSTDHX);
-  def_builtin ("__builtin_spe_evstdwx", void_ftype_v2si_pv2si_int, SPE_BUILTIN_EVSTDWX);
-  def_builtin ("__builtin_spe_evstwhex", void_ftype_v2si_puint_int, SPE_BUILTIN_EVSTWHEX);
-  def_builtin ("__builtin_spe_evstwhox", void_ftype_v2si_puint_int, SPE_BUILTIN_EVSTWHOX);
-  def_builtin ("__builtin_spe_evstwwex", void_ftype_v2si_puint_int, SPE_BUILTIN_EVSTWWEX);
-  def_builtin ("__builtin_spe_evstwwox", void_ftype_v2si_puint_int, SPE_BUILTIN_EVSTWWOX);
-  def_builtin ("__builtin_spe_evstdd", void_ftype_v2si_pv2si_char, SPE_BUILTIN_EVSTDD);
-  def_builtin ("__builtin_spe_evstdh", void_ftype_v2si_pv2si_char, SPE_BUILTIN_EVSTDH);
-  def_builtin ("__builtin_spe_evstdw", void_ftype_v2si_pv2si_char, SPE_BUILTIN_EVSTDW);
-  def_builtin ("__builtin_spe_evstwhe", void_ftype_v2si_puint_char, SPE_BUILTIN_EVSTWHE);
-  def_builtin ("__builtin_spe_evstwho", void_ftype_v2si_puint_char, SPE_BUILTIN_EVSTWHO);
-  def_builtin ("__builtin_spe_evstwwe", void_ftype_v2si_puint_char, SPE_BUILTIN_EVSTWWE);
-  def_builtin ("__builtin_spe_evstwwo", void_ftype_v2si_puint_char, SPE_BUILTIN_EVSTWWO);
-  def_builtin ("__builtin_spe_evsplatfi", v2si_ftype_signed_char, SPE_BUILTIN_EVSPLATFI);
-  def_builtin ("__builtin_spe_evsplati", v2si_ftype_signed_char, SPE_BUILTIN_EVSPLATI);
-
-  /* Loads.  */
-  def_builtin ("__builtin_spe_evlddx", v2si_ftype_pv2si_int, SPE_BUILTIN_EVLDDX);
-  def_builtin ("__builtin_spe_evldwx", v2si_ftype_pv2si_int, SPE_BUILTIN_EVLDWX);
-  def_builtin ("__builtin_spe_evldhx", v2si_ftype_pv2si_int, SPE_BUILTIN_EVLDHX);
-  def_builtin ("__builtin_spe_evlwhex", v2si_ftype_puint_int, SPE_BUILTIN_EVLWHEX);
-  def_builtin ("__builtin_spe_evlwhoux", v2si_ftype_puint_int, SPE_BUILTIN_EVLWHOUX);
-  def_builtin ("__builtin_spe_evlwhosx", v2si_ftype_puint_int, SPE_BUILTIN_EVLWHOSX);
-  def_builtin ("__builtin_spe_evlwwsplatx", v2si_ftype_puint_int, SPE_BUILTIN_EVLWWSPLATX);
-  def_builtin ("__builtin_spe_evlwhsplatx", v2si_ftype_puint_int, SPE_BUILTIN_EVLWHSPLATX);
-  def_builtin ("__builtin_spe_evlhhesplatx", v2si_ftype_pushort_int, SPE_BUILTIN_EVLHHESPLATX);
-  def_builtin ("__builtin_spe_evlhhousplatx", v2si_ftype_pushort_int, SPE_BUILTIN_EVLHHOUSPLATX);
-  def_builtin ("__builtin_spe_evlhhossplatx", v2si_ftype_pushort_int, SPE_BUILTIN_EVLHHOSSPLATX);
-  def_builtin ("__builtin_spe_evldd", v2si_ftype_pv2si_int, SPE_BUILTIN_EVLDD);
-  def_builtin ("__builtin_spe_evldw", v2si_ftype_pv2si_int, SPE_BUILTIN_EVLDW);
-  def_builtin ("__builtin_spe_evldh", v2si_ftype_pv2si_int, SPE_BUILTIN_EVLDH);
-  def_builtin ("__builtin_spe_evlhhesplat", v2si_ftype_pushort_int, SPE_BUILTIN_EVLHHESPLAT);
-  def_builtin ("__builtin_spe_evlhhossplat", v2si_ftype_pushort_int, SPE_BUILTIN_EVLHHOSSPLAT);
-  def_builtin ("__builtin_spe_evlhhousplat", v2si_ftype_pushort_int, SPE_BUILTIN_EVLHHOUSPLAT);
-  def_builtin ("__builtin_spe_evlwhe", v2si_ftype_puint_int, SPE_BUILTIN_EVLWHE);
-  def_builtin ("__builtin_spe_evlwhos", v2si_ftype_puint_int, SPE_BUILTIN_EVLWHOS);
-  def_builtin ("__builtin_spe_evlwhou", v2si_ftype_puint_int, SPE_BUILTIN_EVLWHOU);
-  def_builtin ("__builtin_spe_evlwhsplat", v2si_ftype_puint_int, SPE_BUILTIN_EVLWHSPLAT);
-  def_builtin ("__builtin_spe_evlwwsplat", v2si_ftype_puint_int, SPE_BUILTIN_EVLWWSPLAT);
-
-  /* Predicates.  */
-  d = bdesc_spe_predicates;
-  for (i = 0; i < ARRAY_SIZE (bdesc_spe_predicates); ++i, d++)
-    {
-      tree type;
-      HOST_WIDE_INT mask = d->mask;
-
-      if ((mask & builtin_mask) != mask)
-       {
-         if (TARGET_DEBUG_BUILTIN)
-           fprintf (stderr, "spe_init_builtins, skip predicate %s\n",
-                    d->name);
-         continue;
-       }
-
-      /* Cannot define builtin if the instruction is disabled.  */
-      gcc_assert (d->icode != CODE_FOR_nothing);
-      switch (insn_data[d->icode].operand[1].mode)
-       {
-       case V2SImode:
-         type = int_ftype_int_v2si_v2si;
-         break;
-       case V2SFmode:
-         type = int_ftype_int_v2sf_v2sf;
-         break;
-       default:
-         gcc_unreachable ();
-       }
-
-      def_builtin (d->name, type, d->code);
-    }
-
-  /* Evsel predicates.  */
-  d = bdesc_spe_evsel;
-  for (i = 0; i < ARRAY_SIZE (bdesc_spe_evsel); ++i, d++)
-    {
-      tree type;
-      HOST_WIDE_INT mask = d->mask;
-
-      if ((mask & builtin_mask) != mask)
-       {
-         if (TARGET_DEBUG_BUILTIN)
-           fprintf (stderr, "spe_init_builtins, skip evsel %s\n",
-                    d->name);
-         continue;
-       }
-
-      /* Cannot define builtin if the instruction is disabled.  */
-      gcc_assert (d->icode != CODE_FOR_nothing);
-      switch (insn_data[d->icode].operand[1].mode)
-       {
-       case V2SImode:
-         type = v2si_ftype_4_v2si;
-         break;
-       case V2SFmode:
-         type = v2sf_ftype_4_v2sf;
-         break;
-       default:
-         gcc_unreachable ();
-       }
-
-      def_builtin (d->name, type, d->code);
-    }
-}
-
 static void
 paired_init_builtins (void)
 {
@@ -19558,8 +18665,6 @@ expand_block_clear (rtx operands[])
     clear_step = 16;
   else if (TARGET_POWERPC64 && (align >= 64 || !STRICT_ALIGNMENT))
     clear_step = 8;
-  else if (TARGET_SPE && align >= 64)
-    clear_step = 8;
   else
     clear_step = 4;
 
@@ -19578,11 +18683,6 @@ expand_block_clear (rtx operands[])
          clear_bytes = 16;
          mode = V4SImode;
        }
-      else if (bytes >= 8 && TARGET_SPE && align >= 64)
-        {
-          clear_bytes = 8;
-          mode = V2SImode;
-        }
       else if (bytes >= 8 && TARGET_POWERPC64
               && (align >= 64 || !STRICT_ALIGNMENT))
        {
@@ -20790,12 +19890,6 @@ expand_block_move (rtx operands[])
          mode = V4SImode;
          gen_func.mov = gen_movv4si;
        }
-      else if (TARGET_SPE && bytes >= 8 && align >= 64)
-        {
-          move_bytes = 8;
-          mode = V2SImode;
-          gen_func.mov = gen_movv2si;
-        }
       else if (TARGET_STRING
          && bytes > 24         /* move up to 32 bytes at a time */
          && ! fixed_regs[5]
@@ -23223,10 +22317,6 @@ rs6000_cannot_change_mode_class (machine_mode from,
       && (ALTIVEC_VECTOR_MODE (from) + ALTIVEC_VECTOR_MODE (to)) == 1)
     return true;
 
-  if (TARGET_SPE && (SPE_VECTOR_MODE (from) + SPE_VECTOR_MODE (to)) == 1
-      && reg_classes_intersect_p (GENERAL_REGS, rclass))
-    return true;
-
   return false;
 }
 
@@ -24062,34 +23152,6 @@ print_operand (FILE *file, rtx x, int code)
 
        tmp = XEXP (x, 0);
 
-       /* Ugly hack because %y is overloaded.  */
-       if (TARGET_SPE
-           && (GET_MODE_SIZE (GET_MODE (x)) == 8
-               || FLOAT128_2REG_P (GET_MODE (x))
-               || GET_MODE (x) == TImode
-               || GET_MODE (x) == PTImode))
-         {
-           /* Handle [reg].  */
-           if (REG_P (tmp))
-             {
-               fprintf (file, "0(%s)", reg_names[REGNO (tmp)]);
-               break;
-             }
-           /* Handle [reg+UIMM].  */
-           else if (GET_CODE (tmp) == PLUS &&
-                    GET_CODE (XEXP (tmp, 1)) == CONST_INT)
-             {
-               int x;
-
-               gcc_assert (REG_P (XEXP (tmp, 0)));
-
-               x = INTVAL (XEXP (tmp, 1));
-               fprintf (file, "%d(%s)", x, reg_names[REGNO (XEXP (tmp, 0))]);
-               break;
-             }
-
-           /* Fall through.  Must be [reg+reg].  */
-         }
        if (VECTOR_MEM_ALTIVEC_P (GET_MODE (x))
            && GET_CODE (tmp) == AND
            && GET_CODE (XEXP (tmp, 1)) == CONST_INT
@@ -26922,13 +25984,6 @@ rs6000_savres_strategy (rs6000_stack_t *info,
                 | SAVE_INLINE_GPRS
                 | SAVE_INLINE_VRS);
 
-  /* Saving CR interferes with the exit routines used on the SPE, so
-     just punt here.  */
-  if (TARGET_SPE_ABI
-      && info->spe_64bit_regs_used
-      && info->cr_save_p)
-    strategy |= REST_INLINE_GPRS;
-
   /* We can only use the out-of-line routines to restore fprs if we've
      saved all the registers from first_fp_reg_save in the prologue.
      Otherwise, we risk loading garbage.  Of course, if we have saved
@@ -26971,7 +26026,6 @@ rs6000_savres_strategy (rs6000_stack_t *info,
 
   if (TARGET_MULTIPLE
       && !TARGET_POWERPC64
-      && !(TARGET_SPE_ABI && info->spe_64bit_regs_used)
       && info->first_gp_reg_save < 31
       && !(flag_shrink_wrap
           && flag_shrink_wrap_separate
@@ -27190,15 +26244,6 @@ rs6000_stack_info (void)
   memset (info, 0, sizeof (*info));
   info->reload_completed = reload_completed;
 
-  if (TARGET_SPE)
-    {
-      /* Cache value so we don't rescan instruction chain over and over.  */
-      if (cfun->machine->spe_insn_chain_scanned_p == 0)
-       cfun->machine->spe_insn_chain_scanned_p
-         = spe_func_has_64bit_regs_p () + 1;
-      info->spe_64bit_regs_used = cfun->machine->spe_insn_chain_scanned_p - 1;
-    }
-
   /* Select which calling sequence.  */
   info->abi = DEFAULT_ABI;
 
@@ -27219,21 +26264,6 @@ rs6000_stack_info (void)
 
   info->gp_size = reg_size * (32 - first_gp);
 
-  /* For the SPE, we have an additional upper 32-bits on each GPR.
-     Ideally we should save the entire 64-bits only when the upper
-     half is used in SIMD instructions.  Since we only record
-     registers live (not the size they are used in), this proves
-     difficult because we'd have to traverse the instruction chain at
-     the right time, taking reload into account.  This is a real pain,
-     so we opt to save the GPRs in 64-bits always if but one register
-     gets used in 64-bits.  Otherwise, all the registers in the frame
-     get saved in 32-bits.
-
-     So... since when we save all GPRs (except the SP) in 64-bits, the
-     traditional GP save area will be empty.  */
-  if (TARGET_SPE_ABI && info->spe_64bit_regs_used != 0)
-    info->gp_size = 0;
-
   info->first_fp_reg_save = first_fp_reg_to_save ();
   info->fp_size = 8 * (64 - info->first_fp_reg_save);
 
@@ -27263,9 +26293,7 @@ rs6000_stack_info (void)
       for (i = 0; EH_RETURN_DATA_REGNO (i) != INVALID_REGNUM; ++i)
        continue;
 
-      /* SPE saves EH registers in 64-bits.  */
-      ehrd_size = i * (TARGET_SPE_ABI && info->spe_64bit_regs_used != 0
-                      ? UNITS_PER_SPE_WORD : UNITS_PER_WORD);
+      ehrd_size = i * UNITS_PER_WORD;
     }
   else
     ehrd_size = 0;
@@ -27299,9 +26327,6 @@ rs6000_stack_info (void)
                       ABI_STACK_BOUNDARY / BITS_PER_UNIT)
         - (info->fixed_size + info->vars_size + info->parm_size);
 
-  if (TARGET_SPE_ABI && info->spe_64bit_regs_used != 0)
-    info->spe_gp_size = 8 * (32 - first_gp);
-
   if (TARGET_ALTIVEC_ABI)
     info->vrsave_mask = compute_vrsave_mask ();
 
@@ -27354,23 +26379,7 @@ rs6000_stack_info (void)
       info->gp_save_offset = info->fp_save_offset - info->gp_size;
       info->cr_save_offset = info->gp_save_offset - info->cr_size;
 
-      if (TARGET_SPE_ABI && info->spe_64bit_regs_used != 0)
-       {
-         /* Align stack so SPE GPR save area is aligned on a
-            double-word boundary.  */
-         if (info->spe_gp_size != 0 && info->cr_save_offset != 0)
-           info->spe_padding_size = 8 - (-info->cr_save_offset % 8);
-         else
-           info->spe_padding_size = 0;
-
-         info->spe_gp_save_offset = info->cr_save_offset
-                                    - info->spe_padding_size
-                                    - info->spe_gp_size;
-
-         /* Adjust for SPE case.  */
-         info->ehrd_offset = info->spe_gp_save_offset;
-       }
-      else if (TARGET_ALTIVEC_ABI)
+      if (TARGET_ALTIVEC_ABI)
        {
          info->vrsave_save_offset = info->cr_save_offset - info->vrsave_size;
 
@@ -27397,8 +26406,6 @@ rs6000_stack_info (void)
                                  + info->gp_size
                                  + info->altivec_size
                                  + info->altivec_padding_size
-                                 + info->spe_gp_size
-                                 + info->spe_padding_size
                                  + ehrd_size
                                  + ehcr_size
                                  + info->cr_size
@@ -27470,50 +26477,6 @@ rs6000_stack_info (void)
   return info;
 }
 
-/* Return true if the current function uses any GPRs in 64-bit SIMD
-   mode.  */
-
-static bool
-spe_func_has_64bit_regs_p (void)
-{
-  rtx_insn *insns, *insn;
-
-  /* Functions that save and restore all the call-saved registers will
-     need to save/restore the registers in 64-bits.  */
-  if (crtl->calls_eh_return
-      || cfun->calls_setjmp
-      || crtl->has_nonlocal_goto)
-    return true;
-
-  insns = get_insns ();
-
-  for (insn = NEXT_INSN (insns); insn != NULL_RTX; insn = NEXT_INSN (insn))
-    {
-      if (INSN_P (insn))
-       {
-         rtx i;
-
-         /* FIXME: This should be implemented with attributes...
-
-                (set_attr "spe64" "true")....then,
-                if (get_spe64(insn)) return true;
-
-            It's the only reliable way to do the stuff below.  */
-
-         i = PATTERN (insn);
-         if (GET_CODE (i) == SET)
-           {
-             machine_mode mode = GET_MODE (SET_SRC (i));
-
-             if (SPE_VECTOR_MODE (mode))
-               return true;
-           }
-       }
-    }
-
-  return false;
-}
-
 static void
 debug_stack_info (rs6000_stack_t *info)
 {
@@ -27542,9 +26505,6 @@ debug_stack_info (rs6000_stack_t *info)
   if (TARGET_ALTIVEC_ABI)
     fprintf (stderr, "\tALTIVEC ABI extensions enabled.\n");
 
-  if (TARGET_SPE_ABI)
-    fprintf (stderr, "\tSPE ABI extensions enabled.\n");
-
   if (info->first_gp_reg_save != 32)
     fprintf (stderr, "\tfirst_gp_reg_save   = %5d\n", info->first_gp_reg_save);
 
@@ -27580,10 +26540,6 @@ debug_stack_info (rs6000_stack_t *info)
     fprintf (stderr, "\taltivec_save_offset = %5d\n",
             info->altivec_save_offset);
 
-  if (info->spe_gp_size)
-    fprintf (stderr, "\tspe_gp_save_offset  = %5d\n",
-            info->spe_gp_save_offset);
-
   if (info->vrsave_size)
     fprintf (stderr, "\tvrsave_save_offset  = %5d\n",
             info->vrsave_save_offset);
@@ -27614,9 +26570,6 @@ debug_stack_info (rs6000_stack_t *info)
   if (info->gp_size)
     fprintf (stderr, "\tgp_size             = %5d\n", info->gp_size);
 
-  if (info->spe_gp_size)
-    fprintf (stderr, "\tspe_gp_size         = %5d\n", info->spe_gp_size);
-
   if (info->fp_size)
     fprintf (stderr, "\tfp_size             = %5d\n", info->fp_size);
 
@@ -27630,10 +26583,6 @@ debug_stack_info (rs6000_stack_t *info)
     fprintf (stderr, "\taltivec_padding_size= %5d\n",
             info->altivec_padding_size);
 
-  if (info->spe_padding_size)
-    fprintf (stderr, "\tspe_padding_size    = %5d\n",
-            info->spe_padding_size);
-
   if (info->cr_size)
     fprintf (stderr, "\tcr_size             = %5d\n", info->cr_size);
 
@@ -28453,11 +27402,8 @@ emit_frame_save (rtx frame_reg, machine_mode mode,
   rtx reg;
 
   /* Some cases that need register indexed addressing.  */
-  gcc_checking_assert (!((TARGET_ALTIVEC_ABI && ALTIVEC_VECTOR_MODE (mode))
-                        || (TARGET_VSX && ALTIVEC_OR_VSX_VECTOR_MODE (mode))
-                        || (TARGET_SPE_ABI
-                            && SPE_VECTOR_MODE (mode)
-                            && !SPE_CONST_OFFSET_OK (offset))));
+  gcc_checking_assert (!(TARGET_ALTIVEC_ABI && ALTIVEC_VECTOR_MODE (mode))
+                        || (TARGET_VSX && ALTIVEC_OR_VSX_VECTOR_MODE (mode)));
 
   reg = gen_rtx_REG (mode, regno);
   rtx_insn *insn = emit_insn (gen_frame_store (reg, frame_reg, offset));
@@ -28471,19 +27417,7 @@ emit_frame_save (rtx frame_reg, machine_mode mode,
 static rtx
 gen_frame_mem_offset (machine_mode mode, rtx reg, int offset)
 {
-  rtx int_rtx, offset_rtx;
-
-  int_rtx = GEN_INT (offset);
-
-  if (TARGET_SPE_ABI && SPE_VECTOR_MODE (mode) && !SPE_CONST_OFFSET_OK (offset))
-    {
-      offset_rtx = gen_rtx_REG (Pmode, FIXED_SCRATCH);
-      emit_move_insn (offset_rtx, int_rtx);
-    }
-  else
-    offset_rtx = int_rtx;
-
-  return gen_frame_mem (mode, gen_rtx_PLUS (Pmode, reg, offset_rtx));
+  return gen_frame_mem (mode, gen_rtx_PLUS (Pmode, reg, GEN_INT (offset)));
 }
 
 #ifndef TARGET_FIX_AND_CONTINUE
@@ -28514,7 +27448,7 @@ static char savres_routine_name[30];
    We are saving/restoring GPRs if GPR is true.  */
 
 static char *
-rs6000_savres_routine_name (rs6000_stack_t *info, int regno, int sel)
+rs6000_savres_routine_name (int regno, int sel)
 {
   const char *prefix = "";
   const char *suffix = "";
@@ -28530,9 +27464,6 @@ rs6000_savres_routine_name (rs6000_stack_t *info, int regno, int sel)
 
      - ELF targets have save/restore routines for GPRs.
 
-     - SPE targets use different prefixes for 32/64-bit registers, and
-       neither of them fit neatly in the FOO_{PREFIX,SUFFIX} regimen.
-
      - PPC64 ELF targets have routines for save/restore of GPRs that
        differ in what they do with the link register, so having a set
        prefix doesn't work.  (We only use one of the save routines at
@@ -28547,20 +27478,7 @@ rs6000_savres_routine_name (rs6000_stack_t *info, int regno, int sel)
 
      We deal with all this by synthesizing our own prefix/suffix and
      using that for the simple sprintf call shown above.  */
-  if (TARGET_SPE)
-    {
-      /* No floating point saves on the SPE.  */
-      gcc_assert ((sel & SAVRES_REG) == SAVRES_GPR);
-
-      if ((sel & SAVRES_SAVE))
-       prefix = info->spe_64bit_regs_used ? "_save64gpr_" : "_save32gpr_";
-      else
-       prefix = info->spe_64bit_regs_used ? "_rest64gpr_" : "_rest32gpr_";
-
-      if ((sel & SAVRES_LR))
-       suffix = "_x";
-    }
-  else if (DEFAULT_ABI == ABI_V4)
+  if (DEFAULT_ABI == ABI_V4)
     {
       if (TARGET_64BIT)
        goto aix_names;
@@ -28650,12 +27568,6 @@ rs6000_savres_routine_sym (rs6000_stack_t *info, int sel)
   rtx sym;
   int select = sel;
 
-  /* On the SPE, we never have any FPRs, but we do have 32/64-bit
-     versions of the gpr routines.  */
-  if (TARGET_SPE_ABI && (sel & SAVRES_REG) == SAVRES_GPR
-      && info->spe_64bit_regs_used)
-    select ^= SAVRES_FPR ^ SAVRES_GPR;
-
   /* Don't generate bogus routine names.  */
   gcc_assert (FIRST_SAVRES_REGISTER <= regno
              && regno <= LAST_SAVRES_REGISTER
@@ -28667,7 +27579,7 @@ rs6000_savres_routine_sym (rs6000_stack_t *info, int sel)
     {
       char *name;
 
-      name = rs6000_savres_routine_name (info, regno, sel);
+      name = rs6000_savres_routine_name (regno, sel);
 
       sym = savres_routine_syms[regno-FIRST_SAVRES_REGISTER][select]
        = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (name));
@@ -28683,8 +27595,7 @@ rs6000_savres_routine_sym (rs6000_stack_t *info, int sel)
    reg UPDT_REGNO for use by out-of-line register restore routines.  */
 
 static rtx
-rs6000_emit_stack_reset (rs6000_stack_t *info,
-                        rtx frame_reg_rtx, HOST_WIDE_INT frame_off,
+rs6000_emit_stack_reset (rtx frame_reg_rtx, HOST_WIDE_INT frame_off,
                         unsigned updt_regno)
 {
   /* If there is nothing to do, don't do anything.  */
@@ -28695,10 +27606,7 @@ rs6000_emit_stack_reset (rs6000_stack_t *info,
 
   /* This blockage is needed so that sched doesn't decide to move
      the sp change before the register restores.  */
-  if (DEFAULT_ABI == ABI_V4
-      || (TARGET_SPE_ABI
-         && info->spe_64bit_regs_used != 0
-         && info->first_gp_reg_save != 32))
+  if (DEFAULT_ABI == ABI_V4)
     return emit_insn (gen_stack_restore_tie (updt_reg_rtx, frame_reg_rtx,
                                             GEN_INT (frame_off)));
 
@@ -28920,9 +27828,6 @@ rs6000_get_separate_components (void)
   if (WORLD_SAVE_P (info))
     return NULL;
 
-  if (TARGET_SPE_ABI)
-    return NULL;
-
   gcc_assert (!(info->savres_strategy & SAVE_MULTIPLE)
              && !(info->savres_strategy & REST_MULTIPLE));
 
@@ -29318,12 +28223,6 @@ rs6000_emit_prologue (void)
       emit_insn (gen_nop ());
     }
 
-  if (TARGET_SPE_ABI && info->spe_64bit_regs_used != 0)
-    {
-      reg_mode = V2SImode;
-      reg_size = 8;
-    }
-
   /* Handle world saves specially here.  */
   if (WORLD_SAVE_P (info))
     {
@@ -29424,12 +28323,9 @@ rs6000_emit_prologue (void)
       && (DEFAULT_ABI == ABI_V4
          || crtl->calls_eh_return))
     {
-      bool need_r11 = (TARGET_SPE
-                      ? (!(strategy & SAVE_INLINE_GPRS)
-                         && info->spe_64bit_regs_used == 0)
-                      : (!(strategy & SAVE_INLINE_FPRS)
-                         || !(strategy & SAVE_INLINE_GPRS)
-                         || !(strategy & SAVE_INLINE_VRS)));
+      bool need_r11 = (!(strategy & SAVE_INLINE_FPRS)
+                      || !(strategy & SAVE_INLINE_GPRS)
+                      || !(strategy & SAVE_INLINE_VRS));
       int ptr_regno = -1;
       rtx ptr_reg = NULL_RTX;
       int ptr_off = 0;
@@ -29566,94 +28462,7 @@ rs6000_emit_prologue (void)
 
   /* Save GPRs.  This is done as a PARALLEL if we are using
      the store-multiple instructions.  */
-  if (!WORLD_SAVE_P (info)
-      && TARGET_SPE_ABI
-      && info->spe_64bit_regs_used != 0
-      && info->first_gp_reg_save != 32)
-    {
-      int i;
-      rtx spe_save_area_ptr;
-      HOST_WIDE_INT save_off;
-      int ool_adjust = 0;
-
-      /* Determine whether we can address all of the registers that need
-        to be saved with an offset from frame_reg_rtx that fits in
-        the small const field for SPE memory instructions.  */
-      int spe_regs_addressable
-       = (SPE_CONST_OFFSET_OK (info->spe_gp_save_offset + frame_off
-                               + reg_size * (32 - info->first_gp_reg_save - 1))
-          && (strategy & SAVE_INLINE_GPRS));
-
-      if (spe_regs_addressable)
-       {
-         spe_save_area_ptr = frame_reg_rtx;
-         save_off = frame_off;
-       }
-      else
-       {
-         /* Make r11 point to the start of the SPE save area.  We need
-            to be careful here if r11 is holding the static chain.  If
-            it is, then temporarily save it in r0.  */
-         HOST_WIDE_INT offset;
-
-         if (!(strategy & SAVE_INLINE_GPRS))
-           ool_adjust = 8 * (info->first_gp_reg_save - FIRST_SAVED_GP_REGNO);
-         offset = info->spe_gp_save_offset + frame_off - ool_adjust;
-         spe_save_area_ptr = gen_rtx_REG (Pmode, 11);
-         save_off = frame_off - offset;
-
-         if (using_static_chain_p)
-           {
-             rtx r0 = gen_rtx_REG (Pmode, 0);
-
-             START_USE (0);
-             gcc_assert (info->first_gp_reg_save > 11);
-
-             emit_move_insn (r0, spe_save_area_ptr);
-           }
-         else if (REGNO (frame_reg_rtx) != 11)
-           START_USE (11);
-
-         emit_insn (gen_addsi3 (spe_save_area_ptr,
-                                frame_reg_rtx, GEN_INT (offset)));
-         if (!using_static_chain_p && REGNO (frame_reg_rtx) == 11)
-           frame_off = -info->spe_gp_save_offset + ool_adjust;
-       }
-
-      if ((strategy & SAVE_INLINE_GPRS))
-       {
-         for (i = 0; i < 32 - info->first_gp_reg_save; i++)
-           if (rs6000_reg_live_or_pic_offset_p (info->first_gp_reg_save + i))
-             emit_frame_save (spe_save_area_ptr, reg_mode,
-                              info->first_gp_reg_save + i,
-                              (info->spe_gp_save_offset + save_off
-                               + reg_size * i),
-                              sp_off - save_off);
-       }
-      else
-       {
-         insn = rs6000_emit_savres_rtx (info, spe_save_area_ptr,
-                                        info->spe_gp_save_offset + save_off,
-                                        0, reg_mode,
-                                        SAVRES_SAVE | SAVRES_GPR);
-
-         rs6000_frame_related (insn, spe_save_area_ptr, sp_off - save_off,
-                               NULL_RTX, NULL_RTX);
-       }
-
-      /* Move the static chain pointer back.  */
-      if (!spe_regs_addressable)
-       {
-         if (using_static_chain_p)
-           {
-             emit_move_insn (spe_save_area_ptr, gen_rtx_REG (Pmode, 0));
-             END_USE (0);
-           }
-         else if (REGNO (frame_reg_rtx) != 11)
-           END_USE (11);
-       }
-    }
-  else if (!WORLD_SAVE_P (info) && !(strategy & SAVE_INLINE_GPRS))
+  if (!WORLD_SAVE_P (info) && !(strategy & SAVE_INLINE_GPRS))
     {
       bool lr = (strategy & SAVE_NOINLINE_GPRS_SAVES_LR) != 0;
       int sel = SAVRES_SAVE | SAVRES_GPR | (lr ? SAVRES_LR : 0);
@@ -30280,7 +29089,7 @@ rs6000_output_savres_externs (FILE *file)
        {
          bool lr = (info->savres_strategy & SAVE_NOINLINE_FPRS_SAVES_LR) != 0;
          int sel = SAVRES_SAVE | SAVRES_FPR | (lr ? SAVRES_LR : 0);
-         name = rs6000_savres_routine_name (info, regno, sel);
+         name = rs6000_savres_routine_name (regno, sel);
          fprintf (file, "\t.extern %s\n", name);
        }
       if ((info->savres_strategy & REST_INLINE_FPRS) == 0)
@@ -30288,7 +29097,7 @@ rs6000_output_savres_externs (FILE *file)
          bool lr = (info->savres_strategy
                     & REST_NOINLINE_FPRS_DOESNT_RESTORE_LR) == 0;
          int sel = SAVRES_FPR | (lr ? SAVRES_LR : 0);
-         name = rs6000_savres_routine_name (info, regno, sel);
+         name = rs6000_savres_routine_name (regno, sel);
          fprintf (file, "\t.extern %s\n", name);
        }
     }
@@ -30619,12 +29428,6 @@ rs6000_emit_epilogue (int sibcall)
 
   info = rs6000_stack_info ();
 
-  if (TARGET_SPE_ABI && info->spe_64bit_regs_used != 0)
-    {
-      reg_mode = V2SImode;
-      reg_size = 8;
-    }
-
   strategy = info->savres_strategy;
   using_load_multiple = strategy & REST_MULTIPLE;
   restoring_FPRs_inline = sibcall || (strategy & REST_INLINE_FPRS);
@@ -31179,68 +29982,7 @@ rs6000_emit_epilogue (int sibcall)
 
   /* Restore GPRs.  This is done as a PARALLEL if we are using
      the load-multiple instructions.  */
-  if (TARGET_SPE_ABI
-      && info->spe_64bit_regs_used
-      && info->first_gp_reg_save != 32)
-    {
-      /* Determine whether we can address all of the registers that need
-        to be saved with an offset from frame_reg_rtx that fits in
-        the small const field for SPE memory instructions.  */
-      int spe_regs_addressable
-       = (SPE_CONST_OFFSET_OK (info->spe_gp_save_offset + frame_off
-                               + reg_size * (32 - info->first_gp_reg_save - 1))
-          && restoring_GPRs_inline);
-
-      if (!spe_regs_addressable)
-       {
-         int ool_adjust = 0;
-         rtx old_frame_reg_rtx = frame_reg_rtx;
-         /* Make r11 point to the start of the SPE save area.  We worried about
-            not clobbering it when we were saving registers in the prologue.
-            There's no need to worry here because the static chain is passed
-            anew to every function.  */
-
-         if (!restoring_GPRs_inline)
-           ool_adjust = 8 * (info->first_gp_reg_save - FIRST_SAVED_GP_REGNO);
-         frame_reg_rtx = gen_rtx_REG (Pmode, 11);
-         emit_insn (gen_addsi3 (frame_reg_rtx, old_frame_reg_rtx,
-                                GEN_INT (info->spe_gp_save_offset
-                                         + frame_off
-                                         - ool_adjust)));
-         /* Keep the invariant that frame_reg_rtx + frame_off points
-            at the top of the stack frame.  */
-         frame_off = -info->spe_gp_save_offset + ool_adjust;
-       }
-
-      if (restoring_GPRs_inline)
-       {
-         HOST_WIDE_INT spe_offset = info->spe_gp_save_offset + frame_off;
-
-         for (i = 0; i < 32 - info->first_gp_reg_save; i++)
-           if (rs6000_reg_live_or_pic_offset_p (info->first_gp_reg_save + i))
-             {
-               rtx offset, addr, mem, reg;
-
-               /* We're doing all this to ensure that the immediate offset
-                  fits into the immediate field of 'evldd'.  */
-               gcc_assert (SPE_CONST_OFFSET_OK (spe_offset + reg_size * i));
-
-               offset = GEN_INT (spe_offset + reg_size * i);
-               addr = gen_rtx_PLUS (Pmode, frame_reg_rtx, offset);
-               mem = gen_rtx_MEM (V2SImode, addr);
-               reg = gen_rtx_REG (reg_mode, info->first_gp_reg_save + i);
-
-               emit_move_insn (reg, mem);
-             }
-       }
-      else
-       rs6000_emit_savres_rtx (info, frame_reg_rtx,
-                               info->spe_gp_save_offset + frame_off,
-                               info->lr_save_offset + frame_off,
-                               reg_mode,
-                               SAVRES_GPR | SAVRES_LR);
-    }
-  else if (!restoring_GPRs_inline)
+  if (!restoring_GPRs_inline)
     {
       /* We are jumping to an out-of-line function.  */
       rtx ptr_reg;
@@ -31253,7 +29995,7 @@ rs6000_emit_epilogue (int sibcall)
       ptr_regno = ptr_regno_for_savres (sel);
       ptr_reg = gen_rtx_REG (Pmode, ptr_regno);
       if (can_use_exit)
-       rs6000_emit_stack_reset (info, frame_reg_rtx, frame_off, ptr_regno);
+       rs6000_emit_stack_reset (frame_reg_rtx, frame_off, ptr_regno);
       else if (end_save + frame_off != 0)
        emit_insn (gen_add3_insn (ptr_reg, frame_reg_rtx,
                                  GEN_INT (end_save + frame_off)));
@@ -31391,7 +30133,7 @@ rs6000_emit_epilogue (int sibcall)
       ptr_regno = ptr_regno_for_savres (sel);
     }
 
-  insn = rs6000_emit_stack_reset (info, frame_reg_rtx, frame_off, ptr_regno);
+  insn = rs6000_emit_stack_reset (frame_reg_rtx, frame_off, ptr_regno);
   if (REGNO (frame_reg_rtx) == ptr_regno)
     frame_off = 0;
 
@@ -36252,9 +34994,7 @@ rs6000_elf_file_end (void)
     {
       if (rs6000_passes_vector)
        fprintf (asm_out_file, "\t.gnu_attribute 8, %d\n",
-                (TARGET_ALTIVEC_ABI ? 2
-                 : TARGET_SPE_ABI ? 3
-                 : 1));
+                (TARGET_ALTIVEC_ABI ? 2 : 1));
       if (rs6000_returns_struct)
        fprintf (asm_out_file, "\t.gnu_attribute 12, %d\n",
                 aix_struct_return ? 2 : 1);
@@ -38343,8 +37083,7 @@ rs6000_vectorize_vec_perm_const_ok (machine_mode vmode,
     return true;
 
   /* Check for ps_merge* or evmerge* insns.  */
-  if ((TARGET_PAIRED_FLOAT && vmode == V2SFmode)
-      || (TARGET_SPE && vmode == V2SImode))
+  if (TARGET_PAIRED_FLOAT && vmode == V2SFmode)
     {
       rtx op0 = gen_raw_REG (vmode, LAST_VIRTUAL_REGISTER + 1);
       rtx op1 = gen_raw_REG (vmode, LAST_VIRTUAL_REGISTER + 2);
@@ -38704,68 +37443,11 @@ rs6000_initial_elimination_offset (int from, int to)
   return offset;
 }
 
-static rtx
-rs6000_dwarf_register_span (rtx reg)
-{
-  rtx parts[8];
-  int i, words;
-  unsigned regno = REGNO (reg);
-  machine_mode mode = GET_MODE (reg);
-
-  if (TARGET_SPE
-      && regno < 32
-      && SPE_VECTOR_MODE (GET_MODE (reg)))
-    ;
-  else
-    return NULL_RTX;
-
-  regno = REGNO (reg);
-
-  /* The duality of the SPE register size wreaks all kinds of havoc.
-     This is a way of distinguishing r0 in 32-bits from r0 in
-     64-bits.  */
-  words = (GET_MODE_SIZE (mode) + UNITS_PER_FP_WORD - 1) / UNITS_PER_FP_WORD;
-  gcc_assert (words <= 4);
-  for (i = 0; i < words; i++, regno++)
-    {
-      if (BYTES_BIG_ENDIAN)
-       {
-         parts[2 * i] = gen_rtx_REG (SImode, regno + FIRST_SPE_HIGH_REGNO);
-         parts[2 * i + 1] = gen_rtx_REG (SImode, regno);
-       }
-      else
-       {
-         parts[2 * i] = gen_rtx_REG (SImode, regno);
-         parts[2 * i + 1] = gen_rtx_REG (SImode, regno + FIRST_SPE_HIGH_REGNO);
-       }
-    }
-
-  return gen_rtx_PARALLEL (VOIDmode, gen_rtvec_v (words * 2, parts));
-}
-
 /* Fill in sizes for SPE register high parts in table used by unwinder.  */
 
 static void
 rs6000_init_dwarf_reg_sizes_extra (tree address)
 {
-  if (TARGET_SPE)
-    {
-      int i;
-      machine_mode mode = TYPE_MODE (char_type_node);
-      rtx addr = expand_expr (address, NULL_RTX, VOIDmode, EXPAND_NORMAL);
-      rtx mem = gen_rtx_MEM (BLKmode, addr);
-      rtx value = gen_int_mode (4, mode);
-
-      for (i = FIRST_SPE_HIGH_REGNO; i < LAST_SPE_HIGH_REGNO+1; i++)
-       {
-         int column = DWARF_REG_TO_UNWIND_COLUMN
-               (DWARF2_FRAME_REG_OUT (DWARF_FRAME_REGNUM (i), true));
-         HOST_WIDE_INT offset = column * GET_MODE_SIZE (mode);
-
-         emit_move_insn (adjust_address (mem, mode, offset), value);
-       }
-    }
-
   if (TARGET_MACHO && ! TARGET_ALTIVEC)
     {
       int i;
@@ -38797,11 +37479,6 @@ rs6000_init_dwarf_reg_sizes_extra (tree address)
 unsigned int
 rs6000_dbx_register_number (unsigned int regno, unsigned int format)
 {
-  /* We never use the GCC internal number for SPE high registers.
-     Those are mapped to the 1200..1231 range for all debug formats.  */
-  if (SPE_HIGH_REGNO_P (regno))
-    return regno - FIRST_SPE_HIGH_REGNO + 1200;
-
   /* Except for the above, we use the internal number for non-DWARF
      debug information, and also for .eh_frame.  */
   if ((format == 0 && write_symbols != DWARF2_DEBUG) || format == 2)
@@ -38875,9 +37552,6 @@ rs6000_vector_mode_supported_p (machine_mode mode)
   if (TARGET_PAIRED_FLOAT && PAIRED_VECTOR_MODE (mode))
     return true;
 
-  if (TARGET_SPE && SPE_VECTOR_MODE (mode))
-    return true;
-
   /* There is no vector form for IEEE 128-bit.  If we return true for IEEE
      128-bit, the compiler might try to widen IEEE 128-bit to IBM
      double-double.  */
@@ -39083,7 +37757,6 @@ static struct rs6000_opt_mask const rs6000_builtin_mask_names[] =
 {
   { "altivec",          RS6000_BTM_ALTIVEC,    false, false },
   { "vsx",              RS6000_BTM_VSX,        false, false },
-  { "spe",              RS6000_BTM_SPE,        false, false },
   { "paired",           RS6000_BTM_PAIRED,     false, false },
   { "fre",              RS6000_BTM_FRE,        false, false },
   { "fres",             RS6000_BTM_FRES,       false, false },
index 66f8170d68a2020687ea21f5795c55668859ac4a..da3b8777a54bc6f7906073582af9f284ca365465 100644 (file)
@@ -569,8 +569,6 @@ extern int rs6000_vector_align[];
 #define TARGET_ALTIVEC_ABI rs6000_altivec_abi
 #define TARGET_LDBRX (TARGET_POPCNTD || rs6000_cpu == PROCESSOR_CELL)
 
-#define TARGET_SPE_ABI 0
-#define TARGET_SPE 0
 #define TARGET_ISEL64 (TARGET_ISEL && TARGET_POWERPC64)
 
 /* ISA 2.01 allowed FCFID to be done in 32-bit, previously it was 64-bit only.
@@ -704,7 +702,7 @@ extern int rs6000_vector_align[];
    the compiler for those builtins, and those machines don't support altivec or
    VSX.  */
 
-#define TARGET_EXTRA_BUILTINS  (!TARGET_SPE && !TARGET_PAIRED_FLOAT     \
+#define TARGET_EXTRA_BUILTINS  (!TARGET_PAIRED_FLOAT                    \
                                 && ((TARGET_POWERPC64                   \
                                      || TARGET_PPC_GPOPT /* 970/power4 */ \
                                      || TARGET_POPCNTB   /* ISA 2.02 */ \
@@ -869,7 +867,6 @@ extern unsigned char rs6000_recip_bits[];
 #define UNITS_PER_FP_WORD 8
 #define UNITS_PER_ALTIVEC_WORD 16
 #define UNITS_PER_VSX_WORD 16
-#define UNITS_PER_SPE_WORD 8
 #define UNITS_PER_PAIRED_WORD 8
 
 /* Type used for ptrdiff_t, as a string used in a declaration.  */
@@ -971,8 +968,7 @@ enum data_align { align_abi, align_opt, align_both };
 #define DATA_ALIGNMENT(TYPE, ALIGN) \
   rs6000_data_alignment (TYPE, ALIGN, align_opt)
 
-/* Align vectors to 128 bits.  Align SPE vectors and E500 v2 doubles to
-   64 bits.  */
+/* Align vectors to 128 bits.  */
 #define DATA_ABI_ALIGNMENT(TYPE, ALIGN) \
   rs6000_data_alignment (TYPE, ALIGN, align_abi)
 
@@ -983,9 +979,8 @@ enum data_align { align_abi, align_opt, align_both };
 /* Define this macro to be the value 1 if unaligned accesses have a cost
    many times greater than aligned accesses, for example if they are
    emulated in a trap handler.  */
-/* Altivec vector memory instructions simply ignore the low bits; SPE vector
-   memory instructions trap on unaligned accesses; VSX memory instructions are
-   aligned to 4 or 8 bytes.  */
+/* Altivec vector memory instructions simply ignore the low bits; VSX memory
+   instructions are aligned to 4 or 8 bytes.  */
 #define SLOW_UNALIGNED_ACCESS(MODE, ALIGN)                             \
   (STRICT_ALIGNMENT                                                    \
    || (!TARGET_EFFICIENT_UNALIGNED_VSX                                 \
@@ -1027,12 +1022,7 @@ enum data_align { align_abi, align_opt, align_both };
 /* This must be included for pre gcc 3.0 glibc compatibility.  */
 #define PRE_GCC3_DWARF_FRAME_REGISTERS 77
 
-/* True if register is an SPE High register.  */
-#define SPE_HIGH_REGNO_P(N) \
-  ((N) >= FIRST_SPE_HIGH_REGNO && (N) <= LAST_SPE_HIGH_REGNO)
-
-/* SPE high registers added as hard regs.
-   The sfp register and 3 HTM registers
+/* The sfp register and 3 HTM registers
    aren't included in DWARF_FRAME_REGISTERS.  */
 #define DWARF_FRAME_REGISTERS (FIRST_PSEUDO_REGISTER - 4)
 
@@ -1227,9 +1217,6 @@ enum data_align { align_abi, align_opt, align_both };
 #define INT_REGNO_P(N) \
   ((N) <= 31 || (N) == ARG_POINTER_REGNUM || (N) == FRAME_POINTER_REGNUM)
 
-/* SPE SIMD registers are just the GPRs.  */
-#define SPE_SIMD_REGNO_P(N) ((N) <= 31)
-
 /* PAIRED SIMD registers are just the FPRs.  */
 #define PAIRED_SIMD_REGNO_P(N) ((N) >= 32 && (N) <= 63)
 
@@ -1305,12 +1292,6 @@ enum data_align { align_abi, align_opt, align_both };
   (ALTIVEC_VECTOR_MODE (MODE) || VSX_VECTOR_MODE (MODE)                        \
    || (MODE) == V2DImode || (MODE) == V1TImode)
 
-#define SPE_VECTOR_MODE(MODE)          \
-       ((MODE) == V4HImode             \
-         || (MODE) == V2SFmode          \
-         || (MODE) == V1DImode          \
-         || (MODE) == V2SImode)
-
 #define PAIRED_VECTOR_MODE(MODE)        \
          ((MODE) == V2SFmode)            
 
@@ -1347,9 +1328,9 @@ enum data_align { align_abi, align_opt, align_both };
    ? GET_MODE_CLASS (MODE2) == MODE_CC         \
    : GET_MODE_CLASS (MODE2) == MODE_CC         \
    ? 0                                         \
-   : SPE_VECTOR_MODE (MODE1)                   \
-   ? SPE_VECTOR_MODE (MODE2)                   \
-   : SPE_VECTOR_MODE (MODE2)                   \
+   : PAIRED_VECTOR_MODE (MODE1)                        \
+   ? PAIRED_VECTOR_MODE (MODE2)                        \
+   : PAIRED_VECTOR_MODE (MODE2)                        \
    ? 0                                         \
    : 1)
 
@@ -2684,7 +2665,7 @@ extern int frame_pointer_needed;
 #define RS6000_BTC_SAT         RS6000_BTC_MISC /* saturate sets VSCR.  */
 
 /* Builtin targets.  For now, we reuse the masks for those options that are in
-   target flags, and pick three random bits for SPE, paired and ldbl128 which
+   target flags, and pick two random bits for paired and ldbl128, which
    aren't in target_flags.  */
 #define RS6000_BTM_ALWAYS      0               /* Always enabled.  */
 #define RS6000_BTM_ALTIVEC     MASK_ALTIVEC    /* VMX/altivec vectors.  */
@@ -2695,7 +2676,6 @@ extern int frame_pointer_needed;
 #define RS6000_BTM_P9_MISC     MASK_P9_MISC    /* ISA 3.0 misc. non-vector */
 #define RS6000_BTM_CRYPTO      MASK_CRYPTO     /* crypto funcs.  */
 #define RS6000_BTM_HTM         MASK_HTM        /* hardware TM funcs.  */
-#define RS6000_BTM_SPE         MASK_STRING     /* E500 */
 #define RS6000_BTM_PAIRED      MASK_MULHW      /* 750CL paired insns.  */
 #define RS6000_BTM_FRE         MASK_POPCNTB    /* FRE instruction.  */
 #define RS6000_BTM_FRES                MASK_PPC_GFXOPT /* FRES instruction.  */
@@ -2736,11 +2716,9 @@ extern int frame_pointer_needed;
 #undef RS6000_BUILTIN_3
 #undef RS6000_BUILTIN_A
 #undef RS6000_BUILTIN_D
-#undef RS6000_BUILTIN_E
 #undef RS6000_BUILTIN_H
 #undef RS6000_BUILTIN_P
 #undef RS6000_BUILTIN_Q
-#undef RS6000_BUILTIN_S
 #undef RS6000_BUILTIN_X
 
 #define RS6000_BUILTIN_0(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
@@ -2749,11 +2727,9 @@ extern int frame_pointer_needed;
 #define RS6000_BUILTIN_3(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
 #define RS6000_BUILTIN_A(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
 #define RS6000_BUILTIN_D(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
-#define RS6000_BUILTIN_E(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
 #define RS6000_BUILTIN_H(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
 #define RS6000_BUILTIN_P(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
 #define RS6000_BUILTIN_Q(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
-#define RS6000_BUILTIN_S(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
 #define RS6000_BUILTIN_X(ENUM, NAME, MASK, ATTR, ICODE) ENUM,
 
 enum rs6000_builtins
@@ -2769,11 +2745,9 @@ enum rs6000_builtins
 #undef RS6000_BUILTIN_3
 #undef RS6000_BUILTIN_A
 #undef RS6000_BUILTIN_D
-#undef RS6000_BUILTIN_E
 #undef RS6000_BUILTIN_H
 #undef RS6000_BUILTIN_P
 #undef RS6000_BUILTIN_Q
-#undef RS6000_BUILTIN_S
 #undef RS6000_BUILTIN_X
 
 enum rs6000_builtin_type_index
index 997d1fe92929aaa0132b465c26dfb7b257034e81..3fea231665ddbe9f82e1447199cfc1c23bf49168 100644 (file)
@@ -56,8 +56,6 @@
    (TFHAR_REGNO                        114)
    (TFIAR_REGNO                        115)
    (TEXASR_REGNO               116)
-   (FIRST_SPE_HIGH_REGNO       117)
-   (LAST_SPE_HIGH_REGNO                148)
   ])
 
 ;;
index c5c11c53593c7960b14715ed44217f1935b806c5..a1a775389da0ed9c3752edf6f14d875be1766793 100644 (file)
@@ -381,14 +381,6 @@ mabi=no-altivec
 Target RejectNegative Var(rs6000_altivec_abi, 0)
 Do not use the AltiVec ABI extensions.
 
-mabi=spe
-Target RejectNegative Var(rs6000_spe_abi) Save
-Use the SPE ABI extensions.
-
-mabi=no-spe
-Target RejectNegative Var(rs6000_spe_abi, 0)
-Do not use the SPE ABI extensions.
-
 mabi=elfv1
 Target RejectNegative Var(rs6000_elf_abi, 1) Save
 Use the ELFv1 ABI.
index 536697b8a9c80983cbaf1cbae942e8be54f41a3d..372e1901759c669e91416bb739f3a92c7877b21d 100644 (file)
 
 ;; DImode and TImode.
 (define_mode_iterator DITI [DI TI])
-
-;; SPE SIMD instructions
-
-(define_insn "absv2si2"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (abs:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")))]
-  "TARGET_SPE"
-  "evabs %0,%1"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evandc"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (and:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
-                 (not:V2SI (match_operand:V2SI 2 "gpc_reg_operand" "r"))))]
-  "TARGET_SPE"
-  "evandc %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "andv2si3"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (and:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
-                 (match_operand:V2SI 2 "gpc_reg_operand" "r")))]
-  "TARGET_SPE"
-  "evand %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-;; Vector compare instructions
-
-(define_insn "spe_evcmpeq"
-  [(set (match_operand:CC 0 "cc_reg_operand" "=y")
-       (unspec:CC [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (match_operand:V2SI 2 "gpc_reg_operand" "r")] 500))]
-  "TARGET_SPE"
-  "evcmpeq %0,%1,%2"
-  [(set_attr "type" "veccmp")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evcmpgts"
-  [(set (match_operand:CC 0 "cc_reg_operand" "=y")
-        (unspec:CC [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (match_operand:V2SI 2 "gpc_reg_operand" "r")] 501))]
-  "TARGET_SPE"
-  "evcmpgts %0,%1,%2"
-  [(set_attr "type" "veccmp")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evcmpgtu"
-  [(set (match_operand:CC 0 "cc_reg_operand" "=y")
-        (unspec:CC [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (match_operand:V2SI 2 "gpc_reg_operand" "r")] 502))]
-  "TARGET_SPE"
-  "evcmpgtu %0,%1,%2"
-  [(set_attr "type" "veccmp")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evcmplts"
-  [(set (match_operand:CC 0 "cc_reg_operand" "=y")
-        (unspec:CC [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (match_operand:V2SI 2 "gpc_reg_operand" "r")] 503))]
-  "TARGET_SPE"
-  "evcmplts %0,%1,%2"
-  [(set_attr "type" "veccmp")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evcmpltu"
-  [(set (match_operand:CC 0 "cc_reg_operand" "=y")
-        (unspec:CC [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (match_operand:V2SI 2 "gpc_reg_operand" "r")] 504))]
-  "TARGET_SPE"
-  "evcmpltu %0,%1,%2"
-  [(set_attr "type" "veccmp")
-   (set_attr  "length" "4")])
-
-;; Floating point vector compare instructions
-
-(define_insn "spe_evfscmpeq"
-  [(set (match_operand:CC 0 "cc_reg_operand" "=y")
-        (unspec:CC [(match_operand:V2SF 1 "gpc_reg_operand" "r")
-                   (match_operand:V2SF 2 "gpc_reg_operand" "r")] 538))
-   (clobber (reg:SI SPEFSCR_REGNO))]
-  "TARGET_SPE"
-  "evfscmpeq %0,%1,%2"
-  [(set_attr "type" "veccmp")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfscmpgt"
-  [(set (match_operand:CC 0 "cc_reg_operand" "=y")
-        (unspec:CC [(match_operand:V2SF 1 "gpc_reg_operand" "r")
-                   (match_operand:V2SF 2 "gpc_reg_operand" "r")] 539))
-   (clobber (reg:SI SPEFSCR_REGNO))]
-  "TARGET_SPE"
-  "evfscmpgt %0,%1,%2"
-  [(set_attr "type" "veccmp")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfscmplt"
-  [(set (match_operand:CC 0 "cc_reg_operand" "=y")
-        (unspec:CC [(match_operand:V2SF 1 "gpc_reg_operand" "r")
-                   (match_operand:V2SF 2 "gpc_reg_operand" "r")] 540))
-   (clobber (reg:SI SPEFSCR_REGNO))]
-  "TARGET_SPE"
-  "evfscmplt %0,%1,%2"
-  [(set_attr "type" "veccmp")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfststeq"
-  [(set (match_operand:CC 0 "cc_reg_operand" "=y")
-        (unspec:CC [(match_operand:V2SF 1 "gpc_reg_operand" "r")
-                   (match_operand:V2SF 2 "gpc_reg_operand" "r")] 541))]
-  "TARGET_SPE"
-  "evfststeq %0,%1,%2"
-  [(set_attr "type" "veccmp")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfststgt"
-  [(set (match_operand:CC 0 "cc_reg_operand" "=y")
-        (unspec:CC [(match_operand:V2SF 1 "gpc_reg_operand" "r")
-                   (match_operand:V2SF 2 "gpc_reg_operand" "r")] 542))]
-  "TARGET_SPE"
-  "evfststgt %0,%1,%2"
-  [(set_attr "type" "veccmp")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfststlt"
-  [(set (match_operand:CC 0 "cc_reg_operand" "=y")
-        (unspec:CC [(match_operand:V2SF 1 "gpc_reg_operand" "r")
-                   (match_operand:V2SF 2 "gpc_reg_operand" "r")] 543))]
-  "TARGET_SPE"
-  "evfststlt %0,%1,%2"
-  [(set_attr "type" "veccmp")
-   (set_attr  "length" "4")])
-
-;; End of vector compare instructions
-
-(define_insn "spe_evcntlsw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")] 505))]
-  "TARGET_SPE"
-  "evcntlsw %0,%1"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evcntlzw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")] 506))]
-  "TARGET_SPE"
-  "evcntlzw %0,%1"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_eveqv"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (not:V2SI (xor:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
-                           (match_operand:V2SI 2 "gpc_reg_operand" "r"))))]
-  "TARGET_SPE"
-  "eveqv %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evextsb"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")] 507))]
-  "TARGET_SPE"
-  "evextsb %0,%1"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evextsh"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")] 508))]
-  "TARGET_SPE"
-  "evextsh %0,%1"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlhhesplat"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand"  "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand"   "b")
-                          (match_operand:QI 2 "immediate_operand" "i"))))
-   (unspec [(const_int 0)] 509)]
-  "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
-  "evlhhesplat %0,%2*2(%1)"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlhhesplatx"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:SI 2 "gpc_reg_operand" "r"))))
-   (unspec [(const_int 0)] 510)]
-  "TARGET_SPE"
-  "evlhhesplatx %0,%1,%2"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlhhossplat"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:QI 2 "immediate_operand" "i"))))
-   (unspec [(const_int 0)] 511)]
-  "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
-  "evlhhossplat %0,%2*2(%1)"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlhhossplatx"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:SI 2 "gpc_reg_operand" "r"))))
-   (unspec [(const_int 0)] 512)]
-  "TARGET_SPE"
-  "evlhhossplatx %0,%1,%2"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlhhousplat"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:QI 2 "immediate_operand" "i"))))
-   (unspec [(const_int 0)] 513)]
-  "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
-  "evlhhousplat %0,%2*2(%1)"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlhhousplatx"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:SI 2 "gpc_reg_operand" "r"))))
-   (unspec [(const_int 0)] 514)]
-  "TARGET_SPE"
-  "evlhhousplatx %0,%1,%2"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlwhsplat"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:QI 2 "immediate_operand" "i"))))
-   (unspec [(const_int 0)] 515)]
-  "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
-  "evlwhsplat %0,%2*4(%1)"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlwhsplatx"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:SI 2 "gpc_reg_operand" "r"))))
-   (unspec [(const_int 0)] 516)]
-  "TARGET_SPE"
-  "evlwhsplatx %0,%1,%2"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlwwsplat"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:QI 2 "immediate_operand" "i"))))
-   (unspec [(const_int 0)] 517)]
-  "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
-  "evlwwsplat %0,%2*4(%1)"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlwwsplatx"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:SI 2 "gpc_reg_operand" "r"))))
-   (unspec [(const_int 0)] 518)]
-  "TARGET_SPE"
-  "evlwwsplatx %0,%1,%2"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-;; Integer vector permutation instructions.  The pairs of digits in the
-;; names of these instructions indicate the indices, in the memory vector
-;; element ordering, of the vector elements permuted to the output vector
-;; from the first and the second input vector respectively.
-
-(define_insn "vec_perm00_v2si"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (vec_select:V2SI
-         (vec_concat:V4SI
-           (match_operand:V2SI 1 "gpc_reg_operand" "r")
-           (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-         (parallel [(const_int 0) (const_int 2)])))]
-  "TARGET_SPE"
-{
-  if (WORDS_BIG_ENDIAN)
-    return "evmergehi %0,%1,%2";
-  else
-    return "evmergelo %0,%2,%1";
-}
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "vec_perm01_v2si"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (vec_select:V2SI
-         (vec_concat:V4SI
-           (match_operand:V2SI 1 "gpc_reg_operand" "r")
-           (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-         (parallel [(const_int 0) (const_int 3)])))]
-  "TARGET_SPE"
-{
-  if (WORDS_BIG_ENDIAN)
-    return "evmergehilo %0,%1,%2";
-  else
-    return "evmergehilo %0,%2,%1";
-}
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "vec_perm11_v2si"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (vec_select:V2SI
-         (vec_concat:V4SI
-           (match_operand:V2SI 1 "gpc_reg_operand" "r")
-           (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-         (parallel [(const_int 1) (const_int 3)])))]
-  "TARGET_SPE"
-{
-  if (WORDS_BIG_ENDIAN)
-    return "evmergelo %0,%1,%2";
-  else
-    return "evmergehi %0,%2,%1";
-}
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "vec_perm10_v2si"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (vec_select:V2SI
-         (vec_concat:V4SI
-           (match_operand:V2SI 1 "gpc_reg_operand" "r")
-           (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-         (parallel [(const_int 1) (const_int 2)])))]
-  "TARGET_SPE"
-{
-  if (WORDS_BIG_ENDIAN)
-    return "evmergelohi %0,%1,%2";
-  else
-    return "evmergelohi %0,%2,%1";
-}
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_expand "vec_perm_constv2si"
-  [(match_operand:V2SI 0 "gpc_reg_operand" "")
-   (match_operand:V2SI 1 "gpc_reg_operand" "")
-   (match_operand:V2SI 2 "gpc_reg_operand" "")
-   (match_operand:V2SI 3 "" "")]
-  "TARGET_SPE"
-{
-  if (rs6000_expand_vec_perm_const (operands))
-    DONE;
-  else
-    FAIL;
-})
-
-(define_expand "spe_evmergehi"
-  [(match_operand:V2SI 0 "register_operand" "")
-   (match_operand:V2SI 1 "register_operand" "")
-   (match_operand:V2SI 2 "register_operand" "")]
-  "TARGET_SPE"
-{
-  if (BYTES_BIG_ENDIAN)
-    emit_insn (gen_vec_perm00_v2si (operands[0], operands[1], operands[2]));
-  else
-    emit_insn (gen_vec_perm11_v2si (operands[0], operands[2], operands[1]));
-  DONE;
-})
-
-(define_expand "spe_evmergehilo"
-  [(match_operand:V2SI 0 "register_operand" "")
-   (match_operand:V2SI 1 "register_operand" "")
-   (match_operand:V2SI 2 "register_operand" "")]
-  "TARGET_SPE"
-{
-  if (BYTES_BIG_ENDIAN)
-    emit_insn (gen_vec_perm01_v2si (operands[0], operands[1], operands[2]));
-  else
-    emit_insn (gen_vec_perm01_v2si (operands[0], operands[2], operands[1]));
-  DONE;
-})
-
-(define_expand "spe_evmergelo"
-  [(match_operand:V2SI 0 "register_operand" "")
-   (match_operand:V2SI 1 "register_operand" "")
-   (match_operand:V2SI 2 "register_operand" "")]
-  "TARGET_SPE"
-{
-  if (BYTES_BIG_ENDIAN)
-    emit_insn (gen_vec_perm11_v2si (operands[0], operands[1], operands[2]));
-  else
-    emit_insn (gen_vec_perm00_v2si (operands[0], operands[2], operands[1]));
-  DONE;
-})
-
-(define_expand "spe_evmergelohi"
-  [(match_operand:V2SI 0 "register_operand" "")
-   (match_operand:V2SI 1 "register_operand" "")
-   (match_operand:V2SI 2 "register_operand" "")]
-  "TARGET_SPE"
-{
-  if (BYTES_BIG_ENDIAN)
-    emit_insn (gen_vec_perm10_v2si (operands[0], operands[1], operands[2]));
-  else
-    emit_insn (gen_vec_perm10_v2si (operands[0], operands[2], operands[1]));
-  DONE;
-})
-
-;; End of integer vector permutation instructions.
-
-(define_insn "spe_evnand"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (not:V2SI (and:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
-                            (match_operand:V2SI 2 "gpc_reg_operand" "r"))))]
-  "TARGET_SPE"
-  "evnand %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "negv2si2"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (neg:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")))]
-  "TARGET_SPE"
-  "evneg %0,%1"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evnor"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (not:V2SI  (ior:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
-                             (match_operand:V2SI 2 "gpc_reg_operand" "r"))))]
-  "TARGET_SPE"
-  "evnor %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evorc"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (ior:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
-                 (not:V2SI (match_operand:V2SI 2 "gpc_reg_operand" "r"))))]
-  "TARGET_SPE"
-  "evorc %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evor"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (ior:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
-                 (match_operand:V2SI 2 "gpc_reg_operand" "r")))]
-  "TARGET_SPE"
-  "evor %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evrlwi"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (match_operand:QI 2 "immediate_operand" "i")] 519))]
-  "TARGET_SPE"
-  "evrlwi %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evrlw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (match_operand:V2SI 2 "gpc_reg_operand" "r")] 520))]
-  "TARGET_SPE"
-  "evrlw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evrndw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")] 521))]
-  "TARGET_SPE"
-  "evrndw %0,%1"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evsel"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (match_operand:CC 3 "cc_reg_operand" "y")] 522))]
-  "TARGET_SPE"
-  "evsel %0,%1,%2,%3"
-  [(set_attr "type" "veccmp")
-   (set_attr "length" "4")])
-
-(define_insn "spe_evsel_fs"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
-       (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "r")
-                     (match_operand:V2SF 2 "gpc_reg_operand" "r")
-                     (match_operand:CC 3 "cc_reg_operand" "y")] 725))]
-  "TARGET_SPE"
-  "evsel %0,%1,%2,%3"
-  [(set_attr "type" "veccmp")
-   (set_attr "length" "4")])
-
-(define_insn "spe_evslwi"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (match_operand:QI 2 "immediate_operand" "i")]
-                    523))]
-  "TARGET_SPE"
-  "evslwi %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evslw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (match_operand:V2SI 2 "gpc_reg_operand" "r")] 524))]
-  "TARGET_SPE"
-  "evslw %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evsrwis"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (match_operand:QI 2 "immediate_operand" "i")]
-                    525))]
-  "TARGET_SPE"
-  "evsrwis %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evsrwiu"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (match_operand:QI 2 "immediate_operand" "i")]
-                    526))]
-  "TARGET_SPE"
-  "evsrwiu %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evsrws"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (match_operand:V2SI 2 "gpc_reg_operand" "r")] 527))]
-  "TARGET_SPE"
-  "evsrws %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evsrwu"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (match_operand:V2SI 2 "gpc_reg_operand" "r")] 528))]
-  "TARGET_SPE"
-  "evsrwu %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-;; vector xors
-
-(define_insn "xorv2si3"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (xor:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
-                 (match_operand:V2SI 2 "gpc_reg_operand" "r")))]
-  "TARGET_SPE"
-  "evxor %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "xorv4hi3"
-  [(set (match_operand:V4HI 0 "gpc_reg_operand" "=r")
-        (xor:V4HI (match_operand:V4HI 1 "gpc_reg_operand" "r")
-                 (match_operand:V4HI 2 "gpc_reg_operand" "r")))]
-  "TARGET_SPE"
-  "evxor %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "xorv1di3"
-  [(set (match_operand:V1DI 0 "gpc_reg_operand" "=r")
-        (xor:V1DI (match_operand:V1DI 1 "gpc_reg_operand" "r")
-                 (match_operand:V1DI 2 "gpc_reg_operand" "r")))]
-  "TARGET_SPE"
-  "evxor %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-;; end of vector xors
-
-(define_insn "spe_evfsabs"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
-        (abs:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "r")))]
-  "TARGET_SPE"
-  "evfsabs %0,%1"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfsadd"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
-        (plus:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "r")
-                  (match_operand:V2SF 2 "gpc_reg_operand" "r")))
-   (clobber (reg:SI SPEFSCR_REGNO))]
-  "TARGET_SPE"
-  "evfsadd %0,%1,%2"
-  [(set_attr "type" "vecfloat")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfscfsf"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
-        (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 529))]
-  "TARGET_SPE"
-  "evfscfsf %0,%1"
-  [(set_attr "type" "vecfloat")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfscfsi"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
-        (float:V2SF (match_operand:V2SI 1 "gpc_reg_operand" "r")))]
-  "TARGET_SPE"
-  "evfscfsi %0,%1"
-  [(set_attr "type" "vecfloat")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfscfuf"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
-        (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 530))]
-  "TARGET_SPE"
-  "evfscfuf %0,%1"
-  [(set_attr "type" "vecfloat")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfscfui"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
-       (unspec:V2SF [(match_operand:V2SI 1 "gpc_reg_operand" "r")] 701))]
-  "TARGET_SPE"
-  "evfscfui %0,%1"
-  [(set_attr "type" "vecfloat")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfsctsf"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
-        (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 531))]
-  "TARGET_SPE"
-  "evfsctsf %0,%1"
-  [(set_attr "type" "vecfloat")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfsctsi"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (unspec:V2SI [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 532))]
-  "TARGET_SPE"
-  "evfsctsi %0,%1"
-  [(set_attr "type" "vecfloat")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfsctsiz"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (unspec:V2SI [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 533))]
-  "TARGET_SPE"
-  "evfsctsiz %0,%1"
-  [(set_attr "type" "vecfloat")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfsctuf"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
-        (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 534))]
-  "TARGET_SPE"
-  "evfsctuf %0,%1"
-  [(set_attr "type" "vecfloat")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfsctui"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 535))]
-  "TARGET_SPE"
-  "evfsctui %0,%1"
-  [(set_attr "type" "vecfloat")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfsctuiz"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 536))]
-  "TARGET_SPE"
-  "evfsctuiz %0,%1"
-  [(set_attr "type" "vecfloat")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfsdiv"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
-        (div:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "r")
-                 (match_operand:V2SF 2 "gpc_reg_operand" "r")))
-   (clobber (reg:SI SPEFSCR_REGNO))]
-  "TARGET_SPE"
-  "evfsdiv %0,%1,%2"
-  [(set_attr "type" "vecfdiv")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfsmul"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
-        (mult:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "r")
-                  (match_operand:V2SF 2 "gpc_reg_operand" "r")))
-   (clobber (reg:SI SPEFSCR_REGNO))]
-  "TARGET_SPE"
-  "evfsmul %0,%1,%2"
-  [(set_attr "type" "vecfloat")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfsnabs"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
-       (unspec:V2SF [(match_operand:V2SF 1 "gpc_reg_operand" "r")] 537))]
-  "TARGET_SPE"
-  "evfsnabs %0,%1"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfsneg"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
-        (neg:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "r")))]
-  "TARGET_SPE"
-  "evfsneg %0,%1"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evfssub"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "=r")
-        (minus:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "r")
-                   (match_operand:V2SF 2 "gpc_reg_operand" "r")))
-   (clobber (reg:SI SPEFSCR_REGNO))]
-  "TARGET_SPE"
-  "evfssub %0,%1,%2"
-  [(set_attr "type" "vecfloat")
-   (set_attr  "length" "4")])
-
-;; SPE SIMD load instructions.
-
-;; Only the hardware engineer who designed the SPE understands the
-;; plethora of load and store instructions ;-).  We have no way of
-;; differentiating between them with RTL so use an unspec of const_int 0 
-;; to avoid identical RTL.
-
-(define_insn "spe_evldd"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:QI 2 "immediate_operand" "i"))))
-   (unspec [(const_int 0)] 544)]
-  "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
-  "evldd %0,%2*8(%1)"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlddx"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:SI 2 "gpc_reg_operand" "r"))))
-   (unspec [(const_int 0)] 545)]
-  "TARGET_SPE"
-  "evlddx %0,%1,%2"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evldh"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:QI 2 "immediate_operand" "i"))))
-   (unspec [(const_int 0)] 546)]
-  "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
-  "evldh %0,%2*8(%1)"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evldhx"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:SI 2 "gpc_reg_operand" "r"))))
-   (unspec [(const_int 0)] 547)]
-  "TARGET_SPE"
-  "evldhx %0,%1,%2"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evldw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:QI 2 "immediate_operand" "i"))))
-   (unspec [(const_int 0)] 548)]
-  "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
-  "evldw %0,%2*8(%1)"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evldwx"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:SI 2 "gpc_reg_operand" "r"))))
-   (unspec [(const_int 0)] 549)]
-  "TARGET_SPE"
-  "evldwx %0,%1,%2"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlwhe"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:QI 2 "immediate_operand" "i"))))
-   (unspec [(const_int 0)] 550)]
-  "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
-  "evlwhe %0,%2*4(%1)"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlwhex"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:SI 2 "gpc_reg_operand" "r"))))
-   (unspec [(const_int 0)] 551)]
-  "TARGET_SPE"
-  "evlwhex %0,%1,%2"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlwhos"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:QI 2 "immediate_operand" "i"))))
-   (unspec [(const_int 0)] 552)]
-  "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
-  "evlwhos %0,%2*4(%1)"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlwhosx"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:SI 2 "gpc_reg_operand" "r"))))
-   (unspec [(const_int 0)] 553)]
-  "TARGET_SPE"
-  "evlwhosx %0,%1,%2"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlwhou"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:QI 2 "immediate_operand" "i"))))
-   (unspec [(const_int 0)] 554)]
-  "TARGET_SPE && INTVAL (operands[2]) >= 0 && INTVAL (operands[2]) <= 31"
-  "evlwhou %0,%2*4(%1)"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evlwhoux"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-       (mem:V2SI (plus:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                          (match_operand:SI 2 "gpc_reg_operand" "r"))))
-   (unspec [(const_int 0)] 555)]
-  "TARGET_SPE"
-  "evlwhoux %0,%1,%2"
-  [(set_attr "type" "vecload")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_brinc"
-  [(set (match_operand:SI 0 "gpc_reg_operand" "=r")
-        (unspec:SI [(match_operand:SI 1 "gpc_reg_operand" "r")
-                   (match_operand:SI 2 "gpc_reg_operand" "r")] 556))]
-  "TARGET_SPE"
-  "brinc %0,%1,%2"
-  [(set_attr "type" "brinc")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhegsmfaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 557))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhegsmfaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhegsmfan"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 558))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhegsmfan %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhegsmiaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 559))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhegsmiaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhegsmian"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 560))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhegsmian %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhegumiaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 561))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhegumiaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhegumian"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 562))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhegumian %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhesmfaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 563))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhesmfaaw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhesmfanw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 564))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhesmfanw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhesmfa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 565))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhesmfa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhesmf"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 566))]
-  "TARGET_SPE"
-  "evmhesmf %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhesmiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 567))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhesmiaaw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhesmianw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 568))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhesmianw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhesmia"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 569))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhesmia %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhesmi"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 570))]
-  "TARGET_SPE"
-  "evmhesmi %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhessfaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 571))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhessfaaw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhessfanw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 572))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhessfanw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhessfa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 573))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhessfa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhessf"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 574))
-   (clobber (reg:SI SPEFSCR_REGNO))]
-  "TARGET_SPE"
-  "evmhessf %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhessiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 575))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhessiaaw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhessianw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 576))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhessianw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmheumiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 577))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmheumiaaw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmheumianw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 578))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmheumianw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmheumia"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 579))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmheumia %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmheumi"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 580))]
-  "TARGET_SPE"
-  "evmheumi %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmheusiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 581))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmheusiaaw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmheusianw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 582))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmheusianw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhogsmfaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 583))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhogsmfaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhogsmfan"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 584))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhogsmfan %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhogsmiaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 585))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhogsmiaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhogsmian"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 586))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhogsmian %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhogumiaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 587))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhogumiaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhogumian"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 588))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhogumian %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhosmfaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 589))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhosmfaaw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhosmfanw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 590))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhosmfanw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhosmfa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 591))]
-  "TARGET_SPE"
-  "evmhosmfa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhosmf"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 592))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhosmf %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhosmiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 593))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhosmiaaw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhosmianw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 594))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhosmianw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhosmia"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 595))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhosmia %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhosmi"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 596))]
-  "TARGET_SPE"
-  "evmhosmi %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhossfaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 597))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhossfaaw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhossfanw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 598))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhossfanw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhossfa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 599))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhossfa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhossf"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 600))
-   (clobber (reg:SI SPEFSCR_REGNO))]
-  "TARGET_SPE"
-  "evmhossf %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhossiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 601))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhossiaaw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhossianw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 602))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhossianw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhoumiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 603))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhoumiaaw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhoumianw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 604))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhoumianw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhoumia"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 605))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhoumia %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhoumi"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 606))]
-  "TARGET_SPE"
-  "evmhoumi %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhousiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 607))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhousiaaw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmhousianw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 608))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmhousianw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmmlssfa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 609))]
-  "TARGET_SPE"
-  "evmmlssfa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmmlssf"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 610))]
-  "TARGET_SPE"
-  "evmmlssf %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhsmfa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 611))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhsmfa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhsmf"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 612))]
-  "TARGET_SPE"
-  "evmwhsmf %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhsmia"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 613))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhsmia %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhsmi"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 614))]
-  "TARGET_SPE"
-  "evmwhsmi %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhssfa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 615))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhssfa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhusian"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 626))]
-  "TARGET_SPE"
-  "evmwhusian %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhssf"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 628))
-   (clobber (reg:SI SPEFSCR_REGNO))]
-  "TARGET_SPE"
-  "evmwhssf %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhumia"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 629))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhumia %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhumi"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 630))]
-  "TARGET_SPE"
-  "evmwhumi %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwlsmiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 635))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwlsmiaaw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwlsmianw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 636))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwlsmianw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwlssiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 641))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwlssiaaw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwlssianw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 642))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwlssianw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwlumiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 643))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwlumiaaw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwlumianw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 644))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwlumianw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwlumia"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 645))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwlumia %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwlumi"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 646))]
-  "TARGET_SPE"
-  "evmwlumi %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwlusiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 647))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwlusiaaw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwlusianw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 648))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwlusianw %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwsmfaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 649))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwsmfaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwsmfan"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 650))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwsmfan %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwsmfa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 651))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwsmfa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwsmf"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 652))]
-  "TARGET_SPE"
-  "evmwsmf %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwsmiaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 653))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwsmiaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwsmian"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 654))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwsmian %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwsmia"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 655))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwsmia %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwsmi"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 656))]
-  "TARGET_SPE"
-  "evmwsmi %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwssfaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 657))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwssfaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwssfan"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 658))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwssfan %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwssfa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 659))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwssfa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwssf"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 660))
-   (clobber (reg:SI SPEFSCR_REGNO))]
-  "TARGET_SPE"
-  "evmwssf %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwumiaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 661))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwumiaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwumian"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 662))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwumian %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwumia"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 663))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwumia %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwumi"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 664))]
-  "TARGET_SPE"
-  "evmwumi %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "addv2si3"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (plus:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
-                  (match_operand:V2SI 2 "gpc_reg_operand" "r")))]
-  "TARGET_SPE"
-  "evaddw %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evaddusiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 673))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evaddusiaaw %0,%1"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evaddumiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 674))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evaddumiaaw %0,%1"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evaddssiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 675))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evaddssiaaw %0,%1"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evaddsmiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 676))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evaddsmiaaw %0,%1"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evaddiw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (match_operand:QI 2 "immediate_operand" "i")] 677))]
-  "TARGET_SPE"
-  "evaddiw %0,%1,%2"
-  [(set_attr "type" "vecsimple")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evsubifw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (match_operand:QI 2 "immediate_operand" "i")] 678))]
-  "TARGET_SPE"
-  "evsubifw %0,%2,%1"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "subv2si3"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (minus:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
-                   (match_operand:V2SI 2 "gpc_reg_operand" "r")))]
-  "TARGET_SPE"
-  "evsubfw %0,%2,%1"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evsubfusiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 679))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evsubfusiaaw %0,%1"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evsubfumiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 680))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evsubfumiaaw %0,%1"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evsubfssiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 681))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evsubfssiaaw %0,%1"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evsubfsmiaaw"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                     (reg:V2SI SPE_ACC_REGNO)] 682))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evsubfsmiaaw %0,%1"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmra"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (match_operand:V2SI 1 "gpc_reg_operand" "r"))
-   (set (reg:V2SI SPE_ACC_REGNO)
-       (unspec:V2SI [(match_dup 1)] 726))]
-  "TARGET_SPE"
-  "evmra %0,%1"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "divv2si3"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (div:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
-                 (match_operand:V2SI 2 "gpc_reg_operand" "r")))
-   (clobber (reg:SI SPEFSCR_REGNO))]
-  "TARGET_SPE"
-  "evdivws %0,%1,%2"
-  [(set_attr "type" "vecdiv")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evdivwu"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (udiv:V2SI (match_operand:V2SI 1 "gpc_reg_operand" "r")
-                  (match_operand:V2SI 2 "gpc_reg_operand" "r")))
-      (clobber (reg:SI SPEFSCR_REGNO))]
-  "TARGET_SPE"
-  "evdivwu %0,%1,%2"
-  [(set_attr "type" "vecdiv")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evsplatfi"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:QI 1 "immediate_operand" "i")] 684))]
-  "TARGET_SPE"
-  "evsplatfi %0,%1"
-  [(set_attr "type" "vecperm")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evsplati"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:QI 1 "immediate_operand" "i")] 685))]
-  "TARGET_SPE"
-  "evsplati %0,%1"
-  [(set_attr "type" "vecperm")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evstdd"
-  [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
-                          (match_operand:QI 1 "immediate_operand" "i")))
-       (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-   (unspec [(const_int 0)] 686)]
-  "TARGET_SPE && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 31"
-  "evstdd %2,%1*8(%0)"
-  [(set_attr "type" "vecstore")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evstddx"
-  [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
-                          (match_operand:SI 1 "gpc_reg_operand" "r")))
-       (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-   (unspec [(const_int 0)] 687)]
-  "TARGET_SPE"
-  "evstddx %2,%0,%1"
-  [(set_attr "type" "vecstore")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evstdh"
-  [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
-                          (match_operand:QI 1 "immediate_operand" "i")))
-       (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-   (unspec [(const_int 0)] 688)]
-  "TARGET_SPE && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 31"
-  "evstdh %2,%1*8(%0)"
-  [(set_attr "type" "vecstore")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evstdhx"
-  [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
-                          (match_operand:SI 1 "gpc_reg_operand" "r")))
-       (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-   (unspec [(const_int 0)] 689)]
-  "TARGET_SPE"
-  "evstdhx %2,%0,%1"
-  [(set_attr "type" "vecstore")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evstdw"
-  [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
-                          (match_operand:QI 1 "immediate_operand" "i")))
-       (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-   (unspec [(const_int 0)] 690)]
-  "TARGET_SPE && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 31"
-  "evstdw %2,%1*8(%0)"
-  [(set_attr "type" "vecstore")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evstdwx"
-  [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
-                          (match_operand:SI 1 "gpc_reg_operand" "r")))
-       (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-   (unspec [(const_int 0)] 691)]
-  "TARGET_SPE"
-  "evstdwx %2,%0,%1"
-  [(set_attr "type" "vecstore")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evstwhe"
-  [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
-                          (match_operand:QI 1 "immediate_operand" "i")))
-       (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-   (unspec [(const_int 0)] 692)]
-  "TARGET_SPE && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 31"
-  "evstwhe %2,%1*4(%0)"
-  [(set_attr "type" "vecstore")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evstwhex"
-  [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
-                          (match_operand:SI 1 "gpc_reg_operand" "r")))
-       (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-   (unspec [(const_int 0)] 693)]
-  "TARGET_SPE"
-  "evstwhex %2,%0,%1"
-  [(set_attr "type" "vecstore")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evstwho"
-  [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
-                          (match_operand:QI 1 "immediate_operand" "i")))
-       (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-   (unspec [(const_int 0)] 694)]
-  "TARGET_SPE && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 31"
-  "evstwho %2,%1*4(%0)"
-  [(set_attr "type" "vecstore")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evstwhox"
-  [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
-                          (match_operand:SI 1 "gpc_reg_operand" "r")))
-       (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-   (unspec [(const_int 0)] 695)]
-  "TARGET_SPE"
-  "evstwhox %2,%0,%1"
-  [(set_attr "type" "vecstore")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evstwwe"
-  [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
-                          (match_operand:QI 1 "immediate_operand" "i")))
-       (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-   (unspec [(const_int 0)] 696)]
-  "TARGET_SPE && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 31"
-  "evstwwe %2,%1*4(%0)"
-  [(set_attr "type" "vecstore")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evstwwex"
-  [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
-                          (match_operand:SI 1 "gpc_reg_operand" "r")))
-       (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-   (unspec [(const_int 0)] 697)]
-  "TARGET_SPE"
-  "evstwwex %2,%0,%1"
-  [(set_attr "type" "vecstore")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evstwwo"
-  [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
-                          (match_operand:QI 1 "immediate_operand" "i")))
-       (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-   (unspec [(const_int 0)] 698)]
-  "TARGET_SPE && INTVAL (operands[1]) >= 0 && INTVAL (operands[1]) <= 31"
-  "evstwwo %2,%1*4(%0)"
-  [(set_attr "type" "vecstore")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evstwwox"
-  [(set (mem:V2SI (plus:SI (match_operand:SI 0 "gpc_reg_operand" "b")
-                          (match_operand:SI 1 "gpc_reg_operand" "r")))
-       (match_operand:V2SI 2 "gpc_reg_operand" "r"))
-   (unspec [(const_int 0)] 699)]
-  "TARGET_SPE"
-  "evstwwox %2,%0,%1"
-  [(set_attr "type" "vecstore")
-   (set_attr  "length" "4")])
-
-;; Double-precision floating point instructions.
-
-;; FIXME: Add o=r option.
-(define_insn "*frob_<SPE64:mode>_<DITI:mode>"
-  [(set (match_operand:SPE64 0 "nonimmediate_operand" "=r,r")
-        (subreg:SPE64 (match_operand:DITI 1 "input_operand" "r,m") 0))]
-  "TARGET_SPE && <SPE64:MODE>mode != DFmode"
-{
-  switch (which_alternative)
-    {
-    default:
-      gcc_unreachable ();
-    case 0:
-      if (WORDS_BIG_ENDIAN)
-       return "evmergelo %0,%1,%L1";
-      else
-       return "evmergelo %0,%L1,%1";
-    case 1:
-      return "evldd%X1 %0,%y1";
-    }
-})
-
-(define_insn "*frob_<SPE64:mode>_ti_8"
-  [(set (match_operand:SPE64 0 "nonimmediate_operand" "=r")
-        (subreg:SPE64 (match_operand:TI 1 "input_operand" "r") 8))]
-  "TARGET_SPE && <SPE64:MODE>mode != DFmode"
-{
-  if (WORDS_BIG_ENDIAN)
-    return "evmergelo %0,%Y1,%Z1";
-  else
-    return "evmergelo %0,%Z1,%Y1";
-})
-
-(define_insn "*frob_<mode>_di_2"
-  [(set (subreg:DI (match_operand:SPE64TF 0 "nonimmediate_operand" "+&r,r") 0)
-        (match_operand:DI 1 "input_operand" "r,m"))]
-  "TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode"
-{
-  switch (which_alternative)
-    {
-    default:
-      gcc_unreachable ();
-    case 0:
-      if (WORDS_BIG_ENDIAN)
-       return "evmergelo %0,%1,%L1";
-      else
-       return "evmergelo %0,%L1,%1";
-    case 1:
-      return "evldd%X1 %0,%y1";
-    }
-})
-
-(define_insn "*frob_di_<mode>"
-  [(set (match_operand:DI 0 "nonimmediate_operand" "=&r")
-        (subreg:DI (match_operand:SPE64TF 1 "input_operand" "r") 0))]
-  "TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode"
-{
-  if (WORDS_BIG_ENDIAN)
-    return "evmergehi %0,%1,%1\;mr %L0,%1";
-  else
-    return "evmergehi %L0,%1,%1\;mr %0,%1";
-}
-  [(set_attr "length" "8")])
-
-(define_insn "*frob_<DITI:mode>_<SPE64:mode>_2"
-  [(set (subreg:SPE64 (match_operand:DITI 0 "register_operand" "+&r,r") 0)
-       (match_operand:SPE64 1 "input_operand" "r,m"))]
-  "TARGET_SPE && <SPE64:MODE>mode != DFmode"
-  "*
-{
-  switch (which_alternative)
-    {
-    default: 
-      gcc_unreachable ();
-    case 0:
-      if (WORDS_BIG_ENDIAN)
-       return \"evmergehi %0,%1,%1\;mr %L0,%1\";
-      else
-       return \"evmergehi %L0,%1,%1\;mr %0,%1\";
-    case 1:
-      /* If the address is not offsettable we need to load the whole
-        doubleword into a 64-bit register and then copy the high word
-        to form the correct output layout.  */
-      if (!offsettable_nonstrict_memref_p (operands[1]))
-       {
-         if (WORDS_BIG_ENDIAN)
-           return \"evldd%X1 %L0,%y1\;evmergehi %0,%L0,%L0\";
-         else
-           return \"evldd%X1 %0,%y1\;evmergehi %L0,%0,%0\";
-       }
-      /* If the low-address word is used in the address, we must load
-       it last.  Otherwise, load it first.  Note that we cannot have
-       auto-increment in that case since the address register is
-       known to be dead.  */
-      if (refers_to_regno_p (REGNO (operands[0]), operands[1]))
-       {
-         if (WORDS_BIG_ENDIAN)
-           return \"lwz %L0,%L1\;lwz %0,%1\";
-         else
-           return \"lwz %0,%1\;lwz %L0,%L1\";
-       }
-      else
-       {
-         if (WORDS_BIG_ENDIAN)
-           return \"lwz%U1%X1 %0,%1\;lwz %L0,%L1\";
-         else
-           return \"lwz%U1%X1 %L0,%L1\;lwz %0,%1\";
-       }
-    }
-}"
-  [(set_attr "length" "8,8")])
-
-; As the above, but TImode at offset 8.
-(define_insn "*frob_ti_<mode>_8_2"
-  [(set (subreg:SPE64 (match_operand:TI 0 "register_operand" "+&r,r") 8)
-       (match_operand:SPE64 1 "input_operand" "r,m"))]
-  "TARGET_SPE && <MODE>mode != DFmode"
-  "*
-{
-  switch (which_alternative)
-    {
-    default: 
-      gcc_unreachable ();
-    case 0:
-      if (WORDS_BIG_ENDIAN)
-       return \"evmergehi %Y0,%1,%1\;mr %Z0,%1\";
-      else
-       return \"evmergehi %Z0,%1,%1\;mr %Y0,%1\";
-    case 1:
-      if (!offsettable_nonstrict_memref_p (operands[1]))
-       {
-         if (WORDS_BIG_ENDIAN)
-           return \"evldd%X1 %Z0,%y1\;evmergehi %Y0,%Z0,%Z0\";
-         else
-           return \"evldd%X1 %Y0,%y1\;evmergehi %Z0,%Y0,%Y0\";
-       }
-      if (refers_to_regno_p (REGNO (operands[0]), operands[1]))
-       {
-         if (WORDS_BIG_ENDIAN)
-           return \"lwz %Z0,%L1\;lwz %Y0,%1\";
-         else
-           return \"lwz %Y0,%1\;lwz %Z0,%L1\";
-       }
-      else
-       {
-         if (WORDS_BIG_ENDIAN)
-           return \"lwz%U1%X1 %Y0,%1\;lwz %Z0,%L1\";
-         else
-           return \"lwz%U1%X1 %Z0,%L1\;lwz %Y0,%1\";
-       }
-    }
-}"
-  [(set_attr "length" "8,8")])
-
-(define_insn "mov_si<mode>_e500_subreg0_be"
-  [(set (subreg:SI (match_operand:SPE64TF 0 "register_operand" "+r,&r") 0)
-       (match_operand:SI 1 "input_operand" "r,m"))]
-  "WORDS_BIG_ENDIAN
-   && (TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode)"
-  "@
-   evmergelo %0,%1,%0
-   evmergelohi %0,%0,%0\;lwz%U1%X1 %0,%1\;evmergelohi %0,%0,%0"
-  [(set_attr "length" "4,12")])
-
-(define_insn "*mov_si<mode>_e500_subreg0_le"
-  [(set (subreg:SI (match_operand:SPE64TF 0 "register_operand" "+r,r") 0)
-       (match_operand:SI 1 "input_operand" "r,m"))]
-  "!WORDS_BIG_ENDIAN
-   && (TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode)"
-  "@
-   mr %0,%1
-   lwz%U1%X1 %0,%1")
-
-(define_insn_and_split "*mov_si<mode>_e500_subreg0_elf_low_be"
-  [(set (subreg:SI (match_operand:SPE64TF 0 "register_operand" "+r") 0)
-       (lo_sum:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                  (match_operand 2 "" "")))]
-  "WORDS_BIG_ENDIAN
-   && TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode
-   && TARGET_ELF && !TARGET_64BIT && can_create_pseudo_p ()"
-  "#"
-  "&& 1"
-  [(pc)]
-{
-  rtx tmp = gen_reg_rtx (SImode);
-  emit_insn (gen_elf_low (tmp, operands[1], operands[2]));
-  emit_insn (gen_mov_si<mode>_e500_subreg0_be (operands[0], tmp));
-  DONE;
-}
-  [(set_attr "length" "8")])
-
-(define_insn "*mov_si<mode>_e500_subreg0_elf_low_le"
-  [(set (subreg:SI (match_operand:SPE64TF 0 "register_operand" "+r") 0)
-       (lo_sum:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                  (match_operand 2 "" "")))]
-  "!WORDS_BIG_ENDIAN
-   && TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode
-   && TARGET_ELF && !TARGET_64BIT"
-  "addi %0,%1,%K2")
-
-;; ??? Could use evstwwe for memory stores in some cases, depending on
-;; the offset.
-(define_insn "*mov_si<mode>_e500_subreg0_2_be"
-  [(set (match_operand:SI 0 "rs6000_nonimmediate_operand" "=r,m")
-       (subreg:SI (match_operand:SPE64TF 1 "register_operand" "+r,&r") 0))]
-  "WORDS_BIG_ENDIAN
-   && TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode"
-  "@
-   evmergelohi %0,%1,%1
-   evmergelohi %1,%1,%1\;stw%U0%X0 %1,%0"
-  [(set_attr "length" "4,8")])
-
-(define_insn "*mov_si<mode>_e500_subreg0_2_le"
-  [(set (match_operand:SI 0 "rs6000_nonimmediate_operand" "=r,m")
-       (subreg:SI (match_operand:SPE64TF 1 "register_operand" "r,r") 0))]
-  "!WORDS_BIG_ENDIAN
-   && TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode"
-  "@
-   mr %0,%1
-   stw%U0%X0 %1,%0")
-
-(define_insn "*mov_si<mode>_e500_subreg4_be"
-  [(set (subreg:SI (match_operand:SPE64TF 0 "register_operand" "+r,r") 4)
-       (match_operand:SI 1 "input_operand" "r,m"))]
-  "WORDS_BIG_ENDIAN
-   && TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode"
-  "@
-   mr %0,%1
-   lwz%U1%X1 %0,%1")
-
-(define_insn "mov_si<mode>_e500_subreg4_le"
-  [(set (subreg:SI (match_operand:SPE64TF 0 "register_operand" "+r,&r") 4)
-       (match_operand:SI 1 "input_operand" "r,m"))]
-  "!WORDS_BIG_ENDIAN
-   && TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode"
-  "@
-   evmergelo %0,%1,%0
-   evmergelohi %0,%0,%0\;lwz%U1%X1 %0,%1\;evmergelohi %0,%0,%0"
-  [(set_attr "length" "4,12")])
-
-(define_insn "*mov_si<mode>_e500_subreg4_elf_low_be"
-  [(set (subreg:SI (match_operand:SPE64TF 0 "register_operand" "+r") 4)
-       (lo_sum:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                  (match_operand 2 "" "")))]
-  "WORDS_BIG_ENDIAN
-   && TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode
-   && TARGET_ELF && !TARGET_64BIT"
-  "addi %0,%1,%K2")
-
-(define_insn_and_split "*mov_si<mode>_e500_subreg4_elf_low_le"
-  [(set (subreg:SI (match_operand:SPE64TF 0 "register_operand" "+r") 4)
-       (lo_sum:SI (match_operand:SI 1 "gpc_reg_operand" "b")
-                  (match_operand 2 "" "")))]
-  "!WORDS_BIG_ENDIAN
-   && TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode
-   && TARGET_ELF && !TARGET_64BIT && can_create_pseudo_p ()"
-  "#"
-  "&& 1"
-  [(pc)]
-{
-  rtx tmp = gen_reg_rtx (SImode);
-  emit_insn (gen_elf_low (tmp, operands[1], operands[2]));
-  emit_insn (gen_mov_si<mode>_e500_subreg4_le (operands[0], tmp));
-  DONE;
-}
-  [(set_attr "length" "8")])
-
-(define_insn "*mov_si<mode>_e500_subreg4_2_be"
-  [(set (match_operand:SI 0 "rs6000_nonimmediate_operand" "=r,m")
-       (subreg:SI (match_operand:SPE64TF 1 "register_operand" "r,r") 4))]
-  "WORDS_BIG_ENDIAN
-   && TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode"
-  "@
-   mr %0,%1
-   stw%U0%X0 %1,%0")
-
-(define_insn "*mov_si<mode>_e500_subreg4_2_le"
-  [(set (match_operand:SI 0 "rs6000_nonimmediate_operand" "=r,m")
-       (subreg:SI (match_operand:SPE64TF 1 "register_operand" "+r,&r") 4))]
-  "!WORDS_BIG_ENDIAN
-   && TARGET_SPE && <MODE>mode != DFmode && <MODE>mode != TFmode"
-  "@
-   evmergelohi %0,%1,%1
-   evmergelohi %1,%1,%1\;stw%U0%X0 %1,%0"
-  [(set_attr "length" "4,8")])
-
-;; Vector move instructions.
-
-(define_expand "movv2si"
-  [(set (match_operand:V2SI 0 "nonimmediate_operand" "")
-       (match_operand:V2SI 1 "any_operand" ""))]
-  "TARGET_SPE"
-  "{ rs6000_emit_move (operands[0], operands[1], V2SImode); DONE; }")
-
-(define_insn "*movv2si_internal"
-  [(set (match_operand:V2SI 0 "nonimmediate_operand" "=m,r,r,r")
-       (match_operand:V2SI 1 "input_operand" "r,m,r,W"))]
-  "TARGET_SPE
-   && (gpc_reg_operand (operands[0], V2SImode)
-       || gpc_reg_operand (operands[1], V2SImode))"
-  "*
-{
-  switch (which_alternative)
-    {
-    case 0: return \"evstdd%X0 %1,%y0\";
-    case 1: return \"evldd%X1 %0,%y1\";
-    case 2: return \"evor %0,%1,%1\";
-    case 3: return output_vec_const_move (operands);
-    default: gcc_unreachable ();
-    }
-}"
-  [(set_attr "type" "vecload,vecstore,*,*")
-   (set_attr "length" "*,*,*,12")])
-
-(define_split
-  [(set (match_operand:V2SI 0 "register_operand" "")
-       (match_operand:V2SI 1 "zero_constant" ""))]
-  "TARGET_SPE && reload_completed"
-  [(set (match_dup 0)
-       (xor:V2SI (match_dup 0) (match_dup 0)))]
-  "")
-
-(define_expand "movv1di"
-  [(set (match_operand:V1DI 0 "nonimmediate_operand" "")
-       (match_operand:V1DI 1 "any_operand" ""))]
-  "TARGET_SPE"
-  "{ rs6000_emit_move (operands[0], operands[1], V1DImode); DONE; }")
-
-(define_insn "*movv1di_internal"
-  [(set (match_operand:V1DI 0 "nonimmediate_operand" "=m,r,r,r")
-       (match_operand:V1DI 1 "input_operand" "r,m,r,W"))]
-  "TARGET_SPE
-   && (gpc_reg_operand (operands[0], V1DImode)
-       || gpc_reg_operand (operands[1], V1DImode))"
-  "@
-   evstdd%X0 %1,%y0
-   evldd%X1 %0,%y1
-   evor %0,%1,%1
-   evxor %0,%0,%0"
-  [(set_attr "type" "vecload,vecstore,*,*")
-   (set_attr "length" "*,*,*,*")])
-
-(define_expand "movv4hi"
-  [(set (match_operand:V4HI 0 "nonimmediate_operand" "")
-       (match_operand:V4HI 1 "any_operand" ""))]
-  "TARGET_SPE"
-  "{ rs6000_emit_move (operands[0], operands[1], V4HImode); DONE; }")
-
-(define_insn "*movv4hi_internal"
-  [(set (match_operand:V4HI 0 "nonimmediate_operand" "=m,r,r,r")
-       (match_operand:V4HI 1 "input_operand" "r,m,r,W"))]
-  "TARGET_SPE
-   && (gpc_reg_operand (operands[0], V4HImode)
-       || gpc_reg_operand (operands[1], V4HImode))"
-  "@
-   evstdd%X0 %1,%y0
-   evldd%X1 %0,%y1
-   evor %0,%1,%1
-   evxor %0,%0,%0"
-  [(set_attr "type" "vecload")])
-
-(define_expand "movv2sf"
-  [(set (match_operand:V2SF 0 "nonimmediate_operand" "")
-       (match_operand:V2SF 1 "any_operand" ""))]
-  "TARGET_SPE || TARGET_PAIRED_FLOAT"
-  "{ rs6000_emit_move (operands[0], operands[1], V2SFmode); DONE; }")
-
-(define_insn "*movv2sf_internal"
-  [(set (match_operand:V2SF 0 "nonimmediate_operand" "=m,r,r,r")
-       (match_operand:V2SF 1 "input_operand" "r,m,r,W"))]
-  "TARGET_SPE
-   && (gpc_reg_operand (operands[0], V2SFmode)
-       || gpc_reg_operand (operands[1], V2SFmode))"
-  "@
-   evstdd%X0 %1,%y0
-   evldd%X1 %0,%y1
-   evor %0,%1,%1
-   evxor %0,%0,%0"
-  [(set_attr "type" "vecload,vecstore,*,*")
-   (set_attr "length" "*,*,*,*")])
-
-;; End of vector move instructions.
-
-(define_insn "spe_evmwhssfaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 702))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhssfaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhssmaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 703))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhssmaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhsmfaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 704))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhsmfaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhsmiaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 705))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhsmiaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhusiaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 706))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhusiaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhumiaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 707))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhumiaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhssfan"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 708))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhssfan %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhssian"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 709))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhssian %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhsmfan"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 710))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhsmfan %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhsmian"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 711))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhsmian %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhumian"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 713))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhumian %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhgssfaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 714))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhgssfaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhgsmfaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 715))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhgsmfaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhgsmiaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 716))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhgsmiaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhgumiaa"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 717))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhgumiaa %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhgssfan"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 718))
-   (clobber (reg:SI SPEFSCR_REGNO))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhgssfan %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhgsmfan"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 719))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhgsmfan %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhgsmian"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 720))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhgsmian %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_evmwhgumian"
-  [(set (match_operand:V2SI 0 "gpc_reg_operand" "=r")
-        (unspec:V2SI [(match_operand:V2SI 1 "gpc_reg_operand" "r")
-                      (match_operand:V2SI 2 "gpc_reg_operand" "r")] 721))
-   (set (reg:V2SI SPE_ACC_REGNO) (unspec:V2SI  [(const_int 0)] 0))]
-  "TARGET_SPE"
-  "evmwhgumian %0,%1,%2"
-  [(set_attr "type" "veccomplex")
-   (set_attr  "length" "4")])
-
-(define_insn "spe_mtspefscr"
-  [(set (reg:SI SPEFSCR_REGNO)
-       (unspec_volatile:SI [(match_operand:SI 0 "register_operand" "r")]
-                           722))]
-  "TARGET_SPE"
-  "mtspefscr %0"
-  [(set_attr "type" "vecsimple")])
-
-(define_insn "spe_mfspefscr"
-  [(set (match_operand:SI 0 "register_operand" "=r")
-       (unspec_volatile:SI [(reg:SI SPEFSCR_REGNO)] 723))]
-  "TARGET_SPE"
-  "mfspefscr %0"
-  [(set_attr "type" "vecsimple")])
-
-;; MPC8540 single-precision FP instructions on GPRs.
-;; We have 2 variants for each.  One for IEEE compliant math and one
-;; for non IEEE compliant math.
-
-;; Out-of-line prologues and epilogues.
-(define_insn "*save_gpregs_spe"
-  [(match_parallel 0 "any_parallel_operand"
-                  [(clobber (reg:P LR_REGNO))
-                   (use (match_operand:P 1 "symbol_ref_operand" "s"))
-                   (use (reg:P 11))
-                   (set (match_operand:V2SI 2 "memory_operand" "=m")
-                        (match_operand:V2SI 3 "gpc_reg_operand" "r"))])]
-  "TARGET_SPE_ABI"
-  "bl %z1"
-  [(set_attr "type" "branch")
-   (set_attr "length" "4")])
-
-(define_insn "*restore_gpregs_spe"
- [(match_parallel 0 "any_parallel_operand"
-                 [(clobber (reg:P LR_REGNO))
-                  (use (match_operand:P 1 "symbol_ref_operand" "s"))
-                  (use (reg:P 11))
-                  (set (match_operand:V2SI 2 "gpc_reg_operand" "=r")
-                       (match_operand:V2SI 3 "memory_operand" "m"))])]
- "TARGET_SPE_ABI"
- "bl %z1"
- [(set_attr "type" "branch")
-  (set_attr "length" "4")])
-
-(define_insn "*return_and_restore_gpregs_spe"
- [(match_parallel 0 "any_parallel_operand"
-                 [(return)
-                  (clobber (reg:P LR_REGNO))
-                  (use (match_operand:P 1 "symbol_ref_operand" "s"))
-                  (use (reg:P 11))
-                  (set (match_operand:V2SI 2 "gpc_reg_operand" "=r")
-                       (match_operand:V2SI 3 "memory_operand" "m"))])]
- "TARGET_SPE_ABI"
- "b %z1"
- [(set_attr "type" "branch")
-  (set_attr "length" "4")])
index ea8169fabe0e0d648ea8cb757988923afb4987b7..a3d53e7f439229bb7933e6986b01d4bb648b6f7a 100644 (file)
     emit_insn (gen_vsx_extract_<VEC_F:mode> (operand0, vec, elt));
     DONE;
   })
-
-\f
-;;; Expanders for vector insn patterns shared between the SPE and TARGET_PAIRED systems.
-
-(define_expand "absv2sf2"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "")
-       (abs:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "")))]
-  "TARGET_PAIRED_FLOAT || TARGET_SPE"
-  "")
-
-(define_expand "negv2sf2"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "")
-       (neg:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "")))]
-  "TARGET_PAIRED_FLOAT || TARGET_SPE"
-  "")
-
-(define_expand "addv2sf3"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "")
-       (plus:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "")
-                  (match_operand:V2SF 2 "gpc_reg_operand" "")))]
-  "TARGET_PAIRED_FLOAT || TARGET_SPE"
-  "
-{
-  if (TARGET_SPE)
-    {
-      /* We need to make a note that we clobber SPEFSCR.  */
-      rtx par = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (2));
-
-      XVECEXP (par, 0, 0) = gen_rtx_SET (operands[0],
-                                         gen_rtx_PLUS (V2SFmode, operands[1], operands[2]));
-      XVECEXP (par, 0, 1) = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (SImode, SPEFSCR_REGNO));
-      emit_insn (par);
-      DONE;
-    }
-}")
-
-(define_expand "subv2sf3"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "")
-       (minus:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "")
-                   (match_operand:V2SF 2 "gpc_reg_operand" "")))]
-  "TARGET_PAIRED_FLOAT || TARGET_SPE"
-  "
-{
-  if (TARGET_SPE)
-    {
-      /* We need to make a note that we clobber SPEFSCR.  */
-      rtx par = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (2));
-
-      XVECEXP (par, 0, 0) = gen_rtx_SET (operands[0],
-                                         gen_rtx_MINUS (V2SFmode, operands[1], operands[2]));
-      XVECEXP (par, 0, 1) = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (SImode, SPEFSCR_REGNO));
-      emit_insn (par);
-      DONE;
-    }
-}")
-
-(define_expand "mulv2sf3"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "")
-       (mult:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "")
-                  (match_operand:V2SF 2 "gpc_reg_operand" "")))]
-  "TARGET_PAIRED_FLOAT || TARGET_SPE"
-  "
-{
-  if (TARGET_SPE)
-    {
-      /* We need to make a note that we clobber SPEFSCR.  */
-      rtx par = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (2));
-
-      XVECEXP (par, 0, 0) = gen_rtx_SET (operands[0],
-                                         gen_rtx_MULT (V2SFmode, operands[1], operands[2]));
-      XVECEXP (par, 0, 1) = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (SImode, SPEFSCR_REGNO));
-      emit_insn (par);
-      DONE;
-    }
-}")
-
-(define_expand "divv2sf3"
-  [(set (match_operand:V2SF 0 "gpc_reg_operand" "")
-       (div:V2SF (match_operand:V2SF 1 "gpc_reg_operand" "")
-                 (match_operand:V2SF 2 "gpc_reg_operand" "")))]
-  "TARGET_PAIRED_FLOAT || TARGET_SPE"
-  "
-{
-  if (TARGET_SPE)
-    {
-      /* We need to make a note that we clobber SPEFSCR.  */
-      rtx par = gen_rtx_PARALLEL (VOIDmode, rtvec_alloc (2));
-
-      XVECEXP (par, 0, 0) = gen_rtx_SET (operands[0],
-                                         gen_rtx_DIV (V2SFmode, operands[1], operands[2]));
-      XVECEXP (par, 0, 1) = gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (SImode, SPEFSCR_REGNO));
-      emit_insn (par);
-      DONE;
-    }
-}")