[vm, compiler] Update TSAN instrumentation.

TEST=tsan
Cq-Include-Trybots: luci.dart.try:vm-tsan-linux-release-x64-try,vm-tsan-linux-release-arm64-try,iso-stress-linux-arm64-try,iso-stress-linux-x64-try
Change-Id: I0c49b501c53f9a5117bb14800e342e6fe9b4eba6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/442730
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
diff --git a/runtime/platform/thread_sanitizer.h b/runtime/platform/thread_sanitizer.h
index 465f9a3..27710b3 100644
--- a/runtime/platform/thread_sanitizer.h
+++ b/runtime/platform/thread_sanitizer.h
@@ -17,8 +17,14 @@
 
 #if defined(USING_THREAD_SANITIZER)
 #define NO_SANITIZE_THREAD __attribute__((no_sanitize("thread")))
-extern "C" void __tsan_acquire(void* addr);
-extern "C" void __tsan_release(void* addr);
+extern "C" void __tsan_atomic32_load(uint32_t* addr, int order);
+extern "C" void __tsan_atomic32_store(uint32_t* addr,
+                                      uint32_t value,
+                                      int order);
+extern "C" void __tsan_atomic64_load(uint64_t* addr, int order);
+extern "C" void __tsan_atomic64_store(uint64_t* addr,
+                                      uint64_t value,
+                                      int order);
 #else
 #define NO_SANITIZE_THREAD
 #endif
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index b15d28b..6e81d63 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -286,16 +286,69 @@
   ASSERT(((offset + buffer_.GetPosition()) & (alignment - 1)) == 0);
 }
 
-void Assembler::TsanLoadAcquire(Register addr) {
-  LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true);
+void Assembler::TsanLoadAcquire(Register dst, Register addr, OperandSize size) {
+  RegisterSet registers(kDartVolatileCpuRegs & ~(1 << dst),
+                        kAllFpuRegistersList);
+
+  EnterFrame(0);
+  PushRegisters(registers);
+  ReserveAlignedFrameSpace(0);
+
   MoveRegister(R0, addr);
-  rt.Call(kTsanLoadAcquireRuntimeEntry, /*argument_count=*/1);
+  LoadImmediate(R1, __ATOMIC_ACQUIRE);
+
+  mov(CSP, SP);
+  switch (size) {
+    case kEightBytes:
+      ldr(TMP, compiler::Address(
+                   THR, kTsanAtomic64LoadRuntimeEntry.OffsetFromThread()));
+      break;
+    case kUnsignedFourBytes:
+      ldr(TMP, compiler::Address(
+                   THR, kTsanAtomic32LoadRuntimeEntry.OffsetFromThread()));
+      break;
+    default:
+      UNIMPLEMENTED();
+  }
+  str(TMP, compiler::Address(THR, target::Thread::vm_tag_offset()));
+  blr(TMP);
+  LoadImmediate(TMP, VMTag::kDartTagId);
+  str(TMP, compiler::Address(THR, target::Thread::vm_tag_offset()));
+  SetupCSPFromThread(THR);
+
+  MoveRegister(dst, R0);
+
+  AddImmediate(SP, FP, -registers.SpillSize());
+  PopRegisters(registers);
+  LeaveFrame();
 }
 
-void Assembler::TsanStoreRelease(Register addr) {
+void Assembler::TsanStoreRelease(Register src,
+                                 Register addr,
+                                 OperandSize size) {
   LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true);
-  MoveRegister(R0, addr);
-  rt.Call(kTsanStoreReleaseRuntimeEntry, /*argument_count=*/1);
+
+  if (src == R0) {
+    MoveRegister(R1, src);
+    MoveRegister(R0, addr);
+  } else {
+    MoveRegister(R0, addr);
+    MoveRegister(R1, src);
+  }
+  LoadImmediate(R2, __ATOMIC_RELEASE);
+
+  switch (size) {
+    case kEightBytes:
+      rt.Call(kTsanAtomic64StoreRuntimeEntry, /*argument_count=*/3);
+      break;
+    case kFourBytes:
+    case kUnsignedFourBytes:
+      rt.Call(kTsanAtomic32StoreRuntimeEntry, /*argument_count=*/3);
+      break;
+    default:
+      UNIMPLEMENTED();
+      break;
+  }
 }
 
 static int CountLeadingZeros(uint64_t value, int width) {
@@ -1779,10 +1832,7 @@
     // SP might have been modified to reserve space for arguments
     // and ensure proper alignment of the stack frame.
     // We need to restore it before restoring registers.
-    const intptr_t kPushedRegistersSize =
-        kRuntimeCallSavedRegisters.CpuRegisterCount() * target::kWordSize +
-        kRuntimeCallSavedRegisters.FpuRegisterCount() * kFpuRegisterSize;
-    __ AddImmediate(SP, FP, -kPushedRegistersSize);
+    __ AddImmediate(SP, FP, -kRuntimeCallSavedRegisters.SpillSize());
     __ PopRegisters(kRuntimeCallSavedRegisters);
   }
 
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index 338eca0..e381bc0 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -502,8 +502,8 @@
     StoreToOffset(src, base, offset, kEightBytes);
   }
 
-  void TsanLoadAcquire(Register addr);
-  void TsanStoreRelease(Register addr);
+  void TsanLoadAcquire(Register dst, Register addr, OperandSize size);
+  void TsanStoreRelease(Register src, Register addr, OperandSize size);
 
   void LoadAcquire(Register dst,
                    const Address& address,
@@ -515,9 +515,10 @@
       AddImmediate(TMP2, src, address.offset());
       src = TMP2;
     }
-    ldar(dst, src, size);
     if (FLAG_target_thread_sanitizer) {
-      TsanLoadAcquire(src);
+      TsanLoadAcquire(dst, src, size);
+    } else {
+      ldar(dst, src, size);
     }
   }
 
@@ -538,9 +539,10 @@
       AddImmediate(TMP2, dst, address.offset());
       dst = TMP2;
     }
-    stlr(src, dst, size);
     if (FLAG_target_thread_sanitizer) {
-      TsanStoreRelease(dst);
+      TsanStoreRelease(src, dst, size);
+    } else {
+      stlr(src, dst, size);
     }
   }
 
diff --git a/runtime/vm/compiler/assembler/assembler_riscv.cc b/runtime/vm/compiler/assembler/assembler_riscv.cc
index 2ee2902..b416a34 100644
--- a/runtime/vm/compiler/assembler/assembler_riscv.cc
+++ b/runtime/vm/compiler/assembler/assembler_riscv.cc
@@ -2880,8 +2880,7 @@
   // The order in which the registers are pushed must match the order
   // in which the registers are encoded in the safepoint's stack map.
 
-  intptr_t size = (regs.CpuRegisterCount() * target::kWordSize) +
-                  (regs.FpuRegisterCount() * kFpuRegisterSize);
+  intptr_t size = regs.SpillSize();
   if (size == 0) {
     return;  // Skip no-op SP update.
   }
@@ -2909,8 +2908,7 @@
   // The order in which the registers are pushed must match the order
   // in which the registers are encoded in the safepoint's stack map.
 
-  intptr_t size = (regs.CpuRegisterCount() * target::kWordSize) +
-                  (regs.FpuRegisterCount() * kFpuRegisterSize);
+  intptr_t size = regs.SpillSize();
   if (size == 0) {
     return;  // Skip no-op SP update.
   }
@@ -3084,15 +3082,92 @@
   jr(TMP2);
 }
 
