Index: src/compiler/x64/code-generator-x64.cc |
diff --git a/src/compiler/x64/code-generator-x64.cc b/src/compiler/x64/code-generator-x64.cc |
index 502af6a37656be1f0d732e0c14b315c362e8264b..b36e41a08f1c3632fa486580ba2a367e55018904 100644 |
--- a/src/compiler/x64/code-generator-x64.cc |
+++ b/src/compiler/x64/code-generator-x64.cc |
@@ -269,13 +269,12 @@ class OutOfLineRecordWrite final : public OutOfLineCode { |
class WasmOutOfLineTrap final : public OutOfLineCode { |
public: |
WasmOutOfLineTrap(CodeGenerator* gen, int pc, bool frame_elided, |
- int32_t position, Instruction* instr) |
+ int32_t position) |
: OutOfLineCode(gen), |
gen_(gen), |
pc_(pc), |
frame_elided_(frame_elided), |
- position_(position), |
- instr_(instr) {} |
+ position_(position) {} |
// TODO(eholk): Refactor this method to take the code generator as a |
// parameter. |
@@ -295,10 +294,10 @@ class WasmOutOfLineTrap final : public OutOfLineCode { |
__ Move(rsi, gen_->isolate()->native_context()); |
__ CallRuntime(Runtime::kThrowWasmError); |
- if (instr_->reference_map() != nullptr) { |
- gen_->RecordSafepoint(instr_->reference_map(), Safepoint::kSimple, 0, |
- Safepoint::kNoLazyDeopt); |
- } |
+ ReferenceMap* reference_map = |
+ new (gen_->code()->zone()) ReferenceMap(gen_->code()->zone()); |
+ gen_->RecordSafepoint(reference_map, Safepoint::kSimple, 0, |
+ Safepoint::kNoLazyDeopt); |
} |
private: |
@@ -306,18 +305,17 @@ class WasmOutOfLineTrap final : public OutOfLineCode { |
int pc_; |
bool frame_elided_; |
int32_t position_; |
- Instruction* instr_; |
}; |
void EmitOOLTrapIfNeeded(Zone* zone, CodeGenerator* codegen, |
InstructionCode opcode, size_t input_count, |
- X64OperandConverter& i, int pc, Instruction* instr) { |
+ X64OperandConverter& i, int pc) { |
const X64MemoryProtection protection = |
static_cast<X64MemoryProtection>(MiscField::decode(opcode)); |
if (protection == X64MemoryProtection::kProtected) { |
const bool frame_elided = !codegen->frame_access_state()->has_frame(); |
const int32_t position = i.InputInt32(input_count - 1); |
- new (zone) WasmOutOfLineTrap(codegen, pc, frame_elided, position, instr); |
+ new (zone) WasmOutOfLineTrap(codegen, pc, frame_elided, position); |
} |
} |
} // namespace |
@@ -1857,30 +1855,30 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
break; |
case kX64Movsxbl: |
EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i, |
- __ pc_offset(), instr); |
+ __ pc_offset()); |
ASSEMBLE_MOVX(movsxbl); |
__ AssertZeroExtended(i.OutputRegister()); |
break; |
case kX64Movzxbl: |
EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i, |
- __ pc_offset(), instr); |
+ __ pc_offset()); |
ASSEMBLE_MOVX(movzxbl); |
__ AssertZeroExtended(i.OutputRegister()); |
break; |
case kX64Movsxbq: |
EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i, |
- __ pc_offset(), instr); |
+ __ pc_offset()); |
ASSEMBLE_MOVX(movsxbq); |
break; |
case kX64Movzxbq: |
EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i, |
- __ pc_offset(), instr); |
+ __ pc_offset()); |
ASSEMBLE_MOVX(movzxbq); |
__ AssertZeroExtended(i.OutputRegister()); |
break; |
case kX64Movb: { |
EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i, |
- __ pc_offset(), instr); |
+ __ pc_offset()); |
size_t index = 0; |
Operand operand = i.MemoryOperand(&index); |
if (HasImmediateInput(instr, index)) { |
@@ -1892,30 +1890,30 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
} |
case kX64Movsxwl: |
EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i, |
- __ pc_offset(), instr); |
+ __ pc_offset()); |
ASSEMBLE_MOVX(movsxwl); |
__ AssertZeroExtended(i.OutputRegister()); |
break; |
case kX64Movzxwl: |
EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i, |
- __ pc_offset(), instr); |
+ __ pc_offset()); |
ASSEMBLE_MOVX(movzxwl); |
__ AssertZeroExtended(i.OutputRegister()); |
break; |
case kX64Movsxwq: |
EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i, |
- __ pc_offset(), instr); |
+ __ pc_offset()); |
ASSEMBLE_MOVX(movsxwq); |
break; |
case kX64Movzxwq: |
EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i, |
- __ pc_offset(), instr); |
+ __ pc_offset()); |
ASSEMBLE_MOVX(movzxwq); |
__ AssertZeroExtended(i.OutputRegister()); |
break; |
case kX64Movw: { |
EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i, |
- __ pc_offset(), instr); |
+ __ pc_offset()); |
size_t index = 0; |
Operand operand = i.MemoryOperand(&index); |
if (HasImmediateInput(instr, index)) { |
@@ -1927,7 +1925,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
} |
case kX64Movl: |
EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i, |
- __ pc_offset(), instr); |
+ __ pc_offset()); |
if (instr->HasOutput()) { |
if (instr->addressing_mode() == kMode_None) { |
if (instr->InputAt(0)->IsRegister()) { |
@@ -1951,12 +1949,12 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
break; |
case kX64Movsxlq: |
EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i, |
- __ pc_offset(), instr); |
+ __ pc_offset()); |
ASSEMBLE_MOVX(movsxlq); |
break; |
case kX64Movq: |
EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i, |
- __ pc_offset(), instr); |
+ __ pc_offset()); |
if (instr->HasOutput()) { |
__ movq(i.OutputRegister(), i.MemoryOperand()); |
} else { |
@@ -1971,7 +1969,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
break; |
case kX64Movss: |
EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i, |
- __ pc_offset(), instr); |
+ __ pc_offset()); |
if (instr->HasOutput()) { |
__ movss(i.OutputDoubleRegister(), i.MemoryOperand()); |
} else { |
@@ -1982,7 +1980,7 @@ CodeGenerator::CodeGenResult CodeGenerator::AssembleArchInstruction( |
break; |
case kX64Movsd: |
EmitOOLTrapIfNeeded(zone(), this, opcode, instr->InputCount(), i, |
- __ pc_offset(), instr); |
+ __ pc_offset()); |
if (instr->HasOutput()) { |
__ Movsd(i.OutputDoubleRegister(), i.MemoryOperand()); |
} else { |