diff options
Diffstat (limited to 'gcc/config/mips/mips.h')
-rw-r--r-- | gcc/config/mips/mips.h | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index cda433aa4f0..9f59f1a2550 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -1936,7 +1936,7 @@ enum reg_class If `ACCUMULATE_OUTGOING_ARGS' is also defined, the only effect of this macro is to determine whether the space is included in `crtl->outgoing_args_size'. */ -#define OUTGOING_REG_PARM_STACK_SPACE 1 +#define OUTGOING_REG_PARM_STACK_SPACE(FNTYPE) 1 #define STACK_BOUNDARY (TARGET_NEWABI ? 128 : 64) @@ -2902,7 +2902,8 @@ while (0) "\tsc" SUFFIX "\t%@,%1\n" \ "\tbeq\t%@,%.,1b\n" \ "\tnop\n" \ - "2:\tsync%-%]%>%)" + "\tsync%-%]%>%)\n" \ + "2:\n" /* Return an asm string that atomically: @@ -2919,7 +2920,7 @@ while (0) "%(%<%[%|sync\n" \ "1:\tll\t%0,%1\n" \ "\tand\t%@,%0,%2\n" \ - "\tbne\t%@,%4,2f\n" \ + "\tbne\t%@,%z4,2f\n" \ "\tand\t%@,%0,%3\n" \ "\tor\t%@,%@,%5\n" \ "\tsc\t%@,%1\n" \ @@ -2928,6 +2929,20 @@ while (0) "\tsync%-%]%>%)\n" \ "2:\n" +/* Like MIPS_COMPARE_AND_SWAP_12, except %5 is a constant zero, + so the OR can be omitted. */ +#define MIPS_COMPARE_AND_SWAP_12_0 \ + "%(%<%[%|sync\n" \ + "1:\tll\t%0,%1\n" \ + "\tand\t%@,%0,%2\n" \ + "\tbne\t%@,%z4,2f\n" \ + "\tand\t%@,%0,%3\n" \ + "\tsc\t%@,%1\n" \ + "\tbeq\t%@,%.,1b\n" \ + "\tnop\n" \ + "\tsync%-%]%>%)\n" \ + "2:\n" + /* Return an asm string that atomically: - Sets memory reference %0 to %0 INSN %1. |