@@ -1488,7 +1488,7 @@ asan_emit_stack_protection (rtx base, rtx pbase, unsigned int alignb,
ret = emit_library_call_value (ret, NULL_RTX, LCT_NORMAL, ptr_mode,
GEN_INT (asan_frame_size
+ base_align_bias),
- TYPE_MODE (pointer_sized_int_node));
+ TYPE_MODE (pointer_sized_int_node), 0);
/* __asan_stack_malloc_[n] returns a pointer to fake stack if succeeded
and NULL otherwise. Check RET value is NULL here and jump over the
BASE reassignment in this case. Otherwise, reassign BASE to RET. */
@@ -1615,7 +1615,7 @@ asan_emit_stack_protection (rtx base, rtx pbase, unsigned int alignb,
emit_library_call (ret, LCT_NORMAL, ptr_mode, addr, ptr_mode,
GEN_INT (asan_frame_size + base_align_bias),
TYPE_MODE (pointer_sized_int_node),
- orig_addr, ptr_mode);
+ orig_addr, ptr_mode, 0);
}
lab = gen_label_rtx ();
emit_jump (lab);
@@ -1715,7 +1715,7 @@ asan_emit_allocas_unpoison (rtx top, rtx bot, rtx_insn *before)
top = convert_memory_address (ptr_mode, top);
bot = convert_memory_address (ptr_mode, bot);
emit_library_call (ret, LCT_NORMAL, ptr_mode,
- top, ptr_mode, bot, ptr_mode);
+ top, ptr_mode, bot, ptr_mode, 0);
do_pending_stack_adjust ();
rtx_insn *insns = get_insns ();
@@ -2979,7 +2979,7 @@ expand_builtin_powi (tree exp, rtx target)
target = emit_library_call_value (optab_libfunc (powi_optab, mode),
target, LCT_CONST, mode,
- op0, mode, op1, mode2);
+ op0, mode, op1, mode2, 0);
return target;
}
@@ -5858,7 +5858,7 @@ expand_asan_emit_allocas_unpoison (tree exp)
OPTAB_LIB_WIDEN);
rtx ret = init_one_libfunc ("__asan_allocas_unpoison");
ret = emit_library_call_value (ret, NULL_RTX, LCT_NORMAL, ptr_mode,
- top, ptr_mode, bot, ptr_mode);
+ top, ptr_mode, bot, ptr_mode, 0);
return ret;
}
@@ -5247,7 +5247,7 @@ emit_library_call_value_1 (int retval, rtx orgfun, rtx value,
{
rtx val = args[i].first;
function_arg_info arg (args[i].second, /*named=*/true);
- int unsigned_p = 0;
+ int unsigned_p = GET_THIRD(args[i]);
/* We cannot convert the arg value to the mode the library wants here;
must do it earlier where we know the signedness of the arg. */
@@ -6244,7 +6244,7 @@ expand_main_function (void)
|| (!defined(HAS_INIT_SECTION) \
&& !defined(INIT_SECTION_ASM_OP) \
&& !defined(INIT_ARRAY_SECTION_ASM_OP)))
- emit_library_call (init_one_libfunc (NAME__MAIN), LCT_NORMAL, VOIDmode);
+ emit_library_call (init_one_libfunc (NAME__MAIN), LCT_NORMAL, VOIDmode, 0);
#endif
}
@@ -10356,7 +10356,7 @@ aarch64_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__clear_cache"),
LCT_NORMAL, VOIDmode, a_tramp, ptr_mode,
plus_constant (ptr_mode, a_tramp, TRAMPOLINE_SIZE),
- ptr_mode);
+ ptr_mode, 0);
}
static unsigned char
@@ -18516,7 +18516,7 @@ aarch64_expand_compare_and_swap (rtx operands[])
rtx func = aarch64_atomic_ool_func (mode, mod_s, &aarch64_ool_cas_names);
rval = emit_library_call_value (func, NULL_RTX, LCT_NORMAL, r_mode,
oldval, mode, newval, mode,
- XEXP (mem, 0), Pmode);
+ XEXP (mem, 0), Pmode, 0);
cc_reg = aarch64_gen_compare_reg_maybe_ze (NE, rval, oldval, mode);
}
else
@@ -1092,7 +1092,7 @@ typedef struct
rtx fun, lr; \
lr = get_hard_reg_initial_val (Pmode, LR_REGNUM); \
fun = gen_rtx_SYMBOL_REF (Pmode, MCOUNT_NAME); \
- emit_library_call (fun, LCT_NORMAL, VOIDmode, lr, Pmode); \
+ emit_library_call (fun, LCT_NORMAL, VOIDmode, lr, Pmode, 0); \
}
/* All the work done in PROFILE_HOOK, but still required. */
@@ -199,7 +199,7 @@
&aarch64_ool_swp_names);
rtx rval = emit_library_call_value (func, operands[0], LCT_NORMAL,
mode, operands[2], mode,
- XEXP (operands[1], 0), Pmode);
+ XEXP (operands[1], 0), Pmode, 0);
emit_move_insn (operands[0], rval);
}
else
@@ -321,7 +321,7 @@
rtx func = aarch64_atomic_ool_func (mode, operands[2], names);
emit_library_call_value (func, NULL_RTX, LCT_NORMAL, mode,
operands[1], mode,
- XEXP (operands[0], 0), Pmode);
+ XEXP (operands[0], 0), Pmode, 0);
DONE;
}
else
@@ -479,7 +479,7 @@
rtx func = aarch64_atomic_ool_func (mode, operands[3], names);
rtx rval = emit_library_call_value (func, operands[0], LCT_NORMAL, mode,
operands[2], mode,
- XEXP (operands[1], 0), Pmode);
+ XEXP (operands[1], 0), Pmode, 0);
emit_move_insn (operands[0], rval);
DONE;
}
@@ -5533,7 +5533,7 @@ alpha_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
emit_insn (gen_imb ());
#ifdef HAVE_ENABLE_EXECUTE_STACK
emit_library_call (init_one_libfunc ("__enable_execute_stack"),
- LCT_NORMAL, VOIDmode, XEXP (m_tramp, 0), Pmode);
+ LCT_NORMAL, VOIDmode, XEXP (m_tramp, 0), Pmode, 0);
#endif
}
}
@@ -4421,7 +4421,7 @@ arc_initialize_trampoline (rtx tramp, tree fndecl, rtx cxt)
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__clear_cache"),
LCT_NORMAL, VOIDmode, XEXP (tramp, 0), Pmode,
plus_constant (Pmode, XEXP (tramp, 0), TRAMPOLINE_SIZE),
- Pmode);
+ Pmode, 0);
}
/* Add the given function declaration to emit code in JLI section. */
@@ -85,7 +85,7 @@ along with GCC; see the file COPYING3. If not see
{ \
rtx fun; \
fun = gen_rtx_SYMBOL_REF (Pmode, "__mcount"); \
- emit_library_call (fun, LCT_NORMAL, VOIDmode); \
+ emit_library_call (fun, LCT_NORMAL, VOIDmode, 0); \
}
/* Enter/Leave default value. */
@@ -131,7 +131,7 @@ along with GCC; see the file COPYING3. If not see
rtx fun, rt; \
rt = get_hard_reg_initial_val (Pmode, RETURN_ADDR_REGNUM); \
fun = gen_rtx_SYMBOL_REF (Pmode, "_mcount"); \
- emit_library_call (fun, LCT_NORMAL, VOIDmode, rt, Pmode); \
+ emit_library_call (fun, LCT_NORMAL, VOIDmode, rt, Pmode, 0); \
}
/* Enter/Leave ops are default off for linux targets. */
@@ -4151,7 +4151,7 @@ arm_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
a_tramp = XEXP (m_tramp, 0);
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__clear_cache"),
LCT_NORMAL, VOIDmode, a_tramp, Pmode,
- plus_constant (Pmode, a_tramp, TRAMPOLINE_SIZE), Pmode);
+ plus_constant (Pmode, a_tramp, TRAMPOLINE_SIZE), Pmode, 0);
}
/* Thumb trampolines should be entered in thumb mode, so set
@@ -8918,7 +8918,7 @@ arm_call_tls_get_addr (rtx x, rtx reg, rtx *valuep, int reloc)
*valuep = emit_library_call_value (get_tls_get_addr (), NULL_RTX,
LCT_PURE, /* LCT_CONST? */
- Pmode, reg, Pmode);
+ Pmode, reg, Pmode, 0);
rtx_insn *insns = get_insns ();
end_sequence ();
@@ -32883,7 +32883,7 @@ arm_expand_divmod_libfunc (rtx libfunc, machine_mode mode,
rtx libval = emit_library_call_value (libfunc, NULL_RTX, LCT_CONST,
libval_mode,
op0, GET_MODE (op0),
- op1, GET_MODE (op1));
+ op1, GET_MODE (op1), 0);
rtx quotient = simplify_gen_subreg (mode, libval, libval_mode, 0);
rtx remainder = simplify_gen_subreg (mode, libval, libval_mode,
@@ -33097,7 +33097,7 @@ arm_constant_alignment (const_tree exp, HOST_WIDE_INT align)
void
arm_emit_speculation_barrier_function ()
{
- emit_library_call (speculation_barrier_libfunc, LCT_NORMAL, VOIDmode);
+ emit_library_call (speculation_barrier_libfunc, LCT_NORMAL, VOIDmode, 0);
}
/* Have we recorded an explicit access to the Q bit of APSR?. */
@@ -1580,7 +1580,7 @@
emit_library_call_value (umulsi3_highpart_libfunc,
operands[0], LCT_NORMAL, SImode,
- operands[1], SImode, operands[2], SImode);
+ operands[1], SImode, operands[2], SImode, 0);
}
DONE;
})
@@ -1630,7 +1630,7 @@
emit_library_call_value (smulsi3_highpart_libfunc,
operands[0], LCT_NORMAL, SImode,
- operands[1], SImode, operands[2], SImode);
+ operands[1], SImode, operands[2], SImode, 0);
}
DONE;
})
@@ -727,7 +727,7 @@ c6x_initialize_trampoline (rtx tramp, tree fndecl, rtx cxt)
tramp = XEXP (tramp, 0);
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__gnu_clear_cache"),
LCT_NORMAL, VOIDmode, tramp, Pmode,
- plus_constant (Pmode, tramp, TRAMPOLINE_SIZE), Pmode);
+ plus_constant (Pmode, tramp, TRAMPOLINE_SIZE), Pmode, 0);
#endif
}
@@ -1579,7 +1579,7 @@ c6x_expand_compare (rtx comparison, machine_mode mode)
start_sequence ();
cmp = emit_library_call_value (libfunc, 0, LCT_CONST, SImode,
- op0, op_mode, op1, op_mode);
+ op0, op_mode, op1, op_mode, 0);
insns = get_insns ();
end_sequence ();
@@ -1715,7 +1715,7 @@ c6x_expand_cpymem (rtx dst, rtx src, rtx count_exp, rtx align_exp,
if (dst_expr)
mark_addressable (dst_expr);
emit_library_call (fn, LCT_NORMAL, VOIDmode,
- dstreg, Pmode, srcreg, Pmode, count_exp, SImode);
+ dstreg, Pmode, srcreg, Pmode, count_exp, SImode, 0);
return true;
}
@@ -2739,7 +2739,7 @@ csky_call_tls_get_addr (rtx x, rtx reg, rtx *valuep, int reloc)
emit_insn (gen_addsi3 (reg, reg, tmp));
*valuep = emit_library_call_value (get_tls_get_addr (),
NULL_RTX, LCT_PURE, /* LCT_CONST? */
- Pmode, reg, Pmode);
+ Pmode, reg, Pmode, 0);
insns = get_insns ();
end_sequence ();
return insns;
@@ -5858,7 +5858,7 @@ csky_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
a_tramp = XEXP (m_tramp, 0);
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__clear_cache"),
LCT_NORMAL, VOIDmode, a_tramp, Pmode,
- plus_constant (Pmode, a_tramp, TRAMPOLINE_SIZE), Pmode);
+ plus_constant (Pmode, a_tramp, TRAMPOLINE_SIZE), Pmode, 0);
}
@@ -6204,7 +6204,7 @@ frv_trampoline_init (rtx m_tramp, tree fndecl, rtx static_chain)
addr, Pmode,
GEN_INT (frv_trampoline_size ()), SImode,
fnaddr, Pmode,
- sc_reg, Pmode);
+ sc_reg, Pmode, 0);
}
@@ -20268,7 +20268,7 @@ ix86_expand_divmod_libfunc (rtx libfunc, machine_mode mode,
rtx quot = emit_library_call_value (libfunc, NULL_RTX, LCT_NORMAL,
mode, op0, mode, op1, mode,
- XEXP (rem, 0), Pmode);
+ XEXP (rem, 0), Pmode, 0);
*quot_p = quot;
*rem_p = rem;
}
@@ -17100,7 +17100,7 @@ ix86_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
if (CHECK_EXECUTE_STACK_ENABLED)
#endif
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__enable_execute_stack"),
- LCT_NORMAL, VOIDmode, XEXP (m_tramp, 0), Pmode);
+ LCT_NORMAL, VOIDmode, XEXP (m_tramp, 0), Pmode, 0);
#endif
}
@@ -1225,7 +1225,7 @@ ia64_expand_tls_address (enum tls_model tls_kind, rtx op0, rtx op1,
tga_ret = emit_library_call_value (gen_tls_get_addr (), NULL_RTX,
LCT_CONST, Pmode,
- tga_op1, Pmode, tga_op2, Pmode);
+ tga_op1, Pmode, tga_op2, Pmode, 0);
insns = get_insns ();
end_sequence ();
@@ -1249,7 +1249,7 @@ ia64_expand_tls_address (enum tls_model tls_kind, rtx op0, rtx op1,
tga_ret = emit_library_call_value (gen_tls_get_addr (), NULL_RTX,
LCT_CONST, Pmode,
- tga_op1, Pmode, tga_op2, Pmode);
+ tga_op1, Pmode, tga_op2, Pmode, 0);
insns = get_insns ();
end_sequence ();
@@ -1860,7 +1860,7 @@ ia64_expand_compare (rtx *expr, rtx *op0, rtx *op1)
ret = emit_library_call_value (cmptf_libfunc, 0, LCT_CONST, DImode,
*op0, TFmode, *op1, TFmode,
- GEN_INT (magic), DImode);
+ GEN_INT (magic), DImode, 0);
cmp = gen_reg_rtx (BImode);
emit_insn (gen_rtx_SET (cmp, gen_rtx_fmt_ee (ncode, BImode,
ret, const0_rtx)));
@@ -11203,7 +11203,7 @@ ia64_profile_hook (int labelno)
VOIDmode,
gen_rtx_REG (Pmode, BR_REG (0)), Pmode,
ip, Pmode,
- label, Pmode);
+ label, Pmode, 0);
}
/* Return the mangling of TYPE if it is an extended fundamental type. */
@@ -5057,7 +5057,7 @@
emit_library_call (gen_rtx_SYMBOL_REF (Pmode,
\"__ia64_save_stack_nonlocal\"),
LCT_NORMAL, VOIDmode, XEXP (operands[0], 0), Pmode,
- operands[1], Pmode);
+ operands[1], Pmode, 0);
DONE;
})
@@ -5072,7 +5072,7 @@
LCT_NORETURN, VOIDmode,
operands[1], Pmode,
copy_to_reg (XEXP (operands[2], 0)), Pmode,
- operands[3], Pmode);
+ operands[3], Pmode, 0);
emit_barrier ();
DONE;
})
@@ -5135,7 +5135,7 @@
emit_library_call (gen_rtx_SYMBOL_REF (Pmode,
"__ia64_restore_stack_nonlocal"),
LCT_NORMAL, VOIDmode,
- copy_to_reg (XEXP (operands[1], 0)), Pmode);
+ copy_to_reg (XEXP (operands[1], 0)), Pmode, 0);
DONE;
})
@@ -2498,7 +2498,7 @@ block_move_call (rtx dest_reg, rtx src_reg, rtx bytes_rtx)
VOIDmode, dest_reg, Pmode, src_reg, Pmode,
convert_to_mode (TYPE_MODE (sizetype), bytes_rtx,
TYPE_UNSIGNED (sizetype)),
- TYPE_MODE (sizetype));
+ TYPE_MODE (sizetype), 0);
}
/* Expand string/block move operations.
@@ -2819,7 +2819,7 @@ m32r_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
emit_library_call (m32r_function_symbol (m32r_cache_flush_func),
LCT_NORMAL, VOIDmode, XEXP (m_tramp, 0), Pmode,
gen_int_mode (TRAMPOLINE_SIZE, SImode), SImode,
- GEN_INT (3), SImode);
+ GEN_INT (3), SImode, 0);
}
/* True if X is a reg that can be used as a base reg. */
@@ -197,7 +197,7 @@ along with GCC; see the file COPYING3. If not see
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__clear_cache"), \
LCT_NORMAL, VOIDmode, TRAMP, Pmode, \
plus_constant (Pmode, TRAMP, TRAMPOLINE_SIZE), \
- Pmode);
+ Pmode, 0);
/* Clear the instruction cache from `beg' to `end'. This makes an
inline system call to SYS_cacheflush. The arguments are as
@@ -2720,7 +2720,7 @@ m68k_call_tls_get_addr (rtx x, rtx eqv, enum m68k_reloc reloc)
m68k_libcall_value_in_a0_p = true;
a0 = emit_library_call_value (m68k_get_tls_get_addr (), NULL_RTX, LCT_PURE,
- Pmode, x, Pmode);
+ Pmode, x, Pmode, 0);
m68k_libcall_value_in_a0_p = false;
insns = get_insns ();
@@ -2769,7 +2769,7 @@ m68k_call_m68k_read_tp (void)
/* Emit the call sequence. */
m68k_libcall_value_in_a0_p = true;
a0 = emit_library_call_value (m68k_get_m68k_read_tp (), NULL_RTX, LCT_PURE,
- Pmode);
+ Pmode, 0);
m68k_libcall_value_in_a0_p = false;
insns = get_insns ();
end_sequence ();
@@ -583,7 +583,7 @@ microblaze_call_tls_get_addr (rtx x, rtx reg, rtx *valuep, int reloc)
*valuep = emit_library_call_value (get_tls_get_addr (), NULL_RTX,
LCT_PURE, /* LCT_CONST? */
- Pmode, reg, Pmode);
+ Pmode, reg, Pmode, 0);
insns = get_insns ();
end_sequence ();
@@ -3721,7 +3721,7 @@ microblaze_expand_divide (rtx operands[])
operands[0], LCT_NORMAL,
GET_MODE (operands[0]),
operands[1], GET_MODE (operands[1]),
- operands[2], GET_MODE (operands[2]));
+ operands[2], GET_MODE (operands[2]), 0);
if (ret != operands[0])
emit_move_insn (operands[0], ret);
@@ -2577,7 +2577,7 @@ typedef struct mips_args {
the system has a write-back cache. */ \
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, mips_cache_flush_func), \
LCT_NORMAL, VOIDmode, ADDR, Pmode, SIZE, Pmode, \
- GEN_INT (3), TYPE_MODE (integer_type_node))
+ GEN_INT (3), TYPE_MODE (integer_type_node), 0)
/* Addressing modes, and classification of registers for them. */
@@ -71,7 +71,7 @@ extern void mips_sync_icache (void *beg, unsigned long len);
#define MIPS_ICACHE_SYNC(ADDR, SIZE) \
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, mips_cache_flush_func), \
LCT_NORMAL, VOIDmode, ADDR, Pmode, \
- SIZE, TYPE_MODE (sizetype))
+ SIZE, TYPE_MODE (sizetype), 0)
/* This version of _mcount does not pop 2 words from the stack. */
#undef FUNCTION_PROFILER
@@ -1385,7 +1385,7 @@ enum reg_class
rtx fun, lp; \
lp = get_hard_reg_initial_val (Pmode, LP_REGNUM); \
fun = gen_rtx_SYMBOL_REF (Pmode, "_mcount"); \
- emit_library_call (fun, LCT_NORMAL, VOIDmode, lp, Pmode); \
+ emit_library_call (fun, LCT_NORMAL, VOIDmode, lp, Pmode, 0); \
}
@@ -1857,7 +1857,7 @@ nios2_emit_expensive_div (rtx *operands, machine_mode mode)
final_result = emit_library_call_value (libfunc, NULL_RTX,
LCT_CONST, SImode,
operands[1], SImode,
- operands[2], SImode);
+ operands[2], SImode, 0);
insns = get_insns ();
end_sequence ();
@@ -3478,7 +3478,7 @@ nios2_trampoline_init (rtx m_tramp, tree fndecl, rtx cxt)
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__trampoline_setup"),
LCT_NORMAL, VOIDmode, addr, Pmode, fnaddr, Pmode,
- ctx_reg, Pmode);
+ ctx_reg, Pmode, 0);
}
/* Implement TARGET_FUNCTION_VALUE. */
@@ -647,7 +647,7 @@ static void
or1k_tls_call (rtx dest, rtx arg)
{
emit_library_call_value (gen_tls_get_addr (), dest, LCT_CONST,
- Pmode, arg, Pmode);
+ Pmode, arg, Pmode, 0);
}
/* Helper for or1k_legitimize_address_1. Wrap X in an unspec. */
@@ -927,7 +927,7 @@ hppa_tls_call (rtx arg)
ret = gen_reg_rtx (Pmode);
emit_library_call_value (gen_tls_get_addr (), ret,
- LCT_CONST, Pmode, arg, Pmode);
+ LCT_CONST, Pmode, arg, Pmode, 0);
return ret;
}
@@ -10214,7 +10214,7 @@ pa_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
#ifdef HAVE_ENABLE_EXECUTE_STACK
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__enable_execute_stack"),
- LCT_NORMAL, VOIDmode, XEXP (m_tramp, 0), Pmode);
+ LCT_NORMAL, VOIDmode, XEXP (m_tramp, 0), Pmode, 0);
#endif
}
@@ -9663,7 +9663,7 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
emit_library_call_value (canonicalize_funcptr_for_compare_libfunc,
operands[0], LCT_NORMAL, Pmode,
- operands[1], Pmode);
+ operands[1], Pmode, 0);
DONE;
}
@@ -982,7 +982,7 @@ pru_expand_fp_compare (rtx comparison, machine_mode mode)
start_sequence ();
cmp = emit_library_call_value (libfunc, 0, LCT_CONST, SImode,
- op0, op_mode, op1, op_mode);
+ op0, op_mode, op1, op_mode, 0);
insns = get_insns ();
end_sequence ();
@@ -336,7 +336,7 @@ along with GCC; see the file COPYING3. If not see
rtx fun, ra; \
ra = get_hard_reg_initial_val (Pmode, RETURN_ADDR_REGNUM); \
fun = gen_rtx_SYMBOL_REF (Pmode, MCOUNT_NAME); \
- emit_library_call (fun, LCT_NORMAL, VOIDmode, ra, Pmode); \
+ emit_library_call (fun, LCT_NORMAL, VOIDmode, ra, Pmode, 0); \
}
/* All the work done in PROFILE_HOOK, but still required. */
@@ -1527,7 +1527,7 @@
#ifdef ICACHE_FLUSH_FUNC
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, ICACHE_FLUSH_FUNC),
LCT_NORMAL, VOIDmode, operands[0], Pmode,
- operands[1], Pmode, const0_rtx, Pmode);
+ operands[1], Pmode, const0_rtx, Pmode, 0);
#else
emit_insn (gen_fence_i ());
#endif
@@ -4937,7 +4937,7 @@ rl78_emit_libcall (const char *name, enum rtx_code code,
{
case 2:
ret = emit_library_call_value (libcall, NULL_RTX, LCT_CONST,
- dmode, operands[1], smode);
+ dmode, operands[1], smode, 0);
equiv = gen_rtx_fmt_e (code, dmode, operands[1]);
break;
@@ -4945,7 +4945,7 @@ rl78_emit_libcall (const char *name, enum rtx_code code,
ret = emit_library_call_value (libcall, NULL_RTX,
LCT_CONST, dmode,
operands[1], smode, operands[2],
- smode);
+ smode, 0);
equiv = gen_rtx_fmt_ee (code, dmode, operands[1], operands[2]);
break;
@@ -1618,7 +1618,7 @@ expand_compare_loop (rtx operands[])
target, LCT_NORMAL, GET_MODE (target),
src1_addr, Pmode,
src2_addr, Pmode,
- len_rtx, GET_MODE (len_rtx));
+ len_rtx, GET_MODE (len_rtx), 0);
}
/* emit final_label */
@@ -2583,7 +2583,7 @@ expand_strn_compare (rtx operands[], int no_length)
emit_library_call_value (XEXP (DECL_RTL (fun), 0),
target, LCT_NORMAL, GET_MODE (target),
force_reg (Pmode, src1_addr), Pmode,
- force_reg (Pmode, src2_addr), Pmode);
+ force_reg (Pmode, src2_addr), Pmode, 0);
}
else
{
@@ -2598,7 +2598,7 @@ expand_strn_compare (rtx operands[], int no_length)
target, LCT_NORMAL, GET_MODE (target),
force_reg (Pmode, src1_addr), Pmode,
force_reg (Pmode, src2_addr), Pmode,
- len_rtx, Pmode);
+ len_rtx, Pmode, 0);
}
rtx fin_ref = gen_rtx_LABEL_REF (VOIDmode, final_label);
@@ -2653,7 +2653,7 @@ expand_strn_compare (rtx operands[], int no_length)
tree fun = builtin_decl_explicit (BUILT_IN_STRCMP);
emit_library_call_value (XEXP (DECL_RTL (fun), 0),
target, LCT_NORMAL, GET_MODE (target),
- src1, Pmode, src2, Pmode);
+ src1, Pmode, src2, Pmode, 0);
}
else
{
@@ -2662,7 +2662,7 @@ expand_strn_compare (rtx operands[], int no_length)
tree fun = builtin_decl_explicit (BUILT_IN_STRNCMP);
emit_library_call_value (XEXP (DECL_RTL (fun), 0),
target, LCT_NORMAL, GET_MODE (target),
- src1, Pmode, src2, Pmode, len_rtx, Pmode);
+ src1, Pmode, src2, Pmode, len_rtx, Pmode, 0);
}
rtx fin_ref = gen_rtx_LABEL_REF (VOIDmode, final_label);
@@ -8660,7 +8660,7 @@ rs6000_legitimize_tls_address (rtx addr, enum tls_model model)
rtx argreg = gen_rtx_REG (Pmode, 3);
emit_insn (gen_rtx_SET (argreg, arg));
global_tlsarg = arg;
- emit_library_call_value (tga, dest, LCT_CONST, Pmode, argreg, Pmode);
+ emit_library_call_value (tga, dest, LCT_CONST, Pmode, argreg, Pmode, 0);
global_tlsarg = NULL_RTX;
/* Make a note so that the result of this call can be CSEd. */
@@ -8676,7 +8676,7 @@ rs6000_legitimize_tls_address (rtx addr, enum tls_model model)
rtx argreg = gen_rtx_REG (Pmode, 3);
emit_insn (gen_rtx_SET (argreg, arg));
global_tlsarg = arg;
- emit_library_call_value (tga, tmp1, LCT_CONST, Pmode, argreg, Pmode);
+ emit_library_call_value (tga, tmp1, LCT_CONST, Pmode, argreg, Pmode, 0);
global_tlsarg = NULL_RTX;
/* Make a note so that the result of this call can be CSEd. */
@@ -13934,7 +13934,7 @@ rs6000_generate_compare (rtx cmp, machine_mode mode)
if (!check_nan)
dest = emit_library_call_value (libfunc, NULL_RTX, LCT_CONST,
- SImode, op0, mode, op1, mode);
+ SImode, op0, mode, op1, mode, 0);
/* The library signals an exception for signalling NaNs, so we need to
handle isgreater, etc. by first checking isordered. */
@@ -13950,7 +13950,7 @@ rs6000_generate_compare (rtx cmp, machine_mode mode)
/* Test for either value being a NaN. */
gcc_assert (unord_func);
unord_dest = emit_library_call_value (unord_func, NULL_RTX, LCT_CONST,
- SImode, op0, mode, op1, mode);
+ SImode, op0, mode, op1, mode, 0);
/* Set value (0) if either value is a NaN, and jump to the join
label. */
@@ -13969,7 +13969,7 @@ rs6000_generate_compare (rtx cmp, machine_mode mode)
/* Do the normal comparison, knowing that the values are not
NaNs. */
normal_dest = emit_library_call_value (libfunc, NULL_RTX, LCT_CONST,
- SImode, op0, mode, op1, mode);
+ SImode, op0, mode, op1, mode, 0);
emit_insn (gen_cstoresi4 (dest,
gen_rtx_fmt_ee (code, SImode, normal_dest,
@@ -14297,7 +14297,7 @@ rs6000_expand_float128_convert (rtx dest, rtx src, bool unsigned_p)
gcc_assert (libfunc != NULL_RTX);
dest2 = emit_library_call_value (libfunc, dest, LCT_CONST, dest_mode,
- src, src_mode);
+ src, src_mode, 0);
gcc_assert (dest2 != NULL_RTX);
if (!rtx_equal_p (dest, dest2))
@@ -16658,7 +16658,7 @@ output_profile_hook (int labelno ATTRIBUTE_UNUSED)
#endif
if (NO_PROFILE_COUNTERS)
emit_library_call (init_one_libfunc (RS6000_MCOUNT),
- LCT_NORMAL, VOIDmode);
+ LCT_NORMAL, VOIDmode, 0);
else
{
char buf[30];
@@ -16670,7 +16670,7 @@ output_profile_hook (int labelno ATTRIBUTE_UNUSED)
fun = gen_rtx_SYMBOL_REF (Pmode, label_name);
emit_library_call (init_one_libfunc (RS6000_MCOUNT),
- LCT_NORMAL, VOIDmode, fun, Pmode);
+ LCT_NORMAL, VOIDmode, fun, Pmode, 0);
}
}
else if (DEFAULT_ABI == ABI_DARWIN)
@@ -16690,7 +16690,7 @@ output_profile_hook (int labelno ATTRIBUTE_UNUSED)
#endif
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, mcount_name),
LCT_NORMAL, VOIDmode,
- gen_rtx_REG (Pmode, caller_addr_regno), Pmode);
+ gen_rtx_REG (Pmode, caller_addr_regno), Pmode, 0);
}
}
@@ -19042,7 +19042,7 @@ rs6000_trampoline_init (rtx m_tramp, tree fndecl, rtx cxt)
addr, Pmode,
GEN_INT (rs6000_trampoline_size ()), SImode,
fnaddr, Pmode,
- ctx_reg, Pmode);
+ ctx_reg, Pmode, 0);
break;
}
}
@@ -8156,7 +8156,7 @@
rtx libfunc = optab_libfunc (neg_optab, <MODE>mode);
rtx target = emit_library_call_value (libfunc, operands[0], LCT_CONST,
<MODE>mode,
- operands[1], <MODE>mode);
+ operands[1], <MODE>mode, 0);
if (target && !rtx_equal_p (target, operands[0]))
emit_move_insn (operands[0], target);
@@ -1627,7 +1627,7 @@
rtx target = emit_library_call_value (libfunc,
op5, LCT_NORMAL, DImode,
op3, DImode,
- op4, DImode);
+ op4, DImode, 0);
emit_move_insn (op5, target);
}
emit_insn (gen_vsx_extract_v2di (op3, op1, GEN_INT (1)));
@@ -1640,7 +1640,7 @@
rtx target = emit_library_call_value (libfunc,
op3, LCT_NORMAL, DImode,
op3, DImode,
- op4, DImode);
+ op4, DImode, 0);
emit_move_insn (op3, target);
}
emit_insn (gen_vsx_concat_v2di (op0, op5, op3));
@@ -1674,7 +1674,7 @@
rtx target = emit_library_call_value (libfunc,
op5, LCT_NORMAL, DImode,
op3, DImode,
- op4, DImode);
+ op4, DImode, 0);
emit_move_insn (op5, target);
}
emit_insn (gen_vsx_extract_v2di (op3, op1, GEN_INT (1)));
@@ -1687,7 +1687,7 @@
rtx target = emit_library_call_value (libfunc,
op3, LCT_NORMAL, DImode,
op3, DImode,
- op4, DImode);
+ op4, DImode, 0);
emit_move_insn (op3, target);
}
emit_insn (gen_vsx_concat_v2di (op0, op5, op3));
@@ -10116,7 +10116,7 @@ sh_trampoline_init (rtx tramp_mem, tree fndecl, rtx cxt)
|| (!(TARGET_SH4A || TARGET_SH4_300) && TARGET_USERMODE))
emit_library_call (function_symbol (NULL, "__ic_invalidate",
FUNCTION_ORDINARY).sym,
- LCT_NORMAL, VOIDmode, tramp, SImode);
+ LCT_NORMAL, VOIDmode, tramp, SImode, 0);
else
emit_insn (gen_ic_invalidate_line (tramp));
}
@@ -3667,12 +3667,12 @@ emit_soft_tfmode_libcall (const char *func_name, int nargs, rtx *operands)
if (nargs == 2)
emit_library_call (func_sym, LCT_NORMAL, VOIDmode,
arg[0], GET_MODE (arg[0]),
- arg[1], GET_MODE (arg[1]));
+ arg[1], GET_MODE (arg[1]), 0);
else
emit_library_call (func_sym, LCT_NORMAL, VOIDmode,
arg[0], GET_MODE (arg[0]),
arg[1], GET_MODE (arg[1]),
- arg[2], GET_MODE (arg[2]));
+ arg[2], GET_MODE (arg[2]), 0);
if (ret_slot)
emit_move_insn (operands[0], ret_slot);
@@ -3685,7 +3685,7 @@ emit_soft_tfmode_libcall (const char *func_name, int nargs, rtx *operands)
ret = emit_library_call_value (func_sym, operands[0], LCT_NORMAL,
GET_MODE (operands[0]),
- arg[1], GET_MODE (arg[1]));
+ arg[1], GET_MODE (arg[1]), 0);
if (ret != operands[0])
emit_move_insn (operands[0], ret);
@@ -8486,7 +8486,7 @@ sparc_emit_float_lib_cmp (rtx x, rtx y, enum rtx_code comparison)
emit_library_call (libfunc, LCT_NORMAL,
DImode,
XEXP (slot0, 0), Pmode,
- XEXP (slot1, 0), Pmode);
+ XEXP (slot1, 0), Pmode, 0);
mode = DImode;
}
else
@@ -8494,7 +8494,7 @@ sparc_emit_float_lib_cmp (rtx x, rtx y, enum rtx_code comparison)
libfunc = gen_rtx_SYMBOL_REF (Pmode, qpfunc);
emit_library_call (libfunc, LCT_NORMAL,
SImode,
- x, TFmode, y, TFmode);
+ x, TFmode, y, TFmode, 0);
mode = SImode;
}
@@ -9985,7 +9985,7 @@ sparc32_initialize_trampoline (rtx m_tramp, rtx fnaddr, rtx cxt)
the stack address is accessible. */
#ifdef HAVE_ENABLE_EXECUTE_STACK
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__enable_execute_stack"),
- LCT_NORMAL, VOIDmode, XEXP (m_tramp, 0), Pmode);
+ LCT_NORMAL, VOIDmode, XEXP (m_tramp, 0), Pmode, 0);
#endif
}
@@ -10032,7 +10032,7 @@ sparc64_initialize_trampoline (rtx m_tramp, rtx fnaddr, rtx cxt)
the stack address is accessible. */
#ifdef HAVE_ENABLE_EXECUTE_STACK
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__enable_execute_stack"),
- LCT_NORMAL, VOIDmode, XEXP (m_tramp, 0), Pmode);
+ LCT_NORMAL, VOIDmode, XEXP (m_tramp, 0), Pmode, 0);
#endif
}
@@ -10571,13 +10571,13 @@ sparc_profile_hook (int labelno)
fun = gen_rtx_SYMBOL_REF (Pmode, MCOUNT_FUNCTION);
if (NO_PROFILE_COUNTERS)
{
- emit_library_call (fun, LCT_NORMAL, VOIDmode);
+ emit_library_call (fun, LCT_NORMAL, VOIDmode, 0);
}
else
{
ASM_GENERATE_INTERNAL_LABEL (buf, "LP", labelno);
lab = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (buf));
- emit_library_call (fun, LCT_NORMAL, VOIDmode, lab, Pmode);
+ emit_library_call (fun, LCT_NORMAL, VOIDmode, lab, Pmode, 0);
}
}
@@ -5051,7 +5051,7 @@ tilegx_trampoline_init (rtx m_tramp, tree fndecl, rtx static_chain)
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__clear_cache"),
LCT_NORMAL, VOIDmode, begin_addr, Pmode,
- end_addr, Pmode);
+ end_addr, Pmode, 0);
}
@@ -4460,7 +4460,7 @@ tilepro_trampoline_init (rtx m_tramp, tree fndecl, rtx static_chain)
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__clear_cache"),
LCT_NORMAL, VOIDmode, begin_addr, Pmode,
- end_addr, Pmode);
+ end_addr, Pmode, 0);
}
@@ -2441,7 +2441,7 @@ expand_block_move_4 (rtx dst, rtx dst_reg, rtx src, rtx src_reg, rtx bytes_rtx)
convert_to_mode (TYPE_MODE (sizetype),
GEN_INT (bytes >> 2),
TYPE_UNSIGNED (sizetype)),
- TYPE_MODE (sizetype));
+ TYPE_MODE (sizetype), 0);
if (rem == 0)
return;
@@ -2477,7 +2477,7 @@ expand_block_move_2 (rtx dst, rtx dst_reg, rtx src, rtx src_reg, rtx bytes_rtx)
convert_to_mode (TYPE_MODE (sizetype),
GEN_INT (bytes >> 1),
TYPE_UNSIGNED (sizetype)),
- TYPE_MODE (sizetype));
+ TYPE_MODE (sizetype), 0);
if (rem == 0)
return;
@@ -2501,7 +2501,7 @@ expand_block_move_1 (rtx dst_reg, rtx src_reg, rtx bytes_rtx)
convert_to_mode (TYPE_MODE (sizetype),
bytes_rtx,
TYPE_UNSIGNED (sizetype)),
- TYPE_MODE (sizetype));
+ TYPE_MODE (sizetype), 0);
}
/* Generate a call to a library function to set BYTES_RTX bytes of DST with
@@ -2520,7 +2520,7 @@ expand_block_set_4 (rtx dst, rtx dst_reg, rtx value_rtx, rtx bytes_rtx)
convert_to_mode (TYPE_MODE (sizetype),
GEN_INT (bytes >> 2),
TYPE_UNSIGNED (sizetype)),
- TYPE_MODE (sizetype));
+ TYPE_MODE (sizetype), 0);
if (rem == 0)
return;
@@ -2566,7 +2566,7 @@ expand_block_set_2 (rtx dst, rtx dst_reg, rtx value_rtx, rtx bytes_rtx)
convert_to_mode (TYPE_MODE (sizetype),
GEN_INT (bytes >> 1),
TYPE_UNSIGNED (sizetype)),
- TYPE_MODE (sizetype));
+ TYPE_MODE (sizetype), 0);
if (rem == 0)
return;
@@ -2590,7 +2590,7 @@ expand_block_set_1 (rtx dst_reg, rtx value_rtx, rtx bytes_rtx)
convert_to_mode (TYPE_MODE (sizetype),
bytes_rtx,
TYPE_UNSIGNED (sizetype)),
- TYPE_MODE (sizetype));
+ TYPE_MODE (sizetype), 0);
}
/* Expand string/block move operations.
@@ -2746,7 +2746,7 @@ visium_trampoline_init (rtx m_tramp, tree fndecl, rtx static_chain)
0x04940000));
emit_library_call (set_trampoline_parity_libfunc, LCT_NORMAL, VOIDmode,
- addr, SImode);
+ addr, SImode, 0);
}
/* Return true if the current function must have and use a frame pointer. */
@@ -2785,7 +2785,7 @@ visium_profile_hook (void)
{
visium_frame_needed = true;
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "mcount"), LCT_NORMAL,
- VOIDmode);
+ VOIDmode, 0);
}
/* A C expression whose value is RTL representing the address in a stack frame
@@ -1374,7 +1374,7 @@ xtensa_expand_nonlocal_goto (rtx *operands)
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__xtensa_nonlocal_goto"),
LCT_NORMAL, VOIDmode,
containing_fp, Pmode,
- goto_handler, Pmode);
+ goto_handler, Pmode, 0);
}
@@ -1652,7 +1652,7 @@ xtensa_setup_frame_addresses (void)
if (TARGET_WINDOWED_ABI)
emit_library_call
(gen_rtx_SYMBOL_REF (Pmode, "__xtensa_libgcc_window_spill"),
- LCT_NORMAL, VOIDmode);
+ LCT_NORMAL, VOIDmode, 0);
}
@@ -4100,7 +4100,7 @@ xtensa_trampoline_init (rtx m_tramp, tree fndecl, rtx chain)
emit_move_insn (adjust_address (m_tramp, SImode, chain_off), chain);
emit_move_insn (adjust_address (m_tramp, SImode, func_off), func);
emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__xtensa_sync_caches"),
- LCT_NORMAL, VOIDmode, XEXP (m_tramp, 0), Pmode);
+ LCT_NORMAL, VOIDmode, XEXP (m_tramp, 0), Pmode, 0);
}
/* Implement TARGET_LEGITIMATE_CONSTANT_P. */
@@ -1209,7 +1209,7 @@ sjlj_emit_function_enter (rtx_code_label *dispatch_label)
}
emit_library_call (unwind_sjlj_register_libfunc, LCT_NORMAL, VOIDmode,
- XEXP (fc, 0), Pmode);
+ XEXP (fc, 0), Pmode, 0);
seq = get_insns ();
end_sequence ();
@@ -1273,7 +1273,7 @@ sjlj_emit_function_exit (void)
start_sequence ();
emit_library_call (unwind_sjlj_unregister_libfunc, LCT_NORMAL, VOIDmode,
- XEXP (crtl->eh.sjlj_fc, 0), Pmode);
+ XEXP (crtl->eh.sjlj_fc, 0), Pmode, 0);
seq = get_insns ();
end_sequence ();
@@ -1454,7 +1454,7 @@ allocate_dynamic_stack_space (rtx size, unsigned size_align,
func = init_one_libfunc ("__morestack_allocate_stack_space");
space = emit_library_call_value (func, target, LCT_NORMAL, Pmode,
- ask, Pmode);
+ ask, Pmode, 0);
if (available_label == NULL_RTX)
return space;
@@ -1681,7 +1681,7 @@ probe_stack_range (HOST_WIDE_INT first, rtx size)
plus_constant (Pmode,
size, first)));
emit_library_call (stack_check_libfunc, LCT_THROW, VOIDmode,
- addr, Pmode);
+ addr, Pmode, 0);
}
/* Next see if we have an insn to check the stack. */
@@ -3486,7 +3486,7 @@ expand_mult (machine_mode mode, rtx op0, rtx op1, rtx target,
else if (CONST_DOUBLE_AS_INT_P (scalar_op1))
#endif
{
- int shift = wi::exact_log2 (rtx_mode_t (scalar_op1, mode));
+ int shift = wi::exact_log2 (rtx_mode_t (scalar_op1, mode, unsignedp));
/* Perfect power of 2 (other than 1, which is handled above). */
if (shift > 0)
return expand_shift (LSHIFT_EXPR, mode, op0,
@@ -4199,7 +4199,7 @@ expand_divmod (int rem_flag, enum tree_code code, machine_mode mode,
op1_is_constant = CONST_INT_P (op1);
if (op1_is_constant)
{
- wide_int ext_op1 = rtx_mode_t (op1, mode);
+ wide_int ext_op1 = rtx_mode_t (op1, mode, unsignedp);
op1_is_pow2 = (wi::popcount (ext_op1) == 1
|| (! unsignedp
&& wi::popcount (wi::neg (ext_op1)) == 1));
@@ -4341,7 +4341,7 @@ expand_divmod (int rem_flag, enum tree_code code, machine_mode mode,
op1_is_constant = CONST_INT_P (op1);
if (op1_is_constant)
{
- wide_int ext_op1 = rtx_mode_t (op1, compute_mode);
+ wide_int ext_op1 = rtx_mode_t (op1, compute_mode, unsignedp);
op1_is_pow2 = (wi::popcount (ext_op1) == 1
|| (! unsignedp
&& wi::popcount (wi::neg (ext_op1)) == 1));
@@ -4389,7 +4389,7 @@ expand_divmod (int rem_flag, enum tree_code code, machine_mode mode,
unsigned HOST_WIDE_INT mh, ml;
int pre_shift, post_shift;
int dummy;
- wide_int wd = rtx_mode_t (op1, int_mode);
+ wide_int wd = rtx_mode_t (op1, int_mode, unsignedp);
unsigned HOST_WIDE_INT d = wd.to_uhwi ();
if (wi::popcount (wd) == 1)
@@ -353,7 +353,7 @@ convert_mode_scalar (rtx to, rtx from, int unsignedp)
start_sequence ();
value = emit_library_call_value (libcall, NULL_RTX, LCT_CONST, to_mode,
- from, from_mode);
+ from, from_mode, unsignedp);
insns = get_insns ();
end_sequence ();
emit_libcall_block (insns, to, value,
@@ -703,7 +703,7 @@ convert_modes (machine_mode mode, machine_mode oldmode, rtx x, int unsignedp)
assume that all the bits are significant. */
if (GET_MODE_CLASS (oldmode) != MODE_INT)
oldmode = MAX_MODE_INT;
- wide_int w = wide_int::from (rtx_mode_t (x, oldmode),
+ wide_int w = wide_int::from (rtx_mode_t (x, oldmode, unsignedp),
GET_MODE_PRECISION (int_mode),
unsignedp ? UNSIGNED : SIGNED);
return immed_wide_int_const (w, int_mode);
@@ -1830,7 +1830,7 @@ expand_binop (machine_mode mode, optab binoptab, rtx op0, rtx op1,
if the libcall is cse'd or moved. */
value = emit_library_call_value (libfunc,
NULL_RTX, LCT_CONST, mode,
- op0, mode, op1x, op1_mode);
+ op0, mode, op1x, op1_mode, unsignedp);
insns = get_insns ();
end_sequence ();
@@ -2167,7 +2167,7 @@ expand_twoval_binop_libfunc (optab binoptab, rtx op0, rtx op1,
libval = emit_library_call_value (libfunc, NULL_RTX, LCT_CONST,
libval_mode,
op0, mode,
- op1, mode);
+ op1, mode, 0);
/* Get the part of VAL containing the value that we want. */
libval = simplify_gen_subreg (mode, libval, libval_mode,
targ0 ? 0 : GET_MODE_SIZE (mode));
@@ -3054,7 +3054,7 @@ expand_unop (machine_mode mode, optab unoptab, rtx op0, rtx target,
/* Pass 1 for NO_QUEUE so we don't lose any increments
if the libcall is cse'd or moved. */
value = emit_library_call_value (libfunc, NULL_RTX, LCT_CONST, outmode,
- op0, mode);
+ op0, mode, unsignedp);
insns = get_insns ();
end_sequence ();
@@ -4041,7 +4041,7 @@ prepare_cmp_insn (rtx x, rtx y, enum rtx_code comparison, rtx size,
ret_mode = targetm.libgcc_cmp_return_mode ();
result = emit_library_call_value (libfunc, NULL_RTX, LCT_CONST,
- ret_mode, x, mode, y, mode);
+ ret_mode, x, mode, y, mode, unsignedp);
/* There are two kinds of comparison routines. Biased routines
return 0/1/2, and unbiased routines return -1/0/1. Other parts
@@ -4293,7 +4293,7 @@ prepare_float_lib_cmp (rtx x, rtx y, enum rtx_code comparison,
start_sequence ();
value = emit_library_call_value (libfunc, NULL_RTX, LCT_CONST,
- cmp_mode, x, mode, y, mode);
+ cmp_mode, x, mode, y, mode, 0);
insns = get_insns ();
end_sequence ();
@@ -4935,7 +4935,7 @@ expand_float (rtx to, rtx from, int unsignedp)
start_sequence ();
value = emit_library_call_value (libfunc, NULL_RTX, LCT_CONST,
- GET_MODE (to), from, GET_MODE (from));
+ GET_MODE (to), from, GET_MODE (from), unsignedp);
insns = get_insns ();
end_sequence ();
@@ -5127,7 +5127,7 @@ expand_fix (rtx to, rtx from, int unsignedp)
start_sequence ();
value = emit_library_call_value (libfunc, NULL_RTX, LCT_CONST,
- GET_MODE (to), from, GET_MODE (from));
+ GET_MODE (to), from, GET_MODE (from), unsignedp);
insns = get_insns ();
end_sequence ();
@@ -5219,7 +5219,7 @@ expand_fixed_convert (rtx to, rtx from, int uintp, int satp)
start_sequence ();
value = emit_library_call_value (libfunc, NULL_RTX, LCT_CONST, to_mode,
- from, from_mode);
+ from, from_mode, uintp);
insns = get_insns ();
end_sequence ();
@@ -6205,7 +6205,7 @@ maybe_emit_sync_lock_test_and_set (rtx target, rtx mem, rtx val,
addr = convert_memory_address (ptr_mode, XEXP (mem, 0));
return emit_library_call_value (libfunc, NULL_RTX, LCT_NORMAL,
mode, addr, ptr_mode,
- val, mode);
+ val, mode, 0);
}
}
@@ -6513,7 +6513,7 @@ expand_atomic_compare_and_swap (rtx *ptarget_bool, rtx *ptarget_oval,
rtx addr = convert_memory_address (ptr_mode, XEXP (mem, 0));
rtx target = emit_library_call_value (libfunc, NULL_RTX, LCT_NORMAL,
mode, addr, ptr_mode,
- expected, mode, desired, mode);
+ expected, mode, desired, mode, 0);
emit_move_insn (target_oval, target);
/* Compute the boolean return value only if requested. */
@@ -6584,7 +6584,7 @@ expand_mem_thread_fence (enum memmodel model)
else if (targetm.have_memory_barrier ())
emit_insn (targetm.gen_memory_barrier ());
else if (synchronize_libfunc != NULL_RTX)
- emit_library_call (synchronize_libfunc, LCT_NORMAL, VOIDmode);
+ emit_library_call (synchronize_libfunc, LCT_NORMAL, VOIDmode, 0);
else
expand_memory_blockage ();
}
@@ -7100,7 +7100,7 @@ expand_atomic_fetch_op (rtx target, rtx mem, rtx val, enum rtx_code code,
{
rtx addr = convert_memory_address (ptr_mode, XEXP (mem, 0));
result = emit_library_call_value (libfunc, NULL, LCT_NORMAL, mode,
- addr, ptr_mode, val, mode);
+ addr, ptr_mode, val, mode, 0);
if (!unused_result && fixup)
result = expand_simple_binop (mode, code, result, val, target,
@@ -2237,10 +2237,27 @@ struct address_info {
enum rtx_code base_outer_code;
};
-/* This is used to bundle an rtx and a mode together so that the pair
+template<typename T1, typename T2, typename T3>
+struct Tuple
+ {
+ T1 first;
+ T2 second;
+ T3 third;
+ Tuple(T1 f, T2 s, T3 t=0)
+ {
+ first = f;
+ second = s;
+ third = t;
+ }
+ };
+
+/* This is used to bundle an rtx, a mode and unsigned_p together so that the Tuple
can be used with the wi:: routines. If we ever put modes into rtx
integer constants, this should go away and then just pass an rtx in. */
-typedef std::pair <rtx, machine_mode> rtx_mode_t;
+typedef Tuple <rtx, machine_mode, int> rtx_mode_t;
+#define GET_FIRST(x) x.first
+#define GET_SECOND(x) x.second
+#define GET_THIRD(x) x.third
namespace wi
{
@@ -2261,7 +2278,7 @@ namespace wi
inline unsigned int
wi::int_traits <rtx_mode_t>::get_precision (const rtx_mode_t &x)
{
- return GET_MODE_PRECISION (as_a <scalar_mode> (x.second));
+ return GET_MODE_PRECISION (as_a <scalar_mode> (GET_SECOND(x)));
}
inline wi::storage_ref
@@ -2270,25 +2287,25 @@ wi::int_traits <rtx_mode_t>::decompose (HOST_WIDE_INT *,
const rtx_mode_t &x)
{
gcc_checking_assert (precision == get_precision (x));
- switch (GET_CODE (x.first))
+ switch (GET_CODE (GET_FIRST(x)))
{
case CONST_INT:
if (precision < HOST_BITS_PER_WIDE_INT)
/* Nonzero BImodes are stored as STORE_FLAG_VALUE, which on many
targets is 1 rather than -1. */
- gcc_checking_assert (INTVAL (x.first)
- == sext_hwi (INTVAL (x.first), precision)
- || (x.second == BImode && INTVAL (x.first) == 1));
+ gcc_checking_assert (INTVAL (GET_FIRST(x))
+ == sext_hwi (INTVAL (GET_FIRST(x)), precision)
+ || (GET_SECOND(x) == BImode && INTVAL (GET_FIRST(x)) == 1));
- return wi::storage_ref (&INTVAL (x.first), 1, precision);
+ return wi::storage_ref (&INTVAL (GET_FIRST(x)), 1, precision);
case CONST_WIDE_INT:
- return wi::storage_ref (&CONST_WIDE_INT_ELT (x.first, 0),
- CONST_WIDE_INT_NUNITS (x.first), precision);
+ return wi::storage_ref (&CONST_WIDE_INT_ELT (GET_FIRST(x), 0),
+ CONST_WIDE_INT_NUNITS (GET_FIRST(x)), precision);
#if TARGET_SUPPORTS_WIDE_INT == 0
case CONST_DOUBLE:
- return wi::storage_ref (&CONST_DOUBLE_LOW (x.first), 2, precision);
+ return wi::storage_ref (&CONST_DOUBLE_LOW (GET_FIRST(x)), 2, precision);
#endif
default:
@@ -4168,27 +4185,28 @@ extern rtx emit_library_call_value_1 (int, rtx, rtx, enum libcall_type,
of arguments. In each case the argument value is followed by its mode. */
inline void
-emit_library_call (rtx fun, libcall_type fn_type, machine_mode outmode)
+emit_library_call (rtx fun, libcall_type fn_type, machine_mode outmode, int)
{
emit_library_call_value_1 (0, fun, NULL_RTX, fn_type, outmode, 0, NULL);
}
inline void
emit_library_call (rtx fun, libcall_type fn_type, machine_mode outmode,
- rtx arg1, machine_mode arg1_mode)
+ rtx arg1, machine_mode arg1_mode, int unsignedp)
{
- rtx_mode_t args[] = { rtx_mode_t (arg1, arg1_mode) };
+ rtx_mode_t args[] = { rtx_mode_t (arg1, arg1_mode, unsignedp) };
emit_library_call_value_1 (0, fun, NULL_RTX, fn_type, outmode, 1, args);
}
inline void
emit_library_call (rtx fun, libcall_type fn_type, machine_mode outmode,
rtx arg1, machine_mode arg1_mode,
- rtx arg2, machine_mode arg2_mode)
+ rtx arg2, machine_mode arg2_mode,
+ int unsignedp)
{
rtx_mode_t args[] = {
- rtx_mode_t (arg1, arg1_mode),
- rtx_mode_t (arg2, arg2_mode)
+ rtx_mode_t (arg1, arg1_mode, unsignedp),
+ rtx_mode_t (arg2, arg2_mode, unsignedp)
};
emit_library_call_value_1 (0, fun, NULL_RTX, fn_type, outmode, 2, args);
}
@@ -4197,12 +4215,13 @@ inline void
emit_library_call (rtx fun, libcall_type fn_type, machine_mode outmode,
rtx arg1, machine_mode arg1_mode,
rtx arg2, machine_mode arg2_mode,
- rtx arg3, machine_mode arg3_mode)
+ rtx arg3, machine_mode arg3_mode,
+ int unsignedp)
{
rtx_mode_t args[] = {
- rtx_mode_t (arg1, arg1_mode),
- rtx_mode_t (arg2, arg2_mode),
- rtx_mode_t (arg3, arg3_mode)
+ rtx_mode_t (arg1, arg1_mode, unsignedp),
+ rtx_mode_t (arg2, arg2_mode, unsignedp),
+ rtx_mode_t (arg3, arg3_mode, unsignedp)
};
emit_library_call_value_1 (0, fun, NULL_RTX, fn_type, outmode, 3, args);
}
@@ -4212,13 +4231,14 @@ emit_library_call (rtx fun, libcall_type fn_type, machine_mode outmode,
rtx arg1, machine_mode arg1_mode,
rtx arg2, machine_mode arg2_mode,
rtx arg3, machine_mode arg3_mode,
- rtx arg4, machine_mode arg4_mode)
+ rtx arg4, machine_mode arg4_mode,
+ int unsignedp)
{
rtx_mode_t args[] = {
- rtx_mode_t (arg1, arg1_mode),
- rtx_mode_t (arg2, arg2_mode),
- rtx_mode_t (arg3, arg3_mode),
- rtx_mode_t (arg4, arg4_mode)
+ rtx_mode_t (arg1, arg1_mode, unsignedp),
+ rtx_mode_t (arg2, arg2_mode, unsignedp),
+ rtx_mode_t (arg3, arg3_mode, unsignedp),
+ rtx_mode_t (arg4, arg4_mode, unsignedp)
};
emit_library_call_value_1 (0, fun, NULL_RTX, fn_type, outmode, 4, args);
}
@@ -4229,7 +4249,7 @@ emit_library_call (rtx fun, libcall_type fn_type, machine_mode outmode,
inline rtx
emit_library_call_value (rtx fun, rtx value, libcall_type fn_type,
- machine_mode outmode)
+ machine_mode outmode, int)
{
return emit_library_call_value_1 (1, fun, value, fn_type, outmode, 0, NULL);
}
@@ -4237,9 +4257,10 @@ emit_library_call_value (rtx fun, rtx value, libcall_type fn_type,
inline rtx
emit_library_call_value (rtx fun, rtx value, libcall_type fn_type,
machine_mode outmode,
- rtx arg1, machine_mode arg1_mode)
+ rtx arg1, machine_mode arg1_mode,
+ int unsignedp)
{
- rtx_mode_t args[] = { rtx_mode_t (arg1, arg1_mode) };
+ rtx_mode_t args[] = { rtx_mode_t (arg1, arg1_mode, unsignedp) };
return emit_library_call_value_1 (1, fun, value, fn_type, outmode, 1, args);
}
@@ -4247,11 +4268,12 @@ inline rtx
emit_library_call_value (rtx fun, rtx value, libcall_type fn_type,
machine_mode outmode,
rtx arg1, machine_mode arg1_mode,
- rtx arg2, machine_mode arg2_mode)
+ rtx arg2, machine_mode arg2_mode,
+ int unsignedp)
{
rtx_mode_t args[] = {
- rtx_mode_t (arg1, arg1_mode),
- rtx_mode_t (arg2, arg2_mode)
+ rtx_mode_t (arg1, arg1_mode, unsignedp),
+ rtx_mode_t (arg2, arg2_mode, unsignedp)
};
return emit_library_call_value_1 (1, fun, value, fn_type, outmode, 2, args);
}
@@ -4261,12 +4283,13 @@ emit_library_call_value (rtx fun, rtx value, libcall_type fn_type,
machine_mode outmode,
rtx arg1, machine_mode arg1_mode,
rtx arg2, machine_mode arg2_mode,
- rtx arg3, machine_mode arg3_mode)
+ rtx arg3, machine_mode arg3_mode,
+ int unsignedp)
{
rtx_mode_t args[] = {
- rtx_mode_t (arg1, arg1_mode),
- rtx_mode_t (arg2, arg2_mode),
- rtx_mode_t (arg3, arg3_mode)
+ rtx_mode_t (arg1, arg1_mode, unsignedp),
+ rtx_mode_t (arg2, arg2_mode, unsignedp),
+ rtx_mode_t (arg3, arg3_mode, unsignedp)
};
return emit_library_call_value_1 (1, fun, value, fn_type, outmode, 3, args);
}
@@ -4277,13 +4300,14 @@ emit_library_call_value (rtx fun, rtx value, libcall_type fn_type,
rtx arg1, machine_mode arg1_mode,
rtx arg2, machine_mode arg2_mode,
rtx arg3, machine_mode arg3_mode,
- rtx arg4, machine_mode arg4_mode)
+ rtx arg4, machine_mode arg4_mode,
+ int unsignedp)
{
rtx_mode_t args[] = {
- rtx_mode_t (arg1, arg1_mode),
- rtx_mode_t (arg2, arg2_mode),
- rtx_mode_t (arg3, arg3_mode),
- rtx_mode_t (arg4, arg4_mode)
+ rtx_mode_t (arg1, arg1_mode, unsignedp),
+ rtx_mode_t (arg2, arg2_mode, unsignedp),
+ rtx_mode_t (arg3, arg3_mode, unsignedp),
+ rtx_mode_t (arg4, arg4_mode, unsignedp)
};
return emit_library_call_value_1 (1, fun, value, fn_type, outmode, 4, args);
}
new file mode 100644
@@ -0,0 +1,9 @@
+/* { dg-do compile { target { powerpc64*-*-* } } } */
+/* { dg-options "-msoft-float -m64" } */
+/* { dg-final { scan-assembler "lwz" } } */
+/* { dg-final { scan-assembler-not "lwa" } } */
+
+void foo(){
+unsigned int x=-1;
+double d=x;
+}