-void Assembler::TsanLoadAcquire(Register addr) {
-  LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true);
-  MoveRegister(A0, addr);
-  rt.Call(kTsanLoadAcquireRuntimeEntry, /*argument_count=*/1);
+void Assembler::TsanLoadAcquire(Register dst,
+                                const Address& addr,
+                                OperandSize size) {
+  ASSERT(addr.base() != SP);
+  ASSERT(addr.base() != FP);
+  ASSERT(dst != SP);
+  ASSERT(dst != FP);
+
+  RegisterSet registers(kDartVolatileCpuRegs & ~(1 << dst),
+                        kAbiVolatileFpuRegs);
+
+  subi(SP, SP, 4 * target::kWordSize);
+  sx(RA, Address(SP, 3 * target::kWordSize));
+  sx(FP, Address(SP, 2 * target::kWordSize));
+  sx(CODE_REG, Address(SP, 1 * target::kWordSize));
+  sx(PP, Address(SP, 0 * target::kWordSize));
+  addi(FP, SP, 4 * target::kWordSize);
+
+  PushRegisters(registers);
+  ReserveAlignedFrameSpace(0);
+
+  AddImmediate(A0, addr.base(), addr.offset());
+  LoadImmediate(A1, __ATOMIC_ACQUIRE);
+
+  switch (size) {
+    case kEightBytes:
+      lx(TMP2, compiler::Address(
+                   THR, kTsanAtomic64LoadRuntimeEntry.OffsetFromThread()));
+      break;
+    case kUnsignedFourBytes:
+      lx(TMP2, compiler::Address(
+                   THR, kTsanAtomic32LoadRuntimeEntry.OffsetFromThread()));
+      break;
+    default:
+      UNIMPLEMENTED();
+      break;
+  }
+  sx(TMP2, compiler::Address(THR, target::Thread::vm_tag_offset()));
+  jalr(TMP2);
+  LoadImmediate(TMP2, VMTag::kDartTagId);
+  sx(TMP2, compiler::Address(THR, target::Thread::vm_tag_offset()));
+
+  MoveRegister(dst, A0);
+
+  subi(SP, FP, registers.SpillSize() + 4 * target::kWordSize);
+  PopRegisters(registers);
+
+  subi(SP, FP, 4 * target::kWordSize);
+  lx(PP, Address(SP, 0 * target::kWordSize));
+  lx(CODE_REG, Address(SP, 1 * target::kWordSize));
+  lx(FP, Address(SP, 2 * target::kWordSize));
+  lx(RA, Address(SP, 3 * target::kWordSize));
+  addi(SP, SP, 4 * target::kWordSize);
 }
