Merge branch 'vendor/GCC44'
[dragonfly.git] / contrib / gcc-4.4 / gcc / config / i386 / sse.md
index c2dd7f1..686ba13 100644 (file)
             (parallel [(const_int 0)]))]
          UNSPEC_FIX_NOTRUNC))]
   "TARGET_SSE && TARGET_64BIT"
             (parallel [(const_int 0)]))]
          UNSPEC_FIX_NOTRUNC))]
   "TARGET_SSE && TARGET_64BIT"
-  "%vcvtss2siq\t{%1, %0|%0, %1}"
+  "%vcvtss2si{q}\t{%1, %0|%0, %1}"
   [(set_attr "type" "sseicvt")
    (set_attr "athlon_decode" "double,vector")
    (set_attr "prefix_rep" "1")
   [(set_attr "type" "sseicvt")
    (set_attr "athlon_decode" "double,vector")
    (set_attr "prefix_rep" "1")
        (unspec:DI [(match_operand:SF 1 "nonimmediate_operand" "x,m")]
                   UNSPEC_FIX_NOTRUNC))]
   "TARGET_SSE && TARGET_64BIT"
        (unspec:DI [(match_operand:SF 1 "nonimmediate_operand" "x,m")]
                   UNSPEC_FIX_NOTRUNC))]
   "TARGET_SSE && TARGET_64BIT"
-  "%vcvtss2siq\t{%1, %0|%0, %1}"
+  "%vcvtss2si{q}\t{%1, %0|%0, %1}"
   [(set_attr "type" "sseicvt")
    (set_attr "athlon_decode" "double,vector")
    (set_attr "amdfam10_decode" "double,double")
   [(set_attr "type" "sseicvt")
    (set_attr "athlon_decode" "double,vector")
    (set_attr "amdfam10_decode" "double,double")
            (match_operand:V4SF 1 "nonimmediate_operand" "x,m")
            (parallel [(const_int 0)]))))]
   "TARGET_SSE && TARGET_64BIT"
            (match_operand:V4SF 1 "nonimmediate_operand" "x,m")
            (parallel [(const_int 0)]))))]
   "TARGET_SSE && TARGET_64BIT"
-  "%vcvttss2siq\t{%1, %0|%0, %1}"
+  "%vcvttss2si{q}\t{%1, %0|%0, %1}"
   [(set_attr "type" "sseicvt")
    (set_attr "athlon_decode" "double,vector")
    (set_attr "amdfam10_decode" "double,double")
   [(set_attr "type" "sseicvt")
    (set_attr "athlon_decode" "double,vector")
    (set_attr "amdfam10_decode" "double,double")
          (parallel [(const_int 0) (const_int 1)
                     (const_int 2) (const_int 3)])))]
   "TARGET_AVX"
          (parallel [(const_int 0) (const_int 1)
                     (const_int 2) (const_int 3)])))]
   "TARGET_AVX"
-  "vextractf128\t{$0x1, %1, %0|%0, %1, 0x1}"
+  "vextractf128\t{$0x0, %1, %0|%0, %1, 0x0}"
   [(set_attr "type" "sselog")
    (set_attr "memory" "none,store")
    (set_attr "prefix" "vex")
   [(set_attr "type" "sselog")
    (set_attr "memory" "none,store")
    (set_attr "prefix" "vex")
                     (const_int 4) (const_int 5)
                     (const_int 6) (const_int 7)])))]
   "TARGET_AVX"
                     (const_int 4) (const_int 5)
                     (const_int 6) (const_int 7)])))]
   "TARGET_AVX"
-  "vextractf128\t{$0x1, %1, %0|%0, %1, 0x1}"
+  "vextractf128\t{$0x0, %1, %0|%0, %1, 0x0}"
   [(set_attr "type" "sselog")
    (set_attr "memory" "none,store")
    (set_attr "prefix" "vex")
   [(set_attr "type" "sselog")
    (set_attr "memory" "none,store")
    (set_attr "prefix" "vex")
                     (const_int 12) (const_int 13)
                     (const_int 14) (const_int 15)])))]
   "TARGET_AVX"
                     (const_int 12) (const_int 13)
                     (const_int 14) (const_int 15)])))]
   "TARGET_AVX"
