| Index: runtime/vm/assembler_arm64.h
|
| diff --git a/runtime/vm/assembler_arm64.h b/runtime/vm/assembler_arm64.h
|
| index cbeadfd80e1fa3b669cfd6ffb2fafefb6e0dbbf9..1b25c5bb0e89f9d4b54842d8ebc688358feed2c6 100644
|
| --- a/runtime/vm/assembler_arm64.h
|
| +++ b/runtime/vm/assembler_arm64.h
|
| @@ -742,16 +742,19 @@ class Assembler : public ValueObject {
|
| EmitLoadStoreRegPair(STP, rt, rt2, a, sz);
|
| }
|
|
|
| - void ldxr(Register rt, Register rn) {
|
| + void ldxr(Register rt, Register rn, OperandSize size = kDoubleWord) {
|
| // rt = value
|
| // rn = address
|
| - EmitLoadStoreExclusive(LDXR, R31, rn, rt, kDoubleWord);
|
| + EmitLoadStoreExclusive(LDXR, R31, rn, rt, size);
|
| }
|
| - void stxr(Register rs, Register rt, Register rn) {
|
| + void stxr(Register rs,
|
| + Register rt,
|
| + Register rn,
|
| + OperandSize size = kDoubleWord) {
|
| // rs = status (1 = failure, 0 = success)
|
| // rt = value
|
| // rn = address
|
| - EmitLoadStoreExclusive(STXR, rs, rn, rt, kDoubleWord);
|
| + EmitLoadStoreExclusive(STXR, rs, rn, rt, size);
|
| }
|
| void clrex() {
|
| const int32_t encoding = static_cast<int32_t>(CLREX);
|
| @@ -1701,8 +1704,8 @@ class Assembler : public ValueObject {
|
| Register rn,
|
| Register rt,
|
| OperandSize sz = kDoubleWord) {
|
| - ASSERT(sz == kDoubleWord);
|
| - const int32_t size = B31 | B30;
|
| + ASSERT(sz == kDoubleWord || sz == kWord);
|
| + const int32_t size = B31 | (sz == kDoubleWord ? B30 : 0);
|
|
|
| ASSERT((rs != kNoRegister) && (rs != ZR));
|
| ASSERT((rn != kNoRegister) && (rn != ZR));
|
|
|