-void Assembler::TsanStoreRelease(Register addr) {
+
+void Assembler::TsanStoreRelease(Register src,
+                                 const Address& addr,
+                                 OperandSize size) {
+  ASSERT(addr.base() != SP);
+  ASSERT(addr.base() != FP);
+  ASSERT(src != SP);
+  ASSERT(src != FP);
+
   LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true);
-  MoveRegister(A0, addr);
-  rt.Call(kTsanStoreReleaseRuntimeEntry, /*argument_count=*/1);
+
+  if (src == A0) {
+    MoveRegister(A1, src);
+    AddImmediate(A0, addr.base(), addr.offset());
+  } else {
+    AddImmediate(A0, addr.base(), addr.offset());
+    MoveRegister(A1, src);
+  }
+  LoadImmediate(A2, __ATOMIC_RELEASE);
+
+  switch (size) {
+    case kEightBytes:
+      rt.Call(kTsanAtomic64StoreRuntimeEntry, /*argument_count=*/3);
+      break;
+    case kFourBytes:
+    case kUnsignedFourBytes:
+      rt.Call(kTsanAtomic32StoreRuntimeEntry, /*argument_count=*/3);
+      break;
+    default:
+      UNIMPLEMENTED();
+      break;
+  }
 }
 
 void Assembler::LoadAcquire(Register dst,
@@ -3100,6 +3175,11 @@
                             OperandSize size) {
   ASSERT(dst != address.base());
 
+  if (FLAG_target_thread_sanitizer) {
+    TsanLoadAcquire(dst, address, size);
+    return;
+  }
+
   if (Supports(RV_Zalasr)) {
     Address addr = PrepareAtomicOffset(address.base(), address.offset());
     switch (size) {
@@ -3124,20 +3204,16 @@
     Load(dst, address, size);
     fence(HartEffects::kRead, HartEffects::kMemory);
   }
-
-  if (FLAG_target_thread_sanitizer) {
-    if (address.offset() == 0) {
-      TsanLoadAcquire(address.base());
-    } else {
-      AddImmediate(TMP2, address.base(), address.offset());
-      TsanLoadAcquire(TMP2);
-    }
-  }
 }
 
 void Assembler::StoreRelease(Register src,
                              const Address& address,
                              OperandSize size) {
+  if (FLAG_target_thread_sanitizer) {
+    TsanStoreRelease(src, address, size);
+    return;
+  }
+
   if (Supports(RV_Zalasr)) {
     Address addr = PrepareAtomicOffset(address.base(), address.offset());
     switch (size) {
@@ -4781,13 +4857,8 @@
 
 LeafRuntimeScope::~LeafRuntimeScope() {
   if (preserve_registers_) {
-    const intptr_t kSavedRegistersSize =
-        kRuntimeCallSavedRegisters.CpuRegisterCount() * target::kWordSize +
-        kRuntimeCallSavedRegisters.FpuRegisterCount() * kFpuRegisterSize +
-        4 * target::kWordSize;
-
-    __ subi(SP, FP, kSavedRegistersSize);
-
+    __ subi(SP, FP,
+            kRuntimeCallSavedRegisters.SpillSize() + 4 * target::kWordSize);
     __ PopRegisters(kRuntimeCallSavedRegisters);
   }
 
diff --git a/runtime/vm/compiler/assembler/assembler_riscv.h b/runtime/vm/compiler/assembler/assembler_riscv.h
index 8c8c010..a4a56ac 100644
--- a/runtime/vm/compiler/assembler/assembler_riscv.h
+++ b/runtime/vm/compiler/assembler/assembler_riscv.h
@@ -1007,8 +1007,8 @@
     StoreToOffset(src, base, offset, kWordBytes);
   }
 
-  void TsanLoadAcquire(Register addr);
-  void TsanStoreRelease(Register addr);
+  void TsanLoadAcquire(Register dst, const Address& address, OperandSize size);
+  void TsanStoreRelease(Register src, const Address& address, OperandSize size);
 
   void LoadAcquire(Register dst,
                    const Address& address,
diff --git a/runtime/vm/compiler/assembler/assembler_x64.cc b/runtime/vm/compiler/assembler/assembler_x64.cc
index b6b7ca7..98d713e 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64.cc
@@ -2106,15 +2106,7 @@
     // RSP might have been modified to reserve space for arguments
     // and ensure proper alignment of the stack frame.
     // We need to restore it before restoring registers.
-    const intptr_t kPushedCpuRegistersCount =
-        RegisterSet::RegisterCount(CallingConventions::kVolatileCpuRegisters);
-    const intptr_t kPushedXmmRegistersCount =
-        RegisterSet::RegisterCount(CallingConventions::kVolatileXmmRegisters);
-    const intptr_t kPushedRegistersSize =
-        kPushedCpuRegistersCount * target::kWordSize +
-        kPushedXmmRegistersCount * kFpuRegisterSize;
-
-    __ leaq(RSP, Address(RBP, -kPushedRegistersSize));
+    __ leaq(RSP, Address(RBP, -kVolatileRegisterSet.SpillSize()));
 
     // TODO(vegorov): avoid saving FpuTMP, it is used only as scratch.
     __ PopRegisters(kVolatileRegisterSet);
@@ -2128,16 +2120,80 @@
   __ LeaveFrame();
 }
 
-void Assembler::TsanLoadAcquire(Address addr) {
-  LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true);
+void Assembler::TsanLoadAcquire(Register dst, Address addr, OperandSize size) {
+  ASSERT(addr.base() != RSP);
+  ASSERT(addr.base() != RBP);
+  ASSERT(dst != RSP);
+  ASSERT(dst != RBP);
+
+  RegisterSet registers(CallingConventions::kVolatileCpuRegisters & ~(1 << dst),
+                        CallingConventions::kVolatileXmmRegisters);
+
+  EnterFrame(0);
+  PushRegisters(registers);
+  ReserveAlignedFrameSpace(0);
+
   leaq(CallingConventions::kArg1Reg, addr);
-  rt.Call(kTsanLoadAcquireRuntimeEntry, /*argument_count=*/1);
+  LoadImmediate(CallingConventions::kArg2Reg, __ATOMIC_ACQUIRE);
+
+  switch (size) {
+    case kEightBytes:
+      movq(RAX, compiler::Address(
+                    THR, kTsanAtomic64LoadRuntimeEntry.OffsetFromThread()));
+      break;
+    case kUnsignedFourBytes:
+      movq(RAX, compiler::Address(
+                    THR, kTsanAtomic32LoadRuntimeEntry.OffsetFromThread()));
+      break;
+    default:
+      UNIMPLEMENTED();
+      break;
+  }
+  movq(compiler::Assembler::VMTagAddress(), RAX);
+  CallCFunction(RAX);
+  movq(compiler::Assembler::VMTagAddress(),
+       compiler::Immediate(VMTag::kDartTagId));
+
+  MoveRegister(dst, RAX);
+
+  // RSP might have been modified to reserve space for arguments
+  // and ensure proper alignment of the stack frame.
+  // We need to restore it before restoring registers.
+  leaq(RSP, Address(RBP, -registers.SpillSize()));
+
+  PopRegisters(registers);
+  LeaveFrame();
 }
 
-void Assembler::TsanStoreRelease(Address addr) {
+void Assembler::TsanStoreRelease(Register src, Address addr, OperandSize size) {
+  ASSERT(addr.base() != RSP);
+  ASSERT(addr.base() != RBP);
+  ASSERT(src != RSP);
+  ASSERT(src != RBP);
+
   LeafRuntimeScope rt(this, /*frame_size=*/0, /*preserve_registers=*/true);
-  leaq(CallingConventions::kArg1Reg, addr);
-  rt.Call(kTsanStoreReleaseRuntimeEntry, /*argument_count=*/1);
+
+  if (CallingConventions::kArg1Reg == src) {
+    MoveRegister(CallingConventions::kArg2Reg, src);
+    leaq(CallingConventions::kArg1Reg, addr);
+  } else {
+    leaq(CallingConventions::kArg1Reg, addr);
+    MoveRegister(CallingConventions::kArg2Reg, src);
+  }
+  LoadImmediate(CallingConventions::kArg3Reg, __ATOMIC_RELEASE);
+
+  switch (size) {
+    case kEightBytes:
+      rt.Call(kTsanAtomic64StoreRuntimeEntry, /*argument_count=*/3);
+      break;
+    case kFourBytes:
+    case kUnsignedFourBytes:
+      rt.Call(kTsanAtomic32StoreRuntimeEntry, /*argument_count=*/3);
+      break;
+    default:
+      UNIMPLEMENTED();
+      break;
+  }
 }
 
 void Assembler::RestoreCodePointer() {
diff --git a/runtime/vm/compiler/assembler/assembler_x64.h b/runtime/vm/compiler/assembler/assembler_x64.h
index d9ff09a..da85c23 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.h
+++ b/runtime/vm/compiler/assembler/assembler_x64.h
@@ -1159,37 +1159,35 @@
     }
   }
 
-  void TsanLoadAcquire(Address addr);
-  void TsanStoreRelease(Address addr);
+  void TsanLoadAcquire(Register dst, Address addr, OperandSize size);
+  void TsanStoreRelease(Register src, Address addr, OperandSize size);
 
   void LoadAcquire(Register dst,
                    const Address& address,
                    OperandSize size = kEightBytes) override {
-    // On intel loads have load-acquire behavior (i.e. loads are not re-ordered
-    // with other loads).
-    Load(dst, address, size);
     if (FLAG_target_thread_sanitizer) {
-      TsanLoadAcquire(address);
+      TsanLoadAcquire(dst, address, size);
+    } else {
+      // On intel loads have load-acquire behavior (i.e. loads are not
+      // re-ordered with other loads).
+      Load(dst, address, size);
     }
   }
 #if defined(DART_COMPRESSED_POINTERS)
   void LoadAcquireCompressed(Register dst, const Address& address) override {
-    // On intel loads have load-acquire behavior (i.e. loads are not re-ordered
-    // with other loads).
-    LoadCompressed(dst, address);
-    if (FLAG_target_thread_sanitizer) {
-      TsanLoadAcquire(address);
-    }
+    LoadAcquire(dst, address, kUnsignedFourBytes);
+    addq(dst, Address(THR, target::Thread::heap_base_offset()));
   }
 #endif
   void StoreRelease(Register src,
                     const Address& address,
                     OperandSize size = kWordBytes) override {
-    // On intel stores have store-release behavior (i.e. stores are not
-    // re-ordered with other stores).
-    Store(src, address, size);
     if (FLAG_target_thread_sanitizer) {
-      TsanStoreRelease(address);
+      TsanStoreRelease(src, address, size);
+    } else {
+      // On intel stores have store-release behavior (i.e. stores are not
+      // re-ordered with other stores).
+      Store(src, address, size);
     }
   }
 
diff --git a/runtime/vm/compiler/assembler/assembler_x64_test.cc b/runtime/vm/compiler/assembler/assembler_x64_test.cc
index eba0a6a..63dcbab 100644
--- a/runtime/vm/compiler/assembler/assembler_x64_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64_test.cc
@@ -6236,65 +6236,9 @@
   __ pushq(RCX);
   __ xorq(RCX, RCX);
   __ pushq(RCX);
-
-  for (intptr_t i = 0; i < kNumberOfXmmRegisters; ++i) {
-    XmmRegister xmm_reg = static_cast<XmmRegister>(i);
-    if ((CallingConventions::kVolatileXmmRegisters & (1 << xmm_reg)) != 0) {
-      __ movq(RCX, Immediate(bit_cast<int32_t, float>(12.34f + i)));
-      __ movd(xmm_reg, RCX);
-    }
-  }
-
-  for (intptr_t i = 0; i < kNumberOfCpuRegisters; ++i) {
-    Register reg = static_cast<Register>(i);
-    if (reg == CallingConventions::kArg3Reg) {
-      continue;
-    }
-    if ((CallingConventions::kVolatileCpuRegisters & (1 << reg)) != 0) {
-      __ movq(reg, Immediate(0xAABBCCDD + i));
-    }
-  }
-  __ StoreReleaseToOffset(CallingConventions::kArg3Reg, RSP, 0);
-
-  __ pushq(TMP);
-
-  for (intptr_t i = 0; i < kNumberOfCpuRegisters; ++i) {
-    Register reg = static_cast<Register>(i);
-    if (reg == CallingConventions::kArg3Reg) {
-      continue;
-    }
-    if ((CallingConventions::kVolatileCpuRegisters & (1 << reg)) != 0) {
-      Label ok;
-      if (reg == TMP) {
-        __ popq(TMP);
-        // Use kArg3Reg to validate TMP because TMP is
-        // needed for 64-bit cmpq below.
-        __ pushq(CallingConventions::kArg3Reg);
-        __ movq(CallingConventions::kArg3Reg, TMP);
-        reg = CallingConventions::kArg3Reg;
-      }
-      __ cmpq(reg, Immediate(0xAABBCCDD + i));
-      __ j(EQUAL, &ok);
-      __ int3();
-      __ Bind(&ok);
-      if (reg == CallingConventions::kArg3Reg) {
-        __ popq(CallingConventions::kArg3Reg);
-      }
-    }
-  }
-
-  for (intptr_t i = 0; i < kNumberOfXmmRegisters; ++i) {
-    XmmRegister xmm_reg = static_cast<XmmRegister>(i);
-    if ((CallingConventions::kVolatileXmmRegisters & (1 << xmm_reg)) != 0) {
-      Label ok;
-      __ movq(RCX, xmm_reg);
-      __ cmpq(RCX, Immediate(bit_cast<int32_t, float>(12.34f + i)));
-      __ j(EQUAL, &ok);
-      __ int3();
-      __ Bind(&ok);
-    }
-  }
-  __ LoadAcquireFromOffset(CallingConventions::kReturnReg, RSP, 0);
+  __ movq(RCX, RSP);
+  __ StoreReleaseToOffset(CallingConventions::kArg3Reg, RCX, 0);
+  __ LoadAcquireFromOffset(CallingConventions::kReturnReg, RCX, 0);
   __ popq(RCX);
   __ popq(RCX);
   __ popq(THR);
@@ -6315,8 +6259,9 @@
   __ xorq(RCX, RCX);
   __ pushq(RCX);
   __ subq(RSP, Immediate(1024));
-  __ StoreReleaseToOffset(CallingConventions::kArg3Reg, RSP, 1024);
-  __ LoadAcquireFromOffset(CallingConventions::kReturnReg, RSP, 1024);
+  __ movq(RCX, RSP);
+  __ StoreReleaseToOffset(CallingConventions::kArg3Reg, RCX, 1024);
+  __ LoadAcquireFromOffset(CallingConventions::kReturnReg, RCX, 1024);
   __ addq(RSP, Immediate(1024));
   __ popq(RCX);
   __ popq(RCX);
@@ -6335,8 +6280,9 @@
         "xorq rcx,rcx\n"
         "push rcx\n"
         "subq rsp,0x400\n"
-        "movq [rsp+0x400],rdx\n"
-        "movq rax,[rsp+0x400]\n"
+        "movq rcx,rsp\n"
+        "movq [rcx+0x400],rdx\n"
+        "movq rax,[rcx+0x400]\n"
         "addq rsp,0x400\n"
         "pop rcx\n"
         "pop rcx\n"
diff --git a/runtime/vm/compiler/backend/il_riscv.cc b/runtime/vm/compiler/backend/il_riscv.cc
index 0540417..5b26bae 100644
--- a/runtime/vm/compiler/backend/il_riscv.cc
+++ b/runtime/vm/compiler/backend/il_riscv.cc
@@ -6095,9 +6095,8 @@
     // The unboxed int64 argument is passed through a dedicated slot in Thread.
     // TODO(dartbug.com/33549): Clean this up when unboxed values
     // could be passed as arguments.
-    __ sx(right,
-          compiler::Address(
-              THR, compiler::target::Thread::unboxed_runtime_arg_offset()));
+    __ StoreToOffset(right, THR,
+                     compiler::target::Thread::unboxed_runtime_arg_offset());
 #endif
   }
 };
diff --git a/runtime/vm/compiler/backend/locations.h b/runtime/vm/compiler/backend/locations.h
index 1d38e88..a00fb1a 100644
--- a/runtime/vm/compiler/backend/locations.h
+++ b/runtime/vm/compiler/backend/locations.h
@@ -820,6 +820,10 @@
 
   intptr_t CpuRegisterCount() const { return RegisterCount(cpu_registers()); }
   intptr_t FpuRegisterCount() const { return RegisterCount(fpu_registers()); }
+  intptr_t SpillSize() const {
+    return CpuRegisterCount() * compiler::target::kWordSize +
+           FpuRegisterCount() * kFpuRegisterSize;
+  }
 
   bool IsEmpty() const {
     return CpuRegisterCount() == 0 && FpuRegisterCount() == 0;
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 644b69a..ec36218 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -344,7 +344,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_entry_point_offset = 0x10c;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    0x3c8;
+    0x3d0;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 0xa4;
 static constexpr dart::compiler::target::word
@@ -357,13 +357,13 @@
     Thread_call_to_runtime_entry_point_offset = 0xf8;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0x60;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x400;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x408;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x2c;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 0x3cc;
+    Thread_double_truncate_round_supported_offset = 0x3d4;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x404;
+    Thread_service_extension_stream_offset = 0x40c;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x120;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -479,7 +479,7 @@
     0x330;
 static constexpr dart::compiler::target::word
     Thread_shared_field_table_values_offset = 0x34;
-static constexpr dart::compiler::target::word Thread_single_step_offset = 0x3f4;
+static constexpr dart::compiler::target::word Thread_single_step_offset = 0x3fc;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 0xdc;
 static constexpr dart::compiler::target::word
@@ -526,18 +526,18 @@
 static constexpr dart::compiler::target::word Thread_top_offset = 0x24;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x10;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_runtime_arg_offset = 0x3d0;
+    Thread_unboxed_runtime_arg_offset = 0x3d8;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x314;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 0xf0;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     0x20;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset =
-    0x3e0;
-static constexpr dart::compiler::target::word Thread_random_offset = 0x3e8;
+    0x3e8;
+static constexpr dart::compiler::target::word Thread_random_offset = 0x3f0;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 0x12c;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x3f0;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x3f8;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0x0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -1062,7 +1062,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_entry_point_offset = 0x218;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    0x7a8;
+    0x7b8;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 0x148;
 static constexpr dart::compiler::target::word
@@ -1075,13 +1075,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x1f0;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xc0;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x7f8;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x808;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x58;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 0x7b0;
+    Thread_double_truncate_round_supported_offset = 0x7c0;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x800;
+    Thread_service_extension_stream_offset = 0x810;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x240;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -1197,7 +1197,7 @@
     0x678;
 static constexpr dart::compiler::target::word
     Thread_shared_field_table_values_offset = 0x68;
-static constexpr dart::compiler::target::word Thread_single_step_offset = 0x7e0;
+static constexpr dart::compiler::target::word Thread_single_step_offset = 0x7f0;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 0x1b8;
 static constexpr dart::compiler::target::word
@@ -1244,18 +1244,18 @@
 static constexpr dart::compiler::target::word Thread_top_offset = 0x48;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_runtime_arg_offset = 0x7b8;
+    Thread_unboxed_runtime_arg_offset = 0x7c8;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x640;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 0x1e0;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     0x40;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset =
-    0x7c8;
-static constexpr dart::compiler::target::word Thread_random_offset = 0x7d0;
+    0x7d8;
+static constexpr dart::compiler::target::word Thread_random_offset = 0x7e0;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 0x258;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x7d8;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x7e8;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0x0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -1780,7 +1780,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_entry_point_offset = 0x10c;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    0x3bc;
+    0x3c4;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 0xa4;
 static constexpr dart::compiler::target::word
@@ -1793,13 +1793,13 @@
     Thread_call_to_runtime_entry_point_offset = 0xf8;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0x60;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x3f8;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x400;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x2c;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 0x3c0;
+    Thread_double_truncate_round_supported_offset = 0x3c8;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x3fc;
+    Thread_service_extension_stream_offset = 0x404;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x120;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -1915,7 +1915,7 @@
     0x324;
 static constexpr dart::compiler::target::word
     Thread_shared_field_table_values_offset = 0x34;
-static constexpr dart::compiler::target::word Thread_single_step_offset = 0x3ec;
+static constexpr dart::compiler::target::word Thread_single_step_offset = 0x3f4;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 0xdc;
 static constexpr dart::compiler::target::word
@@ -1962,18 +1962,18 @@
 static constexpr dart::compiler::target::word Thread_top_offset = 0x24;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x10;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_runtime_arg_offset = 0x3c8;
+    Thread_unboxed_runtime_arg_offset = 0x3d0;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x308;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 0xf0;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     0x20;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset =
-    0x3d8;
-static constexpr dart::compiler::target::word Thread_random_offset = 0x3e0;
+    0x3e0;
+static constexpr dart::compiler::target::word Thread_random_offset = 0x3e8;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 0x12c;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x3e8;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x3f0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0x0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -2497,7 +2497,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_entry_point_offset = 0x218;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    0x7f0;
+    0x800;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 0x148;
 static constexpr dart::compiler::target::word
@@ -2510,13 +2510,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x1f0;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xc0;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x840;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x850;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x58;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 0x7f8;
+    Thread_double_truncate_round_supported_offset = 0x808;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x848;
+    Thread_service_extension_stream_offset = 0x858;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x240;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -2632,7 +2632,7 @@
     0x6c0;
 static constexpr dart::compiler::target::word
     Thread_shared_field_table_values_offset = 0x68;
-static constexpr dart::compiler::target::word Thread_single_step_offset = 0x828;
+static constexpr dart::compiler::target::word Thread_single_step_offset = 0x838;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 0x1b8;
 static constexpr dart::compiler::target::word
@@ -2679,18 +2679,18 @@
 static constexpr dart::compiler::target::word Thread_top_offset = 0x48;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_runtime_arg_offset = 0x800;
+    Thread_unboxed_runtime_arg_offset = 0x810;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x688;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 0x1e0;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     0x40;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset =
-    0x810;
-static constexpr dart::compiler::target::word Thread_random_offset = 0x818;
+    0x820;
+static constexpr dart::compiler::target::word Thread_random_offset = 0x828;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 0x258;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x820;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x830;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0x0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -3219,7 +3219,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_entry_point_offset = 0x220;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    0x7b0;
+    0x7c0;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 0x150;
 static constexpr dart::compiler::target::word
@@ -3232,13 +3232,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x1f8;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xc8;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x800;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x810;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x60;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 0x7b8;
+    Thread_double_truncate_round_supported_offset = 0x7c8;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x808;
+    Thread_service_extension_stream_offset = 0x818;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x248;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -3354,7 +3354,7 @@
     0x680;
 static constexpr dart::compiler::target::word
     Thread_shared_field_table_values_offset = 0x70;
-static constexpr dart::compiler::target::word Thread_single_step_offset = 0x7e8;
+static constexpr dart::compiler::target::word Thread_single_step_offset = 0x7f8;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 0x1c0;
 static constexpr dart::compiler::target::word
@@ -3401,7 +3401,7 @@
 static constexpr dart::compiler::target::word Thread_top_offset = 0x50;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_runtime_arg_offset = 0x7c0;
+    Thread_unboxed_runtime_arg_offset = 0x7d0;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x648;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 0x1e8;
@@ -3409,11 +3409,11 @@
     0x40;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 0x48;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset =
-    0x7d0;
-static constexpr dart::compiler::target::word Thread_random_offset = 0x7d8;
+    0x7e0;
+static constexpr dart::compiler::target::word Thread_random_offset = 0x7e8;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 0x260;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x7e0;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x7f0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0x0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -3938,7 +3938,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_entry_point_offset = 0x220;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    0x7f8;
+    0x808;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 0x150;
 static constexpr dart::compiler::target::word
@@ -3951,13 +3951,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x1f8;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xc8;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x848;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x858;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x60;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 0x800;
+    Thread_double_truncate_round_supported_offset = 0x810;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x850;
+    Thread_service_extension_stream_offset = 0x860;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x248;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -4073,7 +4073,7 @@
     0x6c8;
 static constexpr dart::compiler::target::word
     Thread_shared_field_table_values_offset = 0x70;
-static constexpr dart::compiler::target::word Thread_single_step_offset = 0x830;
+static constexpr dart::compiler::target::word Thread_single_step_offset = 0x840;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 0x1c0;
 static constexpr dart::compiler::target::word
@@ -4120,7 +4120,7 @@
 static constexpr dart::compiler::target::word Thread_top_offset = 0x50;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_runtime_arg_offset = 0x808;
+    Thread_unboxed_runtime_arg_offset = 0x818;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x690;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 0x1e8;
@@ -4128,11 +4128,11 @@
     0x40;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 0x48;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset =
-    0x818;
-static constexpr dart::compiler::target::word Thread_random_offset = 0x820;
+    0x828;
+static constexpr dart::compiler::target::word Thread_random_offset = 0x830;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 0x260;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x828;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x838;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0x0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -4657,7 +4657,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_entry_point_offset = 0x10c;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    0x3f0;
+    0x3f8;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 0xa4;
 static constexpr dart::compiler::target::word
@@ -4670,13 +4670,13 @@
     Thread_call_to_runtime_entry_point_offset = 0xf8;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0x60;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x428;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x430;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x2c;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 0x3f4;
+    Thread_double_truncate_round_supported_offset = 0x3fc;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x42c;
+    Thread_service_extension_stream_offset = 0x434;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x120;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -4792,7 +4792,7 @@
     0x358;
 static constexpr dart::compiler::target::word
     Thread_shared_field_table_values_offset = 0x34;
-static constexpr dart::compiler::target::word Thread_single_step_offset = 0x41c;
+static constexpr dart::compiler::target::word Thread_single_step_offset = 0x424;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 0xdc;
 static constexpr dart::compiler::target::word
@@ -4839,18 +4839,18 @@
 static constexpr dart::compiler::target::word Thread_top_offset = 0x24;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x10;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_runtime_arg_offset = 0x3f8;
+    Thread_unboxed_runtime_arg_offset = 0x400;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x33c;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 0xf0;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     0x20;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset =
-    0x408;
-static constexpr dart::compiler::target::word Thread_random_offset = 0x410;
+    0x410;
+static constexpr dart::compiler::target::word Thread_random_offset = 0x418;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 0x12c;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x418;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x420;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0x0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -5376,7 +5376,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_entry_point_offset = 0x218;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    0x7e0;
+    0x7f0;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 0x148;
 static constexpr dart::compiler::target::word
@@ -5389,13 +5389,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x1f0;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xc0;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x830;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x840;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x58;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 0x7e8;
+    Thread_double_truncate_round_supported_offset = 0x7f8;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x838;
+    Thread_service_extension_stream_offset = 0x848;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x240;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -5511,7 +5511,7 @@
     0x6b0;
 static constexpr dart::compiler::target::word
     Thread_shared_field_table_values_offset = 0x68;
-static constexpr dart::compiler::target::word Thread_single_step_offset = 0x818;
+static constexpr dart::compiler::target::word Thread_single_step_offset = 0x828;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 0x1b8;
 static constexpr dart::compiler::target::word
@@ -5558,18 +5558,18 @@
 static constexpr dart::compiler::target::word Thread_top_offset = 0x48;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_runtime_arg_offset = 0x7f0;
+    Thread_unboxed_runtime_arg_offset = 0x800;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x678;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 0x1e0;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     0x40;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset =
-    0x800;
-static constexpr dart::compiler::target::word Thread_random_offset = 0x808;
+    0x810;
+static constexpr dart::compiler::target::word Thread_random_offset = 0x818;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 0x258;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x810;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x820;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0x0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -6088,7 +6088,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_entry_point_offset = 0x10c;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    0x3c8;
+    0x3d0;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 0xa4;
 static constexpr dart::compiler::target::word
@@ -6101,13 +6101,13 @@
     Thread_call_to_runtime_entry_point_offset = 0xf8;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0x60;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x400;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x408;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x2c;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 0x3cc;
+    Thread_double_truncate_round_supported_offset = 0x3d4;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x404;
+    Thread_service_extension_stream_offset = 0x40c;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x120;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -6269,18 +6269,18 @@
 static constexpr dart::compiler::target::word Thread_top_offset = 0x24;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x10;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_runtime_arg_offset = 0x3d0;
+    Thread_unboxed_runtime_arg_offset = 0x3d8;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x314;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 0xf0;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     0x20;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset =
-    0x3e0;
-static constexpr dart::compiler::target::word Thread_random_offset = 0x3e8;
+    0x3e8;
+static constexpr dart::compiler::target::word Thread_random_offset = 0x3f0;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 0x12c;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x3f0;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x3f8;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0x0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -6798,7 +6798,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_entry_point_offset = 0x218;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    0x7a8;
+    0x7b8;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 0x148;
 static constexpr dart::compiler::target::word
@@ -6811,13 +6811,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x1f0;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xc0;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x7f8;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x808;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x58;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 0x7b0;
+    Thread_double_truncate_round_supported_offset = 0x7c0;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x800;
+    Thread_service_extension_stream_offset = 0x810;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x240;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -6979,18 +6979,18 @@
 static constexpr dart::compiler::target::word Thread_top_offset = 0x48;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_runtime_arg_offset = 0x7b8;
+    Thread_unboxed_runtime_arg_offset = 0x7c8;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x640;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 0x1e0;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     0x40;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset =
-    0x7c8;
-static constexpr dart::compiler::target::word Thread_random_offset = 0x7d0;
+    0x7d8;
+static constexpr dart::compiler::target::word Thread_random_offset = 0x7e0;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 0x258;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x7d8;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x7e8;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0x0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -7508,7 +7508,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_entry_point_offset = 0x10c;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    0x3bc;
+    0x3c4;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 0xa4;
 static constexpr dart::compiler::target::word
@@ -7521,13 +7521,13 @@
     Thread_call_to_runtime_entry_point_offset = 0xf8;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0x60;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x3f8;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x400;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x2c;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 0x3c0;
+    Thread_double_truncate_round_supported_offset = 0x3c8;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x3fc;
+    Thread_service_extension_stream_offset = 0x404;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x120;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -7689,18 +7689,18 @@
 static constexpr dart::compiler::target::word Thread_top_offset = 0x24;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x10;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_runtime_arg_offset = 0x3c8;
+    Thread_unboxed_runtime_arg_offset = 0x3d0;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x308;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 0xf0;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     0x20;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset =
-    0x3d8;
-static constexpr dart::compiler::target::word Thread_random_offset = 0x3e0;
+    0x3e0;
+static constexpr dart::compiler::target::word Thread_random_offset = 0x3e8;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 0x12c;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x3e8;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x3f0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0x0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -8217,7 +8217,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_entry_point_offset = 0x218;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    0x7f0;
+    0x800;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 0x148;
 static constexpr dart::compiler::target::word
@@ -8230,13 +8230,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x1f0;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xc0;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x840;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x850;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x58;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 0x7f8;
+    Thread_double_truncate_round_supported_offset = 0x808;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x848;
+    Thread_service_extension_stream_offset = 0x858;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x240;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -8398,18 +8398,18 @@
 static constexpr dart::compiler::target::word Thread_top_offset = 0x48;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_runtime_arg_offset = 0x800;
+    Thread_unboxed_runtime_arg_offset = 0x810;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x688;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 0x1e0;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     0x40;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset =
-    0x810;
-static constexpr dart::compiler::target::word Thread_random_offset = 0x818;
+    0x820;
+static constexpr dart::compiler::target::word Thread_random_offset = 0x828;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 0x258;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x820;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x830;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0x0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -8931,7 +8931,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_entry_point_offset = 0x220;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    0x7b0;
+    0x7c0;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 0x150;
 static constexpr dart::compiler::target::word
@@ -8944,13 +8944,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x1f8;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xc8;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x800;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x810;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x60;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 0x7b8;
+    Thread_double_truncate_round_supported_offset = 0x7c8;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x808;
+    Thread_service_extension_stream_offset = 0x818;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x248;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -9112,7 +9112,7 @@
 static constexpr dart::compiler::target::word Thread_top_offset = 0x50;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_runtime_arg_offset = 0x7c0;
+    Thread_unboxed_runtime_arg_offset = 0x7d0;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x648;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 0x1e8;
@@ -9120,11 +9120,11 @@
     0x40;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 0x48;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset =
-    0x7d0;
-static constexpr dart::compiler::target::word Thread_random_offset = 0x7d8;
+    0x7e0;
+static constexpr dart::compiler::target::word Thread_random_offset = 0x7e8;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 0x260;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x7e0;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x7f0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0x0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -9642,7 +9642,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_entry_point_offset = 0x220;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    0x7f8;
+    0x808;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 0x150;
 static constexpr dart::compiler::target::word
@@ -9655,13 +9655,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x1f8;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xc8;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x848;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x858;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x60;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 0x800;
+    Thread_double_truncate_round_supported_offset = 0x810;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x850;
+    Thread_service_extension_stream_offset = 0x860;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x248;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -9823,7 +9823,7 @@
 static constexpr dart::compiler::target::word Thread_top_offset = 0x50;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_runtime_arg_offset = 0x808;
+    Thread_unboxed_runtime_arg_offset = 0x818;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x690;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 0x1e8;
@@ -9831,11 +9831,11 @@
     0x40;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 0x48;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset =
-    0x818;
-static constexpr dart::compiler::target::word Thread_random_offset = 0x820;
+    0x828;
+static constexpr dart::compiler::target::word Thread_random_offset = 0x830;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 0x260;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x828;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x838;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0x0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -10353,7 +10353,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_entry_point_offset = 0x10c;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    0x3f0;
+    0x3f8;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 0xa4;
 static constexpr dart::compiler::target::word
@@ -10366,13 +10366,13 @@
     Thread_call_to_runtime_entry_point_offset = 0xf8;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0x60;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x428;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x430;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x2c;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 0x3f4;
+    Thread_double_truncate_round_supported_offset = 0x3fc;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x42c;
+    Thread_service_extension_stream_offset = 0x434;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x120;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -10534,18 +10534,18 @@
 static constexpr dart::compiler::target::word Thread_top_offset = 0x24;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x10;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_runtime_arg_offset = 0x3f8;
+    Thread_unboxed_runtime_arg_offset = 0x400;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x33c;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 0xf0;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     0x20;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset =
-    0x408;
-static constexpr dart::compiler::target::word Thread_random_offset = 0x410;
+    0x410;
+static constexpr dart::compiler::target::word Thread_random_offset = 0x418;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 0x12c;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x418;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x420;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0x0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -11064,7 +11064,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_entry_point_offset = 0x218;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    0x7e0;
+    0x7f0;
 static constexpr dart::compiler::target::word
     Thread_async_exception_handler_stub_offset = 0x148;
 static constexpr dart::compiler::target::word
@@ -11077,13 +11077,13 @@
     Thread_call_to_runtime_entry_point_offset = 0x1f0;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 0xc0;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x830;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 0x840;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 0x58;
 static constexpr dart::compiler::target::word
-    Thread_double_truncate_round_supported_offset = 0x7e8;
+    Thread_double_truncate_round_supported_offset = 0x7f8;
 static constexpr dart::compiler::target::word
-    Thread_service_extension_stream_offset = 0x838;
+    Thread_service_extension_stream_offset = 0x848;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
     0x240;
 static constexpr dart::compiler::target::word Thread_optimize_stub_offset =
@@ -11245,18 +11245,18 @@
 static constexpr dart::compiler::target::word Thread_top_offset = 0x48;
 static constexpr dart::compiler::target::word Thread_top_resource_offset = 0x20;
 static constexpr dart::compiler::target::word
-    Thread_unboxed_runtime_arg_offset = 0x7f0;
+    Thread_unboxed_runtime_arg_offset = 0x800;
 static constexpr dart::compiler::target::word Thread_vm_tag_offset = 0x678;
 static constexpr dart::compiler::target::word
     Thread_write_barrier_entry_point_offset = 0x1e0;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     0x40;
 static constexpr dart::compiler::target::word Thread_next_task_id_offset =
-    0x800;
-static constexpr dart::compiler::target::word Thread_random_offset = 0x808;
+    0x810;
+static constexpr dart::compiler::target::word Thread_random_offset = 0x818;
 static constexpr dart::compiler::target::word
     Thread_jump_to_frame_entry_point_offset = 0x258;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x810;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 0x820;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
     0x0;
 static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -11812,7 +11812,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_entry_point_offset = 0x10c;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    0x3c8;
+    0x3d0;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 0xa4;
 static constexpr dart::compiler::target::word
@@ -11828,13 +11828,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0x60;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x400;
+    0x408;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x2c;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 0x3cc;
+    AOT_Thread_double_truncate_round_supported_offset = 0x3d4;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x404;
+    AOT_Thread_service_extension_stream_offset = 0x40c;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x120;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -11956,7 +11956,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_shared_field_table_values_offset = 0x34;
 static constexpr dart::compiler::target::word AOT_Thread_single_step_offset =
-    0x3f4;
+    0x3fc;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 0xdc;
 static constexpr dart::compiler::target::word
@@ -12007,19 +12007,19 @@
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     0x10;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_runtime_arg_offset = 0x3d0;
+    AOT_Thread_unboxed_runtime_arg_offset = 0x3d8;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x314;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 0xf0;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 0x20;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    0x3e0;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x3e8;
+    0x3e8;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x3f0;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 0x12c;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    0x3f0;
+    0x3f8;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0x0;
 static constexpr dart::compiler::target::word
@@ -12608,7 +12608,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_entry_point_offset = 0x218;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    0x7a8;
+    0x7b8;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 0x148;
 static constexpr dart::compiler::target::word
@@ -12624,13 +12624,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xc0;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x7f8;
+    0x808;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x58;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 0x7b0;
+    AOT_Thread_double_truncate_round_supported_offset = 0x7c0;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x800;
+    AOT_Thread_service_extension_stream_offset = 0x810;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x240;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -12752,7 +12752,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_shared_field_table_values_offset = 0x68;
 static constexpr dart::compiler::target::word AOT_Thread_single_step_offset =
-    0x7e0;
+    0x7f0;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 0x1b8;
 static constexpr dart::compiler::target::word
@@ -12803,19 +12803,19 @@
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     0x20;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_runtime_arg_offset = 0x7b8;
+    AOT_Thread_unboxed_runtime_arg_offset = 0x7c8;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x640;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 0x1e0;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 0x40;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    0x7c8;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x7d0;
+    0x7d8;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x7e0;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 0x258;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    0x7d8;
+    0x7e8;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0x0;
 static constexpr dart::compiler::target::word
@@ -13411,7 +13411,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_entry_point_offset = 0x218;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    0x7f0;
+    0x800;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 0x148;
 static constexpr dart::compiler::target::word
@@ -13427,13 +13427,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xc0;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x840;
+    0x850;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x58;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 0x7f8;
+    AOT_Thread_double_truncate_round_supported_offset = 0x808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x848;
+    AOT_Thread_service_extension_stream_offset = 0x858;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x240;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -13555,7 +13555,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_shared_field_table_values_offset = 0x68;
 static constexpr dart::compiler::target::word AOT_Thread_single_step_offset =
-    0x828;
+    0x838;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 0x1b8;
 static constexpr dart::compiler::target::word
@@ -13606,19 +13606,19 @@
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     0x20;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_runtime_arg_offset = 0x800;
+    AOT_Thread_unboxed_runtime_arg_offset = 0x810;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x688;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 0x1e0;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 0x40;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    0x810;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x818;
+    0x820;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x828;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 0x258;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    0x820;
+    0x830;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0x0;
 static constexpr dart::compiler::target::word
@@ -14210,7 +14210,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_entry_point_offset = 0x220;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    0x7b0;
+    0x7c0;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 0x150;
 static constexpr dart::compiler::target::word
@@ -14226,13 +14226,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xc8;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x800;
+    0x810;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x60;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 0x7b8;
+    AOT_Thread_double_truncate_round_supported_offset = 0x7c8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x808;
+    AOT_Thread_service_extension_stream_offset = 0x818;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x248;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -14354,7 +14354,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_shared_field_table_values_offset = 0x70;
 static constexpr dart::compiler::target::word AOT_Thread_single_step_offset =
-    0x7e8;
+    0x7f8;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 0x1c0;
 static constexpr dart::compiler::target::word
@@ -14405,7 +14405,7 @@
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     0x20;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_runtime_arg_offset = 0x7c0;
+    AOT_Thread_unboxed_runtime_arg_offset = 0x7d0;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x648;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 0x1e8;
@@ -14414,12 +14414,12 @@
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset =
     0x48;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    0x7d0;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x7d8;
+    0x7e0;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x7e8;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 0x260;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    0x7e0;
+    0x7f0;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0x0;
 static constexpr dart::compiler::target::word
@@ -15009,7 +15009,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_entry_point_offset = 0x220;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    0x7f8;
+    0x808;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 0x150;
 static constexpr dart::compiler::target::word
@@ -15025,13 +15025,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xc8;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x848;
+    0x858;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x60;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 0x800;
+    AOT_Thread_double_truncate_round_supported_offset = 0x810;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x850;
+    AOT_Thread_service_extension_stream_offset = 0x860;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x248;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -15153,7 +15153,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_shared_field_table_values_offset = 0x70;
 static constexpr dart::compiler::target::word AOT_Thread_single_step_offset =
-    0x830;
+    0x840;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 0x1c0;
 static constexpr dart::compiler::target::word
@@ -15204,7 +15204,7 @@
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     0x20;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_runtime_arg_offset = 0x808;
+    AOT_Thread_unboxed_runtime_arg_offset = 0x818;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x690;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 0x1e8;
@@ -15213,12 +15213,12 @@
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset =
     0x48;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    0x818;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x820;
+    0x828;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x830;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 0x260;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    0x828;
+    0x838;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0x0;
 static constexpr dart::compiler::target::word
@@ -15809,7 +15809,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_entry_point_offset = 0x10c;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    0x3f0;
+    0x3f8;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 0xa4;
 static constexpr dart::compiler::target::word
@@ -15825,13 +15825,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0x60;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x428;
+    0x430;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x2c;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 0x3f4;
+    AOT_Thread_double_truncate_round_supported_offset = 0x3fc;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x42c;
+    AOT_Thread_service_extension_stream_offset = 0x434;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x120;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -15953,7 +15953,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_shared_field_table_values_offset = 0x34;
 static constexpr dart::compiler::target::word AOT_Thread_single_step_offset =
-    0x41c;
+    0x424;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 0xdc;
 static constexpr dart::compiler::target::word
@@ -16004,19 +16004,19 @@
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     0x10;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_runtime_arg_offset = 0x3f8;
+    AOT_Thread_unboxed_runtime_arg_offset = 0x400;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x33c;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 0xf0;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 0x20;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    0x408;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x410;
+    0x410;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x418;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 0x12c;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    0x418;
+    0x420;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0x0;
 static constexpr dart::compiler::target::word
@@ -16606,7 +16606,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_entry_point_offset = 0x218;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    0x7e0;
+    0x7f0;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 0x148;
 static constexpr dart::compiler::target::word
@@ -16622,13 +16622,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xc0;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x830;
+    0x840;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x58;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 0x7e8;
+    AOT_Thread_double_truncate_round_supported_offset = 0x7f8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x838;
+    AOT_Thread_service_extension_stream_offset = 0x848;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x240;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -16750,7 +16750,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_shared_field_table_values_offset = 0x68;
 static constexpr dart::compiler::target::word AOT_Thread_single_step_offset =
-    0x818;
+    0x828;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 0x1b8;
 static constexpr dart::compiler::target::word
@@ -16801,19 +16801,19 @@
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     0x20;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_runtime_arg_offset = 0x7f0;
+    AOT_Thread_unboxed_runtime_arg_offset = 0x800;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x678;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 0x1e0;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 0x40;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    0x800;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x808;
+    0x810;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x818;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 0x258;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    0x810;
+    0x820;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0x0;
 static constexpr dart::compiler::target::word
@@ -17396,7 +17396,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_entry_point_offset = 0x10c;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    0x3c8;
+    0x3d0;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 0xa4;
 static constexpr dart::compiler::target::word
@@ -17412,13 +17412,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0x60;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x400;
+    0x408;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x2c;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 0x3cc;
+    AOT_Thread_double_truncate_round_supported_offset = 0x3d4;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x404;
+    AOT_Thread_service_extension_stream_offset = 0x40c;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x120;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -17589,19 +17589,19 @@
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     0x10;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_runtime_arg_offset = 0x3d0;
+    AOT_Thread_unboxed_runtime_arg_offset = 0x3d8;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x314;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 0xf0;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 0x20;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    0x3e0;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x3e8;
+    0x3e8;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x3f0;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 0x12c;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    0x3f0;
+    0x3f8;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0x0;
 static constexpr dart::compiler::target::word
@@ -18183,7 +18183,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_entry_point_offset = 0x218;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    0x7a8;
+    0x7b8;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 0x148;
 static constexpr dart::compiler::target::word
@@ -18199,13 +18199,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xc0;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x7f8;
+    0x808;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x58;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 0x7b0;
+    AOT_Thread_double_truncate_round_supported_offset = 0x7c0;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x800;
+    AOT_Thread_service_extension_stream_offset = 0x810;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x240;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -18376,19 +18376,19 @@
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     0x20;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_runtime_arg_offset = 0x7b8;
+    AOT_Thread_unboxed_runtime_arg_offset = 0x7c8;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x640;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 0x1e0;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 0x40;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    0x7c8;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x7d0;
+    0x7d8;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x7e0;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 0x258;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    0x7d8;
+    0x7e8;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0x0;
 static constexpr dart::compiler::target::word
@@ -18977,7 +18977,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_entry_point_offset = 0x218;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    0x7f0;
+    0x800;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 0x148;
 static constexpr dart::compiler::target::word
@@ -18993,13 +18993,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xc0;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x840;
+    0x850;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x58;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 0x7f8;
+    AOT_Thread_double_truncate_round_supported_offset = 0x808;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x848;
+    AOT_Thread_service_extension_stream_offset = 0x858;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x240;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -19170,19 +19170,19 @@
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     0x20;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_runtime_arg_offset = 0x800;
+    AOT_Thread_unboxed_runtime_arg_offset = 0x810;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x688;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 0x1e0;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 0x40;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    0x810;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x818;
+    0x820;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x828;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 0x258;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    0x820;
+    0x830;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0x0;
 static constexpr dart::compiler::target::word
@@ -19767,7 +19767,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_entry_point_offset = 0x220;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    0x7b0;
+    0x7c0;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 0x150;
 static constexpr dart::compiler::target::word
@@ -19783,13 +19783,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xc8;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x800;
+    0x810;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x60;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 0x7b8;
+    AOT_Thread_double_truncate_round_supported_offset = 0x7c8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x808;
+    AOT_Thread_service_extension_stream_offset = 0x818;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x248;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -19960,7 +19960,7 @@
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     0x20;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_runtime_arg_offset = 0x7c0;
+    AOT_Thread_unboxed_runtime_arg_offset = 0x7d0;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x648;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 0x1e8;
@@ -19969,12 +19969,12 @@
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset =
     0x48;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    0x7d0;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x7d8;
+    0x7e0;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x7e8;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 0x260;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    0x7e0;
+    0x7f0;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0x0;
 static constexpr dart::compiler::target::word
@@ -20557,7 +20557,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_entry_point_offset = 0x220;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    0x7f8;
+    0x808;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 0x150;
 static constexpr dart::compiler::target::word
@@ -20573,13 +20573,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xc8;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x848;
+    0x858;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x60;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 0x800;
+    AOT_Thread_double_truncate_round_supported_offset = 0x810;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x850;
+    AOT_Thread_service_extension_stream_offset = 0x860;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x248;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -20750,7 +20750,7 @@
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     0x20;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_runtime_arg_offset = 0x808;
+    AOT_Thread_unboxed_runtime_arg_offset = 0x818;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x690;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 0x1e8;
@@ -20759,12 +20759,12 @@
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset =
     0x48;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    0x818;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x820;
+    0x828;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x830;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 0x260;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    0x828;
+    0x838;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0x0;
 static constexpr dart::compiler::target::word
@@ -21348,7 +21348,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_entry_point_offset = 0x10c;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    0x3f0;
+    0x3f8;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 0xa4;
 static constexpr dart::compiler::target::word
@@ -21364,13 +21364,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0x60;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x428;
+    0x430;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x2c;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 0x3f4;
+    AOT_Thread_double_truncate_round_supported_offset = 0x3fc;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x42c;
+    AOT_Thread_service_extension_stream_offset = 0x434;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x120;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -21541,19 +21541,19 @@
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     0x10;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_runtime_arg_offset = 0x3f8;
+    AOT_Thread_unboxed_runtime_arg_offset = 0x400;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x33c;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 0xf0;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 0x20;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    0x408;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x410;
+    0x410;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x418;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 0x12c;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    0x418;
+    0x420;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0x0;
 static constexpr dart::compiler::target::word
@@ -22136,7 +22136,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_entry_point_offset = 0x218;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    0x7e0;
+    0x7f0;
 static constexpr dart::compiler::target::word
     AOT_Thread_async_exception_handler_stub_offset = 0x148;
 static constexpr dart::compiler::target::word
@@ -22152,13 +22152,13 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 0xc0;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    0x830;
+    0x840;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 0x58;
 static constexpr dart::compiler::target::word
-    AOT_Thread_double_truncate_round_supported_offset = 0x7e8;
+    AOT_Thread_double_truncate_round_supported_offset = 0x7f8;
 static constexpr dart::compiler::target::word
-    AOT_Thread_service_extension_stream_offset = 0x838;
+    AOT_Thread_service_extension_stream_offset = 0x848;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
     0x240;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
@@ -22329,19 +22329,19 @@
 static constexpr dart::compiler::target::word AOT_Thread_top_resource_offset =
     0x20;
 static constexpr dart::compiler::target::word
-    AOT_Thread_unboxed_runtime_arg_offset = 0x7f0;
+    AOT_Thread_unboxed_runtime_arg_offset = 0x800;
 static constexpr dart::compiler::target::word AOT_Thread_vm_tag_offset = 0x678;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_entry_point_offset = 0x1e0;
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 0x40;
 static constexpr dart::compiler::target::word AOT_Thread_next_task_id_offset =
-    0x800;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x808;
+    0x810;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 0x818;
 static constexpr dart::compiler::target::word
     AOT_Thread_jump_to_frame_entry_point_offset = 0x258;
 static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
-    0x810;
+    0x820;
 static constexpr dart::compiler::target::word
     AOT_TsanUtils_setjmp_function_offset = 0x0;
 static constexpr dart::compiler::target::word
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index c4700db..f32d70f 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -4872,10 +4872,20 @@
 #endif
 
 #if !defined(USING_THREAD_SANITIZER)
-extern "C" void __tsan_acquire(void* addr) {
+extern "C" uint32_t __tsan_atomic32_load(uint32_t* addr, int order) {
   UNREACHABLE();
 }
-extern "C" void __tsan_release(void* addr) {
+extern "C" void __tsan_atomic32_store(uint32_t* addr,
+                                      uint32_t value,
+                                      int order) {
+  UNREACHABLE();
+}
+extern "C" uint64_t __tsan_atomic64_load(uint64_t* addr, int order) {
+  UNREACHABLE();
+}
+extern "C" void __tsan_atomic64_store(uint64_t* addr,
+                                      uint64_t value,
+                                      int order) {
   UNREACHABLE();
 }
 #endif
@@ -4885,7 +4895,9 @@
 
 DEFINE_LEAF_RUNTIME_ENTRY(MsanUnpoison, 2, __msan_unpoison);
 DEFINE_LEAF_RUNTIME_ENTRY(MsanUnpoisonParam, 1, __msan_unpoison_param);
-DEFINE_LEAF_RUNTIME_ENTRY(TsanLoadAcquire, 1, __tsan_acquire);
-DEFINE_LEAF_RUNTIME_ENTRY(TsanStoreRelease, 1, __tsan_release);
+DEFINE_LEAF_RUNTIME_ENTRY(TsanAtomic32Load, 2, __tsan_atomic32_load);
+DEFINE_LEAF_RUNTIME_ENTRY(TsanAtomic32Store, 3, __tsan_atomic32_store);
+DEFINE_LEAF_RUNTIME_ENTRY(TsanAtomic64Load, 2, __tsan_atomic64_load);
+DEFINE_LEAF_RUNTIME_ENTRY(TsanAtomic64Store, 3, __tsan_atomic64_store);
 
 }  // namespace dart
diff --git a/runtime/vm/runtime_entry_list.h b/runtime/vm/runtime_entry_list.h
index 7a4bda2..5e4b166 100644
--- a/runtime/vm/runtime_entry_list.h
+++ b/runtime/vm/runtime_entry_list.h
@@ -127,8 +127,10 @@
   V(void, PropagateError, Dart_Handle)                                         \
   V(void, MsanUnpoison, void*, size_t)                                         \
   V(void, MsanUnpoisonParam, size_t)                                           \
-  V(void, TsanLoadAcquire, void*)                                              \
-  V(void, TsanStoreRelease, void*)                                             \
+  V(uint32_t, TsanAtomic32Load, void*, int)                                    \
+  V(void, TsanAtomic32Store, void*, uint32_t, int)                             \
+  V(uint64_t, TsanAtomic64Load, void*, int)                                    \
+  V(void, TsanAtomic64Store, void*, uint64_t, int)                             \
   V(bool, TryDoubleAsInteger, Thread*)                                         \
   V(void*, MemoryMove, void*, const void*, size_t)