Use optab_libfunc to access sync_lock_test_and_set libfunc on hppa-linux.

2022-01-02  John David Anglin  <danglin@gcc.gnu.org>

gcc/ChangeLog:

	* config/pa/pa.md (atomic_storeq): Use optab_libfunc to access
	sync_lock_test_and_set libfunc. Call convert_memory_address to
	convert memory address to Pmode.
	(atomic_storehi, atomic_storesi, atomic_storedi): Likewise.
This commit is contained in:
John David Anglin 2022-01-02 16:40:48 +00:00
parent 62eb5308fe
commit 4759c16bee

View file

@ -10366,10 +10366,10 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
{
if (TARGET_SYNC_LIBCALL)
{
rtx libfunc = init_one_libfunc ("__sync_lock_test_and_set_1");
rtx libfunc = optab_libfunc (sync_lock_test_and_set_optab, QImode);
rtx addr = convert_memory_address (Pmode, XEXP (operands[0], 0));
emit_library_call (libfunc, LCT_NORMAL, VOIDmode,
XEXP (operands[0], 0), Pmode,
emit_library_call (libfunc, LCT_NORMAL, VOIDmode, addr, Pmode,
operands[1], QImode);
DONE;
}
@ -10386,10 +10386,10 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
{
if (TARGET_SYNC_LIBCALL)
{
rtx libfunc = init_one_libfunc ("__sync_lock_test_and_set_2");
rtx libfunc = optab_libfunc (sync_lock_test_and_set_optab, HImode);
rtx addr = convert_memory_address (Pmode, XEXP (operands[0], 0));
emit_library_call (libfunc, LCT_NORMAL, VOIDmode,
XEXP (operands[0], 0), Pmode,
emit_library_call (libfunc, LCT_NORMAL, VOIDmode, addr, Pmode,
operands[1], HImode);
DONE;
}
@ -10406,10 +10406,10 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
{
if (TARGET_SYNC_LIBCALL)
{
rtx libfunc = init_one_libfunc ("__sync_lock_test_and_set_4");
rtx libfunc = optab_libfunc (sync_lock_test_and_set_optab, SImode);
rtx addr = convert_memory_address (Pmode, XEXP (operands[0], 0));
emit_library_call (libfunc, LCT_NORMAL, VOIDmode,
XEXP (operands[0], 0), Pmode,
emit_library_call (libfunc, LCT_NORMAL, VOIDmode, addr, Pmode,
operands[1], SImode);
DONE;
}
@ -10459,10 +10459,10 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
if (TARGET_SYNC_LIBCALL)
{
rtx libfunc = init_one_libfunc ("__sync_lock_test_and_set_8");
rtx libfunc = optab_libfunc (sync_lock_test_and_set_optab, DImode);
rtx addr = convert_memory_address (Pmode, XEXP (operands[0], 0));
emit_library_call (libfunc, LCT_NORMAL, VOIDmode,
XEXP (operands[0], 0), Pmode,
emit_library_call (libfunc, LCT_NORMAL, VOIDmode, addr, Pmode,
operands[1], DImode);
DONE;
}