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

Side by Side Diff: src/compiler/code-stub-assembler.cc

Issue 1705073005: CodeStubAssembler can generate code for builtins (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/compiler/code-stub-assembler.h" 5 #include "src/compiler/code-stub-assembler.h"
6 6
7 #include <ostream> 7 #include <ostream>
8 8
9 #include "src/code-factory.h" 9 #include "src/code-factory.h"
10 #include "src/compiler/graph.h" 10 #include "src/compiler/graph.h"
(...skipping 21 matching lines...) Expand all
32 isolate, new (zone) Graph(zone), 32 isolate, new (zone) Graph(zone),
33 Linkage::GetStubCallDescriptor( 33 Linkage::GetStubCallDescriptor(
34 isolate, zone, descriptor, descriptor.GetStackParameterCount(), 34 isolate, zone, descriptor, descriptor.GetStackParameterCount(),
35 CallDescriptor::kNoFlags, Operator::kNoProperties, 35 CallDescriptor::kNoFlags, Operator::kNoProperties,
36 MachineType::AnyTagged(), result_size))), 36 MachineType::AnyTagged(), result_size))),
37 flags_(flags), 37 flags_(flags),
38 name_(name), 38 name_(name),
39 code_generated_(false), 39 code_generated_(false),
40 variables_(zone) {} 40 variables_(zone) {}
41 41
42 CodeStubAssembler::CodeStubAssembler(Isolate* isolate, Zone* zone,
43 int parameter_count, Code::Flags flags,
44 const char* name)
45 : raw_assembler_(new RawMachineAssembler(
46 isolate, new (zone) Graph(zone),
47 Linkage::GetJSCallDescriptor(zone, false, parameter_count,
48 CallDescriptor::kNoFlags))),
49 flags_(flags),
50 name_(name),
51 code_generated_(false),
52 variables_(zone) {}
53
42 CodeStubAssembler::~CodeStubAssembler() {} 54 CodeStubAssembler::~CodeStubAssembler() {}
43 55
44 void CodeStubAssembler::CallPrologue() {} 56 void CodeStubAssembler::CallPrologue() {}
45 57
46 void CodeStubAssembler::CallEpilogue() {} 58 void CodeStubAssembler::CallEpilogue() {}
47 59
48 Handle<Code> CodeStubAssembler::GenerateCode() { 60 Handle<Code> CodeStubAssembler::GenerateCode() {
49 DCHECK(!code_generated_); 61 DCHECK(!code_generated_);
50 62
51 Schedule* schedule = raw_assembler_->Export(); 63 Schedule* schedule = raw_assembler_->Export();
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 return raw_assembler_->WordSar(value, SmiShiftBitsConstant()); 137 return raw_assembler_->WordSar(value, SmiShiftBitsConstant());
126 } 138 }
127 139
128 #define DEFINE_CODE_STUB_ASSEMBER_BINARY_OP(name) \ 140 #define DEFINE_CODE_STUB_ASSEMBER_BINARY_OP(name) \
129 Node* CodeStubAssembler::name(Node* a, Node* b) { \ 141 Node* CodeStubAssembler::name(Node* a, Node* b) { \
130 return raw_assembler_->name(a, b); \ 142 return raw_assembler_->name(a, b); \
131 } 143 }
132 CODE_STUB_ASSEMBLER_BINARY_OP_LIST(DEFINE_CODE_STUB_ASSEMBER_BINARY_OP) 144 CODE_STUB_ASSEMBLER_BINARY_OP_LIST(DEFINE_CODE_STUB_ASSEMBER_BINARY_OP)
133 #undef DEFINE_CODE_STUB_ASSEMBER_BINARY_OP 145 #undef DEFINE_CODE_STUB_ASSEMBER_BINARY_OP
134 146
135 Node* CodeStubAssembler::ChangeInt32ToInt64(Node* value) {
136 return raw_assembler_->ChangeInt32ToInt64(value);
137 }
138
139 Node* CodeStubAssembler::WordShl(Node* value, int shift) { 147 Node* CodeStubAssembler::WordShl(Node* value, int shift) {
140 return raw_assembler_->WordShl(value, Int32Constant(shift)); 148 return raw_assembler_->WordShl(value, Int32Constant(shift));
141 } 149 }
142 150
151
152 #define DEFINE_CODE_STUB_ASSEMBER_UNARY_OP(name) \
153 Node* CodeStubAssembler::name(Node* a) { return raw_assembler_->name(a); }
154 CODE_STUB_ASSEMBLER_UNARY_OP_LIST(DEFINE_CODE_STUB_ASSEMBER_UNARY_OP)
155 #undef DEFINE_CODE_STUB_ASSEMBER_UNARY_OP
156
157
143 Node* CodeStubAssembler::WordIsSmi(Node* a) { 158 Node* CodeStubAssembler::WordIsSmi(Node* a) {
144 return WordEqual(raw_assembler_->WordAnd(a, Int32Constant(kSmiTagMask)), 159 return WordEqual(raw_assembler_->WordAnd(a, Int32Constant(kSmiTagMask)),
145 Int32Constant(0)); 160 Int32Constant(0));
146 } 161 }
147 162
148 Node* CodeStubAssembler::LoadBufferObject(Node* buffer, int offset) { 163 Node* CodeStubAssembler::LoadBufferObject(Node* buffer, int offset) {
149 return raw_assembler_->Load(MachineType::AnyTagged(), buffer, 164 return raw_assembler_->Load(MachineType::AnyTagged(), buffer,
150 IntPtrConstant(offset)); 165 IntPtrConstant(offset));
151 } 166 }
152 167
153 Node* CodeStubAssembler::LoadObjectField(Node* object, int offset) { 168 Node* CodeStubAssembler::LoadObjectField(Node* object, int offset) {
154 return raw_assembler_->Load(MachineType::AnyTagged(), object, 169 return raw_assembler_->Load(MachineType::AnyTagged(), object,
155 IntPtrConstant(offset - kHeapObjectTag)); 170 IntPtrConstant(offset - kHeapObjectTag));
156 } 171 }
157 172
173 Node* CodeStubAssembler::LoadHeapNumber(Node* object) {
174 return raw_assembler_->Load(MachineType::Float64(), object,
175 IntPtrConstant(HeapNumber::kValueOffset));
176 }
177
158 Node* CodeStubAssembler::LoadFixedArrayElementSmiIndex(Node* object, 178 Node* CodeStubAssembler::LoadFixedArrayElementSmiIndex(Node* object,
159 Node* smi_index, 179 Node* smi_index,
160 int additional_offset) { 180 int additional_offset) {
161 Node* header_size = raw_assembler_->Int32Constant( 181 Node* header_size = raw_assembler_->Int32Constant(
162 additional_offset + FixedArray::kHeaderSize - kHeapObjectTag); 182 additional_offset + FixedArray::kHeaderSize - kHeapObjectTag);
163 Node* scaled_index = 183 Node* scaled_index =
164 (kSmiShiftSize == 0) 184 (kSmiShiftSize == 0)
165 ? raw_assembler_->Word32Shl( 185 ? raw_assembler_->Word32Shl(
166 smi_index, Int32Constant(kPointerSizeLog2 - kSmiTagSize)) 186 smi_index, Int32Constant(kPointerSizeLog2 - kSmiTagSize))
167 : raw_assembler_->Word32Shl(SmiUntag(smi_index), 187 : raw_assembler_->Word32Shl(SmiUntag(smi_index),
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 Node* CodeStubAssembler::StoreNoWriteBarrier(MachineRepresentation rep, 243 Node* CodeStubAssembler::StoreNoWriteBarrier(MachineRepresentation rep,
224 Node* base, Node* index, 244 Node* base, Node* index,
225 Node* value) { 245 Node* value) {
226 return raw_assembler_->Store(rep, base, index, value, kNoWriteBarrier); 246 return raw_assembler_->Store(rep, base, index, value, kNoWriteBarrier);
227 } 247 }
228 248
229 Node* CodeStubAssembler::Projection(int index, Node* value) { 249 Node* CodeStubAssembler::Projection(int index, Node* value) {
230 return raw_assembler_->Projection(index, value); 250 return raw_assembler_->Projection(index, value);
231 } 251 }
232 252
253 Node* CodeStubAssembler::InstanceType(Node* object) {
254 return raw_assembler_->WordAnd(
255 LoadObjectField(LoadObjectField(object, HeapObject::kMapOffset),
256 Map::kInstanceTypeOffset),
257 raw_assembler_->Int32Constant(255));
258 }
259
260 Node* CodeStubAssembler::BitFieldValue(Node* word32, uint32_t shift,
261 uint32_t mask) {
262 return raw_assembler_->Word32Shr(
263 raw_assembler_->Word32And(word32, raw_assembler_->Int32Constant(mask)),
264 raw_assembler_->Int32Constant(shift));
265 }
266
233 Node* CodeStubAssembler::CallN(CallDescriptor* descriptor, Node* code_target, 267 Node* CodeStubAssembler::CallN(CallDescriptor* descriptor, Node* code_target,
234 Node** args) { 268 Node** args) {
235 CallPrologue(); 269 CallPrologue();
236 Node* return_value = raw_assembler_->CallN(descriptor, code_target, args); 270 Node* return_value = raw_assembler_->CallN(descriptor, code_target, args);
237 CallEpilogue(); 271 CallEpilogue();
238 return return_value; 272 return return_value;
239 } 273 }
240 274
241 275
242 Node* CodeStubAssembler::TailCallN(CallDescriptor* descriptor, 276 Node* CodeStubAssembler::TailCallN(CallDescriptor* descriptor,
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 Node* context, Node* arg1, Node* arg2, 317 Node* context, Node* arg1, Node* arg2,
284 Node* arg3, Node* arg4) { 318 Node* arg3, Node* arg4) {
285 CallPrologue(); 319 CallPrologue();
286 Node* return_value = raw_assembler_->CallRuntime4(function_id, arg1, arg2, 320 Node* return_value = raw_assembler_->CallRuntime4(function_id, arg1, arg2,
287 arg3, arg4, context); 321 arg3, arg4, context);
288 CallEpilogue(); 322 CallEpilogue();
289 return return_value; 323 return return_value;
290 } 324 }
291 325
292 Node* CodeStubAssembler::TailCallRuntime(Runtime::FunctionId function_id, 326 Node* CodeStubAssembler::TailCallRuntime(Runtime::FunctionId function_id,
327 Node* context) {
328 return raw_assembler_->TailCallRuntime0(function_id, context);
329 }
330
331 Node* CodeStubAssembler::TailCallRuntime(Runtime::FunctionId function_id,
293 Node* context, Node* arg1) { 332 Node* context, Node* arg1) {
294 return raw_assembler_->TailCallRuntime1(function_id, arg1, context); 333 return raw_assembler_->TailCallRuntime1(function_id, arg1, context);
295 } 334 }
296 335
297 Node* CodeStubAssembler::TailCallRuntime(Runtime::FunctionId function_id, 336 Node* CodeStubAssembler::TailCallRuntime(Runtime::FunctionId function_id,
298 Node* context, Node* arg1, 337 Node* context, Node* arg1,
299 Node* arg2) { 338 Node* arg2) {
300 return raw_assembler_->TailCallRuntime2(function_id, arg1, arg2, context); 339 return raw_assembler_->TailCallRuntime2(function_id, arg1, arg2, context);
301 } 340 }
302 341
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
606 } 645 }
607 } 646 }
608 } 647 }
609 648
610 bound_ = true; 649 bound_ = true;
611 } 650 }
612 651
613 } // namespace compiler 652 } // namespace compiler
614 } // namespace internal 653 } // namespace internal
615 } // namespace v8 654 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698