-  "vextractf128\t{$0x1, %1, %0|%0, %1, 0x1}"
+  "vextractf128\t{$0x0, %1, %0|%0, %1, 0x0}"
   [(set_attr "type" "sselog")
    (set_attr "memory" "none,store")
    (set_attr "prefix" "vex")
   [(set_attr "type" "sselog")
    (set_attr "memory" "none,store")
    (set_attr "prefix" "vex")
   "TARGET_AVX"
 {
   operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
   "TARGET_AVX"
 {
   operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
-  return "vpinsr<avxmodesuffixs>\t{%3, %k2, %1, %0|%0, %1, %k2, %3}";
+  if (MEM_P (operands[2]))
+    return "vpinsr<avxmodesuffixs>\t{%3, %2, %1, %0|%0, %1, %2, %3}";
+  else
+    return "vpinsr<avxmodesuffixs>\t{%3, %k2, %1, %0|%0, %1, %k2, %3}";
 }
   [(set_attr "type" "sselog")
    (set_attr "prefix" "vex")
 }
   [(set_attr "type" "sselog")
    (set_attr "prefix" "vex")
   "TARGET_SSE4_1"
 {
   operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
   "TARGET_SSE4_1"
 {
   operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
-  return "pinsrb\t{%3, %k2, %0|%0, %k2, %3}";
+  if (MEM_P (operands[2]))
+    return "pinsrb\t{%3, %2, %0|%0, %2, %3}";
+  else
+    return "pinsrb\t{%3, %k2, %0|%0, %k2, %3}";
 }
   [(set_attr "type" "sselog")
    (set_attr "prefix_extra" "1")
 }
   [(set_attr "type" "sselog")
    (set_attr "prefix_extra" "1")
   "TARGET_SSE2"
 {
   operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
   "TARGET_SSE2"
 {
   operands[3] = GEN_INT (exact_log2 (INTVAL (operands[3])));
-  return "pinsrw\t{%3, %k2, %0|%0, %k2, %3}";
+  if (MEM_P (operands[2]))
+    return "pinsrw\t{%3, %2, %0|%0, %2, %3}";
+  else
+    return "pinsrw\t{%3, %k2, %0|%0, %k2, %3}";
 }
   [(set_attr "type" "sselog")
    (set_attr "prefix_data16" "1")
 }
   [(set_attr "type" "sselog")
    (set_attr "prefix_data16" "1")
   [(set (match_operand:V8HI 0 "register_operand" "=x")
        (sign_extend:V8HI
          (vec_select:V8QI
   [(set (match_operand:V8HI 0 "register_operand" "=x")
        (sign_extend:V8HI
          (vec_select:V8QI
-           (match_operand:V16QI 1 "register_operand" "x")
-           (parallel [(const_int 0)
-                      (const_int 1)
-                      (const_int 2)
-                      (const_int 3)
-                      (const_int 4)
-                      (const_int 5)
-                      (const_int 6)
-                      (const_int 7)]))))]
-  "TARGET_SSE4_1"
-  "%vpmovsxbw\t{%1, %0|%0, %1}"
-  [(set_attr "type" "ssemov")
-   (set_attr "prefix_extra" "1")
-   (set_attr "prefix" "maybe_vex")
-   (set_attr "mode" "TI")])
-
-(define_insn "*sse4_1_extendv8qiv8hi2"
-  [(set (match_operand:V8HI 0 "register_operand" "=x")
-       (sign_extend:V8HI
-         (vec_select:V8QI
-           (vec_duplicate:V16QI
-             (match_operand:V8QI 1 "nonimmediate_operand" "xm"))
+           (match_operand:V16QI 1 "nonimmediate_operand" "xm")
            (parallel [(const_int 0)
                       (const_int 1)
                       (const_int 2)
            (parallel [(const_int 0)
                       (const_int 1)
                       (const_int 2)
   [(set (match_operand:V4SI 0 "register_operand" "=x")
        (sign_extend:V4SI
          (vec_select:V4QI
   [(set (match_operand:V4SI 0 "register_operand" "=x")
        (sign_extend:V4SI
          (vec_select:V4QI
-           (match_operand:V16QI 1 "register_operand" "x")
-           (parallel [(const_int 0)
-                      (const_int 1)
-                      (const_int 2)
-                      (const_int 3)]))))]
-  "TARGET_SSE4_1"
-  "%vpmovsxbd\t{%1, %0|%0, %1}"
-  [(set_attr "type" "ssemov")
-   (set_attr "prefix_extra" "1")
-   (set_attr "prefix" "maybe_vex")
-   (set_attr "mode" "TI")])
-
-(define_insn "*sse4_1_extendv4qiv4si2"
-  [(set (match_operand:V4SI 0 "register_operand" "=x")
-       (sign_extend:V4SI
-         (vec_select:V4QI
-           (vec_duplicate:V16QI
-             (match_operand:V4QI 1 "nonimmediate_operand" "xm"))
+           (match_operand:V16QI 1 "nonimmediate_operand" "xm")
            (parallel [(const_int 0)
                       (const_int 1)
                       (const_int 2)
            (parallel [(const_int 0)
                       (const_int 1)
                       (const_int 2)
   [(set (match_operand:V2DI 0 "register_operand" "=x")
        (sign_extend:V2DI
          (vec_select:V2QI
   [(set (match_operand:V2DI 0 "register_operand" "=x")
        (sign_extend:V2DI
          (vec_select:V2QI
-           (match_operand:V16QI 1 "register_operand" "x")
-           (parallel [(const_int 0)
-                      (const_int 1)]))))]
-  "TARGET_SSE4_1"
-  "%vpmovsxbq\t{%1, %0|%0, %1}"
-  [(set_attr "type" "ssemov")
-   (set_attr "prefix_extra" "1")
-   (set_attr "prefix" "maybe_vex")
-   (set_attr "mode" "TI")])
-
-(define_insn "*sse4_1_extendv2qiv2di2"
-  [(set (match_operand:V2DI 0 "register_operand" "=x")
-       (sign_extend:V2DI
-         (vec_select:V2QI
-           (vec_duplicate:V16QI
-             (match_operand:V2QI 1 "nonimmediate_operand" "xm"))
+           (match_operand:V16QI 1 "nonimmediate_operand" "xm")
            (parallel [(const_int 0)
                       (const_int 1)]))))]
   "TARGET_SSE4_1"
            (parallel [(const_int 0)
                       (const_int 1)]))))]
   "TARGET_SSE4_1"
   [(set (match_operand:V4SI 0 "register_operand" "=x")
        (sign_extend:V4SI
          (vec_select:V4HI
   [(set (match_operand:V4SI 0 "register_operand" "=x")
        (sign_extend:V4SI
          (vec_select:V4HI
-           (match_operand:V8HI 1 "register_operand" "x")
-           (parallel [(const_int 0)
-                      (const_int 1)
-                      (const_int 2)
-                      (const_int 3)]))))]
-  "TARGET_SSE4_1"
-  "%vpmovsxwd\t{%1, %0|%0, %1}"
-  [(set_attr "type" "ssemov")
-   (set_attr "prefix_extra" "1")
-   (set_attr "prefix" "maybe_vex")
-   (set_attr "mode" "TI")])
-
-(define_insn "*sse4_1_extendv4hiv4si2"
-  [(set (match_operand:V4SI 0 "register_operand" "=x")
-       (sign_extend:V4SI
-         (vec_select:V4HI
-           (vec_duplicate:V8HI
-             (match_operand:V2HI 1 "nonimmediate_operand" "xm"))
+           (match_operand:V8HI 1 "nonimmediate_operand" "xm")
            (parallel [(const_int 0)
                       (const_int 1)
                       (const_int 2)
            (parallel [(const_int 0)
                       (const_int 1)
                       (const_int 2)
   [(set (match_operand:V2DI 0 "register_operand" "=x")
        (sign_extend:V2DI
          (vec_select:V2HI
   [(set (match_operand:V2DI 0 "register_operand" "=x")
        (sign_extend:V2DI
          (vec_select:V2HI
-           (match_operand:V8HI 1 "register_operand" "x")
-           (parallel [(const_int 0)
-                      (const_int 1)]))))]
-  "TARGET_SSE4_1"
-  "%vpmovsxwq\t{%1, %0|%0, %1}"
-  [(set_attr "type" "ssemov")
-   (set_attr "prefix_extra" "1")
-   (set_attr "prefix" "maybe_vex")
-   (set_attr "mode" "TI")])
-
-(define_insn "*sse4_1_extendv2hiv2di2"
-  [(set (match_operand:V2DI 0 "register_operand" "=x")
-       (sign_extend:V2DI
-         (vec_select:V2HI
-           (vec_duplicate:V8HI
-             (match_operand:V8HI 1 "nonimmediate_operand" "xm"))
+           (match_operand:V8HI 1 "nonimmediate_operand" "xm")
            (parallel [(const_int 0)
                       (const_int 1)]))))]
   "TARGET_SSE4_1"
            (parallel [(const_int 0)
                       (const_int 1)]))))]
   "TARGET_SSE4_1"
   [(set (match_operand:V2DI 0 "register_operand" "=x")
        (sign_extend:V2DI
          (vec_select:V2SI
   [(set (match_operand:V2DI 0 "register_operand" "=x")
        (sign_extend:V2DI
          (vec_select:V2SI
-           (match_operand:V4SI 1 "register_operand" "x")
-           (parallel [(const_int 0)
-                      (const_int 1)]))))]
-  "TARGET_SSE4_1"
-  "%vpmovsxdq\t{%1, %0|%0, %1}"
-  [(set_attr "type" "ssemov")
-   (set_attr "prefix_extra" "1")
-   (set_attr "prefix" "maybe_vex")
-   (set_attr "mode" "TI")])
-
-(define_insn "*sse4_1_extendv2siv2di2"
-  [(set (match_operand:V2DI 0 "register_operand" "=x")
-       (sign_extend:V2DI
-         (vec_select:V2SI
-           (vec_duplicate:V4SI
-             (match_operand:V2SI 1 "nonimmediate_operand" "xm"))
+           (match_operand:V4SI 1 "nonimmediate_operand" "xm")
            (parallel [(const_int 0)
                       (const_int 1)]))))]
   "TARGET_SSE4_1"
            (parallel [(const_int 0)
                       (const_int 1)]))))]
   "TARGET_SSE4_1"
   [(set (match_operand:V8HI 0 "register_operand" "=x")
        (zero_extend:V8HI
          (vec_select:V8QI
   [(set (match_operand:V8HI 0 "register_operand" "=x")
        (zero_extend:V8HI
          (vec_select:V8QI
-           (match_operand:V16QI 1 "register_operand" "x")
-           (parallel [(const_int 0)
-                      (const_int 1)
-                      (const_int 2)
-                      (const_int 3)
-                      (const_int 4)
-                      (const_int 5)
-                      (const_int 6)
-                      (const_int 7)]))))]
-  "TARGET_SSE4_1"
-  "%vpmovzxbw\t{%1, %0|%0, %1}"
-  [(set_attr "type" "ssemov")
-   (set_attr "prefix_extra" "1")
-   (set_attr "prefix" "maybe_vex")
-   (set_attr "mode" "TI")])
-
-(define_insn "*sse4_1_zero_extendv8qiv8hi2"
-  [(set (match_operand:V8HI 0 "register_operand" "=x")
-       (zero_extend:V8HI
-         (vec_select:V8QI
-           (vec_duplicate:V16QI
-             (match_operand:V8QI 1 "nonimmediate_operand" "xm"))
+           (match_operand:V16QI 1 "nonimmediate_operand" "xm")
            (parallel [(const_int 0)
                       (const_int 1)
                       (const_int 2)
            (parallel [(const_int 0)
                       (const_int 1)
                       (const_int 2)
   [(set (match_operand:V4SI 0 "register_operand" "=x")
        (zero_extend:V4SI
          (vec_select:V4QI
   [(set (match_operand:V4SI 0 "register_operand" "=x")
        (zero_extend:V4SI
          (vec_select:V4QI
-           (match_operand:V16QI 1 "register_operand" "x")
-           (parallel [(const_int 0)
-                      (const_int 1)
-                      (const_int 2)
-                      (const_int 3)]))))]
-  "TARGET_SSE4_1"
-  "%vpmovzxbd\t{%1, %0|%0, %1}"
-  [(set_attr "type" "ssemov")
-   (set_attr "prefix_extra" "1")
-   (set_attr "prefix" "maybe_vex")
-   (set_attr "mode" "TI")])
-
-(define_insn "*sse4_1_zero_extendv4qiv4si2"
-  [(set (match_operand:V4SI 0 "register_operand" "=x")
-       (zero_extend:V4SI
-         (vec_select:V4QI
-           (vec_duplicate:V16QI
-             (match_operand:V4QI 1 "nonimmediate_operand" "xm"))
+           (match_operand:V16QI 1 "nonimmediate_operand" "xm")
            (parallel [(const_int 0)
                       (const_int 1)
                       (const_int 2)
            (parallel [(const_int 0)
                       (const_int 1)
                       (const_int 2)
   [(set (match_operand:V2DI 0 "register_operand" "=x")
        (zero_extend:V2DI
          (vec_select:V2QI
   [(set (match_operand:V2DI 0 "register_operand" "=x")
        (zero_extend:V2DI
          (vec_select:V2QI
-           (match_operand:V16QI 1 "register_operand" "x")
-           (parallel [(const_int 0)
-                      (const_int 1)]))))]
-  "TARGET_SSE4_1"
-  "%vpmovzxbq\t{%1, %0|%0, %1}"
-  [(set_attr "type" "ssemov")
-   (set_attr "prefix_extra" "1")
-   (set_attr "prefix" "maybe_vex")
-   (set_attr "mode" "TI")])
-
-(define_insn "*sse4_1_zero_extendv2qiv2di2"
-  [(set (match_operand:V2DI 0 "register_operand" "=x")
-       (zero_extend:V2DI
-         (vec_select:V2QI
-           (vec_duplicate:V16QI
-             (match_operand:V2QI 1 "nonimmediate_operand" "xm"))
+           (match_operand:V16QI 1 "nonimmediate_operand" "xm")
            (parallel [(const_int 0)
                       (const_int 1)]))))]
   "TARGET_SSE4_1"
            (parallel [(const_int 0)
                       (const_int 1)]))))]
   "TARGET_SSE4_1"
   [(set (match_operand:V4SI 0 "register_operand" "=x")
        (zero_extend:V4SI
          (vec_select:V4HI
   [(set (match_operand:V4SI 0 "register_operand" "=x")
        (zero_extend:V4SI
          (vec_select:V4HI
-           (match_operand:V8HI 1 "register_operand" "x")
-           (parallel [(const_int 0)
-                      (const_int 1)
-                      (const_int 2)
-                      (const_int 3)]))))]
-  "TARGET_SSE4_1"
-  "%vpmovzxwd\t{%1, %0|%0, %1}"
-  [(set_attr "type" "ssemov")
-   (set_attr "prefix_extra" "1")
-   (set_attr "prefix" "maybe_vex")
-   (set_attr "mode" "TI")])
-
-(define_insn "*sse4_1_zero_extendv4hiv4si2"
-  [(set (match_operand:V4SI 0 "register_operand" "=x")
-       (zero_extend:V4SI
-         (vec_select:V4HI
-           (vec_duplicate:V8HI
-             (match_operand:V4HI 1 "nonimmediate_operand" "xm"))
+           (match_operand:V8HI 1 "nonimmediate_operand" "xm")
            (parallel [(const_int 0)
                       (const_int 1)
                       (const_int 2)
            (parallel [(const_int 0)
                       (const_int 1)
                       (const_int 2)
   [(set (match_operand:V2DI 0 "register_operand" "=x")
        (zero_extend:V2DI
          (vec_select:V2HI
   [(set (match_operand:V2DI 0 "register_operand" "=x")
        (zero_extend:V2DI
          (vec_select:V2HI
-           (match_operand:V8HI 1 "register_operand" "x")
-           (parallel [(const_int 0)
-                      (const_int 1)]))))]
-  "TARGET_SSE4_1"
-  "%vpmovzxwq\t{%1, %0|%0, %1}"
-  [(set_attr "type" "ssemov")
-   (set_attr "prefix_extra" "1")
-   (set_attr "prefix" "maybe_vex")
-   (set_attr "mode" "TI")])
-
-(define_insn "*sse4_1_zero_extendv2hiv2di2"
-  [(set (match_operand:V2DI 0 "register_operand" "=x")
-       (zero_extend:V2DI
-         (vec_select:V2HI
-           (vec_duplicate:V8HI
-             (match_operand:V2HI 1 "nonimmediate_operand" "xm"))
+           (match_operand:V8HI 1 "nonimmediate_operand" "xm")
            (parallel [(const_int 0)
                       (const_int 1)]))))]
   "TARGET_SSE4_1"
            (parallel [(const_int 0)
                       (const_int 1)]))))]
   "TARGET_SSE4_1"
   [(set (match_operand:V2DI 0 "register_operand" "=x")
        (zero_extend:V2DI
          (vec_select:V2SI
   [(set (match_operand:V2DI 0 "register_operand" "=x")
        (zero_extend:V2DI
          (vec_select:V2SI
-           (match_operand:V4SI 1 "register_operand" "x")
-           (parallel [(const_int 0)
-                      (const_int 1)]))))]
-  "TARGET_SSE4_1"
-  "%vpmovzxdq\t{%1, %0|%0, %1}"
-  [(set_attr "type" "ssemov")
-   (set_attr "prefix_extra" "1")
-   (set_attr "prefix" "maybe_vex")
-   (set_attr "mode" "TI")])
-
-(define_insn "*sse4_1_zero_extendv2siv2di2"
-  [(set (match_operand:V2DI 0 "register_operand" "=x")
-       (zero_extend:V2DI
-         (vec_select:V2SI
-           (vec_duplicate:V4SI
-             (match_operand:V2SI 1 "nonimmediate_operand" "xm"))
+           (match_operand:V4SI 1 "nonimmediate_operand" "xm")
            (parallel [(const_int 0)
                       (const_int 1)]))))]
   "TARGET_SSE4_1"
            (parallel [(const_int 0)
                       (const_int 1)]))))]
   "TARGET_SSE4_1"