sse.md (AVXMODEDCVTDQ2PS): Remove.
* config/i386/sse.md (AVXMODEDCVTDQ2PS): Remove. (AVXMODEDCVTPS2DQ): Ditto. (VEC_FLOAT_MODE): Ditto. (<sse>_andnot<mode>3): Merge with avx_andnot<mode>3. Use VF mode iterator. Handle TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL target flag. (<any_logic:code><mode>3): Use VF mode iterator. (*<any_logic:code><mode>3): Merge with *avx_<any_logic:code><mode>3. Use VF mode iterator. (copysign<mode>3): Use VF mode iterator. (*andnot<MODEF:mode>3): Merge with *avx_andnot<MODEF:mode>3. Handle TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL target flag. (*<any_logic:code><MODEF:mode>3): Merge with *avx_<any_logic:code><MODEF:mode>3. (sse_cvtsi2ss): Merge with *avx_cvtsi2ss. (sse_cvtsi2ssq): Merge with *avx_cvtsi2ssq. (avx_cvtdq2ps256): Split from avx_cvtdq2ps<avxmodesuffix>. (avx_cvtdq2ps<avxmodesuffix>): Remove. (sse2_cvtdq2ps): Use %v modifier. (avx_cvtps2dq256): Split from avx_cvtps2dq<avxmodesuffix>. (avx_cvtps2dq<avxmodesuffix>): Remove. (sse2_cvtps2dq): Use %v modifier. (avx_cvttps2dq256): Split from avx_cvttps2dq<avxmodesuffix>. (avx_cvttps2dq<avxmodesuffix>): Remove. (sse2_cvttps2dq): Use %v modifier. (sse2_cvtsi2sd): Merge with *avx_cvtsi2sd. (sse2_cvtsi2sdq): Merge with *avx_cvtsi2sdq. (sse2_cvtsd2siq): Fix insn template. (sse2_cvtsd2siq_2): Ditto. (sse2_cvttsd2siq): Ditto. (sse2_cvtsd2ss): Merge with *avx_cvtsd2ss. (sse2_cvtss2sd): Merge with *avx_cvtss2sd. From-SVN: r172058
This commit is contained in:
parent
4e927875b0
commit
a95d400021
2 changed files with 336 additions and 333 deletions
|
@ -1,3 +1,37 @@
|
|||
2011-04-06 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* config/i386/sse.md (AVXMODEDCVTDQ2PS): Remove.
|
||||
(AVXMODEDCVTPS2DQ): Ditto.
|
||||
(VEC_FLOAT_MODE): Ditto.
|
||||
(<sse>_andnot<mode>3): Merge with avx_andnot<mode>3. Use VF mode
|
||||
iterator. Handle TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL target flag.
|
||||
(<any_logic:code><mode>3): Use VF mode iterator.
|
||||
(*<any_logic:code><mode>3): Merge with *avx_<any_logic:code><mode>3.
|
||||
Use VF mode iterator.
|
||||
(copysign<mode>3): Use VF mode iterator.
|
||||
(*andnot<MODEF:mode>3): Merge with *avx_andnot<MODEF:mode>3. Handle
|
||||
TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL target flag.
|
||||
(*<any_logic:code><MODEF:mode>3): Merge with
|
||||
*avx_<any_logic:code><MODEF:mode>3.
|
||||
(sse_cvtsi2ss): Merge with *avx_cvtsi2ss.
|
||||
(sse_cvtsi2ssq): Merge with *avx_cvtsi2ssq.
|
||||
(avx_cvtdq2ps256): Split from avx_cvtdq2ps<avxmodesuffix>.
|
||||
(avx_cvtdq2ps<avxmodesuffix>): Remove.
|
||||
(sse2_cvtdq2ps): Use %v modifier.
|
||||
(avx_cvtps2dq256): Split from avx_cvtps2dq<avxmodesuffix>.
|
||||
(avx_cvtps2dq<avxmodesuffix>): Remove.
|
||||
(sse2_cvtps2dq): Use %v modifier.
|
||||
(avx_cvttps2dq256): Split from avx_cvttps2dq<avxmodesuffix>.
|
||||
(avx_cvttps2dq<avxmodesuffix>): Remove.
|
||||
(sse2_cvttps2dq): Use %v modifier.
|
||||
(sse2_cvtsi2sd): Merge with *avx_cvtsi2sd.
|
||||
(sse2_cvtsi2sdq): Merge with *avx_cvtsi2sdq.
|
||||
(sse2_cvtsd2siq): Fix insn template.
|
||||
(sse2_cvtsd2siq_2): Ditto.
|
||||
(sse2_cvttsd2siq): Ditto.
|
||||
(sse2_cvtsd2ss): Merge with *avx_cvtsd2ss.
|
||||
(sse2_cvtss2sd): Merge with *avx_cvtss2sd.
|
||||
|
||||
2011-04-06 Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* gcov-io.c: Use GCC Runtime Library Exception.
|
||||
|
@ -48,8 +82,7 @@
|
|||
declare.
|
||||
* config/darwin.h (TARGET_OBJC_CONSTRUCT_STRING_OBJECT,
|
||||
TARGET_STRING_OBJECT_REF_TYPE_P,
|
||||
TARGET_CHECK_STRING_OBJECT_FORMAT_ARG, TARGET_HAS_TARGETCM):
|
||||
Remove.
|
||||
TARGET_CHECK_STRING_OBJECT_FORMAT_ARG, TARGET_HAS_TARGETCM): Remove.
|
||||
* config/t-darwin (darwin-c.o): Update dependencies.
|
||||
* system.h (TARGET_HAS_TARGETCM): Poison.
|
||||
* Makefile.in (TARGET_H): Update.
|
||||
|
@ -57,14 +90,13 @@
|
|||
(c-family/c-format.o, c-family/c-opts.o): Update dependencies.
|
||||
(default-c.o): New target.
|
||||
(s-target-hooks-def-h): Pass "Target Hook" string to genhooks.
|
||||
(c-family/c-target-hooks-def.h, s-c-target-hooks-def-h): New
|
||||
targets.
|
||||
(c-family/c-target-hooks-def.h, s-c-target-hooks-def-h): New targets.
|
||||
(s-tm-texi): Pass -d option to genhooks. Also test timestamp on
|
||||
c-target.def.
|
||||
(build/genhooks.o): Update dependencies.
|
||||
|
||||
2011-04-06 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
|
||||
* ipa-inline.c (enum inlining_mode): Remove.
|
||||
(cgraph_flatten): Use some other token.
|
||||
(cgraph_edge_early_inlinable_p): New function, split out from ...
|
||||
|
|
|
@ -84,8 +84,6 @@
|
|||
(define_mode_iterator AVXMODEF4P [V4SF V4DF])
|
||||
(define_mode_iterator AVXMODEFDP [V2DF V4DF])
|
||||
(define_mode_iterator AVXMODEFSP [V4SF V8SF])
|
||||
(define_mode_iterator AVXMODEDCVTDQ2PS [V4SF V8SF])
|
||||
(define_mode_iterator AVXMODEDCVTPS2DQ [V4SI V8SI])
|
||||
|
||||
(define_mode_iterator FMAMODE [SF DF V4SF V2DF V8SF V4DF])
|
||||
|
||||
|
@ -112,11 +110,6 @@
|
|||
(V4SF "TARGET_SSE")
|
||||
(V4DF "TARGET_AVX") (V8SF "TARGET_AVX")])
|
||||
|
||||
;; Modes handled by vector float patterns.
|
||||
(define_mode_iterator VEC_FLOAT_MODE
|
||||
[(V2DF "TARGET_SSE2") (V4SF "TARGET_SSE")
|
||||
(V4DF "TARGET_AVX") (V8SF "TARGET_AVX")])
|
||||
|
||||
;; Modes handled by vector extract patterns.
|
||||
(define_mode_iterator VEC_EXTRACT_MODE
|
||||
[(V2DI "TARGET_SSE") (V4SI "TARGET_SSE")
|
||||
|
@ -1384,88 +1377,89 @@
|
|||
;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(define_insn "avx_andnot<mode>3"
|
||||
[(set (match_operand:AVXMODEF2P 0 "register_operand" "=x")
|
||||
(and:AVXMODEF2P
|
||||
(not:AVXMODEF2P
|
||||
(match_operand:AVXMODEF2P 1 "register_operand" "x"))
|
||||
(match_operand:AVXMODEF2P 2 "nonimmediate_operand" "xm")))]
|
||||
"AVX_VEC_FLOAT_MODE_P (<MODE>mode)"
|
||||
"vandn<ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}"
|
||||
[(set_attr "type" "sselog")
|
||||
(set_attr "prefix" "vex")
|
||||
(set_attr "mode" "<avxvecmode>")])
|
||||
|
||||
(define_insn "<sse>_andnot<mode>3"
|
||||
[(set (match_operand:SSEMODEF2P 0 "register_operand" "=x")
|
||||
(and:SSEMODEF2P
|
||||
(not:SSEMODEF2P
|
||||
(match_operand:SSEMODEF2P 1 "register_operand" "0"))
|
||||
(match_operand:SSEMODEF2P 2 "nonimmediate_operand" "xm")))]
|
||||
"SSE_VEC_FLOAT_MODE_P (<MODE>mode)"
|
||||
"andn<ssemodesuffix>\t{%2, %0|%0, %2}"
|
||||
[(set_attr "type" "sselog")
|
||||
[(set (match_operand:VF 0 "register_operand" "=x,x")
|
||||
(and:VF
|
||||
(not:VF
|
||||
(match_operand:VF 1 "register_operand" "0,x"))
|
||||
(match_operand:VF 2 "nonimmediate_operand" "xm,xm")))]
|
||||
""
|
||||
{
|
||||
static char buf[32];
|
||||
const char *insn;
|
||||
const char *suffix
|
||||
= TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL ? "ps" : "<ssemodesuffix>";
|
||||
|
||||
switch (which_alternative)
|
||||
{
|
||||
case 0:
|
||||
insn = "andn%s\t{%%2, %%0|%%0, %%2}";
|
||||
break;
|
||||
case 1:
|
||||
insn = "vandn%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
|
||||
break;
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
||||
snprintf (buf, sizeof (buf), insn, suffix);
|
||||
return buf;
|
||||
}
|
||||
[(set_attr "isa" "noavx,avx")
|
||||
(set_attr "type" "sselog")
|
||||
(set_attr "prefix" "orig,vex")
|
||||
(set_attr "mode" "<MODE>")])
|
||||
|
||||
(define_expand "<code><mode>3"
|
||||
[(set (match_operand:AVX256MODEF2P 0 "register_operand" "")
|
||||
(any_logic:AVX256MODEF2P
|
||||
(match_operand:AVX256MODEF2P 1 "nonimmediate_operand" "")
|
||||
(match_operand:AVX256MODEF2P 2 "nonimmediate_operand" "")))]
|
||||
"AVX256_VEC_FLOAT_MODE_P (<MODE>mode)"
|
||||
"ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
|
||||
|
||||
(define_insn "*avx_<code><mode>3"
|
||||
[(set (match_operand:AVXMODEF2P 0 "register_operand" "=x")
|
||||
(any_logic:AVXMODEF2P
|
||||
(match_operand:AVXMODEF2P 1 "nonimmediate_operand" "%x")
|
||||
(match_operand:AVXMODEF2P 2 "nonimmediate_operand" "xm")))]
|
||||
"AVX_VEC_FLOAT_MODE_P (<MODE>mode)
|
||||
&& ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
|
||||
{
|
||||
if (TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL)
|
||||
return "v<logic>ps\t{%2, %1, %0|%0, %1, %2}";
|
||||
else
|
||||
return "v<logic><ssemodesuffix>\t{%2, %1, %0|%0, %1, %2}";
|
||||
}
|
||||
[(set_attr "type" "sselog")
|
||||
(set_attr "prefix" "vex")
|
||||
(set_attr "mode" "<avxvecmode>")])
|
||||
|
||||
(define_expand "<code><mode>3"
|
||||
[(set (match_operand:SSEMODEF2P 0 "register_operand" "")
|
||||
(any_logic:SSEMODEF2P
|
||||
(match_operand:SSEMODEF2P 1 "nonimmediate_operand" "")
|
||||
(match_operand:SSEMODEF2P 2 "nonimmediate_operand" "")))]
|
||||
"SSE_VEC_FLOAT_MODE_P (<MODE>mode)"
|
||||
[(set (match_operand:VF 0 "register_operand" "")
|
||||
(any_logic:VF
|
||||
(match_operand:VF 1 "nonimmediate_operand" "")
|
||||
(match_operand:VF 2 "nonimmediate_operand" "")))]
|
||||
""
|
||||
"ix86_fixup_binary_operands_no_copy (<CODE>, <MODE>mode, operands);")
|
||||
|
||||
(define_insn "*<code><mode>3"
|
||||
[(set (match_operand:SSEMODEF2P 0 "register_operand" "=x")
|
||||
(any_logic:SSEMODEF2P
|
||||
(match_operand:SSEMODEF2P 1 "nonimmediate_operand" "%0")
|
||||
(match_operand:SSEMODEF2P 2 "nonimmediate_operand" "xm")))]
|
||||
"SSE_VEC_FLOAT_MODE_P (<MODE>mode)
|
||||
&& ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
|
||||
[(set (match_operand:VF 0 "register_operand" "=x,x")
|
||||
(any_logic:VF
|
||||
(match_operand:VF 1 "nonimmediate_operand" "%0,x")
|
||||
(match_operand:VF 2 "nonimmediate_operand" "xm,xm")))]
|
||||
"ix86_binary_operator_ok (<CODE>, <MODE>mode, operands)"
|
||||
{
|
||||
if (TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL)
|
||||
return "<logic>ps\t{%2, %0|%0, %2}";
|
||||
else
|
||||
return "<logic><ssemodesuffix>\t{%2, %0|%0, %2}";
|
||||
static char buf[32];
|
||||
const char *insn;
|
||||
const char *suffix
|
||||
= TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL ? "ps" : "<ssemodesuffix>";
|
||||
|
||||
switch (which_alternative)
|
||||
{
|
||||
case 0:
|
||||
insn = "<logic>%s\t{%%2, %%0|%%0, %%2}";
|
||||
break;
|
||||
case 1:
|
||||
insn = "v<logic>%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
|
||||
break;
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
||||
snprintf (buf, sizeof (buf), insn, suffix);
|
||||
return buf;
|
||||
}
|
||||
[(set_attr "type" "sselog")
|
||||
[(set_attr "isa" "noavx,avx")
|
||||
(set_attr "type" "sselog")
|
||||
(set_attr "prefix" "orig,vex")
|
||||
(set_attr "mode" "<MODE>")])
|
||||
|
||||
(define_expand "copysign<mode>3"
|
||||
[(set (match_dup 4)
|
||||
(and:VEC_FLOAT_MODE
|
||||
(not:VEC_FLOAT_MODE (match_dup 3))
|
||||
(match_operand:VEC_FLOAT_MODE 1 "nonimmediate_operand" "")))
|
||||
(and:VF
|
||||
(not:VF (match_dup 3))
|
||||
(match_operand:VF 1 "nonimmediate_operand" "")))
|
||||
(set (match_dup 5)
|
||||
(and:VEC_FLOAT_MODE (match_dup 3)
|
||||
(match_operand:VEC_FLOAT_MODE 2 "nonimmediate_operand" "")))
|
||||
(set (match_operand:VEC_FLOAT_MODE 0 "register_operand" "")
|
||||
(ior:VEC_FLOAT_MODE (match_dup 4) (match_dup 5)))]
|
||||
(and:VF (match_dup 3)
|
||||
(match_operand:VF 2 "nonimmediate_operand" "")))
|
||||
(set (match_operand:VF 0 "register_operand" "")
|
||||
(ior:VF (match_dup 4) (match_dup 5)))]
|
||||
""
|
||||
{
|
||||
operands[3] = ix86_build_signbit_mask (<MODE>mode, 1, 0);
|
||||
|
@ -1479,58 +1473,69 @@
|
|||
;; allocation lossage. These patterns do not allow memory operands
|
||||
;; because the native instructions read the full 128-bits.
|
||||
|
||||
(define_insn "*avx_andnot<mode>3"
|
||||
[(set (match_operand:MODEF 0 "register_operand" "=x")
|
||||
(and:MODEF
|
||||
(not:MODEF
|
||||
(match_operand:MODEF 1 "register_operand" "x"))
|
||||
(match_operand:MODEF 2 "register_operand" "x")))]
|
||||
"AVX_FLOAT_MODE_P (<MODE>mode)"
|
||||
"vandnp<ssemodefsuffix>\t{%2, %1, %0|%0, %1, %2}"
|
||||
[(set_attr "type" "sselog")
|
||||
(set_attr "prefix" "vex")
|
||||
(set_attr "mode" "<ssevecmode>")])
|
||||
|
||||
(define_insn "*andnot<mode>3"
|
||||
[(set (match_operand:MODEF 0 "register_operand" "=x")
|
||||
[(set (match_operand:MODEF 0 "register_operand" "=x,x")
|
||||
(and:MODEF
|
||||
(not:MODEF
|
||||
(match_operand:MODEF 1 "register_operand" "0"))
|
||||
(match_operand:MODEF 2 "register_operand" "x")))]
|
||||
(match_operand:MODEF 1 "register_operand" "0,x"))
|
||||
(match_operand:MODEF 2 "register_operand" "x,x")))]
|
||||
"SSE_FLOAT_MODE_P (<MODE>mode)"
|
||||
"andnp<ssemodefsuffix>\t{%2, %0|%0, %2}"
|
||||
[(set_attr "type" "sselog")
|
||||
(set_attr "mode" "<ssevecmode>")])
|
||||
|
||||
(define_insn "*avx_<code><mode>3"
|
||||
[(set (match_operand:MODEF 0 "register_operand" "=x")
|
||||
(any_logic:MODEF
|
||||
(match_operand:MODEF 1 "register_operand" "x")
|
||||
(match_operand:MODEF 2 "register_operand" "x")))]
|
||||
"AVX_FLOAT_MODE_P (<MODE>mode)"
|
||||
{
|
||||
if (TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL)
|
||||
return "v<logic>ps\t{%2, %1, %0|%0, %1, %2}";
|
||||
else
|
||||
return "v<logic>p<ssemodefsuffix>\t{%2, %1, %0|%0, %1, %2}";
|
||||
static char buf[32];
|
||||
const char *insn;
|
||||
const char *suffix
|
||||
= TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL ? "s" : "<ssemodefsuffix>";
|
||||
|
||||
switch (which_alternative)
|
||||
{
|
||||
case 0:
|
||||
insn = "andnp%s\t{%%2, %%0|%%0, %%2}";
|
||||
break;
|
||||
case 1:
|
||||
insn = "vandnp%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
|
||||
break;
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
||||
snprintf (buf, sizeof (buf), insn, suffix);
|
||||
return buf;
|
||||
}
|
||||
[(set_attr "type" "sselog")
|
||||
(set_attr "prefix" "vex")
|
||||
[(set_attr "isa" "noavx,avx")
|
||||
(set_attr "type" "sselog")
|
||||
(set_attr "prefix" "orig,vex")
|
||||
(set_attr "mode" "<ssevecmode>")])
|
||||
|
||||
(define_insn "*<code><mode>3"
|
||||
[(set (match_operand:MODEF 0 "register_operand" "=x")
|
||||
[(set (match_operand:MODEF 0 "register_operand" "=x,x")
|
||||
(any_logic:MODEF
|
||||
(match_operand:MODEF 1 "register_operand" "0")
|
||||
(match_operand:MODEF 2 "register_operand" "x")))]
|
||||
(match_operand:MODEF 1 "register_operand" "%0,x")
|
||||
(match_operand:MODEF 2 "register_operand" "x,x")))]
|
||||
"SSE_FLOAT_MODE_P (<MODE>mode)"
|
||||
{
|
||||
if (TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL)
|
||||
return "<logic>ps\t{%2, %0|%0, %2}";
|
||||
else
|
||||
return "<logic>p<ssemodefsuffix>\t{%2, %0|%0, %2}";
|
||||
static char buf[32];
|
||||
const char *insn;
|
||||
const char *suffix
|
||||
= TARGET_SSE_PACKED_SINGLE_INSN_OPTIMAL ? "s" : "<ssemodefsuffix>";
|
||||
|
||||
switch (which_alternative)
|
||||
{
|
||||
case 0:
|
||||
insn = "<logic>p%s\t{%%2, %%0|%%0, %%2}";
|
||||
break;
|
||||
case 1:
|
||||
insn = "v<logic>p%s\t{%%2, %%1, %%0|%%0, %%1, %%2}";
|
||||
break;
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
||||
snprintf (buf, sizeof (buf), insn, suffix);
|
||||
return buf;
|
||||
}
|
||||
[(set_attr "type" "sselog")
|
||||
[(set_attr "isa" "noavx,avx")
|
||||
(set_attr "type" "sselog")
|
||||
(set_attr "prefix" "orig,vex")
|
||||
(set_attr "mode" "<ssevecmode>")])
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
@ -1919,62 +1924,46 @@
|
|||
(set_attr "prefix_rep" "0")
|
||||
(set_attr "mode" "SF")])
|
||||
|
||||
(define_insn "*avx_cvtsi2ss"
|
||||
[(set (match_operand:V4SF 0 "register_operand" "=x")
|
||||
(vec_merge:V4SF
|
||||
(vec_duplicate:V4SF
|
||||
(float:SF (match_operand:SI 2 "nonimmediate_operand" "rm")))
|
||||
(match_operand:V4SF 1 "register_operand" "x")
|
||||
(const_int 1)))]
|
||||
"TARGET_AVX"
|
||||
"vcvtsi2ss\t{%2, %1, %0|%0, %1, %2}"
|
||||
[(set_attr "type" "sseicvt")
|
||||
(set_attr "prefix" "vex")
|
||||
(set_attr "mode" "SF")])
|
||||
|
||||
(define_insn "sse_cvtsi2ss"
|
||||
[(set (match_operand:V4SF 0 "register_operand" "=x,x")
|
||||
[(set (match_operand:V4SF 0 "register_operand" "=x,x,x")
|
||||
(vec_merge:V4SF
|
||||
(vec_duplicate:V4SF
|
||||
(float:SF (match_operand:SI 2 "nonimmediate_operand" "r,m")))
|
||||
(match_operand:V4SF 1 "register_operand" "0,0")
|
||||
(float:SF (match_operand:SI 2 "nonimmediate_operand" "r,m,rm")))
|
||||
(match_operand:V4SF 1 "register_operand" "0,0,x")
|
||||
(const_int 1)))]
|
||||
"TARGET_SSE"
|
||||
"cvtsi2ss\t{%2, %0|%0, %2}"
|
||||
[(set_attr "type" "sseicvt")
|
||||
(set_attr "athlon_decode" "vector,double")
|
||||
(set_attr "amdfam10_decode" "vector,double")
|
||||
(set_attr "bdver1_decode" "double,direct")
|
||||
(set_attr "mode" "SF")])
|
||||
|
||||
(define_insn "*avx_cvtsi2ssq"
|
||||
[(set (match_operand:V4SF 0 "register_operand" "=x")
|
||||
(vec_merge:V4SF
|
||||
(vec_duplicate:V4SF
|
||||
(float:SF (match_operand:DI 2 "nonimmediate_operand" "rm")))
|
||||
(match_operand:V4SF 1 "register_operand" "x")
|
||||
(const_int 1)))]
|
||||
"TARGET_AVX && TARGET_64BIT"
|
||||
"vcvtsi2ssq\t{%2, %1, %0|%0, %1, %2}"
|
||||
[(set_attr "type" "sseicvt")
|
||||
(set_attr "length_vex" "4")
|
||||
(set_attr "prefix" "vex")
|
||||
"@
|
||||
cvtsi2ss\t{%2, %0|%0, %2}
|
||||
cvtsi2ss\t{%2, %0|%0, %2}
|
||||
vcvtsi2ss\t{%2, %1, %0|%0, %1, %2}"
|
||||
[(set_attr "isa" "noavx,noavx,avx")
|
||||
(set_attr "type" "sseicvt")
|
||||
(set_attr "athlon_decode" "vector,double,*")
|
||||
(set_attr "amdfam10_decode" "vector,double,*")
|
||||
(set_attr "bdver1_decode" "double,direct,*")
|
||||
(set_attr "prefix" "orig,orig,vex")
|
||||
(set_attr "mode" "SF")])
|
||||
|
||||
(define_insn "sse_cvtsi2ssq"
|
||||
[(set (match_operand:V4SF 0 "register_operand" "=x,x")
|
||||
[(set (match_operand:V4SF 0 "register_operand" "=x,x,x")
|
||||
(vec_merge:V4SF
|
||||
(vec_duplicate:V4SF
|
||||
(float:SF (match_operand:DI 2 "nonimmediate_operand" "r,rm")))
|
||||
(match_operand:V4SF 1 "register_operand" "0,0")
|
||||
(float:SF (match_operand:DI 2 "nonimmediate_operand" "r,m,rm")))
|
||||
(match_operand:V4SF 1 "register_operand" "0,0,x")
|
||||
(const_int 1)))]
|
||||
"TARGET_SSE && TARGET_64BIT"
|
||||
"cvtsi2ssq\t{%2, %0|%0, %2}"
|
||||
[(set_attr "type" "sseicvt")
|
||||
(set_attr "prefix_rex" "1")
|
||||
(set_attr "athlon_decode" "vector,double")
|
||||
(set_attr "amdfam10_decode" "vector,double")
|
||||
(set_attr "bdver1_decode" "double,direct")
|
||||
"@
|
||||
cvtsi2ssq\t{%2, %0|%0, %2}
|
||||
cvtsi2ssq\t{%2, %0|%0, %2}
|
||||
vcvtsi2ssq\t{%2, %1, %0|%0, %1, %2}"
|
||||
[(set_attr "isa" "noavx,noavx,avx")
|
||||
(set_attr "type" "sseicvt")
|
||||
(set_attr "athlon_decode" "vector,double,*")
|
||||
(set_attr "amdfam10_decode" "vector,double,*")
|
||||
(set_attr "bdver1_decode" "double,direct,*")
|
||||
(set_attr "length_vex" "*,*,4")
|
||||
(set_attr "prefix_rex" "1,1,*")
|
||||
(set_attr "prefix" "orig,orig,vex")
|
||||
(set_attr "mode" "SF")])
|
||||
|
||||
(define_insn "sse_cvtss2si"
|
||||
|
@ -2069,22 +2058,22 @@
|
|||
(set_attr "prefix" "maybe_vex")
|
||||
(set_attr "mode" "DI")])
|
||||
|
||||
(define_insn "avx_cvtdq2ps<avxmodesuffix>"
|
||||
[(set (match_operand:AVXMODEDCVTDQ2PS 0 "register_operand" "=x")
|
||||
(float:AVXMODEDCVTDQ2PS
|
||||
(match_operand:<avxcvtvecmode> 1 "nonimmediate_operand" "xm")))]
|
||||
(define_insn "avx_cvtdq2ps256"
|
||||
[(set (match_operand:V8SF 0 "register_operand" "=x")
|
||||
(float:V8SF (match_operand:V8SI 1 "nonimmediate_operand" "xm")))]
|
||||
"TARGET_AVX"
|
||||
"vcvtdq2ps\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "ssecvt")
|
||||
(set_attr "prefix" "vex")
|
||||
(set_attr "mode" "<avxvecmode>")])
|
||||
(set_attr "mode" "V8SF")])
|
||||
|
||||
(define_insn "sse2_cvtdq2ps"
|
||||
[(set (match_operand:V4SF 0 "register_operand" "=x")
|
||||
(float:V4SF (match_operand:V4SI 1 "nonimmediate_operand" "xm")))]
|
||||
"TARGET_SSE2"
|
||||
"cvtdq2ps\t{%1, %0|%0, %1}"
|
||||
"%vcvtdq2ps\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "ssecvt")
|
||||
(set_attr "prefix" "maybe_vex")
|
||||
(set_attr "mode" "V4SF")])
|
||||
|
||||
(define_expand "sse2_cvtudq2ps"
|
||||
|
@ -2113,45 +2102,58 @@
|
|||
operands[i] = gen_reg_rtx (V4SFmode);
|
||||
})
|
||||
|
||||
(define_insn "avx_cvtps2dq<avxmodesuffix>"
|
||||
[(set (match_operand:AVXMODEDCVTPS2DQ 0 "register_operand" "=x")
|
||||
(unspec:AVXMODEDCVTPS2DQ
|
||||
[(match_operand:<avxcvtvecmode> 1 "nonimmediate_operand" "xm")]
|
||||
UNSPEC_FIX_NOTRUNC))]
|
||||
(define_insn "avx_cvtps2dq256"
|
||||
[(set (match_operand:V8SI 0 "register_operand" "=x")
|
||||
(unspec:V8SI [(match_operand:V8SF 1 "nonimmediate_operand" "xm")]
|
||||
UNSPEC_FIX_NOTRUNC))]
|
||||
"TARGET_AVX"
|
||||
"vcvtps2dq\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "ssecvt")
|
||||
(set_attr "prefix" "vex")
|
||||
(set_attr "mode" "<avxvecmode>")])
|
||||
(set_attr "mode" "OI")])
|
||||
|
||||
(define_insn "sse2_cvtps2dq"
|
||||
[(set (match_operand:V4SI 0 "register_operand" "=x")
|
||||
(unspec:V4SI [(match_operand:V4SF 1 "nonimmediate_operand" "xm")]
|
||||
UNSPEC_FIX_NOTRUNC))]
|
||||
"TARGET_SSE2"
|
||||
"cvtps2dq\t{%1, %0|%0, %1}"
|
||||
"%vcvtps2dq\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "ssecvt")
|
||||
(set_attr "prefix_data16" "1")
|
||||
(set (attr "prefix_data16")
|
||||
(if_then_else
|
||||
(ne (symbol_ref "TARGET_AVX") (const_int 0))
|
||||
(const_string "*")
|
||||
(const_string "1")))
|
||||
(set_attr "prefix" "maybe_vex")
|
||||
(set_attr "mode" "TI")])
|
||||
|
||||
(define_insn "avx_cvttps2dq<avxmodesuffix>"
|
||||
[(set (match_operand:AVXMODEDCVTPS2DQ 0 "register_operand" "=x")
|
||||
(fix:AVXMODEDCVTPS2DQ
|
||||
(match_operand:<avxcvtvecmode> 1 "nonimmediate_operand" "xm")))]
|
||||
(define_insn "avx_cvttps2dq256"
|
||||
[(set (match_operand:V8SI 0 "register_operand" "=x")
|
||||
(fix:V8SI (match_operand:V8SF 1 "nonimmediate_operand" "xm")))]
|
||||
"TARGET_AVX"
|
||||
"vcvttps2dq\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "ssecvt")
|
||||
(set_attr "prefix" "vex")
|
||||
(set_attr "mode" "<avxvecmode>")])
|
||||
(set_attr "mode" "OI")])
|
||||
|
||||
(define_insn "sse2_cvttps2dq"
|
||||
[(set (match_operand:V4SI 0 "register_operand" "=x")
|
||||
(fix:V4SI (match_operand:V4SF 1 "nonimmediate_operand" "xm")))]
|
||||
"TARGET_SSE2"
|
||||
"cvttps2dq\t{%1, %0|%0, %1}"
|
||||
"%vcvttps2dq\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "ssecvt")
|
||||
(set_attr "prefix_rep" "1")
|
||||
(set (attr "prefix_rep")
|
||||
(if_then_else
|
||||
(ne (symbol_ref "TARGET_AVX") (const_int 0))
|
||||
(const_string "*")
|
||||
(const_string "1")))
|
||||
(set (attr "prefix_data16")
|
||||
(if_then_else
|
||||
(ne (symbol_ref "TARGET_AVX") (const_int 0))
|
||||
(const_string "*")
|
||||
(const_string "0")))
|
||||
(set_attr "prefix_data16" "0")
|
||||
(set_attr "prefix" "maybe_vex")
|
||||
(set_attr "mode" "TI")])
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
@ -2178,9 +2180,9 @@
|
|||
"cvtpd2pi\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "ssecvt")
|
||||
(set_attr "unit" "mmx")
|
||||
(set_attr "bdver1_decode" "double")
|
||||
(set_attr "prefix_data16" "1")
|
||||
(set_attr "mode" "DI")
|
||||
(set_attr "bdver1_decode" "double")])
|
||||
(set_attr "mode" "DI")])
|
||||
|
||||
(define_insn "sse2_cvttpd2pi"
|
||||
[(set (match_operand:V2SI 0 "register_operand" "=y")
|
||||
|
@ -2189,67 +2191,51 @@
|
|||
"cvttpd2pi\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "ssecvt")
|
||||
(set_attr "unit" "mmx")
|
||||
(set_attr "bdver1_decode" "double")
|
||||
(set_attr "prefix_data16" "1")
|
||||
(set_attr "mode" "TI")
|
||||
(set_attr "bdver1_decode" "double")])
|
||||
|
||||
(define_insn "*avx_cvtsi2sd"
|
||||
[(set (match_operand:V2DF 0 "register_operand" "=x")
|
||||
(vec_merge:V2DF
|
||||
(vec_duplicate:V2DF
|
||||
(float:DF (match_operand:SI 2 "nonimmediate_operand" "rm")))
|
||||
(match_operand:V2DF 1 "register_operand" "x")
|
||||
(const_int 1)))]
|
||||
"TARGET_AVX"
|
||||
"vcvtsi2sd\t{%2, %1, %0|%0, %1, %2}"
|
||||
[(set_attr "type" "sseicvt")
|
||||
(set_attr "prefix" "vex")
|
||||
(set_attr "mode" "DF")])
|
||||
(set_attr "mode" "TI")])
|
||||
|
||||
(define_insn "sse2_cvtsi2sd"
|
||||
[(set (match_operand:V2DF 0 "register_operand" "=x,x")
|
||||
[(set (match_operand:V2DF 0 "register_operand" "=x,x,x")
|
||||
(vec_merge:V2DF
|
||||
(vec_duplicate:V2DF
|
||||
(float:DF (match_operand:SI 2 "nonimmediate_operand" "r,m")))
|
||||
(match_operand:V2DF 1 "register_operand" "0,0")
|
||||
(float:DF (match_operand:SI 2 "nonimmediate_operand" "r,m,rm")))
|
||||
(match_operand:V2DF 1 "register_operand" "0,0,x")
|
||||
(const_int 1)))]
|
||||
"TARGET_SSE2"
|
||||
"cvtsi2sd\t{%2, %0|%0, %2}"
|
||||
[(set_attr "type" "sseicvt")
|
||||
(set_attr "mode" "DF")
|
||||
(set_attr "athlon_decode" "double,direct")
|
||||
(set_attr "amdfam10_decode" "vector,double")
|
||||
(set_attr "bdver1_decode" "double,direct")])
|
||||
|
||||
(define_insn "*avx_cvtsi2sdq"
|
||||
[(set (match_operand:V2DF 0 "register_operand" "=x")
|
||||
(vec_merge:V2DF
|
||||
(vec_duplicate:V2DF
|
||||
(float:DF (match_operand:DI 2 "nonimmediate_operand" "rm")))
|
||||
(match_operand:V2DF 1 "register_operand" "x")
|
||||
(const_int 1)))]
|
||||
"TARGET_AVX && TARGET_64BIT"
|
||||
"vcvtsi2sdq\t{%2, %1, %0|%0, %1, %2}"
|
||||
[(set_attr "type" "sseicvt")
|
||||
(set_attr "length_vex" "4")
|
||||
(set_attr "prefix" "vex")
|
||||
"@
|
||||
cvtsi2sd\t{%2, %0|%0, %2}
|
||||
cvtsi2sd\t{%2, %0|%0, %2}
|
||||
vcvtsi2sd\t{%2, %1, %0|%0, %1, %2}"
|
||||
[(set_attr "isa" "noavx,noavx,avx")
|
||||
(set_attr "type" "sseicvt")
|
||||
(set_attr "athlon_decode" "double,direct,*")
|
||||
(set_attr "amdfam10_decode" "vector,double,*")
|
||||
(set_attr "bdver1_decode" "double,direct,*")
|
||||
(set_attr "prefix" "orig,orig,vex")
|
||||
(set_attr "mode" "DF")])
|
||||
|
||||
(define_insn "sse2_cvtsi2sdq"
|
||||
[(set (match_operand:V2DF 0 "register_operand" "=x,x")
|
||||
[(set (match_operand:V2DF 0 "register_operand" "=x,x,x")
|
||||
(vec_merge:V2DF
|
||||
(vec_duplicate:V2DF
|
||||
(float:DF (match_operand:DI 2 "nonimmediate_operand" "r,m")))
|
||||
(match_operand:V2DF 1 "register_operand" "0,0")
|
||||
(float:DF (match_operand:DI 2 "nonimmediate_operand" "r,m,rm")))
|
||||
(match_operand:V2DF 1 "register_operand" "0,0,x")
|
||||
(const_int 1)))]
|
||||
"TARGET_SSE2 && TARGET_64BIT"
|
||||
"cvtsi2sdq\t{%2, %0|%0, %2}"
|
||||
[(set_attr "type" "sseicvt")
|
||||
(set_attr "prefix_rex" "1")
|
||||
(set_attr "mode" "DF")
|
||||
(set_attr "athlon_decode" "double,direct")
|
||||
(set_attr "amdfam10_decode" "vector,double")
|
||||
(set_attr "bdver1_decode" "double,direct")])
|
||||
"@
|
||||
cvtsi2sdq\t{%2, %0|%0, %2}
|
||||
cvtsi2sdq\t{%2, %0|%0, %2}
|
||||
vcvtsi2sdq\t{%2, %1, %0|%0, %1, %2}"
|
||||
[(set_attr "isa" "noavx,noavx,avx")
|
||||
(set_attr "type" "sseicvt")
|
||||
(set_attr "athlon_decode" "double,direct,*")
|
||||
(set_attr "amdfam10_decode" "vector,double,*")
|
||||
(set_attr "bdver1_decode" "double,direct,*")
|
||||
(set_attr "length_vex" "*,*,4")
|
||||
(set_attr "prefix_rex" "1,1,*")
|
||||
(set_attr "prefix" "orig,orig,vex")
|
||||
(set_attr "mode" "DF")])
|
||||
|
||||
(define_insn "sse2_cvtsd2si"
|
||||
[(set (match_operand:SI 0 "register_operand" "=r,r")
|
||||
|
@ -2289,7 +2275,7 @@
|
|||
(parallel [(const_int 0)]))]
|
||||
UNSPEC_FIX_NOTRUNC))]
|
||||
"TARGET_SSE2 && TARGET_64BIT"
|
||||
"%vcvtsd2siq\t{%1, %0|%0, %1}"
|
||||
"%vcvtsd2si{q}\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "sseicvt")
|
||||
(set_attr "athlon_decode" "double,vector")
|
||||
(set_attr "bdver1_decode" "double,double")
|
||||
|
@ -2302,7 +2288,7 @@
|
|||
(unspec:DI [(match_operand:DF 1 "nonimmediate_operand" "x,m")]
|
||||
UNSPEC_FIX_NOTRUNC))]
|
||||
"TARGET_SSE2 && TARGET_64BIT"
|
||||
"%vcvtsd2siq\t{%1, %0|%0, %1}"
|
||||
"%vcvtsd2si{q}\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "sseicvt")
|
||||
(set_attr "athlon_decode" "double,vector")
|
||||
(set_attr "amdfam10_decode" "double,double")
|
||||
|
@ -2320,12 +2306,12 @@
|
|||
"TARGET_SSE2"
|
||||
"%vcvttsd2si\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "sseicvt")
|
||||
(set_attr "prefix_rep" "1")
|
||||
(set_attr "prefix" "maybe_vex")
|
||||
(set_attr "mode" "SI")
|
||||
(set_attr "athlon_decode" "double,vector")
|
||||
(set_attr "amdfam10_decode" "double,double")
|
||||
(set_attr "bdver1_decode" "double,double")])
|
||||
(set_attr "bdver1_decode" "double,double")
|
||||
(set_attr "prefix_rep" "1")
|
||||
(set_attr "prefix" "maybe_vex")
|
||||
(set_attr "mode" "SI")])
|
||||
|
||||
(define_insn "sse2_cvttsd2siq"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r,r")
|
||||
|
@ -2334,14 +2320,14 @@
|
|||
(match_operand:V2DF 1 "nonimmediate_operand" "x,m")
|
||||
(parallel [(const_int 0)]))))]
|
||||
"TARGET_SSE2 && TARGET_64BIT"
|
||||
"%vcvttsd2siq\t{%1, %0|%0, %1}"
|
||||
"%vcvttsd2si{q}\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "sseicvt")
|
||||
(set_attr "prefix_rep" "1")
|
||||
(set_attr "prefix" "maybe_vex")
|
||||
(set_attr "mode" "DI")
|
||||
(set_attr "athlon_decode" "double,vector")
|
||||
(set_attr "amdfam10_decode" "double,double")
|
||||
(set_attr "bdver1_decode" "double,double")])
|
||||
(set_attr "bdver1_decode" "double,double")
|
||||
(set_attr "prefix_rep" "1")
|
||||
(set_attr "prefix" "maybe_vex")
|
||||
(set_attr "mode" "DI")])
|
||||
|
||||
(define_insn "avx_cvtdq2pd256"
|
||||
[(set (match_operand:V4DF 0 "register_operand" "=x")
|
||||
|
@ -2357,7 +2343,8 @@
|
|||
(float:V4DF
|
||||
(vec_select:V4SI
|
||||
(match_operand:V8SI 1 "nonimmediate_operand" "xm")
|
||||
(parallel [(const_int 0) (const_int 1) (const_int 2) (const_int 3)]))))]
|
||||
(parallel [(const_int 0) (const_int 1)
|
||||
(const_int 2) (const_int 3)]))))]
|
||||
"TARGET_AVX"
|
||||
"vcvtdq2pd\t{%x1, %0|%0, %x1}"
|
||||
[(set_attr "type" "ssecvt")
|
||||
|
@ -2402,8 +2389,12 @@
|
|||
UNSPEC_FIX_NOTRUNC)
|
||||
(match_operand:V2SI 2 "const0_operand" "")))]
|
||||
"TARGET_SSE2"
|
||||
"* return TARGET_AVX ? \"vcvtpd2dq{x}\t{%1, %0|%0, %1}\"
|
||||
: \"cvtpd2dq\t{%1, %0|%0, %1}\";"
|
||||
{
|
||||
if (TARGET_AVX)
|
||||
return "vcvtpd2dq{x}\t{%1, %0|%0, %1}";
|
||||
else
|
||||
return "cvtpd2dq\t{%1, %0|%0, %1}";
|
||||
}
|
||||
[(set_attr "type" "ssecvt")
|
||||
(set_attr "prefix_rep" "1")
|
||||
(set_attr "prefix_data16" "0")
|
||||
|
@ -2436,75 +2427,60 @@
|
|||
(fix:V2SI (match_operand:V2DF 1 "nonimmediate_operand" "xm"))
|
||||
(match_operand:V2SI 2 "const0_operand" "")))]
|
||||
"TARGET_SSE2"
|
||||
"* return TARGET_AVX ? \"vcvttpd2dq{x}\t{%1, %0|%0, %1}\"
|
||||
: \"cvttpd2dq\t{%1, %0|%0, %1}\";"
|
||||
{
|
||||
if (TARGET_AVX)
|
||||
return "vcvttpd2dq{x}\t{%1, %0|%0, %1}";
|
||||
else
|
||||
return "cvttpd2dq\t{%1, %0|%0, %1}";
|
||||
}
|
||||
[(set_attr "type" "ssecvt")
|
||||
(set_attr "prefix" "maybe_vex")
|
||||
(set_attr "mode" "TI")
|
||||
(set_attr "amdfam10_decode" "double")
|
||||
(set_attr "athlon_decode" "vector")
|
||||
(set_attr "bdver1_decode" "double")])
|
||||
|
||||
(define_insn "*avx_cvtsd2ss"
|
||||
[(set (match_operand:V4SF 0 "register_operand" "=x")
|
||||
(vec_merge:V4SF
|
||||
(vec_duplicate:V4SF
|
||||
(float_truncate:V2SF
|
||||
(match_operand:V2DF 2 "nonimmediate_operand" "xm")))
|
||||
(match_operand:V4SF 1 "register_operand" "x")
|
||||
(const_int 1)))]
|
||||
"TARGET_AVX"
|
||||
"vcvtsd2ss\t{%2, %1, %0|%0, %1, %2}"
|
||||
[(set_attr "type" "ssecvt")
|
||||
(set_attr "prefix" "vex")
|
||||
(set_attr "mode" "SF")])
|
||||
(set_attr "bdver1_decode" "double")
|
||||
(set_attr "prefix" "maybe_vex")
|
||||
(set_attr "mode" "TI")])
|
||||
|
||||
(define_insn "sse2_cvtsd2ss"
|
||||
[(set (match_operand:V4SF 0 "register_operand" "=x,x")
|
||||
[(set (match_operand:V4SF 0 "register_operand" "=x,x,x")
|
||||
(vec_merge:V4SF
|
||||
(vec_duplicate:V4SF
|
||||
(float_truncate:V2SF
|
||||
(match_operand:V2DF 2 "nonimmediate_operand" "x,m")))
|
||||
(match_operand:V4SF 1 "register_operand" "0,0")
|
||||
(match_operand:V2DF 2 "nonimmediate_operand" "x,m,xm")))
|
||||
(match_operand:V4SF 1 "register_operand" "0,0,x")
|
||||
(const_int 1)))]
|
||||
"TARGET_SSE2"
|
||||
"cvtsd2ss\t{%2, %0|%0, %2}"
|
||||
[(set_attr "type" "ssecvt")
|
||||
(set_attr "athlon_decode" "vector,double")
|
||||
(set_attr "amdfam10_decode" "vector,double")
|
||||
(set_attr "bdver1_decode" "direct,direct")
|
||||
"@
|
||||
cvtsd2ss\t{%2, %0|%0, %2}
|
||||
cvtsd2ss\t{%2, %0|%0, %2}
|
||||
vcvtsd2ss\t{%2, %1, %0|%0, %1, %2}"
|
||||
[(set_attr "isa" "noavx,noavx,avx")
|
||||
(set_attr "type" "ssecvt")
|
||||
(set_attr "athlon_decode" "vector,double,*")
|
||||
(set_attr "amdfam10_decode" "vector,double,*")
|
||||
(set_attr "bdver1_decode" "direct,direct,*")
|
||||
(set_attr "prefix" "orig,orig,vex")
|
||||
(set_attr "mode" "SF")])
|
||||
|
||||
(define_insn "*avx_cvtss2sd"
|
||||
[(set (match_operand:V2DF 0 "register_operand" "=x")
|
||||
(vec_merge:V2DF
|
||||
(float_extend:V2DF
|
||||
(vec_select:V2SF
|
||||
(match_operand:V4SF 2 "nonimmediate_operand" "xm")
|
||||
(parallel [(const_int 0) (const_int 1)])))
|
||||
(match_operand:V2DF 1 "register_operand" "x")
|
||||
(const_int 1)))]
|
||||
"TARGET_AVX"
|
||||
"vcvtss2sd\t{%2, %1, %0|%0, %1, %2}"
|
||||
[(set_attr "type" "ssecvt")
|
||||
(set_attr "prefix" "vex")
|
||||
(set_attr "mode" "DF")])
|
||||
|
||||
(define_insn "sse2_cvtss2sd"
|
||||
[(set (match_operand:V2DF 0 "register_operand" "=x,x")
|
||||
[(set (match_operand:V2DF 0 "register_operand" "=x,x,x")
|
||||
(vec_merge:V2DF
|
||||
(float_extend:V2DF
|
||||
(vec_select:V2SF
|
||||
(match_operand:V4SF 2 "nonimmediate_operand" "x,m")
|
||||
(match_operand:V4SF 2 "nonimmediate_operand" "x,m,xm")
|
||||
(parallel [(const_int 0) (const_int 1)])))
|
||||
(match_operand:V2DF 1 "register_operand" "0,0")
|
||||
(match_operand:V2DF 1 "register_operand" "0,0,x")
|
||||
(const_int 1)))]
|
||||
"TARGET_SSE2"
|
||||
"cvtss2sd\t{%2, %0|%0, %2}"
|
||||
[(set_attr "type" "ssecvt")
|
||||
(set_attr "amdfam10_decode" "vector,double")
|
||||
(set_attr "athlon_decode" "direct,direct")
|
||||
(set_attr "bdver1_decode" "direct,direct")
|
||||
"@
|
||||
cvtss2sd\t{%2, %0|%0, %2}
|
||||
cvtss2sd\t{%2, %0|%0, %2}
|
||||
vcvtss2sd\t{%2, %1, %0|%0, %1, %2}"
|
||||
[(set_attr "isa" "noavx,noavx,avx")
|
||||
(set_attr "type" "ssecvt")
|
||||
(set_attr "amdfam10_decode" "vector,double,*")
|
||||
(set_attr "athlon_decode" "direct,direct,*")
|
||||
(set_attr "bdver1_decode" "direct,direct,*")
|
||||
(set_attr "prefix" "orig,orig,vex")
|
||||
(set_attr "mode" "DF")])
|
||||
|
||||
(define_insn "avx_cvtpd2ps256"
|
||||
|
@ -2533,15 +2509,19 @@
|
|||
(match_operand:V2DF 1 "nonimmediate_operand" "xm"))
|
||||
(match_operand:V2SF 2 "const0_operand" "")))]
|
||||
"TARGET_SSE2"
|
||||
"* return TARGET_AVX ? \"vcvtpd2ps{x}\t{%1, %0|%0, %1}\"
|
||||
: \"cvtpd2ps\t{%1, %0|%0, %1}\";"
|
||||
{
|
||||
if (TARGET_AVX)
|
||||
return "vcvtpd2ps{x}\t{%1, %0|%0, %1}";
|
||||
else
|
||||
return "cvtpd2ps\t{%1, %0|%0, %1}";
|
||||
}
|
||||
[(set_attr "type" "ssecvt")
|
||||
(set_attr "prefix_data16" "1")
|
||||
(set_attr "prefix" "maybe_vex")
|
||||
(set_attr "mode" "V4SF")
|
||||
(set_attr "amdfam10_decode" "double")
|
||||
(set_attr "athlon_decode" "vector")
|
||||
(set_attr "bdver1_decode" "double")])
|
||||
(set_attr "bdver1_decode" "double")
|
||||
(set_attr "prefix_data16" "1")
|
||||
(set_attr "prefix" "maybe_vex")
|
||||
(set_attr "mode" "V4SF")])
|
||||
|
||||
(define_insn "avx_cvtps2pd256"
|
||||
[(set (match_operand:V4DF 0 "register_operand" "=x")
|
||||
|
@ -2558,7 +2538,8 @@
|
|||
(float_extend:V4DF
|
||||
(vec_select:V4SF
|
||||
(match_operand:V8SF 1 "nonimmediate_operand" "xm")
|
||||
(parallel [(const_int 0) (const_int 1) (const_int 2) (const_int 3)]))))]
|
||||
(parallel [(const_int 0) (const_int 1)
|
||||
(const_int 2) (const_int 3)]))))]
|
||||
"TARGET_AVX"
|
||||
"vcvtps2pd\t{%x1, %0|%0, %x1}"
|
||||
[(set_attr "type" "ssecvt")
|
||||
|
@ -2574,12 +2555,12 @@
|
|||
"TARGET_SSE2"
|
||||
"%vcvtps2pd\t{%1, %0|%0, %1}"
|
||||
[(set_attr "type" "ssecvt")
|
||||
(set_attr "prefix" "maybe_vex")
|
||||
(set_attr "mode" "V2DF")
|
||||
(set_attr "prefix_data16" "0")
|
||||
(set_attr "amdfam10_decode" "direct")
|
||||
(set_attr "athlon_decode" "double")
|
||||
(set_attr "bdver1_decode" "double")])
|
||||
(set_attr "bdver1_decode" "double")
|
||||
(set_attr "prefix_data16" "0")
|
||||
(set_attr "prefix" "maybe_vex")
|
||||
(set_attr "mode" "V2DF")])
|
||||
|
||||
(define_expand "vec_unpacks_hi_v4sf"
|
||||
[(set (match_dup 2)
|
||||
|
@ -2587,10 +2568,8 @@
|
|||
(vec_concat:V8SF
|
||||
(match_dup 2)
|
||||
(match_operand:V4SF 1 "nonimmediate_operand" ""))
|
||||
(parallel [(const_int 6)
|
||||
(const_int 7)
|
||||
(const_int 2)
|
||||
(const_int 3)])))
|
||||
(parallel [(const_int 6) (const_int 7)
|
||||
(const_int 2) (const_int 3)])))
|
||||
(set (match_operand:V2DF 0 "register_operand" "")
|
||||
(float_extend:V2DF
|
||||
(vec_select:V2SF
|
||||
|
@ -2603,17 +2582,13 @@
|
|||
[(set (match_dup 2)
|
||||
(vec_select:V4SF
|
||||
(match_operand:V8SF 1 "nonimmediate_operand" "")
|
||||
(parallel [(const_int 4)
|
||||
(const_int 5)
|
||||
(const_int 6)
|
||||
(const_int 7)])))
|
||||
(parallel [(const_int 4) (const_int 5)
|
||||
(const_int 6) (const_int 7)])))
|
||||
(set (match_operand:V4DF 0 "register_operand" "")
|
||||
(float_extend:V4DF
|
||||
(match_dup 2)))]
|
||||
"TARGET_AVX"
|
||||
{
|
||||
operands[2] = gen_reg_rtx (V4SFmode);
|
||||
})
|
||||
"operands[2] = gen_reg_rtx (V4SFmode);")
|
||||
|
||||
(define_expand "vec_unpacks_lo_v4sf"
|
||||
[(set (match_operand:V2DF 0 "register_operand" "")
|
||||
|
@ -2628,7 +2603,8 @@
|
|||
(float_extend:V4DF
|
||||
(vec_select:V4SF
|
||||
(match_operand:V8SF 1 "nonimmediate_operand" "")
|
||||
(parallel [(const_int 0) (const_int 1) (const_int 2) (const_int 3)]))))]
|
||||
(parallel [(const_int 0) (const_int 1)
|
||||
(const_int 2) (const_int 3)]))))]
|
||||
"TARGET_AVX")
|
||||
|
||||
(define_expand "vec_unpacks_float_hi_v8hi"
|
||||
|
@ -2683,10 +2659,8 @@
|
|||
[(set (match_dup 2)
|
||||
(vec_select:V4SI
|
||||
(match_operand:V4SI 1 "nonimmediate_operand" "")
|
||||
(parallel [(const_int 2)
|
||||
(const_int 3)
|
||||
(const_int 2)
|
||||
(const_int 3)])))
|
||||
(parallel [(const_int 2) (const_int 3)
|
||||
(const_int 2) (const_int 3)])))
|
||||
(set (match_operand:V2DF 0 "register_operand" "")
|
||||
(float:V2DF
|
||||
(vec_select:V2SI
|
||||
|
@ -2707,10 +2681,8 @@
|
|||
[(set (match_dup 2)
|
||||
(vec_select:V4SI
|
||||
(match_operand:V8SI 1 "nonimmediate_operand" "")
|
||||
(parallel [(const_int 4)
|
||||
(const_int 5)
|
||||
(const_int 6)
|
||||
(const_int 7)])))
|
||||
(parallel [(const_int 4) (const_int 5)
|
||||
(const_int 6) (const_int 7)])))
|
||||
(set (match_operand:V4DF 0 "register_operand" "")
|
||||
(float:V4DF
|
||||
(match_dup 2)))]
|
||||
|
@ -2722,17 +2694,16 @@
|
|||
(float:V4DF
|
||||
(vec_select:V4SI
|
||||
(match_operand:V8SI 1 "nonimmediate_operand" "")
|
||||
(parallel [(const_int 0) (const_int 1) (const_int 2) (const_int 3)]))))]
|
||||
(parallel [(const_int 0) (const_int 1)
|
||||
(const_int 2) (const_int 3)]))))]
|
||||
"TARGET_AVX")
|
||||
|
||||
(define_expand "vec_unpacku_float_hi_v4si"
|
||||
[(set (match_dup 5)
|
||||
(vec_select:V4SI
|
||||
(match_operand:V4SI 1 "nonimmediate_operand" "")
|
||||
(parallel [(const_int 2)
|
||||
(const_int 3)
|
||||
(const_int 2)
|
||||
(const_int 3)])))
|
||||
(parallel [(const_int 2) (const_int 3)
|
||||
(const_int 2) (const_int 3)])))
|
||||
(set (match_dup 6)
|
||||
(float:V2DF
|
||||
(vec_select:V2SI
|
||||
|
|
Loading…
Add table
Reference in a new issue