OSDN Git Service
(root)
/
pf3gnuchains
/
gcc-fork.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
PR target/41082
[pf3gnuchains/gcc-fork.git]
/
gcc
/
config
/
rs6000
/
rs6000.c
diff --git
a/gcc/config/rs6000/rs6000.c
b/gcc/config/rs6000/rs6000.c
index
f63aaec
..
df7a428
100644
(file)
--- a/
gcc/config/rs6000/rs6000.c
+++ b/
gcc/config/rs6000/rs6000.c
@@
-5436,7
+5436,7
@@
rs6000_expand_vector_extract (rtx target, rtx vec, int elt)
{
enum machine_mode mode = GET_MODE (vec);
enum machine_mode inner_mode = GET_MODE_INNER (mode);
{
enum machine_mode mode = GET_MODE (vec);
enum machine_mode inner_mode = GET_MODE_INNER (mode);
- rtx mem
, x
;
+ rtx mem;
if (VECTOR_MEM_VSX_P (mode) && (mode == V2DFmode || mode == V2DImode))
{
if (VECTOR_MEM_VSX_P (mode) && (mode == V2DFmode || mode == V2DImode))
{
@@
-5449,17
+5449,11
@@
rs6000_expand_vector_extract (rtx target, rtx vec, int elt)
/* Allocate mode-sized buffer. */
mem = assign_stack_temp (mode, GET_MODE_SIZE (mode), 0);
/* Allocate mode-sized buffer. */
mem = assign_stack_temp (mode, GET_MODE_SIZE (mode), 0);
+ emit_move_insn (mem, vec);
+
/* Add offset to field within buffer matching vector element. */
/* Add offset to field within buffer matching vector element. */
- mem = adjust_address_nv (mem, mode, elt * GET_MODE_SIZE (inner_mode));
+ mem = adjust_address_nv (mem,
inner_
mode, elt * GET_MODE_SIZE (inner_mode));
- /* Store single field into mode-sized buffer. */
- x = gen_rtx_UNSPEC (VOIDmode,
- gen_rtvec (1, const0_rtx), UNSPEC_STVE);
- emit_insn (gen_rtx_PARALLEL (VOIDmode,
- gen_rtvec (2,
- gen_rtx_SET (VOIDmode,
- mem, vec),
- x)));
emit_move_insn (target, adjust_address_nv (mem, inner_mode, 0));
}
emit_move_insn (target, adjust_address_nv (mem, inner_mode, 0));
}
@@
-11114,6
+11108,7
@@
altivec_expand_stv_builtin (enum insn_code icode, tree exp)
rtx op2 = expand_normal (arg2);
rtx pat, addr;
enum machine_mode tmode = insn_data[icode].operand[0].mode;
rtx op2 = expand_normal (arg2);
rtx pat, addr;
enum machine_mode tmode = insn_data[icode].operand[0].mode;
+ enum machine_mode smode = insn_data[icode].operand[1].mode;
enum machine_mode mode1 = Pmode;
enum machine_mode mode2 = Pmode;
enum machine_mode mode1 = Pmode;
enum machine_mode mode2 = Pmode;
@@
-11123,8
+11118,8
@@
altivec_expand_stv_builtin (enum insn_code icode, tree exp)
|| arg2 == error_mark_node)
return const0_rtx;
|| arg2 == error_mark_node)
return const0_rtx;
- if (! (*insn_data[icode].operand[1].predicate) (op0,
t
mode))
- op0 = copy_to_mode_reg (
t
mode, op0);
+ if (! (*insn_data[icode].operand[1].predicate) (op0,
s
mode))
+ op0 = copy_to_mode_reg (
s
mode, op0);
op2 = copy_to_mode_reg (mode2, op2);
op2 = copy_to_mode_reg (mode2, op2);