Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Unified Diff: src/compiler/code-stub-assembler.cc

Issue 1617503003: [Atomics] code stubs for atomic operations (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: remove FCG+CS intrinsic wiring, experiments with CodeStubAssembler Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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,
+ &not_ok);
+ rma->Bind(&ok);
+ Node* arg = StackArg(num_args, value);
+ rma->Goto(&done);
+ rma->Bind(&not_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);
}

Powered by Google App Engine
This is Rietveld 408576698