parent
315b2bef11
commit
0b2a73678b
|
@ -1,3 +1,27 @@
|
|||
2011-02-24 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* config/alpha/alpha.c (get_aligned_mem): Don't test WORDS_BIG_ENDIAN.
|
||||
(alpha_expand_unaligned_load): Likewise.
|
||||
(alpha_expand_unaligned_store): Likewise.
|
||||
(alpha_expand_unaligned_load_words): Likewise.
|
||||
(alpha_expand_unaligned_store_words): Likewise.
|
||||
(emit_insxl, alpha_split_compare_and_swap_12): Likewise.
|
||||
(alpha_split_lock_test_and_set_12): Likewise.
|
||||
(print_operand, alpha_fold_builtin_extxx): Likewise.
|
||||
(alpha_fold_builtin_insxx, alpha_fold_builtin_mskxx): Likewise.
|
||||
* config/alpha/alpha.md (bswapsi2, insv, extv, extzv): Likewise.
|
||||
(builtin_extwh, builtin_extlh, builtin_extql): Likewise.
|
||||
(unaligned_extendqidi_be, unaligned_extendhidi_be, extxl_be): Remove.
|
||||
(*extxl_1_be, *extql_2_be, extqh_be, extlh_be, extwh_be): Remove.
|
||||
(insbl_be, inswl_be, insll_be, insql_be, mskxl_be): Remove.
|
||||
(unaligned_loadqi_be, unaligned_loadhi_be): Remove.
|
||||
(unaligned_storeqi_be, unaligned_storehi_be): Remove.
|
||||
(extbl): Rename from builtin_extbl; don't test WORDS_BIG_ENDIAN.
|
||||
(extwl, extll, extql): Similarly.
|
||||
(inswh, inslh, insqh): Similarly.
|
||||
(mskbl, mskwl, mskll, mskql): Similarly.
|
||||
(mskwh, msklh, mskqh): Similarly.
|
||||
|
||||
2011-02-24 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* config/alpha/alpha.md (attribute isa): Add er, ner.
|
||||
|
|
|
@ -1453,10 +1453,7 @@ get_aligned_mem (rtx ref, rtx *paligned_mem, rtx *pbitnum)
|
|||
*paligned_mem = widen_memory_access (ref, SImode, -offset);
|
||||
|
||||
/* Convert the byte offset within the word to a bit offset. */
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
offset = 32 - (GET_MODE_BITSIZE (GET_MODE (ref)) + offset * 8);
|
||||
else
|
||||
offset *= 8;
|
||||
offset *= BITS_PER_UNIT;
|
||||
*pbitnum = GEN_INT (offset);
|
||||
}
|
||||
|
||||
|
@ -3295,8 +3292,6 @@ alpha_expand_unaligned_load (rtx tgt, rtx mem, HOST_WIDE_INT size,
|
|||
{
|
||||
meml = adjust_address (mem, QImode, ofs);
|
||||
memh = adjust_address (mem, QImode, ofs+1);
|
||||
if (BYTES_BIG_ENDIAN)
|
||||
tmp = meml, meml = memh, memh = tmp;
|
||||
extl = gen_reg_rtx (DImode);
|
||||
exth = gen_reg_rtx (DImode);
|
||||
emit_insn (gen_zero_extendqidi2 (extl, meml));
|
||||
|
@ -3348,23 +3343,12 @@ alpha_expand_unaligned_load (rtx tgt, rtx mem, HOST_WIDE_INT size,
|
|||
set_mem_alias_set (tmp, 0);
|
||||
emit_move_insn (memh, tmp);
|
||||
|
||||
if (WORDS_BIG_ENDIAN && sign && (size == 2 || size == 4))
|
||||
{
|
||||
emit_move_insn (addr, plus_constant (mema, -1));
|
||||
|
||||
emit_insn (gen_extqh_be (extl, meml, addr));
|
||||
emit_insn (gen_extxl_be (exth, memh, GEN_INT (64), addr));
|
||||
|
||||
addr = expand_binop (DImode, ior_optab, extl, exth, tgt, 1, OPTAB_WIDEN);
|
||||
addr = expand_binop (DImode, ashr_optab, addr, GEN_INT (64 - size*8),
|
||||
addr, 1, OPTAB_WIDEN);
|
||||
}
|
||||
else if (sign && size == 2)
|
||||
if (sign && size == 2)
|
||||
{
|
||||
emit_move_insn (addr, plus_constant (mema, ofs+2));
|
||||
|
||||
emit_insn (gen_extxl_le (extl, meml, GEN_INT (64), addr));
|
||||
emit_insn (gen_extqh_le (exth, memh, addr));
|
||||
emit_insn (gen_extxl (extl, meml, GEN_INT (64), addr));
|
||||
emit_insn (gen_extqh (exth, memh, addr));
|
||||
|
||||
/* We must use tgt here for the target. Alpha-vms port fails if we use
|
||||
addr for the target, because addr is marked as a pointer and combine
|
||||
|
@ -3375,55 +3359,27 @@ alpha_expand_unaligned_load (rtx tgt, rtx mem, HOST_WIDE_INT size,
|
|||
}
|
||||
else
|
||||
{
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
emit_move_insn (addr, plus_constant (mema, ofs));
|
||||
emit_insn (gen_extxl (extl, meml, GEN_INT (size*8), addr));
|
||||
switch ((int) size)
|
||||
{
|
||||
emit_move_insn (addr, plus_constant (mema, ofs+size-1));
|
||||
switch ((int) size)
|
||||
{
|
||||
case 2:
|
||||
emit_insn (gen_extwh_be (extl, meml, addr));
|
||||
mode = HImode;
|
||||
break;
|
||||
case 2:
|
||||
emit_insn (gen_extwh (exth, memh, addr));
|
||||
mode = HImode;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
emit_insn (gen_extlh_be (extl, meml, addr));
|
||||
mode = SImode;
|
||||
break;
|
||||
case 4:
|
||||
emit_insn (gen_extlh (exth, memh, addr));
|
||||
mode = SImode;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
emit_insn (gen_extqh_be (extl, meml, addr));
|
||||
mode = DImode;
|
||||
break;
|
||||
case 8:
|
||||
emit_insn (gen_extqh (exth, memh, addr));
|
||||
mode = DImode;
|
||||
break;
|
||||
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
emit_insn (gen_extxl_be (exth, memh, GEN_INT (size*8), addr));
|
||||
}
|
||||
else
|
||||
{
|
||||
emit_move_insn (addr, plus_constant (mema, ofs));
|
||||
emit_insn (gen_extxl_le (extl, meml, GEN_INT (size*8), addr));
|
||||
switch ((int) size)
|
||||
{
|
||||
case 2:
|
||||
emit_insn (gen_extwh_le (exth, memh, addr));
|
||||
mode = HImode;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
emit_insn (gen_extlh_le (exth, memh, addr));
|
||||
mode = SImode;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
emit_insn (gen_extqh_le (exth, memh, addr));
|
||||
mode = DImode;
|
||||
break;
|
||||
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
||||
addr = expand_binop (mode, ior_optab, gen_lowpart (mode, extl),
|
||||
|
@ -3457,8 +3413,6 @@ alpha_expand_unaligned_store (rtx dst, rtx src,
|
|||
|
||||
meml = adjust_address (dst, QImode, ofs);
|
||||
memh = adjust_address (dst, QImode, ofs+1);
|
||||
if (BYTES_BIG_ENDIAN)
|
||||
addr = meml, meml = memh, memh = addr;
|
||||
|
||||
emit_move_insn (meml, dstl);
|
||||
emit_move_insn (memh, dsth);
|
||||
|
@ -3492,86 +3446,48 @@ alpha_expand_unaligned_store (rtx dst, rtx src,
|
|||
|
||||
emit_move_insn (dsth, memh);
|
||||
emit_move_insn (dstl, meml);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
{
|
||||
addr = copy_addr_to_reg (plus_constant (dsta, ofs+size-1));
|
||||
|
||||
if (src != const0_rtx)
|
||||
{
|
||||
switch ((int) size)
|
||||
{
|
||||
case 2:
|
||||
emit_insn (gen_inswl_be (insh, gen_lowpart (HImode,src), addr));
|
||||
break;
|
||||
case 4:
|
||||
emit_insn (gen_insll_be (insh, gen_lowpart (SImode,src), addr));
|
||||
break;
|
||||
case 8:
|
||||
emit_insn (gen_insql_be (insh, gen_lowpart (DImode,src), addr));
|
||||
break;
|
||||
}
|
||||
emit_insn (gen_insxh (insl, gen_lowpart (DImode, src),
|
||||
GEN_INT (size*8), addr));
|
||||
}
|
||||
addr = copy_addr_to_reg (plus_constant (dsta, ofs));
|
||||
|
||||
if (src != CONST0_RTX (GET_MODE (src)))
|
||||
{
|
||||
emit_insn (gen_insxh (insh, gen_lowpart (DImode, src),
|
||||
GEN_INT (size*8), addr));
|
||||
|
||||
switch ((int) size)
|
||||
{
|
||||
case 2:
|
||||
emit_insn (gen_mskxl_be (dsth, dsth, GEN_INT (0xffff), addr));
|
||||
emit_insn (gen_inswl (insl, gen_lowpart (HImode, src), addr));
|
||||
break;
|
||||
case 4:
|
||||
{
|
||||
rtx msk = immed_double_const (0xffffffff, 0, DImode);
|
||||
emit_insn (gen_mskxl_be (dsth, dsth, msk, addr));
|
||||
break;
|
||||
}
|
||||
case 8:
|
||||
emit_insn (gen_mskxl_be (dsth, dsth, constm1_rtx, addr));
|
||||
emit_insn (gen_insll (insl, gen_lowpart (SImode, src), addr));
|
||||
break;
|
||||
case 8:
|
||||
emit_insn (gen_insql (insl, gen_lowpart (DImode, src), addr));
|
||||
break;
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
||||
emit_insn (gen_mskxh (dstl, dstl, GEN_INT (size*8), addr));
|
||||
}
|
||||
else
|
||||
|
||||
emit_insn (gen_mskxh (dsth, dsth, GEN_INT (size*8), addr));
|
||||
|
||||
switch ((int) size)
|
||||
{
|
||||
addr = copy_addr_to_reg (plus_constant (dsta, ofs));
|
||||
|
||||
if (src != CONST0_RTX (GET_MODE (src)))
|
||||
{
|
||||
emit_insn (gen_insxh (insh, gen_lowpart (DImode, src),
|
||||
GEN_INT (size*8), addr));
|
||||
|
||||
switch ((int) size)
|
||||
{
|
||||
case 2:
|
||||
emit_insn (gen_inswl_le (insl, gen_lowpart (HImode, src), addr));
|
||||
break;
|
||||
case 4:
|
||||
emit_insn (gen_insll_le (insl, gen_lowpart (SImode, src), addr));
|
||||
break;
|
||||
case 8:
|
||||
emit_insn (gen_insql_le (insl, gen_lowpart (DImode, src), addr));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
emit_insn (gen_mskxh (dsth, dsth, GEN_INT (size*8), addr));
|
||||
|
||||
switch ((int) size)
|
||||
{
|
||||
case 2:
|
||||
emit_insn (gen_mskxl_le (dstl, dstl, GEN_INT (0xffff), addr));
|
||||
break;
|
||||
case 4:
|
||||
{
|
||||
rtx msk = immed_double_const (0xffffffff, 0, DImode);
|
||||
emit_insn (gen_mskxl_le (dstl, dstl, msk, addr));
|
||||
break;
|
||||
}
|
||||
case 8:
|
||||
emit_insn (gen_mskxl_le (dstl, dstl, constm1_rtx, addr));
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
emit_insn (gen_mskxl (dstl, dstl, GEN_INT (0xffff), addr));
|
||||
break;
|
||||
case 4:
|
||||
{
|
||||
rtx msk = immed_double_const (0xffffffff, 0, DImode);
|
||||
emit_insn (gen_mskxl (dstl, dstl, msk, addr));
|
||||
break;
|
||||
}
|
||||
case 8:
|
||||
emit_insn (gen_mskxl (dstl, dstl, constm1_rtx, addr));
|
||||
break;
|
||||
default:
|
||||
gcc_unreachable ();
|
||||
}
|
||||
|
||||
if (src != CONST0_RTX (GET_MODE (src)))
|
||||
|
@ -3580,17 +3496,9 @@ alpha_expand_unaligned_store (rtx dst, rtx src,
|
|||
dstl = expand_binop (DImode, ior_optab, insl, dstl, dstl, 0, OPTAB_WIDEN);
|
||||
}
|
||||
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
{
|
||||
emit_move_insn (meml, dstl);
|
||||
emit_move_insn (memh, dsth);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Must store high before low for degenerate case of aligned. */
|
||||
emit_move_insn (memh, dsth);
|
||||
emit_move_insn (meml, dstl);
|
||||
}
|
||||
/* Must store high before low for degenerate case of aligned. */
|
||||
emit_move_insn (memh, dsth);
|
||||
emit_move_insn (meml, dstl);
|
||||
}
|
||||
|
||||
/* The block move code tries to maximize speed by separating loads and
|
||||
|
@ -3653,20 +3561,10 @@ alpha_expand_unaligned_load_words (rtx *out_regs, rtx smem,
|
|||
sreg = copy_addr_to_reg (smema);
|
||||
areg = expand_binop (DImode, and_optab, sreg, GEN_INT (7), NULL,
|
||||
1, OPTAB_WIDEN);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
emit_move_insn (sreg, plus_constant (sreg, 7));
|
||||
for (i = 0; i < words; ++i)
|
||||
{
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
{
|
||||
emit_insn (gen_extqh_be (data_regs[i], data_regs[i], sreg));
|
||||
emit_insn (gen_extxl_be (ext_tmps[i], data_regs[i+1], i64, sreg));
|
||||
}
|
||||
else
|
||||
{
|
||||
emit_insn (gen_extxl_le (data_regs[i], data_regs[i], i64, sreg));
|
||||
emit_insn (gen_extqh_le (ext_tmps[i], data_regs[i+1], sreg));
|
||||
}
|
||||
emit_insn (gen_extxl (data_regs[i], data_regs[i], i64, sreg));
|
||||
emit_insn (gen_extqh (ext_tmps[i], data_regs[i+1], sreg));
|
||||
emit_insn (gen_rtx_SET (VOIDmode, ext_tmps[i],
|
||||
gen_rtx_IF_THEN_ELSE (DImode,
|
||||
gen_rtx_EQ (DImode, areg,
|
||||
|
@ -3726,22 +3624,12 @@ alpha_expand_unaligned_store_words (rtx *data_regs, rtx dmem,
|
|||
|
||||
/* Shift the input data into place. */
|
||||
dreg = copy_addr_to_reg (dmema);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
emit_move_insn (dreg, plus_constant (dreg, 7));
|
||||
if (data_regs != NULL)
|
||||
{
|
||||
for (i = words-1; i >= 0; --i)
|
||||
{
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
{
|
||||
emit_insn (gen_insql_be (ins_tmps[i], data_regs[i], dreg));
|
||||
emit_insn (gen_insxh (data_regs[i], data_regs[i], i64, dreg));
|
||||
}
|
||||
else
|
||||
{
|
||||
emit_insn (gen_insxh (ins_tmps[i], data_regs[i], i64, dreg));
|
||||
emit_insn (gen_insql_le (data_regs[i], data_regs[i], dreg));
|
||||
}
|
||||
emit_insn (gen_insxh (ins_tmps[i], data_regs[i], i64, dreg));
|
||||
emit_insn (gen_insql (data_regs[i], data_regs[i], dreg));
|
||||
}
|
||||
for (i = words-1; i > 0; --i)
|
||||
{
|
||||
|
@ -3752,16 +3640,8 @@ alpha_expand_unaligned_store_words (rtx *data_regs, rtx dmem,
|
|||
}
|
||||
|
||||
/* Split and merge the ends with the destination data. */
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
{
|
||||
emit_insn (gen_mskxl_be (st_tmp_2, st_tmp_2, constm1_rtx, dreg));
|
||||
emit_insn (gen_mskxh (st_tmp_1, st_tmp_1, i64, dreg));
|
||||
}
|
||||
else
|
||||
{
|
||||
emit_insn (gen_mskxh (st_tmp_2, st_tmp_2, i64, dreg));
|
||||
emit_insn (gen_mskxl_le (st_tmp_1, st_tmp_1, constm1_rtx, dreg));
|
||||
}
|
||||
emit_insn (gen_mskxh (st_tmp_2, st_tmp_2, i64, dreg));
|
||||
emit_insn (gen_mskxl (st_tmp_1, st_tmp_1, constm1_rtx, dreg));
|
||||
|
||||
if (data_regs != NULL)
|
||||
{
|
||||
|
@ -3772,24 +3652,17 @@ alpha_expand_unaligned_store_words (rtx *data_regs, rtx dmem,
|
|||
}
|
||||
|
||||
/* Store it all. */
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
emit_move_insn (st_addr_1, st_tmp_1);
|
||||
else
|
||||
emit_move_insn (st_addr_2, st_tmp_2);
|
||||
emit_move_insn (st_addr_2, st_tmp_2);
|
||||
for (i = words-1; i > 0; --i)
|
||||
{
|
||||
rtx tmp = change_address (dmem, DImode,
|
||||
gen_rtx_AND (DImode,
|
||||
plus_constant(dmema,
|
||||
WORDS_BIG_ENDIAN ? i*8-1 : i*8),
|
||||
plus_constant (dmema, i*8),
|
||||
im8));
|
||||
set_mem_alias_set (tmp, 0);
|
||||
emit_move_insn (tmp, data_regs ? ins_tmps[i-1] : const0_rtx);
|
||||
}
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
emit_move_insn (st_addr_2, st_tmp_2);
|
||||
else
|
||||
emit_move_insn (st_addr_1, st_tmp_1);
|
||||
emit_move_insn (st_addr_1, st_tmp_1);
|
||||
}
|
||||
|
||||
|
||||
|
@ -4438,20 +4311,11 @@ emit_insxl (enum machine_mode mode, rtx op1, rtx op2)
|
|||
rtx ret = gen_reg_rtx (DImode);
|
||||
rtx (*fn) (rtx, rtx, rtx);
|
||||
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
{
|
||||
if (mode == QImode)
|
||||
fn = gen_insbl_be;
|
||||
else
|
||||
fn = gen_inswl_be;
|
||||
}
|
||||
if (mode == QImode)
|
||||
fn = gen_insbl;
|
||||
else
|
||||
{
|
||||
if (mode == QImode)
|
||||
fn = gen_insbl_le;
|
||||
else
|
||||
fn = gen_inswl_le;
|
||||
}
|
||||
fn = gen_inswl;
|
||||
|
||||
/* The insbl and inswl patterns require a register operand. */
|
||||
op1 = force_reg (mode, op1);
|
||||
emit_insn (fn (ret, op1, op2));
|
||||
|
@ -4584,10 +4448,7 @@ alpha_split_compare_and_swap_12 (enum machine_mode mode, rtx dest, rtx addr,
|
|||
|
||||
width = GEN_INT (GET_MODE_BITSIZE (mode));
|
||||
mask = GEN_INT (mode == QImode ? 0xff : 0xffff);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
emit_insn (gen_extxl_be (dest, scratch, width, addr));
|
||||
else
|
||||
emit_insn (gen_extxl_le (dest, scratch, width, addr));
|
||||
emit_insn (gen_extxl (dest, scratch, width, addr));
|
||||
|
||||
if (oldval == const0_rtx)
|
||||
x = gen_rtx_NE (DImode, dest, const0_rtx);
|
||||
|
@ -4599,10 +4460,7 @@ alpha_split_compare_and_swap_12 (enum machine_mode mode, rtx dest, rtx addr,
|
|||
}
|
||||
emit_unlikely_jump (x, label2);
|
||||
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
emit_insn (gen_mskxl_be (scratch, scratch, mask, addr));
|
||||
else
|
||||
emit_insn (gen_mskxl_le (scratch, scratch, mask, addr));
|
||||
emit_insn (gen_mskxl (scratch, scratch, mask, addr));
|
||||
emit_insn (gen_iordi3 (scratch, scratch, newval));
|
||||
|
||||
emit_store_conditional (DImode, scratch, mem, scratch);
|
||||
|
@ -4678,16 +4536,8 @@ alpha_split_lock_test_and_set_12 (enum machine_mode mode, rtx dest, rtx addr,
|
|||
|
||||
width = GEN_INT (GET_MODE_BITSIZE (mode));
|
||||
mask = GEN_INT (mode == QImode ? 0xff : 0xffff);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
{
|
||||
emit_insn (gen_extxl_be (dest, scratch, width, addr));
|
||||
emit_insn (gen_mskxl_be (scratch, scratch, mask, addr));
|
||||
}
|
||||
else
|
||||
{
|
||||
emit_insn (gen_extxl_le (dest, scratch, width, addr));
|
||||
emit_insn (gen_mskxl_le (scratch, scratch, mask, addr));
|
||||
}
|
||||
emit_insn (gen_extxl (dest, scratch, width, addr));
|
||||
emit_insn (gen_mskxl (scratch, scratch, mask, addr));
|
||||
emit_insn (gen_iordi3 (scratch, scratch, val));
|
||||
|
||||
emit_store_conditional (DImode, scratch, mem, scratch);
|
||||
|
@ -5279,20 +5129,13 @@ print_operand (FILE *file, rtx x, int code)
|
|||
break;
|
||||
|
||||
case 's':
|
||||
/* Write the constant value divided by 8 for little-endian mode or
|
||||
(56 - value) / 8 for big-endian mode. */
|
||||
|
||||
/* Write the constant value divided by 8. */
|
||||
if (!CONST_INT_P (x)
|
||||
|| (unsigned HOST_WIDE_INT) INTVAL (x) >= (WORDS_BIG_ENDIAN
|
||||
? 56
|
||||
: 64)
|
||||
|| (unsigned HOST_WIDE_INT) INTVAL (x) >= 64
|
||||
|| (INTVAL (x) & 7) != 0)
|
||||
output_operand_lossage ("invalid %%s value");
|
||||
|
||||
fprintf (file, HOST_WIDE_INT_PRINT_DEC,
|
||||
WORDS_BIG_ENDIAN
|
||||
? (56 - INTVAL (x)) / 8
|
||||
: INTVAL (x) / 8);
|
||||
fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x) / 8);
|
||||
break;
|
||||
|
||||
case 'S':
|
||||
|
@ -6391,27 +6234,27 @@ enum alpha_builtin
|
|||
|
||||
static enum insn_code const code_for_builtin[ALPHA_BUILTIN_max] = {
|
||||
CODE_FOR_builtin_cmpbge,
|
||||
CODE_FOR_builtin_extbl,
|
||||
CODE_FOR_builtin_extwl,
|
||||
CODE_FOR_builtin_extll,
|
||||
CODE_FOR_builtin_extql,
|
||||
CODE_FOR_builtin_extwh,
|
||||
CODE_FOR_builtin_extlh,
|
||||
CODE_FOR_builtin_extqh,
|
||||
CODE_FOR_extbl,
|
||||
CODE_FOR_extwl,
|
||||
CODE_FOR_extll,
|
||||
CODE_FOR_extql,
|
||||
CODE_FOR_extwh,
|
||||
CODE_FOR_extlh,
|
||||
CODE_FOR_extqh,
|
||||
CODE_FOR_builtin_insbl,
|
||||
CODE_FOR_builtin_inswl,
|
||||
CODE_FOR_builtin_insll,
|
||||
CODE_FOR_builtin_insql,
|
||||
CODE_FOR_builtin_inswh,
|
||||
CODE_FOR_builtin_inslh,
|
||||
CODE_FOR_builtin_insqh,
|
||||
CODE_FOR_builtin_mskbl,
|
||||
CODE_FOR_builtin_mskwl,
|
||||
CODE_FOR_builtin_mskll,
|
||||
CODE_FOR_builtin_mskql,
|
||||
CODE_FOR_builtin_mskwh,
|
||||
CODE_FOR_builtin_msklh,
|
||||
CODE_FOR_builtin_mskqh,
|
||||
CODE_FOR_insql,
|
||||
CODE_FOR_inswh,
|
||||
CODE_FOR_inslh,
|
||||
CODE_FOR_insqh,
|
||||
CODE_FOR_mskbl,
|
||||
CODE_FOR_mskwl,
|
||||
CODE_FOR_mskll,
|
||||
CODE_FOR_mskql,
|
||||
CODE_FOR_mskwh,
|
||||
CODE_FOR_msklh,
|
||||
CODE_FOR_mskqh,
|
||||
CODE_FOR_umuldi3_highpart,
|
||||
CODE_FOR_builtin_zap,
|
||||
CODE_FOR_builtin_zapnot,
|
||||
|
@ -6779,9 +6622,7 @@ alpha_fold_builtin_extxx (tree op[], unsigned HOST_WIDE_INT opint[],
|
|||
unsigned HOST_WIDE_INT loc;
|
||||
|
||||
loc = opint[1] & 7;
|
||||
if (BYTES_BIG_ENDIAN)
|
||||
loc ^= 7;
|
||||
loc *= 8;
|
||||
loc *= BITS_PER_UNIT;
|
||||
|
||||
if (loc != 0)
|
||||
{
|
||||
|
@ -6820,8 +6661,6 @@ alpha_fold_builtin_insxx (tree op[], unsigned HOST_WIDE_INT opint[],
|
|||
tree *zap_op = NULL;
|
||||
|
||||
loc = opint[1] & 7;
|
||||
if (BYTES_BIG_ENDIAN)
|
||||
loc ^= 7;
|
||||
bytemask <<= loc;
|
||||
|
||||
temp = opint[0];
|
||||
|
@ -6861,8 +6700,6 @@ alpha_fold_builtin_mskxx (tree op[], unsigned HOST_WIDE_INT opint[],
|
|||
unsigned HOST_WIDE_INT loc;
|
||||
|
||||
loc = opint[1] & 7;
|
||||
if (BYTES_BIG_ENDIAN)
|
||||
loc ^= 7;
|
||||
bytemask <<= loc;
|
||||
|
||||
if (is_high)
|
||||
|
|
|
@ -1320,8 +1320,7 @@
|
|||
t0 = gen_reg_rtx (DImode);
|
||||
t1 = gen_reg_rtx (DImode);
|
||||
|
||||
emit_insn (gen_insxh (t0, gen_lowpart (DImode, operands[1]),
|
||||
GEN_INT (32), GEN_INT (WORDS_BIG_ENDIAN ? 0 : 7)));
|
||||
emit_insn (gen_inslh (t0, gen_lowpart (DImode, operands[1]), GEN_INT (7)));
|
||||
emit_insn (gen_inswl_const (t1, gen_lowpart (HImode, operands[1]),
|
||||
GEN_INT (24)));
|
||||
emit_insn (gen_iordi3 (t1, t0, t1));
|
||||
|
@ -1520,106 +1519,45 @@
|
|||
;; the unaligned loads (see below).
|
||||
;;
|
||||
;; Operand 1 is the address, operand 0 is the result.
|
||||
(define_expand "unaligned_extendqidi"
|
||||
[(use (match_operand:QI 0 "register_operand" ""))
|
||||
(use (match_operand:DI 1 "address_operand" ""))]
|
||||
""
|
||||
{
|
||||
operands[0] = gen_lowpart (DImode, operands[0]);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
emit_insn (gen_unaligned_extendqidi_be (operands[0], operands[1]));
|
||||
else
|
||||
emit_insn (gen_unaligned_extendqidi_le (operands[0], operands[1]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "unaligned_extendqidi_le"
|
||||
(define_expand "unaligned_extendqidi"
|
||||
[(set (match_dup 3)
|
||||
(mem:DI (and:DI (match_operand:DI 1 "" "") (const_int -8))))
|
||||
(mem:DI (and:DI (match_operand:DI 1 "address_operand" "") (const_int -8))))
|
||||
(set (match_dup 4)
|
||||
(ashift:DI (match_dup 3)
|
||||
(minus:DI (const_int 64)
|
||||
(ashift:DI
|
||||
(and:DI (match_dup 2) (const_int 7))
|
||||
(const_int 3)))))
|
||||
(set (match_operand:DI 0 "register_operand" "")
|
||||
(set (match_operand:QI 0 "register_operand" "")
|
||||
(ashiftrt:DI (match_dup 4) (const_int 56)))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
""
|
||||
{
|
||||
operands[0] = gen_lowpart (DImode, operands[0]);
|
||||
operands[2] = get_unaligned_offset (operands[1], 1);
|
||||
operands[3] = gen_reg_rtx (DImode);
|
||||
operands[4] = gen_reg_rtx (DImode);
|
||||
})
|
||||
|
||||
(define_expand "unaligned_extendqidi_be"
|
||||
[(set (match_dup 3)
|
||||
(mem:DI (and:DI (match_operand:DI 1 "" "") (const_int -8))))
|
||||
(set (match_dup 4)
|
||||
(ashift:DI (match_dup 3)
|
||||
(ashift:DI
|
||||
(and:DI
|
||||
(plus:DI (match_dup 2) (const_int 1))
|
||||
(const_int 7))
|
||||
(const_int 3))))
|
||||
(set (match_operand:DI 0 "register_operand" "")
|
||||
(ashiftrt:DI (match_dup 4) (const_int 56)))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
{
|
||||
operands[2] = get_unaligned_offset (operands[1], -1);
|
||||
operands[3] = gen_reg_rtx (DImode);
|
||||
operands[4] = gen_reg_rtx (DImode);
|
||||
})
|
||||
|
||||
(define_expand "unaligned_extendhidi"
|
||||
[(use (match_operand:QI 0 "register_operand" ""))
|
||||
(use (match_operand:DI 1 "address_operand" ""))]
|
||||
""
|
||||
{
|
||||
operands[0] = gen_lowpart (DImode, operands[0]);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
emit_insn (gen_unaligned_extendhidi_be (operands[0], operands[1]));
|
||||
else
|
||||
emit_insn (gen_unaligned_extendhidi_le (operands[0], operands[1]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "unaligned_extendhidi_le"
|
||||
[(set (match_dup 3)
|
||||
(mem:DI (and:DI (match_operand:DI 1 "" "") (const_int -8))))
|
||||
(mem:DI (and:DI (match_operand:DI 1 "address_operand" "") (const_int -8))))
|
||||
(set (match_dup 4)
|
||||
(ashift:DI (match_dup 3)
|
||||
(minus:DI (const_int 64)
|
||||
(ashift:DI
|
||||
(and:DI (match_dup 2) (const_int 7))
|
||||
(const_int 3)))))
|
||||
(set (match_operand:DI 0 "register_operand" "")
|
||||
(set (match_operand:HI 0 "register_operand" "")
|
||||
(ashiftrt:DI (match_dup 4) (const_int 48)))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
""
|
||||
{
|
||||
operands[0] = gen_lowpart (DImode, operands[0]);
|
||||
operands[2] = get_unaligned_offset (operands[1], 2);
|
||||
operands[3] = gen_reg_rtx (DImode);
|
||||
operands[4] = gen_reg_rtx (DImode);
|
||||
})
|
||||
|
||||
(define_expand "unaligned_extendhidi_be"
|
||||
[(set (match_dup 3)
|
||||
(mem:DI (and:DI (match_operand:DI 1 "" "") (const_int -8))))
|
||||
(set (match_dup 4)
|
||||
(ashift:DI (match_dup 3)
|
||||
(ashift:DI
|
||||
(and:DI
|
||||
(plus:DI (match_dup 2) (const_int 1))
|
||||
(const_int 7))
|
||||
(const_int 3))))
|
||||
(set (match_operand:DI 0 "register_operand" "")
|
||||
(ashiftrt:DI (match_dup 4) (const_int 48)))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
{
|
||||
operands[2] = get_unaligned_offset (operands[1], -1);
|
||||
operands[3] = gen_reg_rtx (DImode);
|
||||
operands[4] = gen_reg_rtx (DImode);
|
||||
})
|
||||
|
||||
(define_insn "*extxl_const"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
|
||||
|
@ -1629,26 +1567,13 @@
|
|||
"ext%M2l %r1,%s3,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "extxl_le"
|
||||
(define_insn "extxl"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
|
||||
(match_operand:DI 2 "mode_width_operand" "n")
|
||||
(ashift:DI (match_operand:DI 3 "reg_or_8bit_operand" "rI")
|
||||
(const_int 3))))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
"ext%M2l %r1,%3,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "extxl_be"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(zero_extract:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
|
||||
(match_operand:DI 2 "mode_width_operand" "n")
|
||||
(minus:DI
|
||||
(const_int 56)
|
||||
(ashift:DI
|
||||
(match_operand:DI 3 "reg_or_8bit_operand" "rI")
|
||||
(const_int 3)))))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
""
|
||||
"ext%M2l %r1,%3,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
|
@ -1656,50 +1581,26 @@
|
|||
;; in shifts larger than a word size. So capture these patterns that it
|
||||
;; should have turned into zero_extracts.
|
||||
|
||||
(define_insn "*extxl_1_le"
|
||||
(define_insn "*extxl_1"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(and:DI (lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
|
||||
(ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 3)))
|
||||
(match_operand:DI 3 "mode_mask_operand" "n")))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
""
|
||||
"ext%U3l %1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "*extxl_1_be"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(and:DI (lshiftrt:DI
|
||||
(match_operand:DI 1 "reg_or_0_operand" "rJ")
|
||||
(minus:DI (const_int 56)
|
||||
(ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 3))))
|
||||
(match_operand:DI 3 "mode_mask_operand" "n")))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
"ext%U3l %1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "*extql_2_le"
|
||||
(define_insn "*extql_2"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(lshiftrt:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
|
||||
(ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 3))))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
""
|
||||
"extql %1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "*extql_2_be"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(lshiftrt:DI
|
||||
(match_operand:DI 1 "reg_or_0_operand" "rJ")
|
||||
(minus:DI (const_int 56)
|
||||
(ashift:DI
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 3)))))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
"extql %1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "extqh_le"
|
||||
(define_insn "extqh"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(ashift:DI
|
||||
(match_operand:DI 1 "reg_or_0_operand" "rJ")
|
||||
|
@ -1709,25 +1610,11 @@
|
|||
(match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 7))
|
||||
(const_int 3)))))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
""
|
||||
"extqh %r1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "extqh_be"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(ashift:DI
|
||||
(match_operand:DI 1 "reg_or_0_operand" "rJ")
|
||||
(ashift:DI
|
||||
(and:DI
|
||||
(plus:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 1))
|
||||
(const_int 7))
|
||||
(const_int 3))))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
"extqh %r1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "extlh_le"
|
||||
(define_insn "extlh"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(ashift:DI
|
||||
(and:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
|
||||
|
@ -1738,28 +1625,11 @@
|
|||
(match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 7))
|
||||
(const_int 3)))))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
""
|
||||
"extlh %r1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "extlh_be"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(and:DI
|
||||
(ashift:DI
|
||||
(match_operand:DI 1 "reg_or_0_operand" "rJ")
|
||||
(ashift:DI
|
||||
(and:DI
|
||||
(plus:DI
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 1))
|
||||
(const_int 7))
|
||||
(const_int 3)))
|
||||
(const_int 2147483647)))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
"extlh %r1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "extwh_le"
|
||||
(define_insn "extwh"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(ashift:DI
|
||||
(and:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
|
||||
|
@ -1770,23 +1640,7 @@
|
|||
(match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 7))
|
||||
(const_int 3)))))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
"extwh %r1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "extwh_be"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(and:DI
|
||||
(ashift:DI (match_operand:DI 1 "reg_or_0_operand" "rJ")
|
||||
(ashift:DI
|
||||
(and:DI
|
||||
(plus:DI
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 1))
|
||||
(const_int 7))
|
||||
(const_int 3)))
|
||||
(const_int 65535)))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
""
|
||||
"extwh %r1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
|
@ -1840,79 +1694,39 @@
|
|||
"insll %1,%s2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "insbl_le"
|
||||
(define_insn "insbl"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" "r"))
|
||||
(ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 3))))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
""
|
||||
"insbl %1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "insbl_be"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" "r"))
|
||||
(minus:DI (const_int 56)
|
||||
(ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 3)))))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
"insbl %1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "inswl_le"
|
||||
(define_insn "inswl"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" "r"))
|
||||
(ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 3))))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
""
|
||||
"inswl %1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "inswl_be"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" "r"))
|
||||
(minus:DI (const_int 56)
|
||||
(ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 3)))))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
"inswl %1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "insll_le"
|
||||
(define_insn "insll"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(ashift:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r"))
|
||||
(ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 3))))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
""
|
||||
"insll %1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "insll_be"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(ashift:DI (zero_extend:DI (match_operand:SI 1 "register_operand" "r"))
|
||||
(minus:DI (const_int 56)
|
||||
(ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 3)))))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
"insll %1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "insql_le"
|
||||
(define_insn "insql"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(ashift:DI (match_operand:DI 1 "register_operand" "r")
|
||||
(ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 3))))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
"insql %1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "insql_be"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(ashift:DI (match_operand:DI 1 "register_operand" "r")
|
||||
(minus:DI (const_int 56)
|
||||
(ashift:DI (match_operand:DI 2 "reg_or_8bit_operand" "rI")
|
||||
(const_int 3)))))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
""
|
||||
"insql %1,%2,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
|
@ -1963,7 +1777,7 @@
|
|||
"ins%M2h %1,%3,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "mskxl_le"
|
||||
(define_insn "mskxl"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(and:DI (not:DI (ashift:DI
|
||||
(match_operand:DI 2 "mode_mask_operand" "n")
|
||||
|
@ -1971,20 +1785,7 @@
|
|||
(match_operand:DI 3 "reg_or_8bit_operand" "rI")
|
||||
(const_int 3))))
|
||||
(match_operand:DI 1 "reg_or_0_operand" "rJ")))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
"msk%U2l %r1,%3,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
(define_insn "mskxl_be"
|
||||
[(set (match_operand:DI 0 "register_operand" "=r")
|
||||
(and:DI (not:DI (ashift:DI
|
||||
(match_operand:DI 2 "mode_mask_operand" "n")
|
||||
(minus:DI (const_int 56)
|
||||
(ashift:DI
|
||||
(match_operand:DI 3 "reg_or_8bit_operand" "rI")
|
||||
(const_int 3)))))
|
||||
(match_operand:DI 1 "reg_or_0_operand" "rJ")))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
""
|
||||
"msk%U2l %r1,%3,%0"
|
||||
[(set_attr "type" "shift")])
|
||||
|
||||
|
@ -5049,22 +4850,6 @@
|
|||
;; operand 3 can overlap the input and output registers.
|
||||
|
||||
(define_expand "unaligned_loadqi"
|
||||
[(use (match_operand:DI 0 "register_operand" ""))
|
||||
(use (match_operand:DI 1 "address_operand" ""))
|
||||
(use (match_operand:DI 2 "register_operand" ""))
|
||||
(use (match_operand:DI 3 "register_operand" ""))]
|
||||
""
|
||||
{
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
emit_insn (gen_unaligned_loadqi_be (operands[0], operands[1],
|
||||
operands[2], operands[3]));
|
||||
else
|
||||
emit_insn (gen_unaligned_loadqi_le (operands[0], operands[1],
|
||||
operands[2], operands[3]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "unaligned_loadqi_le"
|
||||
[(set (match_operand:DI 2 "register_operand" "")
|
||||
(mem:DI (and:DI (match_operand:DI 1 "address_operand" "")
|
||||
(const_int -8))))
|
||||
|
@ -5074,41 +4859,10 @@
|
|||
(zero_extract:DI (match_dup 2)
|
||||
(const_int 8)
|
||||
(ashift:DI (match_dup 3) (const_int 3))))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
"")
|
||||
|
||||
(define_expand "unaligned_loadqi_be"
|
||||
[(set (match_operand:DI 2 "register_operand" "")
|
||||
(mem:DI (and:DI (match_operand:DI 1 "address_operand" "")
|
||||
(const_int -8))))
|
||||
(set (match_operand:DI 3 "register_operand" "")
|
||||
(match_dup 1))
|
||||
(set (match_operand:DI 0 "register_operand" "")
|
||||
(zero_extract:DI (match_dup 2)
|
||||
(const_int 8)
|
||||
(minus:DI
|
||||
(const_int 56)
|
||||
(ashift:DI (match_dup 3) (const_int 3)))))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
""
|
||||
"")
|
||||
|
||||
(define_expand "unaligned_loadhi"
|
||||
[(use (match_operand:DI 0 "register_operand" ""))
|
||||
(use (match_operand:DI 1 "address_operand" ""))
|
||||
(use (match_operand:DI 2 "register_operand" ""))
|
||||
(use (match_operand:DI 3 "register_operand" ""))]
|
||||
""
|
||||
{
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
emit_insn (gen_unaligned_loadhi_be (operands[0], operands[1],
|
||||
operands[2], operands[3]));
|
||||
else
|
||||
emit_insn (gen_unaligned_loadhi_le (operands[0], operands[1],
|
||||
operands[2], operands[3]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "unaligned_loadhi_le"
|
||||
[(set (match_operand:DI 2 "register_operand" "")
|
||||
(mem:DI (and:DI (match_operand:DI 1 "address_operand" "")
|
||||
(const_int -8))))
|
||||
|
@ -5118,22 +4872,7 @@
|
|||
(zero_extract:DI (match_dup 2)
|
||||
(const_int 16)
|
||||
(ashift:DI (match_dup 3) (const_int 3))))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
"")
|
||||
|
||||
(define_expand "unaligned_loadhi_be"
|
||||
[(set (match_operand:DI 2 "register_operand" "")
|
||||
(mem:DI (and:DI (match_operand:DI 1 "address_operand" "")
|
||||
(const_int -8))))
|
||||
(set (match_operand:DI 3 "register_operand" "")
|
||||
(plus:DI (match_dup 1) (const_int 1)))
|
||||
(set (match_operand:DI 0 "register_operand" "")
|
||||
(zero_extract:DI (match_dup 2)
|
||||
(const_int 16)
|
||||
(minus:DI
|
||||
(const_int 56)
|
||||
(ashift:DI (match_dup 3) (const_int 3)))))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
""
|
||||
"")
|
||||
|
||||
;; Storing an aligned byte or word requires two temporaries. Operand 0 is the
|
||||
|
@ -5166,25 +4905,6 @@
|
|||
;; operand 2 can be that register.
|
||||
|
||||
(define_expand "unaligned_storeqi"
|
||||
[(use (match_operand:DI 0 "address_operand" ""))
|
||||
(use (match_operand:QI 1 "register_operand" ""))
|
||||
(use (match_operand:DI 2 "register_operand" ""))
|
||||
(use (match_operand:DI 3 "register_operand" ""))
|
||||
(use (match_operand:DI 4 "register_operand" ""))]
|
||||
""
|
||||
{
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
emit_insn (gen_unaligned_storeqi_be (operands[0], operands[1],
|
||||
operands[2], operands[3],
|
||||
operands[4]));
|
||||
else
|
||||
emit_insn (gen_unaligned_storeqi_le (operands[0], operands[1],
|
||||
operands[2], operands[3],
|
||||
operands[4]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "unaligned_storeqi_le"
|
||||
[(set (match_operand:DI 3 "register_operand" "")
|
||||
(mem:DI (and:DI (match_operand:DI 0 "address_operand" "")
|
||||
(const_int -8))))
|
||||
|
@ -5200,50 +4920,10 @@
|
|||
(set (match_dup 4) (ior:DI (match_dup 4) (match_dup 3)))
|
||||
(set (mem:DI (and:DI (match_dup 0) (const_int -8)))
|
||||
(match_dup 4))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
"")
|
||||
|
||||
(define_expand "unaligned_storeqi_be"
|
||||
[(set (match_operand:DI 3 "register_operand" "")
|
||||
(mem:DI (and:DI (match_operand:DI 0 "address_operand" "")
|
||||
(const_int -8))))
|
||||
(set (match_operand:DI 2 "register_operand" "")
|
||||
(match_dup 0))
|
||||
(set (match_dup 3)
|
||||
(and:DI (not:DI (ashift:DI (const_int 255)
|
||||
(minus:DI (const_int 56)
|
||||
(ashift:DI (match_dup 2) (const_int 3)))))
|
||||
(match_dup 3)))
|
||||
(set (match_operand:DI 4 "register_operand" "")
|
||||
(ashift:DI (zero_extend:DI (match_operand:QI 1 "register_operand" ""))
|
||||
(minus:DI (const_int 56)
|
||||
(ashift:DI (match_dup 2) (const_int 3)))))
|
||||
(set (match_dup 4) (ior:DI (match_dup 4) (match_dup 3)))
|
||||
(set (mem:DI (and:DI (match_dup 0) (const_int -8)))
|
||||
(match_dup 4))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
""
|
||||
"")
|
||||
|
||||
(define_expand "unaligned_storehi"
|
||||
[(use (match_operand:DI 0 "address_operand" ""))
|
||||
(use (match_operand:HI 1 "register_operand" ""))
|
||||
(use (match_operand:DI 2 "register_operand" ""))
|
||||
(use (match_operand:DI 3 "register_operand" ""))
|
||||
(use (match_operand:DI 4 "register_operand" ""))]
|
||||
""
|
||||
{
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
emit_insn (gen_unaligned_storehi_be (operands[0], operands[1],
|
||||
operands[2], operands[3],
|
||||
operands[4]));
|
||||
else
|
||||
emit_insn (gen_unaligned_storehi_le (operands[0], operands[1],
|
||||
operands[2], operands[3],
|
||||
operands[4]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "unaligned_storehi_le"
|
||||
[(set (match_operand:DI 3 "register_operand" "")
|
||||
(mem:DI (and:DI (match_operand:DI 0 "address_operand" "")
|
||||
(const_int -8))))
|
||||
|
@ -5259,31 +4939,9 @@
|
|||
(set (match_dup 4) (ior:DI (match_dup 4) (match_dup 3)))
|
||||
(set (mem:DI (and:DI (match_dup 0) (const_int -8)))
|
||||
(match_dup 4))]
|
||||
"! WORDS_BIG_ENDIAN"
|
||||
""
|
||||
"")
|
||||
|
||||
(define_expand "unaligned_storehi_be"
|
||||
[(set (match_operand:DI 3 "register_operand" "")
|
||||
(mem:DI (and:DI (match_operand:DI 0 "address_operand" "")
|
||||
(const_int -8))))
|
||||
(set (match_operand:DI 2 "register_operand" "")
|
||||
(plus:DI (match_dup 5) (const_int 1)))
|
||||
(set (match_dup 3)
|
||||
(and:DI (not:DI (ashift:DI
|
||||
(const_int 65535)
|
||||
(minus:DI (const_int 56)
|
||||
(ashift:DI (match_dup 2) (const_int 3)))))
|
||||
(match_dup 3)))
|
||||
(set (match_operand:DI 4 "register_operand" "")
|
||||
(ashift:DI (zero_extend:DI (match_operand:HI 1 "register_operand" ""))
|
||||
(minus:DI (const_int 56)
|
||||
(ashift:DI (match_dup 2) (const_int 3)))))
|
||||
(set (match_dup 4) (ior:DI (match_dup 4) (match_dup 3)))
|
||||
(set (mem:DI (and:DI (match_dup 0) (const_int -8)))
|
||||
(match_dup 4))]
|
||||
"WORDS_BIG_ENDIAN"
|
||||
"operands[5] = force_reg (DImode, operands[0]);")
|
||||
|
||||
;; Here are the define_expand's for QI and HI moves that use the above
|
||||
;; patterns. We have the normal sets, plus the ones that need scratch
|
||||
;; registers for reload.
|
||||
|
@ -5708,16 +5366,7 @@
|
|||
if (!MEM_P (operands[1]))
|
||||
FAIL;
|
||||
|
||||
/* The bit number is relative to the mode of operand 1 which is
|
||||
usually QImode (this might actually be a bug in expmed.c). Note
|
||||
that the bit number is negative in big-endian mode in this case.
|
||||
We have to convert that to the offset. */
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
ofs = GET_MODE_BITSIZE (GET_MODE (operands[1]))
|
||||
- INTVAL (operands[2]) - INTVAL (operands[3]);
|
||||
else
|
||||
ofs = INTVAL (operands[3]);
|
||||
|
||||
ofs = INTVAL (operands[3]);
|
||||
ofs = ofs / 8;
|
||||
|
||||
alpha_expand_unaligned_load (operands[0], operands[1],
|
||||
|
@ -5749,16 +5398,7 @@
|
|||
if (INTVAL (operands[2]) == 8)
|
||||
FAIL;
|
||||
|
||||
/* The bit number is relative to the mode of operand 1 which is
|
||||
usually QImode (this might actually be a bug in expmed.c). Note
|
||||
that the bit number is negative in big-endian mode in this case.
|
||||
We have to convert that to the offset. */
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
ofs = GET_MODE_BITSIZE (GET_MODE (operands[1]))
|
||||
- INTVAL (operands[2]) - INTVAL (operands[3]);
|
||||
else
|
||||
ofs = INTVAL (operands[3]);
|
||||
|
||||
ofs = INTVAL (operands[3]);
|
||||
ofs = ofs / 8;
|
||||
|
||||
alpha_expand_unaligned_load (operands[0], operands[1],
|
||||
|
@ -5789,16 +5429,7 @@
|
|||
if (!MEM_P (operands[0]))
|
||||
FAIL;
|
||||
|
||||
/* The bit number is relative to the mode of operand 1 which is
|
||||
usually QImode (this might actually be a bug in expmed.c). Note
|
||||
that the bit number is negative in big-endian mode in this case.
|
||||
We have to convert that to the offset. */
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
ofs = GET_MODE_BITSIZE (GET_MODE (operands[0]))
|
||||
- INTVAL (operands[1]) - INTVAL (operands[2]);
|
||||
else
|
||||
ofs = INTVAL (operands[2]);
|
||||
|
||||
ofs = INTVAL (operands[2]);
|
||||
ofs = ofs / 8;
|
||||
|
||||
alpha_expand_unaligned_store (operands[0], operands[3],
|
||||
|
@ -6402,108 +6033,43 @@
|
|||
;; actually differentiate between ILOG and ICMP in the schedule.
|
||||
[(set_attr "type" "icmp")])
|
||||
|
||||
(define_expand "builtin_extbl"
|
||||
(define_expand "extbl"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "reg_or_0_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
""
|
||||
{
|
||||
rtx (*gen) (rtx, rtx, rtx, rtx);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
gen = gen_extxl_be;
|
||||
else
|
||||
gen = gen_extxl_le;
|
||||
emit_insn ((*gen) (operands[0], operands[1], GEN_INT (8), operands[2]));
|
||||
emit_insn (gen_extxl (operands[0], operands[1], GEN_INT (8), operands[2]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_extwl"
|
||||
(define_expand "extwl"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "reg_or_0_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
""
|
||||
{
|
||||
rtx (*gen) (rtx, rtx, rtx, rtx);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
gen = gen_extxl_be;
|
||||
else
|
||||
gen = gen_extxl_le;
|
||||
emit_insn ((*gen) (operands[0], operands[1], GEN_INT (16), operands[2]));
|
||||
emit_insn (gen_extxl (operands[0], operands[1], GEN_INT (16), operands[2]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_extll"
|
||||
(define_expand "extll"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "reg_or_0_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
""
|
||||
{
|
||||
rtx (*gen) (rtx, rtx, rtx, rtx);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
gen = gen_extxl_be;
|
||||
else
|
||||
gen = gen_extxl_le;
|
||||
emit_insn ((*gen) (operands[0], operands[1], GEN_INT (32), operands[2]));
|
||||
emit_insn (gen_extxl (operands[0], operands[1], GEN_INT (32), operands[2]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_extql"
|
||||
(define_expand "extql"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "reg_or_0_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
""
|
||||
{
|
||||
rtx (*gen) (rtx, rtx, rtx, rtx);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
gen = gen_extxl_be;
|
||||
else
|
||||
gen = gen_extxl_le;
|
||||
emit_insn ((*gen) (operands[0], operands[1], GEN_INT (64), operands[2]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_extwh"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "reg_or_0_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
""
|
||||
{
|
||||
rtx (*gen) (rtx, rtx, rtx);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
gen = gen_extwh_be;
|
||||
else
|
||||
gen = gen_extwh_le;
|
||||
emit_insn ((*gen) (operands[0], operands[1], operands[2]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_extlh"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "reg_or_0_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
""
|
||||
{
|
||||
rtx (*gen) (rtx, rtx, rtx);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
gen = gen_extlh_be;
|
||||
else
|
||||
gen = gen_extlh_le;
|
||||
emit_insn ((*gen) (operands[0], operands[1], operands[2]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_extqh"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "reg_or_0_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
""
|
||||
{
|
||||
rtx (*gen) (rtx, rtx, rtx);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
gen = gen_extqh_be;
|
||||
else
|
||||
gen = gen_extqh_le;
|
||||
emit_insn ((*gen) (operands[0], operands[1], operands[2]));
|
||||
emit_insn (gen_extxl (operands[0], operands[1], GEN_INT (64), operands[2]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
|
@ -6513,13 +6079,8 @@
|
|||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
""
|
||||
{
|
||||
rtx (*gen) (rtx, rtx, rtx);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
gen = gen_insbl_be;
|
||||
else
|
||||
gen = gen_insbl_le;
|
||||
operands[1] = gen_lowpart (QImode, operands[1]);
|
||||
emit_insn ((*gen) (operands[0], operands[1], operands[2]));
|
||||
emit_insn (gen_insbl (operands[0], operands[1], operands[2]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
|
@ -6529,13 +6090,8 @@
|
|||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
""
|
||||
{
|
||||
rtx (*gen) (rtx, rtx, rtx);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
gen = gen_inswl_be;
|
||||
else
|
||||
gen = gen_inswl_le;
|
||||
operands[1] = gen_lowpart (HImode, operands[1]);
|
||||
emit_insn ((*gen) (operands[0], operands[1], operands[2]));
|
||||
emit_insn (gen_inswl (operands[0], operands[1], operands[2]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
|
@ -6545,33 +6101,12 @@
|
|||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
""
|
||||
{
|
||||
rtx (*gen) (rtx, rtx, rtx);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
gen = gen_insll_be;
|
||||
else
|
||||
gen = gen_insll_le;
|
||||
operands[1] = gen_lowpart (SImode, operands[1]);
|
||||
emit_insn ((*gen) (operands[0], operands[1], operands[2]));
|
||||
emit_insn ((*gen) (operands[0], operands[1], operands[2]));
|
||||
emit_insn (gen_insll (operands[0], operands[1], operands[2]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_insql"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "reg_or_0_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
""
|
||||
{
|
||||
rtx (*gen) (rtx, rtx, rtx);
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
gen = gen_insql_be;
|
||||
else
|
||||
gen = gen_insql_le;
|
||||
emit_insn ((*gen) (operands[0], operands[1], operands[2]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_inswh"
|
||||
(define_expand "inswh"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "register_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
|
@ -6581,7 +6116,7 @@
|
|||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_inslh"
|
||||
(define_expand "inslh"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "register_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
|
@ -6591,7 +6126,7 @@
|
|||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_insqh"
|
||||
(define_expand "insqh"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "register_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
|
@ -6601,75 +6136,51 @@
|
|||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_mskbl"
|
||||
(define_expand "mskbl"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "reg_or_0_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
""
|
||||
{
|
||||
rtx (*gen) (rtx, rtx, rtx, rtx);
|
||||
rtx mask;
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
gen = gen_mskxl_be;
|
||||
else
|
||||
gen = gen_mskxl_le;
|
||||
mask = GEN_INT (0xff);
|
||||
emit_insn ((*gen) (operands[0], operands[1], mask, operands[2]));
|
||||
rtx mask = GEN_INT (0xff);
|
||||
emit_insn (gen_mskxl (operands[0], operands[1], mask, operands[2]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_mskwl"
|
||||
(define_expand "mskwl"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "reg_or_0_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
""
|
||||
{
|
||||
rtx (*gen) (rtx, rtx, rtx, rtx);
|
||||
rtx mask;
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
gen = gen_mskxl_be;
|
||||
else
|
||||
gen = gen_mskxl_le;
|
||||
mask = GEN_INT (0xffff);
|
||||
emit_insn ((*gen) (operands[0], operands[1], mask, operands[2]));
|
||||
rtx mask = GEN_INT (0xffff);
|
||||
emit_insn (gen_mskxl (operands[0], operands[1], mask, operands[2]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_mskll"
|
||||
(define_expand "mskll"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "reg_or_0_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
""
|
||||
{
|
||||
rtx (*gen) (rtx, rtx, rtx, rtx);
|
||||
rtx mask;
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
gen = gen_mskxl_be;
|
||||
else
|
||||
gen = gen_mskxl_le;
|
||||
mask = immed_double_const (0xffffffff, 0, DImode);
|
||||
emit_insn ((*gen) (operands[0], operands[1], mask, operands[2]));
|
||||
rtx mask = immed_double_const (0xffffffff, 0, DImode);
|
||||
emit_insn (gen_mskxl (operands[0], operands[1], mask, operands[2]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_mskql"
|
||||
(define_expand "mskql"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "reg_or_0_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
""
|
||||
{
|
||||
rtx (*gen) (rtx, rtx, rtx, rtx);
|
||||
rtx mask;
|
||||
if (WORDS_BIG_ENDIAN)
|
||||
gen = gen_mskxl_be;
|
||||
else
|
||||
gen = gen_mskxl_le;
|
||||
mask = constm1_rtx;
|
||||
emit_insn ((*gen) (operands[0], operands[1], mask, operands[2]));
|
||||
rtx mask = constm1_rtx;
|
||||
emit_insn (gen_mskxl (operands[0], operands[1], mask, operands[2]));
|
||||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_mskwh"
|
||||
(define_expand "mskwh"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "register_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
|
@ -6679,7 +6190,7 @@
|
|||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_msklh"
|
||||
(define_expand "msklh"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "register_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
|
@ -6689,7 +6200,7 @@
|
|||
DONE;
|
||||
})
|
||||
|
||||
(define_expand "builtin_mskqh"
|
||||
(define_expand "mskqh"
|
||||
[(match_operand:DI 0 "register_operand" "")
|
||||
(match_operand:DI 1 "register_operand" "")
|
||||
(match_operand:DI 2 "reg_or_8bit_operand" "")]
|
||||
|
|
Loading…
Reference in New Issue