GeezerVison is showing github.com — deps: patch V8 to 14.2.231.14 · nodejs/node@e0ca993
File treeExpand file treeCollapse file tree Open diff view settings Expand file treeCollapse file tree Open diff view settings Collapse file Copy file name to clipboardExpand all lines: deps/v8/include/v8-version.h +1-1Lines changed: 1 addition & 1 deletion | Original file line number | Diff line number | Diff line change |
|---|
| 11 | 11 | #define V8_MAJOR_VERSION 14 | 12 | 12 | #define V8_MINOR_VERSION 2 | 13 | 13 | #define V8_BUILD_NUMBER 231 | 14 | | -#define V8_PATCH_LEVEL 9 | | 14 | +#define V8_PATCH_LEVEL 14 | 15 | 15 |
| 16 | 16 | // Use 1 for candidates and 0 otherwise. | 17 | 17 | // (Boolean macro values are not supported by all preprocessors.) | |
Collapse file Copy file name to clipboardExpand all lines: deps/v8/src/builtins/loong64/builtins-loong64.cc +16-29Lines changed: 16 additions & 29 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -3185,12 +3185,9 @@ void ReloadParentStack(MacroAssembler* masm, Register return_reg, | 3185 | 3185 | Register parent = tmp2; | 3186 | 3186 | __ Ld_d(parent, MemOperand(active_stack, wasm::kStackParentOffset)); | 3187 | 3187 |
| 3188 | | - // Update active stack. | 3189 | | - __ StoreRootRelative(IsolateData::active_stack_offset(), parent); | 3190 | | - | 3191 | 3188 | // Switch stack! | 3192 | | - SwitchStacks(masm, ExternalReference::wasm_return_stack(), active_stack, | 3193 | | - nullptr, no_reg, {return_reg, return_value, context, parent}); | | 3189 | + SwitchStacks(masm, ExternalReference::wasm_return_stack(), parent, nullptr, | | 3190 | + no_reg, {return_reg, return_value, context, parent}); | 3194 | 3191 | LoadJumpBuffer(masm, parent, false, tmp3); | 3195 | 3192 | } | 3196 | 3193 |
| @@ -3425,22 +3422,18 @@ void Builtins::Generate_WasmSuspend(MacroAssembler* masm) { | 3425 | 3422 | ResetWasmJspiFrameStackSlots(masm); | 3426 | 3423 |
| 3427 | 3424 | Label resume; | 3428 | | - DEFINE_REG(stack); | 3429 | | - __ LoadRootRelative(stack, IsolateData::active_stack_offset()); | 3430 | 3425 | DEFINE_REG(scratch); | 3431 | 3426 |
| 3432 | | - // Update active stack. | 3433 | 3427 | DEFINE_REG(parent); | 3434 | 3428 | __ LoadProtectedPointerField( | 3435 | 3429 | parent, FieldMemOperand(suspender, WasmSuspenderObject::kParentOffset)); | 3436 | 3430 | DEFINE_REG(target_stack); | 3437 | 3431 | __ LoadExternalPointerField( | 3438 | 3432 | target_stack, FieldMemOperand(parent, WasmSuspenderObject::kStackOffset), | 3439 | 3433 | kWasmStackMemoryTag); | 3440 | | - __ StoreRootRelative(IsolateData::active_stack_offset(), target_stack); | 3441 | 3434 |
| 3442 | | - SwitchStacks(masm, ExternalReference::wasm_suspend_stack(), stack, &resume, | 3443 | | - no_reg, {target_stack, suspender, parent}); | | 3435 | + SwitchStacks(masm, ExternalReference::wasm_suspend_stack(), target_stack, | | 3436 | + &resume, no_reg, {target_stack, suspender, parent}); | 3444 | 3437 | __ StoreRootRelative(IsolateData::active_suspender_offset(), parent); | 3445 | 3438 | __ LoadTaggedField( | 3446 | 3439 | kReturnRegister0, | @@ -3512,11 +3505,8 @@ void Generate_WasmResumeHelper(MacroAssembler* masm, wasm::OnResume on_resume) { | 3512 | 3505 | target_stack, | 3513 | 3506 | FieldMemOperand(suspender, WasmSuspenderObject::kStackOffset), | 3514 | 3507 | kWasmStackMemoryTag); | 3515 | | - | 3516 | | - __ StoreRootRelative(IsolateData::active_stack_offset(), target_stack); | 3517 | | - SwitchStacks(masm, ExternalReference::wasm_resume_jspi_stack(), active_stack, | | 3508 | + SwitchStacks(masm, ExternalReference::wasm_resume_jspi_stack(), target_stack, | 3518 | 3509 | &suspend, suspender, {target_stack}); | 3519 | | - | 3520 | 3510 | regs.ResetExcept(target_stack); | 3521 | 3511 |
| 3522 | 3512 | // ------------------------------------------- | @@ -3563,11 +3553,8 @@ void Builtins::Generate_WasmFXResume(MacroAssembler* masm) { | 3563 | 3553 | __ EnterFrame(StackFrame::WASM_STACK_EXIT); | 3564 | 3554 | Register target_stack = WasmFXResumeDescriptor::GetRegisterParameter(0); | 3565 | 3555 | Label suspend; | 3566 | | - Register active_stack = a0; | 3567 | | - __ LoadRootRelative(active_stack, IsolateData::active_stack_offset()); | 3568 | | - __ StoreRootRelative(IsolateData::active_stack_offset(), target_stack); | 3569 | 3556 | SwitchStacks(masm, ExternalReference::wasm_resume_wasmfx_stack(), | 3570 | | - active_stack, &suspend, no_reg, {target_stack}); | | 3557 | + target_stack, &suspend, no_reg, {target_stack}); | 3571 | 3558 | LoadJumpBuffer(masm, target_stack, true, a1); | 3572 | 3559 | __ Trap(); | 3573 | 3560 | __ bind(&suspend); | @@ -3580,9 +3567,8 @@ void Builtins::Generate_WasmFXReturn(MacroAssembler* masm) { | 3580 | 3567 | __ LoadRootRelative(active_stack, IsolateData::active_stack_offset()); | 3581 | 3568 | Register parent = a1; | 3582 | 3569 | __ Move(parent, MemOperand(active_stack, wasm::kStackParentOffset)); | 3583 | | - __ StoreRootRelative(IsolateData::active_stack_offset(), parent); | 3584 | | - SwitchStacks(masm, ExternalReference::wasm_return_stack(), active_stack, | 3585 | | - nullptr, no_reg, {parent}); | | 3570 | + SwitchStacks(masm, ExternalReference::wasm_return_stack(), parent, nullptr, | | 3571 | + no_reg, {parent}); | 3586 | 3572 | LoadJumpBuffer(masm, parent, true, a2); | 3587 | 3573 | __ Trap(); | 3588 | 3574 | } | @@ -3599,14 +3585,15 @@ void SwitchToAllocatedStack(MacroAssembler* masm, RegisterAllocator& regs, | 3599 | 3585 | Label* suspend) { | 3600 | 3586 | ResetWasmJspiFrameStackSlots(masm); | 3601 | 3587 | DEFINE_SCOPED(scratch) | 3602 | | - DEFINE_REG(parent_stack) | 3603 | | - __ LoadRootRelative(parent_stack, IsolateData::active_stack_offset()); | 3604 | | - __ Ld_d(parent_stack, MemOperand(parent_stack, wasm::kStackParentOffset)); | 3605 | | - | 3606 | | - SwitchStacks(masm, ExternalReference::wasm_start_stack(), parent_stack, | 3607 | | - suspend, no_reg, {wasm_instance, wrapper_buffer}); | | 3588 | + DEFINE_REG(stack) | | 3589 | + __ LoadRootRelative(stack, IsolateData::active_suspender_offset()); | | 3590 | + __ LoadExternalPointerField( | | 3591 | + stack, FieldMemOperand(stack, WasmSuspenderObject::kStackOffset), | | 3592 | + kWasmStackMemoryTag); | | 3593 | + SwitchStacks(masm, ExternalReference::wasm_start_stack(), stack, suspend, | | 3594 | + no_reg, {wasm_instance, wrapper_buffer}); | 3608 | 3595 |
| 3609 | | - FREE_REG(parent_stack); | | 3596 | + FREE_REG(stack); | 3610 | 3597 | // Save the old stack's fp in t0, and use it to access the parameters in | 3611 | 3598 | // the parent frame. | 3612 | 3599 | regs.Pinned(t1, &original_fp); | |
Collapse file Copy file name to clipboardExpand all lines: deps/v8/src/codegen/loong64/macro-assembler-loong64.cc +74Lines changed: 74 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -142,6 +142,58 @@ void MacroAssembler::PushStandardFrame(Register function_reg) { | 142 | 142 | Add_d(fp, sp, Operand(offset)); | 143 | 143 | } | 144 | 144 |
| | 145 | +void MacroAssembler::PreCheckSkippedWriteBarrier(Register object, | | 146 | + Register value, | | 147 | + Register scratch, Label* ok) { | | 148 | + ASM_CODE_COMMENT(this); | | 149 | + DCHECK(!AreAliased(object, scratch)); | | 150 | + DCHECK(!AreAliased(value, scratch)); | | 151 | + | | 152 | + // The most common case: Static write barrier elimination is allowed on the | | 153 | + // last young allocation. | | 154 | + { | | 155 | + UseScratchRegisterScope temps(this); | | 156 | + Register scratch1 = temps.Acquire(); | | 157 | + Sub_d(scratch, object, kHeapObjectTag); | | 158 | + Ld_d(scratch1, MemOperand(kRootRegister, | | 159 | + IsolateData::last_young_allocation_offset())); | | 160 | + Branch(ok, Condition::kEqual, scratch, Operand(scratch1)); | | 161 | + } | | 162 | + | | 163 | + // Write barier can also be removed if value is in read-only space. | | 164 | + CheckPageFlag(value, MemoryChunk::kIsInReadOnlyHeapMask, ne, ok); | | 165 | + | | 166 | + Label not_ok; | | 167 | + | | 168 | + // Handle allocation folding, allow WB removal if: | | 169 | + // LAB start <= last_young_allocation_ < (object address+1) < LAB top | | 170 | + // Note that object has tag bit set, so object == object address+1. | | 171 | + { | | 172 | + UseScratchRegisterScope temps(this); | | 173 | + Register scratch1 = temps.Acquire(); | | 174 | + | | 175 | + // Check LAB start <= last_young_allocation_. | | 176 | + Ld_d(scratch, MemOperand(kRootRegister, | | 177 | + IsolateData::new_allocation_info_start_offset())); | | 178 | + Ld_d(scratch1, MemOperand(kRootRegister, | | 179 | + IsolateData::last_young_allocation_offset())); | | 180 | + Branch(¬_ok, Condition::kUnsignedGreaterThan, scratch, | | 181 | + Operand(scratch1)); | | 182 | + | | 183 | + // Check last_young_allocation_ < (object address+1). | | 184 | + Branch(¬_ok, Condition::kUnsignedGreaterThanEqual, scratch1, | | 185 | + Operand(object)); | | 186 | + | | 187 | + // Check (object address+1) < LAB top. | | 188 | + Ld_d(scratch, MemOperand(kRootRegister, | | 189 | + IsolateData::new_allocation_info_top_offset())); | | 190 | + Branch(ok, Condition::kUnsignedLessThan, object, Operand(scratch)); | | 191 | + } | | 192 | + | | 193 | + // Slow path: Potentially check more cases in C++. | | 194 | + bind(¬_ok); | | 195 | +} | | 196 | + | 145 | 197 | // Clobbers object, dst, value, and ra, if (ra_status == kRAHasBeenSaved) | 146 | 198 | // The register 'object' contains a heap object pointer. The heap object | 147 | 199 | // tag is shifted away. | @@ -582,11 +634,33 @@ void MacroAssembler::CallVerifySkippedWriteBarrierStubSaveRegisters( | 582 | 634 | void MacroAssembler::CallVerifySkippedWriteBarrierStub(Register object, | 583 | 635 | Register value) { | 584 | 636 | ASM_CODE_COMMENT(this); | | 637 | + UseScratchRegisterScope temps(this); | | 638 | + Register scratch = temps.Acquire(); | | 639 | + PrepareCallCFunction(2, scratch); | 585 | 640 | MovePair(kCArgRegs[0], object, kCArgRegs[1], value); | 586 | 641 | CallCFunction(ExternalReference::verify_skipped_write_barrier(), 2, | 587 | 642 | SetIsolateDataSlots::kNo); | 588 | 643 | } | 589 | 644 |
| | 645 | +void MacroAssembler::CallVerifySkippedIndirectWriteBarrierStubSaveRegisters( | | 646 | + Register object, Register value, SaveFPRegsMode fp_mode) { | | 647 | + ASM_CODE_COMMENT(this); | | 648 | + PushCallerSaved(fp_mode); | | 649 | + CallVerifySkippedIndirectWriteBarrierStub(object, value); | | 650 | + PopCallerSaved(fp_mode); | | 651 | +} | | 652 | + | | 653 | +void MacroAssembler::CallVerifySkippedIndirectWriteBarrierStub(Register object, | | 654 | + Register value) { | | 655 | + ASM_CODE_COMMENT(this); | | 656 | + UseScratchRegisterScope temps(this); | | 657 | + Register scratch = temps.Acquire(); | | 658 | + PrepareCallCFunction(2, scratch); | | 659 | + MovePair(kCArgRegs[0], object, kCArgRegs[1], value); | | 660 | + CallCFunction(ExternalReference::verify_skipped_indirect_write_barrier(), 2, | | 661 | + SetIsolateDataSlots::kNo); | | 662 | +} | | 663 | + | 590 | 664 | void MacroAssembler::MoveObjectAndSlot(Register dst_object, Register dst_slot, | 591 | 665 | Register object, Operand offset) { | 592 | 666 | ASM_CODE_COMMENT(this); | |
Collapse file Copy file name to clipboardExpand all lines: deps/v8/src/codegen/loong64/macro-assembler-loong64.h +8Lines changed: 8 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -181,6 +181,9 @@ class V8_EXPORT_PRIVATE MacroAssembler : public MacroAssemblerBase { | 181 | 181 | void LoadRootRelative(Register destination, int32_t offset) final; | 182 | 182 | void StoreRootRelative(int32_t offset, Register value) final; | 183 | 183 |
| | 184 | + void PreCheckSkippedWriteBarrier(Register object, Register value, | | 185 | + Register scratch, Label* ok); | | 186 | + | 184 | 187 | // Operand pointing to an external reference. | 185 | 188 | // May emit code to set up the scratch register. The operand is | 186 | 189 | // only guaranteed to be correct as long as the scratch register | @@ -360,6 +363,11 @@ class V8_EXPORT_PRIVATE MacroAssembler : public MacroAssemblerBase { | 360 | 363 | SaveFPRegsMode fp_mode); | 361 | 364 | void CallVerifySkippedWriteBarrierStub(Register object, Register value); | 362 | 365 |
| | 366 | + void CallVerifySkippedIndirectWriteBarrierStubSaveRegisters( | | 367 | + Register object, Register value, SaveFPRegsMode fp_mode); | | 368 | + void CallVerifySkippedIndirectWriteBarrierStub(Register object, | | 369 | + Register value); | | 370 | + | 363 | 371 | // For a given |object| and |offset|: | 364 | 372 | // - Move |object| to |dst_object|. | 365 | 373 | // - Compute the address of the slot pointed to by |offset| in |object| and | |
Collapse file Copy file name to clipboardExpand all lines: deps/v8/src/codegen/source-position-table.h +4Lines changed: 4 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -36,6 +36,8 @@ struct PositionTableEntry { | 36 | 36 | int code_offset; | 37 | 37 | bool is_statement; | 38 | 38 | bool is_breakable; | | 39 | + | | 40 | + bool operator==(const PositionTableEntry&) const = default; | 39 | 41 | }; | 40 | 42 |
| 41 | 43 | class V8_EXPORT_PRIVATE SourcePositionTableBuilder { | @@ -95,6 +97,8 @@ class V8_EXPORT_PRIVATE SourcePositionTableIterator { | 95 | 97 | PositionTableEntry position_; | 96 | 98 | IterationFilter iteration_filter_; | 97 | 99 | FunctionEntryFilter function_entry_filter_; | | 100 | + | | 101 | + bool operator==(const IndexAndPositionState&) const = default; | 98 | 102 | }; | 99 | 103 |
| 100 | 104 | // We expose three flavours of the iterator, depending on the argument passed | |
Collapse file Copy file name to clipboardExpand all lines: deps/v8/src/compiler/backend/loong64/code-generator-loong64.cc +62-17Lines changed: 62 additions & 17 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -156,7 +156,7 @@ class OutOfLineRecordWrite final : public OutOfLineCode { | 156 | 156 | #if V8_ENABLE_WEBASSEMBLY | 157 | 157 | stub_mode_(stub_mode), | 158 | 158 | #endif // V8_ENABLE_WEBASSEMBLY | 159 | | - must_save_lr_(!gen->frame_access_state()->has_frame()), | | 159 | + must_save_ra_(!gen->frame_access_state()->has_frame()), | 160 | 160 | zone_(gen->zone()), | 161 | 161 | indirect_pointer_tag_(indirect_pointer_tag) { | 162 | 162 | } | @@ -175,7 +175,7 @@ class OutOfLineRecordWrite final : public OutOfLineCode { | 175 | 175 | SaveFPRegsMode const save_fp_mode = frame()->DidAllocateDoubleRegisters() | 176 | 176 | ? SaveFPRegsMode::kSave | 177 | 177 | : SaveFPRegsMode::kIgnore; | 178 | | - if (must_save_lr_) { | | 178 | + if (must_save_ra_) { | 179 | 179 | // We need to save and restore ra if the frame was elided. | 180 | 180 | __ Push(ra); | 181 | 181 | } | @@ -196,7 +196,7 @@ class OutOfLineRecordWrite final : public OutOfLineCode { | 196 | 196 | } else { | 197 | 197 | __ CallRecordWriteStubSaveRegisters(object_, offset_, save_fp_mode); | 198 | 198 | } | 199 | | - if (must_save_lr_) { | | 199 | + if (must_save_ra_) { | 200 | 200 | __ Pop(ra); | 201 | 201 | } | 202 | 202 | } | @@ -209,7 +209,7 @@ class OutOfLineRecordWrite final : public OutOfLineCode { | 209 | 209 | #if V8_ENABLE_WEBASSEMBLY | 210 | 210 | StubCallMode const stub_mode_; | 211 | 211 | #endif // V8_ENABLE_WEBASSEMBLY | 212 | | - bool must_save_lr_; | | 212 | + bool must_save_ra_; | 213 | 213 | Zone* zone_; | 214 | 214 | IndirectPointerTag indirect_pointer_tag_; | 215 | 215 | }; | @@ -294,23 +294,62 @@ void RecordTrapInfoIfNeeded(Zone* zone, CodeGenerator* codegen, | 294 | 294 | class OutOfLineVerifySkippedWriteBarrier final : public OutOfLineCode { | 295 | 295 | public: | 296 | 296 | OutOfLineVerifySkippedWriteBarrier(CodeGenerator* gen, Register object, | 297 | | - Register value) | | 297 | + Register value, Register scratch) | 298 | 298 | : OutOfLineCode(gen), | 299 | 299 | object_(object), | 300 | 300 | value_(value), | | 301 | + scratch_(scratch), | | 302 | + must_save_ra_(!gen->frame_access_state()->has_frame()), | 301 | 303 | zone_(gen->zone()) {} | 302 | 304 |
| 303 | 305 | void Generate() final { | 304 | 306 | if (COMPRESS_POINTERS_BOOL) { | 305 | 307 | __ DecompressTagged(value_, value_); | 306 | 308 | } | 307 | 309 |
| | 310 | + if (must_save_ra_) { | | 311 | + // We need to save and restore ra if the frame was elided. | | 312 | + __ Push(ra); | | 313 | + } | | 314 | + | | 315 | + __ PreCheckSkippedWriteBarrier(object_, value_, scratch_, exit()); | | 316 | + | 308 | 317 | SaveFPRegsMode const save_fp_mode = frame()->DidAllocateDoubleRegisters() | 309 | 318 | ? SaveFPRegsMode::kSave | 310 | 319 | : SaveFPRegsMode::kIgnore; | 311 | 320 |
| 312 | 321 | __ CallVerifySkippedWriteBarrierStubSaveRegisters(object_, value_, | 313 | 322 | save_fp_mode); | | 323 | + | | 324 | + if (must_save_ra_) { | | 325 | + __ Pop(ra); | | 326 | + } | | 327 | + } | | 328 | + | | 329 | + private: | | 330 | + Register const object_; | | 331 | + Register const value_; | | 332 | + Register const scratch_; | | 333 | + const bool must_save_ra_; | | 334 | + Zone* zone_; | | 335 | +}; | | 336 | + | | 337 | +class OutOfLineVerifySkippedIndirectWriteBarrier final : public OutOfLineCode { | | 338 | + public: | | 339 | + OutOfLineVerifySkippedIndirectWriteBarrier(CodeGenerator* gen, | | 340 | + Register object, Register value) | | 341 | + : OutOfLineCode(gen), | | 342 | + object_(object), | | 343 | + value_(value), | | 344 | + zone_(gen->zone()) {} | | 345 | + | | 346 | + void Generate() final { | | 347 | + SaveFPRegsMode const save_fp_mode = frame()->DidAllocateDoubleRegisters() | | 348 | + ? SaveFPRegsMode::kSave | | 349 | + : SaveFPRegsMode::kIgnore; | | 350 | + | | 351 | + __ CallVerifySkippedIndirectWriteBarrierStubSaveRegisters(object_, value_, | | 352 | + save_fp_mode); | 314 | 353 | } | 315 | 354 |
| 316 | 355 | private: | @@ -1025,12 +1064,12 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( | 1025 | 1064 | Operand(kClearedWeakHeapObjectLower32)); | 1026 | 1065 | } | 1027 | 1066 |
| 1028 | | - if (v8_flags.verify_write_barriers) { | 1029 | | - auto ool = zone()->New<OutOfLineVerifySkippedWriteBarrier>(this, object, | 1030 | | - value); | 1031 | | - __ JumpIfNotSmi(value, ool->entry()); | 1032 | | - __ bind(ool->exit()); | 1033 | | - } | | 1067 | + DCHECK(v8_flags.verify_write_barriers); | | 1068 | + Register scratch = i.TempRegister(0); | | 1069 | + auto ool = zone()->New<OutOfLineVerifySkippedWriteBarrier>( | | 1070 | + this, object, value, scratch); | | 1071 | + __ JumpIfNotSmi(value, ool->entry()); | | 1072 | + __ bind(ool->exit()); | 1034 | 1073 |
| 1035 | 1074 | MacroAssemblerBase::BlockTrampolinePoolScope block_trampoline_pool( | 1036 | 1075 | masm()); | @@ -1085,12 +1124,12 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( | 1085 | 1124 | Register temp = i.TempRegister(0); | 1086 | 1125 | __ Add_d(temp, object, offset); | 1087 | 1126 |
| 1088 | | - if (v8_flags.verify_write_barriers) { | 1089 | | - auto ool = zone()->New<OutOfLineVerifySkippedWriteBarrier>(this, object, | 1090 | | - value); | 1091 | | - __ JumpIfNotSmi(value, ool->entry()); | 1092 | | - __ bind(ool->exit()); | 1093 | | - } | | 1127 | + DCHECK(v8_flags.verify_write_barriers); | | 1128 | + Register scratch = i.TempRegister(1); | | 1129 | + auto ool = zone()->New<OutOfLineVerifySkippedWriteBarrier>( | | 1130 | + this, object, value, scratch); | | 1131 | + __ JumpIfNotSmi(value, ool->entry()); | | 1132 | + __ bind(ool->exit()); | 1094 | 1133 |
| 1095 | 1134 | MacroAssemblerBase::BlockTrampolinePoolScope block_trampoline_pool( | 1096 | 1135 | masm()); | @@ -1150,6 +1189,12 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( | 1150 | 1189 | DCHECK(IsValidIndirectPointerTag(tag)); | 1151 | 1190 | #endif // DEBUG | 1152 | 1191 |
| | 1192 | + DCHECK(v8_flags.verify_write_barriers); | | 1193 | + auto ool = zone()->New<OutOfLineVerifySkippedIndirectWriteBarrier>( | | 1194 | + this, object, value); | | 1195 | + __ jmp(ool->entry()); | | 1196 | + __ bind(ool->exit()); | | 1197 | + | 1153 | 1198 | MacroAssemblerBase::BlockTrampolinePoolScope block_trampoline_pool( | 1154 | 1199 | masm()); | 1155 | 1200 | Operand offset(0); | |
|