Index: src/compiler/code-stub-assembler.cc |
diff --git a/src/compiler/code-stub-assembler.cc b/src/compiler/code-stub-assembler.cc |
index 702b12ad127776cfd0b59cd6ecaf2e5a1e74b580..6bc9c5a1ed46163a1f32c0e18a991d1e2dc2a46e 100644 |
--- a/src/compiler/code-stub-assembler.cc |
+++ b/src/compiler/code-stub-assembler.cc |
@@ -78,11 +78,51 @@ Node* CodeStubAssembler::BooleanConstant(bool value) { |
} |
+Node* CodeStubAssembler::Load(MachineType type, Node* base) { |
+ return raw_assembler_->Load(type, base); |
+} |
+ |
+ |
+Node* CodeStubAssembler::Load(MachineType type, Node* base, Node* index) { |
+ return raw_assembler_->Load(type, base, index); |
+} |
+ |
+ |
Node* CodeStubAssembler::Parameter(int value) { |
return raw_assembler_->Parameter(value); |
} |
+Node* CodeStubAssembler::StackArg(Node* num_args, int value) { |
+ // N = num_args |
+ // Arg 0: [sp + (N + 1) * kPointerSize] |
+ // Arg 1: [sp + N * kPointerSize] |
+ // ... |
+ // Arg N-1: [sp + kPointerSize] |
+ RawMachineAssembler* rma = raw_assembler_.get(); |
+ return rma->Load( |
+ MachineType::AnyTagged(), rma->LoadStackPointer(), |
+ rma->Word32Shl(rma->Int32Sub(num_args, rma->Int32Constant(value - 1)), |
+ rma->Int32Constant(kPointerSizeLog2))); |
+} |
+ |
+ |
+Node* CodeStubAssembler::StackArgOrUndefined(Node* num_args, int value) { |
+ RawMachineAssembler* rma = raw_assembler_.get(); |
+ RawMachineLabel ok, not_ok, done; |
+ rma->Branch(rma->Int32LessThan(rma->Int32Constant(value - 1), num_args), &ok, |
+ ¬_ok); |
+ rma->Bind(&ok); |
+ Node* arg = StackArg(num_args, value); |
+ rma->Goto(&done); |
+ rma->Bind(¬_ok); |
+ Node* undefined = rma->UndefinedConstant(); |
+ rma->Goto(&done); |
+ rma->Bind(&done); |
+ return rma->Phi(MachineRepresentation::kTagged, arg, undefined); |
+} |
+ |
+ |
void CodeStubAssembler::Return(Node* value) { |
return raw_assembler_->Return(value); |
} |