mirror of
https://gcc.gnu.org/git/gcc.git
synced 2025-01-10 13:03:40 +08:00
ia64.c (ia64_expand_compare_and_swap): Add rmode for return mode.
2003-04-25 H.J. Lu <hjl@gnu.org> * config/ia64/ia64.c (ia64_expand_compare_and_swap): Add rmode for return mode. (ia64_expand_builtin): Set rmode to SImode for IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_SI, IA64_BUILTIN_VAL_COMPARE_AND_SWAP_SI and IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_DI. Set remode to DImode for IA64_BUILTIN_VAL_COMPARE_AND_SWAP_DI. From-SVN: r66077
This commit is contained in:
parent
d45148c102
commit
60986d641c
@ -1,3 +1,13 @@
|
||||
2003-04-25 H.J. Lu <hjl@gnu.org>
|
||||
|
||||
* config/ia64/ia64.c (ia64_expand_compare_and_swap): Add rmode
|
||||
for return mode.
|
||||
(ia64_expand_builtin): Set rmode to SImode for
|
||||
IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_SI,
|
||||
IA64_BUILTIN_VAL_COMPARE_AND_SWAP_SI and
|
||||
IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_DI. Set remode to DImode
|
||||
for IA64_BUILTIN_VAL_COMPARE_AND_SWAP_DI.
|
||||
|
||||
2003-04-25 Phil Edwards <pme@gcc.gnu.org>
|
||||
|
||||
* configure.in (make_compare_target): Test for GNU cmp and set this
|
||||
|
@ -197,8 +197,9 @@ static rtx ia64_expand_fetch_and_op PARAMS ((optab, enum machine_mode,
|
||||
tree, rtx));
|
||||
static rtx ia64_expand_op_and_fetch PARAMS ((optab, enum machine_mode,
|
||||
tree, rtx));
|
||||
static rtx ia64_expand_compare_and_swap PARAMS ((enum machine_mode, int,
|
||||
tree, rtx));
|
||||
static rtx ia64_expand_compare_and_swap PARAMS ((enum machine_mode,
|
||||
enum machine_mode,
|
||||
int, tree, rtx));
|
||||
static rtx ia64_expand_lock_test_and_set PARAMS ((enum machine_mode,
|
||||
tree, rtx));
|
||||
static rtx ia64_expand_lock_release PARAMS ((enum machine_mode, tree, rtx));
|
||||
@ -8026,7 +8027,8 @@ ia64_expand_op_and_fetch (binoptab, mode, arglist, target)
|
||||
*/
|
||||
|
||||
static rtx
|
||||
ia64_expand_compare_and_swap (mode, boolp, arglist, target)
|
||||
ia64_expand_compare_and_swap (rmode, mode, boolp, arglist, target)
|
||||
enum machine_mode rmode;
|
||||
enum machine_mode mode;
|
||||
int boolp;
|
||||
tree arglist;
|
||||
@ -8074,7 +8076,7 @@ ia64_expand_compare_and_swap (mode, boolp, arglist, target)
|
||||
if (boolp)
|
||||
{
|
||||
if (! target)
|
||||
target = gen_reg_rtx (mode);
|
||||
target = gen_reg_rtx (rmode);
|
||||
return emit_store_flag_force (target, EQ, tmp, old, mode, 1, 1);
|
||||
}
|
||||
else
|
||||
@ -8149,11 +8151,16 @@ ia64_expand_builtin (exp, target, subtarget, mode, ignore)
|
||||
tree fndecl = TREE_OPERAND (TREE_OPERAND (exp, 0), 0);
|
||||
unsigned int fcode = DECL_FUNCTION_CODE (fndecl);
|
||||
tree arglist = TREE_OPERAND (exp, 1);
|
||||
enum machine_mode rmode;
|
||||
|
||||
switch (fcode)
|
||||
{
|
||||
case IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_SI:
|
||||
case IA64_BUILTIN_VAL_COMPARE_AND_SWAP_SI:
|
||||
mode = SImode;
|
||||
rmode = SImode;
|
||||
break;
|
||||
|
||||
case IA64_BUILTIN_LOCK_TEST_AND_SET_SI:
|
||||
case IA64_BUILTIN_LOCK_RELEASE_SI:
|
||||
case IA64_BUILTIN_FETCH_AND_ADD_SI:
|
||||
@ -8172,7 +8179,15 @@ ia64_expand_builtin (exp, target, subtarget, mode, ignore)
|
||||
break;
|
||||
|
||||
case IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_DI:
|
||||
mode = DImode;
|
||||
rmode = SImode;
|
||||
break;
|
||||
|
||||
case IA64_BUILTIN_VAL_COMPARE_AND_SWAP_DI:
|
||||
mode = DImode;
|
||||
rmode = DImode;
|
||||
break;
|
||||
|
||||
case IA64_BUILTIN_LOCK_TEST_AND_SET_DI:
|
||||
case IA64_BUILTIN_LOCK_RELEASE_DI:
|
||||
case IA64_BUILTIN_FETCH_AND_ADD_DI:
|
||||
@ -8198,11 +8213,13 @@ ia64_expand_builtin (exp, target, subtarget, mode, ignore)
|
||||
{
|
||||
case IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_SI:
|
||||
case IA64_BUILTIN_BOOL_COMPARE_AND_SWAP_DI:
|
||||
return ia64_expand_compare_and_swap (mode, 1, arglist, target);
|
||||
return ia64_expand_compare_and_swap (rmode, mode, 1, arglist,
|
||||
target);
|
||||
|
||||
case IA64_BUILTIN_VAL_COMPARE_AND_SWAP_SI:
|
||||
case IA64_BUILTIN_VAL_COMPARE_AND_SWAP_DI:
|
||||
return ia64_expand_compare_and_swap (mode, 0, arglist, target);
|
||||
return ia64_expand_compare_and_swap (rmode, mode, 0, arglist,
|
||||
target);
|
||||
|
||||
case IA64_BUILTIN_SYNCHRONIZE:
|
||||
emit_insn (gen_mf ());
|
||||
|
Loading…
Reference in New Issue
Block a user