Commit 734dfb47 by Uros Bizjak Committed by Uros Bizjak

i386.c (ix86_build_const_vector): Rewrite using loop with RTVEC_ELT accessor.

	* config/i386/i386.c (ix86_build_const_vector): Rewrite using loop
	with RTVEC_ELT accessor.

From-SVN: r178124
parent bbeb5beb
2011-08-26 Uros Bizjak <ubizjak@gmail.com> 2011-08-26 Uros Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (round<mode>2): New expander.
* config/i386/i386.c (enum ix86_builtins): Add
IX86_BUILTIN_ROUND{PS,PD}_AZ{,256}.
(struct builtin_description): Add __builtin_ia32_round{ps,pd}_az{,256}
descriptions.
(ix86_builtin_vectorized_function): Handle BUILT_IN_ROUND{,F} builtins.
(ix86_build_const_vector): Rewrite using loop with RTVEC_ELT accessor.
2011-08-26 Uros Bizjak <ubizjak@gmail.com>
PR middle-end/50083 PR middle-end/50083
* convert.c (convert_to_integer) <BUIT_IN_ROUND{,F,L}>: Convert * convert.c (convert_to_integer) <BUIT_IN_ROUND{,F,L}>: Convert
only when TARGET_C99_FUNCTIONS. only when TARGET_C99_FUNCTIONS.
......
...@@ -16512,52 +16512,29 @@ ix86_expand_convert_uns_sisf_sse (rtx target, rtx input) ...@@ -16512,52 +16512,29 @@ ix86_expand_convert_uns_sisf_sse (rtx target, rtx input)
rtx rtx
ix86_build_const_vector (enum machine_mode mode, bool vect, rtx value) ix86_build_const_vector (enum machine_mode mode, bool vect, rtx value)
{ {
int i, n_elt;
rtvec v; rtvec v;
enum machine_mode scalar_mode;
switch (mode) switch (mode)
{ {
case V4SImode: case V4SImode:
gcc_assert (vect);
v = gen_rtvec (4, value, value, value, value);
return gen_rtx_CONST_VECTOR (V4SImode, v);
case V2DImode: case V2DImode:
gcc_assert (vect); gcc_assert (vect);
v = gen_rtvec (2, value, value);
return gen_rtx_CONST_VECTOR (V2DImode, v);
case V8SFmode: case V8SFmode:
if (vect)
v = gen_rtvec (8, value, value, value, value,
value, value, value, value);
else
v = gen_rtvec (8, value, CONST0_RTX (SFmode),
CONST0_RTX (SFmode), CONST0_RTX (SFmode),
CONST0_RTX (SFmode), CONST0_RTX (SFmode),
CONST0_RTX (SFmode), CONST0_RTX (SFmode));
return gen_rtx_CONST_VECTOR (V8SFmode, v);
case V4SFmode: case V4SFmode:
if (vect)
v = gen_rtvec (4, value, value, value, value);
else
v = gen_rtvec (4, value, CONST0_RTX (SFmode),
CONST0_RTX (SFmode), CONST0_RTX (SFmode));
return gen_rtx_CONST_VECTOR (V4SFmode, v);
case V4DFmode: case V4DFmode:
if (vect)
v = gen_rtvec (4, value, value, value, value);
else
v = gen_rtvec (4, value, CONST0_RTX (DFmode),
CONST0_RTX (DFmode), CONST0_RTX (DFmode));
return gen_rtx_CONST_VECTOR (V4DFmode, v);
case V2DFmode: case V2DFmode:
if (vect) n_elt = GET_MODE_NUNITS (mode);
v = gen_rtvec (2, value, value); v = rtvec_alloc (n_elt);
else scalar_mode = GET_MODE_INNER (mode);
v = gen_rtvec (2, value, CONST0_RTX (DFmode));
return gen_rtx_CONST_VECTOR (V2DFmode, v); RTVEC_ELT (v, 0) = value;
for (i = 1; i < n_elt; ++i)
RTVEC_ELT (v, i) = vect ? value : CONST0_RTX (scalar_mode);
return gen_rtx_CONST_VECTOR (mode, v);
default: default:
gcc_unreachable (); gcc_unreachable ();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment