| Index: src/compiler/instruction-selector.cc
|
| diff --git a/src/compiler/instruction-selector.cc b/src/compiler/instruction-selector.cc
|
| index 2bfc3e1c64ee9d0554e53700dceb9889ff0fda16..05ba19f71c187cbb33cae35c65f347c8cdc518a0 100644
|
| --- a/src/compiler/instruction-selector.cc
|
| +++ b/src/compiler/instruction-selector.cc
|
| @@ -133,6 +133,31 @@ Instruction* InstructionSelector::Emit(
|
|
|
|
|
| Instruction* InstructionSelector::Emit(
|
| + InstructionCode opcode, InstructionOperand* output, InstructionOperand* a,
|
| + InstructionOperand* b, InstructionOperand* c, InstructionOperand* d,
|
| + InstructionOperand* e, size_t temp_count, InstructionOperand** temps) {
|
| + size_t output_count = output == NULL ? 0 : 1;
|
| + InstructionOperand* inputs[] = {a, b, c, d, e};
|
| + size_t input_count = arraysize(inputs);
|
| + return Emit(opcode, output_count, &output, input_count, inputs, temp_count,
|
| + temps);
|
| +}
|
| +
|
| +
|
| +Instruction* InstructionSelector::Emit(
|
| + InstructionCode opcode, InstructionOperand* output, InstructionOperand* a,
|
| + InstructionOperand* b, InstructionOperand* c, InstructionOperand* d,
|
| + InstructionOperand* e, InstructionOperand* f, size_t temp_count,
|
| + InstructionOperand** temps) {
|
| + size_t output_count = output == NULL ? 0 : 1;
|
| + InstructionOperand* inputs[] = {a, b, c, d, e, f};
|
| + size_t input_count = arraysize(inputs);
|
| + return Emit(opcode, output_count, &output, input_count, inputs, temp_count,
|
| + temps);
|
| +}
|
| +
|
| +
|
| +Instruction* InstructionSelector::Emit(
|
| InstructionCode opcode, size_t output_count, InstructionOperand** outputs,
|
| size_t input_count, InstructionOperand** inputs, size_t temp_count,
|
| InstructionOperand** temps) {
|
| @@ -538,6 +563,10 @@ MachineType InstructionSelector::GetMachineType(Node* node) {
|
| return OpParameter<LoadRepresentation>(node);
|
| case IrOpcode::kStore:
|
| return kMachNone;
|
| + case IrOpcode::kCheckedLoad:
|
| + return OpParameter<MachineType>(node);
|
| + case IrOpcode::kCheckedStore:
|
| + return kMachNone;
|
| case IrOpcode::kWord32And:
|
| case IrOpcode::kWord32Or:
|
| case IrOpcode::kWord32Xor:
|
| @@ -808,6 +837,13 @@ void InstructionSelector::VisitNode(Node* node) {
|
| return MarkAsDouble(node), VisitFloat64RoundTiesAway(node);
|
| case IrOpcode::kLoadStackPointer:
|
| return VisitLoadStackPointer(node);
|
| + case IrOpcode::kCheckedLoad: {
|
| + MachineType rep = OpParameter<MachineType>(node);
|
| + MarkAsRepresentation(rep, node);
|
| + return VisitCheckedLoad(node);
|
| + }
|
| + case IrOpcode::kCheckedStore:
|
| + return VisitCheckedStore(node);
|
| default:
|
| V8_Fatal(__FILE__, __LINE__, "Unexpected operator #%d:%s @ node #%d",
|
| node->opcode(), node->op()->mnemonic(), node->id());
|
|
|