996 void atomic_xchgw(Register prev, Register newv, Register addr); |
996 void atomic_xchgw(Register prev, Register newv, Register addr); |
997 void atomic_xchgal(Register prev, Register newv, Register addr); |
997 void atomic_xchgal(Register prev, Register newv, Register addr); |
998 void atomic_xchgalw(Register prev, Register newv, Register addr); |
998 void atomic_xchgalw(Register prev, Register newv, Register addr); |
999 |
999 |
1000 void orptr(Address adr, RegisterOrConstant src) { |
1000 void orptr(Address adr, RegisterOrConstant src) { |
1001 ldr(rscratch2, adr); |
1001 ldr(rscratch1, adr); |
1002 if (src.is_register()) |
1002 if (src.is_register()) |
1003 orr(rscratch2, rscratch2, src.as_register()); |
1003 orr(rscratch1, rscratch1, src.as_register()); |
1004 else |
1004 else |
1005 orr(rscratch2, rscratch2, src.as_constant()); |
1005 orr(rscratch1, rscratch1, src.as_constant()); |
1006 str(rscratch2, adr); |
1006 str(rscratch1, adr); |
1007 } |
1007 } |
1008 |
1008 |
1009 // A generic CAS; success or failure is in the EQ flag. |
1009 // A generic CAS; success or failure is in the EQ flag. |
1010 // Clobbers rscratch1 |
1010 // Clobbers rscratch1 |
1011 void cmpxchg(Register addr, Register expected, Register new_val, |
1011 void cmpxchg(Register addr, Register expected, Register new_val, |