diff options
Diffstat (limited to 'Source/JavaScriptCore/assembler')
5 files changed, 23 insertions, 0 deletions
diff --git a/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h b/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h index ef1808ffb..e6a9df994 100644 --- a/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h +++ b/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h @@ -606,6 +606,12 @@ public: return Label(this); } + void padBeforePatch() + { + // Rely on the fact that asking for a label already does the padding. + (void)label(); + } + Label watchpointLabel() { Label result; diff --git a/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h b/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h index 183e8f980..d2da886c2 100644 --- a/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h +++ b/Source/JavaScriptCore/assembler/MacroAssemblerARMv7.h @@ -646,6 +646,8 @@ public: DataLabelCompact load32WithCompactAddressOffsetPatch(Address address, RegisterID dest) { + padBeforePatch(); + RegisterID base = address.base; DataLabelCompact label(this); @@ -1626,12 +1628,14 @@ public: ALWAYS_INLINE DataLabel32 moveWithPatch(TrustedImm32 imm, RegisterID dst) { + padBeforePatch(); moveFixedWidthEncoding(imm, dst); return DataLabel32(this); } ALWAYS_INLINE DataLabelPtr moveWithPatch(TrustedImmPtr imm, RegisterID dst) { + padBeforePatch(); moveFixedWidthEncoding(TrustedImm32(imm), dst); return DataLabelPtr(this); } @@ -1659,6 +1663,7 @@ public: PatchableJump patchableJump() { + padBeforePatch(); m_makeJumpPatchable = true; Jump result = jump(); m_makeJumpPatchable = false; diff --git a/Source/JavaScriptCore/assembler/MacroAssemblerX86.h b/Source/JavaScriptCore/assembler/MacroAssemblerX86.h index da9dd8f2a..d1a4ff3c4 100644 --- a/Source/JavaScriptCore/assembler/MacroAssemblerX86.h +++ b/Source/JavaScriptCore/assembler/MacroAssemblerX86.h @@ -175,6 +175,7 @@ public: DataLabelPtr moveWithPatch(TrustedImmPtr initialValue, RegisterID dest) { + padBeforePatch(); m_assembler.movl_i32r(initialValue.asIntptr(), dest); return DataLabelPtr(this); } @@ -191,6 +192,7 @@ public: Jump branchPtrWithPatch(RelationalCondition cond, RegisterID left, DataLabelPtr& dataLabel, TrustedImmPtr initialRightValue = TrustedImmPtr(0)) { + padBeforePatch(); m_assembler.cmpl_ir_force32(initialRightValue.asIntptr(), left); dataLabel = DataLabelPtr(this); return Jump(m_assembler.jCC(x86Condition(cond))); @@ -198,6 +200,7 @@ public: Jump branchPtrWithPatch(RelationalCondition cond, Address left, DataLabelPtr& dataLabel, TrustedImmPtr initialRightValue = TrustedImmPtr(0)) { + padBeforePatch(); m_assembler.cmpl_im_force32(initialRightValue.asIntptr(), left.offset, left.base); dataLabel = DataLabelPtr(this); return Jump(m_assembler.jCC(x86Condition(cond))); @@ -205,6 +208,7 @@ public: DataLabelPtr storePtrWithPatch(TrustedImmPtr initialValue, ImplicitAddress address) { + padBeforePatch(); m_assembler.movl_i32m(initialValue.asIntptr(), address.offset, address.base); return DataLabelPtr(this); } diff --git a/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h b/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h index 115b337f7..905c09426 100644 --- a/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h +++ b/Source/JavaScriptCore/assembler/MacroAssemblerX86Common.h @@ -485,12 +485,14 @@ public: DataLabel32 load32WithAddressOffsetPatch(Address address, RegisterID dest) { + padBeforePatch(); m_assembler.movl_mr_disp32(address.offset, address.base, dest); return DataLabel32(this); } DataLabelCompact load32WithCompactAddressOffsetPatch(Address address, RegisterID dest) { + padBeforePatch(); m_assembler.movl_mr_disp8(address.offset, address.base, dest); return DataLabelCompact(this); } @@ -503,6 +505,7 @@ public: DataLabelCompact loadCompactWithAddressOffsetPatch(Address address, RegisterID dest) { + padBeforePatch(); m_assembler.movl_mr_disp8(address.offset, address.base, dest); return DataLabelCompact(this); } @@ -549,6 +552,7 @@ public: DataLabel32 store32WithAddressOffsetPatch(RegisterID src, Address address) { + padBeforePatch(); m_assembler.movl_rm_disp32(src, address.offset, address.base); return DataLabel32(this); } diff --git a/Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h b/Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h index f5af51323..ac90516f4 100644 --- a/Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h +++ b/Source/JavaScriptCore/assembler/MacroAssemblerX86_64.h @@ -304,12 +304,14 @@ public: DataLabel32 loadPtrWithAddressOffsetPatch(Address address, RegisterID dest) { + padBeforePatch(); m_assembler.movq_mr_disp32(address.offset, address.base, dest); return DataLabel32(this); } DataLabelCompact loadPtrWithCompactAddressOffsetPatch(Address address, RegisterID dest) { + padBeforePatch(); m_assembler.movq_mr_disp8(address.offset, address.base, dest); return DataLabelCompact(this); } @@ -348,6 +350,7 @@ public: DataLabel32 storePtrWithAddressOffsetPatch(RegisterID src, Address address) { + padBeforePatch(); m_assembler.movq_rm_disp32(src, address.offset, address.base); return DataLabel32(this); } @@ -518,6 +521,7 @@ public: DataLabelPtr moveWithPatch(TrustedImmPtr initialValue, RegisterID dest) { + padBeforePatch(); m_assembler.movq_i64r(initialValue.asIntptr(), dest); return DataLabelPtr(this); } |