i386.md (*movoi_internal_avx): Use standard_sse_constant_opcode for alternative 0.
* config/i386/i386.md (*movoi_internal_avx): Use standard_sse_constant_opcode for alternative 0. (*movti_internal_sse): Ditto. (*movti_internal_rex64): Use standard_sse_constant_opcode for alternative 2. (*movdi_internal_rex64): Use standard_sse_constant_opcode for sselog1 type moves. (*movsi_internal): Ditto. (*movdi_internal): Ditto. Add ssecvt type moves. From-SVN: r174417
This commit is contained in:
parent
5e7bb2b9b1
commit
491d8eed6f
2 changed files with 86 additions and 38 deletions
|
@ -1,3 +1,15 @@
|
|||
2011-05-29 Uros Bizjak <ubizjak@gmail.com>
|
||||
|
||||
* config/i386/i386.md (*movoi_internal_avx): Use
|
||||
standard_sse_constant_opcode for alternative 0.
|
||||
(*movti_internal_sse): Ditto.
|
||||
(*movti_internal_rex64): Use standard_sse_constant_opcode for
|
||||
alternative 2.
|
||||
(*movdi_internal_rex64): Use standard_sse_constant_opcode for
|
||||
sselog1 type moves.
|
||||
(*movsi_internal): Ditto.
|
||||
(*movdi_internal): Ditto. Add ssecvt type moves.
|
||||
|
||||
2011-05-29 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
PR target/48830
|
||||
|
@ -45,8 +57,8 @@
|
|||
(lto_output_location_bitpack): Update.
|
||||
(lto_output_builtin_tree): Update.
|
||||
* lto-streamer.h (struct output_block): Add obstack.
|
||||
(lto_output_string, lto_output_string_with_length): Remove declarations;
|
||||
functions are static now.
|
||||
(lto_output_string, lto_output_string_with_length): Remove
|
||||
declarations; functions are static now.
|
||||
|
||||
2011-05-28 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
|
@ -108,7 +120,7 @@
|
|||
(build_and_insert_call): New.
|
||||
(gimple_expand_builtin_pow): Add handling for pow(x,y) when y is
|
||||
0.5, 0.25, 0.75, 1./3., or 1./6.
|
||||
|
||||
|
||||
2011-05-27 Alexander Monakov <amonakov@ispras.ru>
|
||||
|
||||
* doc/contrib.texi: Update copyright years.
|
||||
|
@ -231,7 +243,7 @@
|
|||
len values.
|
||||
* lto-streamer-in.c (string_for_index): Break out from ...; offset
|
||||
values by 1.
|
||||
(input_string_internal): ... here;
|
||||
(input_string_internal): ... here;
|
||||
(input_string_cst, input_identifier, lto_input_string): Update handling
|
||||
of NULL strings.
|
||||
(lto_input_location_bitpack): New function
|
||||
|
@ -322,7 +334,7 @@
|
|||
2011-05-26 Hariharan Sandanagobalane <hariharan@picochip.com>
|
||||
|
||||
* config/picochip/picochip.md (cbranchhi4): No :CC for match_operator.
|
||||
The instruction is then expanded explicitly.
|
||||
The instruction is then expanded explicitly.
|
||||
(supported_compare): Callable instruction.
|
||||
(compare): Likewise.
|
||||
|
||||
|
|
|
@ -1855,7 +1855,7 @@
|
|||
switch (which_alternative)
|
||||
{
|
||||
case 0:
|
||||
return "vxorps\t%0, %0, %0";
|
||||
return standard_sse_constant_opcode (insn, operands[1]);
|
||||
case 1:
|
||||
case 2:
|
||||
if (misaligned_operand (operands[0], OImode)
|
||||
|
@ -1882,10 +1882,7 @@
|
|||
case 1:
|
||||
return "#";
|
||||
case 2:
|
||||
if (get_attr_mode (insn) == MODE_V4SF)
|
||||
return "%vxorps\t%0, %d0";
|
||||
else
|
||||
return "%vpxor\t%0, %d0";
|
||||
return standard_sse_constant_opcode (insn, operands[1]);
|
||||
case 3:
|
||||
case 4:
|
||||
/* TDmode values are passed as TImode on the stack. Moving them
|
||||
|
@ -1945,10 +1942,7 @@
|
|||
switch (which_alternative)
|
||||
{
|
||||
case 0:
|
||||
if (get_attr_mode (insn) == MODE_V4SF)
|
||||
return "%vxorps\t%0, %d0";
|
||||
else
|
||||
return "%vpxor\t%0, %d0";
|
||||
return standard_sse_constant_opcode (insn, operands[1]);
|
||||
case 1:
|
||||
case 2:
|
||||
/* TDmode values are passed as TImode on the stack. Moving them
|
||||
|
@ -2017,7 +2011,7 @@
|
|||
return "movq\t{%1, %0|%0, %1}";
|
||||
|
||||
case TYPE_SSELOG1:
|
||||
return "%vpxor\t%0, %d0";
|
||||
return standard_sse_constant_opcode (insn, operands[1]);
|
||||
|
||||
case TYPE_MMX:
|
||||
return "pxor\t%0, %0";
|
||||
|
@ -2065,8 +2059,14 @@
|
|||
(and (eq_attr "alternative" "2") (eq_attr "type" "imov"))
|
||||
(const_string "8")
|
||||
(const_string "*")))
|
||||
(set_attr "prefix_rex" "*,*,*,*,*,*,*,1,*,1,*,*,*,*,*,*,*,*,*")
|
||||
(set_attr "prefix_data16" "*,*,*,*,*,*,*,*,*,*,*,*,*,*,*,1,*,*,*")
|
||||
(set (attr "prefix_rex")
|
||||
(if_then_else (eq_attr "alternative" "7,9")
|
||||
(const_string "1")
|
||||
(const_string "*")))
|
||||
(set (attr "prefix_data16")
|
||||
(if_then_else (eq_attr "alternative" "15")
|
||||
(const_string "1")
|
||||
(const_string "*")))
|
||||
(set (attr "prefix")
|
||||
(if_then_else (eq_attr "alternative" "11,12,13,14,15,16")
|
||||
(const_string "maybe_vex")
|
||||
|
@ -2110,34 +2110,72 @@
|
|||
|
||||
(define_insn "*movdi_internal"
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand"
|
||||
"=r ,o ,*y,m*y,*y,*Y2,m ,*Y2,*Y2,*x,m ,*x,*x")
|
||||
"=r ,o ,*y,m*y,*y,*Y2,m ,*Y2,*Y2,*x,m ,*x,*x,?*Y2,?*Ym")
|
||||
(match_operand:DI 1 "general_operand"
|
||||
"riFo,riF,C ,*y ,m ,C ,*Y2,*Y2,m ,C ,*x,*x,m "))]
|
||||
"riFo,riF,C ,*y ,m ,C ,*Y2,*Y2,m ,C ,*x,*x,m ,*Ym ,*Y2"))]
|
||||
"!TARGET_64BIT && !(MEM_P (operands[0]) && MEM_P (operands[1]))"
|
||||
"@
|
||||
#
|
||||
#
|
||||
pxor\t%0, %0
|
||||
movq\t{%1, %0|%0, %1}
|
||||
movq\t{%1, %0|%0, %1}
|
||||
%vpxor\t%0, %d0
|
||||
%vmovq\t{%1, %0|%0, %1}
|
||||
%vmovdqa\t{%1, %0|%0, %1}
|
||||
%vmovq\t{%1, %0|%0, %1}
|
||||
xorps\t%0, %0
|
||||
movlps\t{%1, %0|%0, %1}
|
||||
movaps\t{%1, %0|%0, %1}
|
||||
movlps\t{%1, %0|%0, %1}"
|
||||
{
|
||||
switch (get_attr_type (insn))
|
||||
{
|
||||
case TYPE_SSECVT:
|
||||
if (SSE_REG_P (operands[0]))
|
||||
return "movq2dq\t{%1, %0|%0, %1}";
|
||||
else
|
||||
return "movdq2q\t{%1, %0|%0, %1}";
|
||||
|
||||
case TYPE_SSEMOV:
|
||||
switch (get_attr_mode (insn))
|
||||
{
|
||||
case MODE_TI:
|
||||
return "%vmovdqa\t{%1, %0|%0, %1}";
|
||||
case MODE_DI:
|
||||
return "%vmovq\t{%1, %0|%0, %1}";
|
||||
case MODE_V4SF:
|
||||
return "movaps\t{%1, %0|%0, %1}";
|
||||
case MODE_V2SF:
|
||||
return "movlps\t{%1, %0|%0, %1}";
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
||||
case TYPE_MMXMOV:
|
||||
return "movq\t{%1, %0|%0, %1}";
|
||||
|
||||
case TYPE_SSELOG1:
|
||||
return standard_sse_constant_opcode (insn, operands[1]);
|
||||
|
||||
case TYPE_MMX:
|
||||
return "pxor\t%0, %0";
|
||||
|
||||
case TYPE_MULTI:
|
||||
return "#";
|
||||
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
}
|
||||
[(set (attr "isa")
|
||||
(if_then_else (eq_attr "alternative" "9,10,11,12")
|
||||
(const_string "noavx")
|
||||
(const_string "base")))
|
||||
(set_attr "type" "*,*,mmx,mmxmov,mmxmov,sselog1,ssemov,ssemov,ssemov,sselog1,ssemov,ssemov,ssemov")
|
||||
(set (attr "type")
|
||||
(cond [(eq_attr "alternative" "0,1")
|
||||
(const_string "multi")
|
||||
(eq_attr "alternative" "2")
|
||||
(const_string "mmx")
|
||||
(eq_attr "alternative" "3,4")
|
||||
(const_string "mmxmov")
|
||||
(eq_attr "alternative" "5,9")
|
||||
(const_string "sselog1")
|
||||
(eq_attr "alternative" "13,14")
|
||||
(const_string "ssecvt")
|
||||
]
|
||||
(const_string "ssemov")))
|
||||
(set (attr "prefix")
|
||||
(if_then_else (eq_attr "alternative" "5,6,7,8")
|
||||
(const_string "maybe_vex")
|
||||
(const_string "orig")))
|
||||
(set_attr "mode" "DI,DI,DI,DI,DI,TI,DI,TI,DI,V4SF,V2SF,V4SF,V2SF")])
|
||||
(set_attr "mode" "DI,DI,DI,DI,DI,TI,DI,TI,DI,V4SF,V2SF,V4SF,V2SF,DI,DI")])
|
||||
|
||||
(define_split
|
||||
[(set (match_operand:DI 0 "nonimmediate_operand" "")
|
||||
|
@ -2158,9 +2196,7 @@
|
|||
switch (get_attr_type (insn))
|
||||
{
|
||||
case TYPE_SSELOG1:
|
||||
if (get_attr_mode (insn) == MODE_TI)
|
||||
return "%vpxor\t%0, %d0";
|
||||
return "%vxorps\t%0, %d0";
|
||||
return standard_sse_constant_opcode (insn, operands[1]);
|
||||
|
||||
case TYPE_SSEMOV:
|
||||
switch (get_attr_mode (insn))
|
||||
|
|
Loading…
Add table
Reference in a new issue