===================================================================
@@ -7384,6 +7384,7 @@
expand_atomic_test_and_set (rtx target, rtx mem, enum memmodel model)
{
enum machine_mode mode = GET_MODE (mem);
+ rtx tas_trueval = GEN_INT (targetm.atomic_test_and_set_trueval);
rtx ret;
ret = maybe_emit_atomic_test_and_set (target, mem, model);
@@ -7395,22 +7396,22 @@
/* If there is no test and set, try exchange, then a compare_and_swap loop,
then __sync_test_and_set. */
- ret = maybe_emit_atomic_exchange (target, mem, const1_rtx, model);
+ ret = maybe_emit_atomic_exchange (target, mem, tas_trueval, model);
if (ret)
return ret;
- ret = maybe_emit_compare_and_swap_exchange_loop (target, mem, const1_rtx);
+ ret = maybe_emit_compare_and_swap_exchange_loop (target, mem, tas_trueval);
if (ret)
return ret;
- ret = maybe_emit_sync_lock_test_and_set (target, mem, const1_rtx, model);
+ ret = maybe_emit_sync_lock_test_and_set (target, mem, tas_trueval, model);
if (ret)
return ret;
/* Failing all else, assume a single threaded environment and simply perform
the operation. */
emit_move_insn (target, mem);
- emit_move_insn (mem, const1_rtx);
+ emit_move_insn (mem, tas_trueval);
return target;
}