- emit_insn (gen_alignaddrsi_vis (gen_reg_rtx (SImode),
- force_reg (SImode, GEN_INT (7)),
- CONST0_RTX (SImode)));
- i = n_elts - 1;
- emit_insn (gen_faligndatav8qi_vis (target, locs[i], locs[i]));
- while (--i >= 0)
- emit_insn (gen_faligndatav8qi_vis (target, locs[i], target));
- }
-}
-
-/* Subroutine of sparc_expand_vector_init. Emit code to initialize TARGET to
- the N_ELTS values for individual fields contained in LOCS by means of VIS1
- instructions, among which N_UNIQUE are unique. MODE is TARGET's mode. */
-
-static void
-sparc_expand_vector_init_vis1 (rtx target, rtx *locs, int n_elts, int n_unique,
- enum machine_mode mode)
-{
- enum machine_mode full_mode = mode;
- rtx (*emitter)(rtx, rtx, rtx);
- int alignaddr_val, i;
- rtx tmp = target;
-
- if (n_unique == 1 && mode == V8QImode)
- {
- rtx t2, t2_low, t1;
-
- t1 = gen_reg_rtx (V4QImode);
- emit_move_insn (t1, gen_lowpart (V4QImode, locs[0]));
-
- t2 = gen_reg_rtx (V8QImode);
- t2_low = gen_lowpart (V4QImode, t2);
-
- /* xxxxxxAA --> xxxxxxxxxxxxAAAA
- xxxxAAAA --> xxxxxxxxAAAAAAAA
- AAAAAAAA --> AAAAAAAAAAAAAAAA */
- emit_insn (gen_fpmerge_vis (t2, t1, t1));
- emit_move_insn (t1, t2_low);
- emit_insn (gen_fpmerge_vis (t2, t1, t1));
- emit_move_insn (t1, t2_low);
- emit_insn (gen_fpmerge_vis (target, t1, t1));
- return;
- }
-
- switch (mode)
- {
- case V2HImode:
- full_mode = V4HImode;
- /* FALLTHRU */
- case V4HImode:
- emitter = gen_faligndatav4hi_vis;
- alignaddr_val = 6;
- break;
-
- case V4QImode:
- full_mode = V8QImode;
- /* FALLTHRU */
- case V8QImode:
- emitter = gen_faligndatav8qi_vis;
- alignaddr_val = 7;
- break;
-
- default:
- gcc_unreachable ();
- }
-
- if (full_mode != mode)
- tmp = gen_reg_rtx (full_mode);