1 // Copyright 2010 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are
4 // met:
5 //
6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided
11 // with the distribution.
12 // * Neither the name of Google Inc. nor the names of its
13 // contributors may be used to endorse or promote products derived
14 // from this software without specific prior written permission.
15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
28 #include "v8.h"
29
30 #if defined(V8_TARGET_ARCH_MIPS)
31
32 #include "ic-inl.h"
33 #include "codegen-inl.h"
34 #include "stub-cache.h"
35
36 namespace v8 {
37 namespace internal {
38
39 #define __ ACCESS_MASM(masm)
40
41
GenerateProbe(MacroAssembler * masm,Code::Flags flags,Register receiver,Register name,Register scratch,Register extra,Register extra2)42 void StubCache::GenerateProbe(MacroAssembler* masm,
43 Code::Flags flags,
44 Register receiver,
45 Register name,
46 Register scratch,
47 Register extra,
48 Register extra2) {
49 UNIMPLEMENTED_MIPS();
50 }
51
52
GenerateLoadGlobalFunctionPrototype(MacroAssembler * masm,int index,Register prototype)53 void StubCompiler::GenerateLoadGlobalFunctionPrototype(MacroAssembler* masm,
54 int index,
55 Register prototype) {
56 UNIMPLEMENTED_MIPS();
57 }
58
59
GenerateDirectLoadGlobalFunctionPrototype(MacroAssembler * masm,int index,Register prototype,Label * miss)60 void StubCompiler::GenerateDirectLoadGlobalFunctionPrototype(
61 MacroAssembler* masm, int index, Register prototype, Label* miss) {
62 UNIMPLEMENTED_MIPS();
63 }
64
65
66 // Load a fast property out of a holder object (src). In-object properties
67 // are loaded directly otherwise the property is loaded from the properties
68 // fixed array.
GenerateFastPropertyLoad(MacroAssembler * masm,Register dst,Register src,JSObject * holder,int index)69 void StubCompiler::GenerateFastPropertyLoad(MacroAssembler* masm,
70 Register dst, Register src,
71 JSObject* holder, int index) {
72 UNIMPLEMENTED_MIPS();
73 }
74
75
GenerateLoadArrayLength(MacroAssembler * masm,Register receiver,Register scratch,Label * miss_label)76 void StubCompiler::GenerateLoadArrayLength(MacroAssembler* masm,
77 Register receiver,
78 Register scratch,
79 Label* miss_label) {
80 UNIMPLEMENTED_MIPS();
81 }
82
83
84 // Generate code to load the length from a string object and return the length.
85 // If the receiver object is not a string or a wrapped string object the
86 // execution continues at the miss label. The register containing the
87 // receiver is potentially clobbered.
GenerateLoadStringLength(MacroAssembler * masm,Register receiver,Register scratch1,Register scratch2,Label * miss,bool support_wrappers)88 void StubCompiler::GenerateLoadStringLength(MacroAssembler* masm,
89 Register receiver,
90 Register scratch1,
91 Register scratch2,
92 Label* miss,
93 bool support_wrappers) {
94 UNIMPLEMENTED_MIPS();
95 }
96
97
GenerateLoadFunctionPrototype(MacroAssembler * masm,Register receiver,Register scratch1,Register scratch2,Label * miss_label)98 void StubCompiler::GenerateLoadFunctionPrototype(MacroAssembler* masm,
99 Register receiver,
100 Register scratch1,
101 Register scratch2,
102 Label* miss_label) {
103 UNIMPLEMENTED_MIPS();
104 }
105
106
107 // Generate StoreField code, value is passed in a0 register.
108 // After executing generated code, the receiver_reg and name_reg
109 // may be clobbered.
GenerateStoreField(MacroAssembler * masm,JSObject * object,int index,Map * transition,Register receiver_reg,Register name_reg,Register scratch,Label * miss_label)110 void StubCompiler::GenerateStoreField(MacroAssembler* masm,
111 JSObject* object,
112 int index,
113 Map* transition,
114 Register receiver_reg,
115 Register name_reg,
116 Register scratch,
117 Label* miss_label) {
118 UNIMPLEMENTED_MIPS();
119 }
120
121
GenerateLoadMiss(MacroAssembler * masm,Code::Kind kind)122 void StubCompiler::GenerateLoadMiss(MacroAssembler* masm, Code::Kind kind) {
123 UNIMPLEMENTED_MIPS();
124 }
125
126
127 class CallInterceptorCompiler BASE_EMBEDDED {
128 public:
CallInterceptorCompiler(StubCompiler * stub_compiler,const ParameterCount & arguments,Register name)129 CallInterceptorCompiler(StubCompiler* stub_compiler,
130 const ParameterCount& arguments,
131 Register name)
132 : stub_compiler_(stub_compiler),
133 arguments_(arguments),
134 name_(name) {}
135
Compile(MacroAssembler * masm,JSObject * object,JSObject * holder,String * name,LookupResult * lookup,Register receiver,Register scratch1,Register scratch2,Register scratch3,Label * miss)136 void Compile(MacroAssembler* masm,
137 JSObject* object,
138 JSObject* holder,
139 String* name,
140 LookupResult* lookup,
141 Register receiver,
142 Register scratch1,
143 Register scratch2,
144 Register scratch3,
145 Label* miss) {
146 UNIMPLEMENTED_MIPS();
147 }
148
149 private:
CompileCacheable(MacroAssembler * masm,JSObject * object,Register receiver,Register scratch1,Register scratch2,Register scratch3,JSObject * interceptor_holder,LookupResult * lookup,String * name,const CallOptimization & optimization,Label * miss_label)150 void CompileCacheable(MacroAssembler* masm,
151 JSObject* object,
152 Register receiver,
153 Register scratch1,
154 Register scratch2,
155 Register scratch3,
156 JSObject* interceptor_holder,
157 LookupResult* lookup,
158 String* name,
159 const CallOptimization& optimization,
160 Label* miss_label) {
161 UNIMPLEMENTED_MIPS();
162 }
163
CompileRegular(MacroAssembler * masm,JSObject * object,Register receiver,Register scratch1,Register scratch2,Register scratch3,String * name,JSObject * interceptor_holder,Label * miss_label)164 void CompileRegular(MacroAssembler* masm,
165 JSObject* object,
166 Register receiver,
167 Register scratch1,
168 Register scratch2,
169 Register scratch3,
170 String* name,
171 JSObject* interceptor_holder,
172 Label* miss_label) {
173 UNIMPLEMENTED_MIPS();
174 }
175
LoadWithInterceptor(MacroAssembler * masm,Register receiver,Register holder,JSObject * holder_obj,Register scratch,Label * interceptor_succeeded)176 void LoadWithInterceptor(MacroAssembler* masm,
177 Register receiver,
178 Register holder,
179 JSObject* holder_obj,
180 Register scratch,
181 Label* interceptor_succeeded) {
182 UNIMPLEMENTED_MIPS();
183 }
184
185 StubCompiler* stub_compiler_;
186 const ParameterCount& arguments_;
187 Register name_;
188 };
189
190
191 #undef __
192 #define __ ACCESS_MASM(masm())
193
194
CheckPrototypes(JSObject * object,Register object_reg,JSObject * holder,Register holder_reg,Register scratch1,Register scratch2,String * name,int save_at_depth,Label * miss)195 Register StubCompiler::CheckPrototypes(JSObject* object,
196 Register object_reg,
197 JSObject* holder,
198 Register holder_reg,
199 Register scratch1,
200 Register scratch2,
201 String* name,
202 int save_at_depth,
203 Label* miss) {
204 UNIMPLEMENTED_MIPS();
205 return no_reg;
206 }
207
208
GenerateLoadField(JSObject * object,JSObject * holder,Register receiver,Register scratch1,Register scratch2,Register scratch3,int index,String * name,Label * miss)209 void StubCompiler::GenerateLoadField(JSObject* object,
210 JSObject* holder,
211 Register receiver,
212 Register scratch1,
213 Register scratch2,
214 Register scratch3,
215 int index,
216 String* name,
217 Label* miss) {
218 UNIMPLEMENTED_MIPS();
219 }
220
221
GenerateLoadConstant(JSObject * object,JSObject * holder,Register receiver,Register scratch1,Register scratch2,Register scratch3,Object * value,String * name,Label * miss)222 void StubCompiler::GenerateLoadConstant(JSObject* object,
223 JSObject* holder,
224 Register receiver,
225 Register scratch1,
226 Register scratch2,
227 Register scratch3,
228 Object* value,
229 String* name,
230 Label* miss) {
231 UNIMPLEMENTED_MIPS();
232 }
233
234
GenerateLoadCallback(JSObject * object,JSObject * holder,Register receiver,Register name_reg,Register scratch1,Register scratch2,Register scratch3,AccessorInfo * callback,String * name,Label * miss)235 MaybeObject* StubCompiler::GenerateLoadCallback(JSObject* object,
236 JSObject* holder,
237 Register receiver,
238 Register name_reg,
239 Register scratch1,
240 Register scratch2,
241 Register scratch3,
242 AccessorInfo* callback,
243 String* name,
244 Label* miss) {
245 UNIMPLEMENTED_MIPS();
246 return NULL;
247 }
248
249
GenerateLoadInterceptor(JSObject * object,JSObject * interceptor_holder,LookupResult * lookup,Register receiver,Register name_reg,Register scratch1,Register scratch2,Register scratch3,String * name,Label * miss)250 void StubCompiler::GenerateLoadInterceptor(JSObject* object,
251 JSObject* interceptor_holder,
252 LookupResult* lookup,
253 Register receiver,
254 Register name_reg,
255 Register scratch1,
256 Register scratch2,
257 Register scratch3,
258 String* name,
259 Label* miss) {
260 UNIMPLEMENTED_MIPS();
261 }
262
263
GenerateNameCheck(String * name,Label * miss)264 void CallStubCompiler::GenerateNameCheck(String* name, Label* miss) {
265 UNIMPLEMENTED_MIPS();
266 }
267
268
GenerateGlobalReceiverCheck(JSObject * object,JSObject * holder,String * name,Label * miss)269 void CallStubCompiler::GenerateGlobalReceiverCheck(JSObject* object,
270 JSObject* holder,
271 String* name,
272 Label* miss) {
273 UNIMPLEMENTED_MIPS();
274 }
275
276
GenerateLoadFunctionFromCell(JSGlobalPropertyCell * cell,JSFunction * function,Label * miss)277 void CallStubCompiler::GenerateLoadFunctionFromCell(JSGlobalPropertyCell* cell,
278 JSFunction* function,
279 Label* miss) {
280 UNIMPLEMENTED_MIPS();
281 }
282
283
GenerateMissBranch()284 MaybeObject* CallStubCompiler::GenerateMissBranch() {
285 UNIMPLEMENTED_MIPS();
286 return NULL;
287 }
288
289
CompileCallField(JSObject * object,JSObject * holder,int index,String * name)290 MaybeObject* CallStubCompiler::CompileCallField(JSObject* object,
291 JSObject* holder,
292 int index,
293 String* name) {
294 UNIMPLEMENTED_MIPS();
295 return NULL;
296 }
297
298
CompileArrayPushCall(Object * object,JSObject * holder,JSGlobalPropertyCell * cell,JSFunction * function,String * name)299 MaybeObject* CallStubCompiler::CompileArrayPushCall(Object* object,
300 JSObject* holder,
301 JSGlobalPropertyCell* cell,
302 JSFunction* function,
303 String* name) {
304 UNIMPLEMENTED_MIPS();
305 return NULL;
306 }
307
308
CompileArrayPopCall(Object * object,JSObject * holder,JSGlobalPropertyCell * cell,JSFunction * function,String * name)309 MaybeObject* CallStubCompiler::CompileArrayPopCall(Object* object,
310 JSObject* holder,
311 JSGlobalPropertyCell* cell,
312 JSFunction* function,
313 String* name) {
314 UNIMPLEMENTED_MIPS();
315 return NULL;
316 }
317
318
CompileStringCharCodeAtCall(Object * object,JSObject * holder,JSGlobalPropertyCell * cell,JSFunction * function,String * name)319 MaybeObject* CallStubCompiler::CompileStringCharCodeAtCall(
320 Object* object,
321 JSObject* holder,
322 JSGlobalPropertyCell* cell,
323 JSFunction* function,
324 String* name) {
325 UNIMPLEMENTED_MIPS();
326 return NULL;
327 }
328
329
CompileStringCharAtCall(Object * object,JSObject * holder,JSGlobalPropertyCell * cell,JSFunction * function,String * name)330 MaybeObject* CallStubCompiler::CompileStringCharAtCall(
331 Object* object,
332 JSObject* holder,
333 JSGlobalPropertyCell* cell,
334 JSFunction* function,
335 String* name) {
336 UNIMPLEMENTED_MIPS();
337 return NULL;
338 }
339
340
CompileStringFromCharCodeCall(Object * object,JSObject * holder,JSGlobalPropertyCell * cell,JSFunction * function,String * name)341 MaybeObject* CallStubCompiler::CompileStringFromCharCodeCall(
342 Object* object,
343 JSObject* holder,
344 JSGlobalPropertyCell* cell,
345 JSFunction* function,
346 String* name) {
347 UNIMPLEMENTED_MIPS();
348 return NULL;
349 }
350
351
CompileMathFloorCall(Object * object,JSObject * holder,JSGlobalPropertyCell * cell,JSFunction * function,String * name)352 MaybeObject* CallStubCompiler::CompileMathFloorCall(Object* object,
353 JSObject* holder,
354 JSGlobalPropertyCell* cell,
355 JSFunction* function,
356 String* name) {
357 UNIMPLEMENTED_MIPS();
358 return NULL;
359 }
360
361
CompileMathAbsCall(Object * object,JSObject * holder,JSGlobalPropertyCell * cell,JSFunction * function,String * name)362 MaybeObject* CallStubCompiler::CompileMathAbsCall(Object* object,
363 JSObject* holder,
364 JSGlobalPropertyCell* cell,
365 JSFunction* function,
366 String* name) {
367 UNIMPLEMENTED_MIPS();
368 return NULL;
369 }
370
371
CompileFastApiCall(const CallOptimization & optimization,Object * object,JSObject * holder,JSGlobalPropertyCell * cell,JSFunction * function,String * name)372 MaybeObject* CallStubCompiler::CompileFastApiCall(
373 const CallOptimization& optimization,
374 Object* object,
375 JSObject* holder,
376 JSGlobalPropertyCell* cell,
377 JSFunction* function,
378 String* name) {
379 UNIMPLEMENTED_MIPS();
380 return NULL;
381 }
382
383
CompileCallConstant(Object * object,JSObject * holder,JSFunction * function,String * name,CheckType check)384 MaybeObject* CallStubCompiler::CompileCallConstant(Object* object,
385 JSObject* holder,
386 JSFunction* function,
387 String* name,
388 CheckType check) {
389 UNIMPLEMENTED_MIPS();
390 return NULL;
391 }
392
393
CompileCallInterceptor(JSObject * object,JSObject * holder,String * name)394 MaybeObject* CallStubCompiler::CompileCallInterceptor(JSObject* object,
395 JSObject* holder,
396 String* name) {
397 UNIMPLEMENTED_MIPS();
398 return NULL;
399 }
400
401
CompileCallGlobal(JSObject * object,GlobalObject * holder,JSGlobalPropertyCell * cell,JSFunction * function,String * name)402 MaybeObject* CallStubCompiler::CompileCallGlobal(JSObject* object,
403 GlobalObject* holder,
404 JSGlobalPropertyCell* cell,
405 JSFunction* function,
406 String* name) {
407 UNIMPLEMENTED_MIPS();
408 return NULL;
409 }
410
411
CompileStoreField(JSObject * object,int index,Map * transition,String * name)412 MaybeObject* StoreStubCompiler::CompileStoreField(JSObject* object,
413 int index,
414 Map* transition,
415 String* name) {
416 UNIMPLEMENTED_MIPS();
417 return NULL;
418 }
419
420
CompileStoreCallback(JSObject * object,AccessorInfo * callback,String * name)421 MaybeObject* StoreStubCompiler::CompileStoreCallback(JSObject* object,
422 AccessorInfo* callback,
423 String* name) {
424 UNIMPLEMENTED_MIPS();
425 return NULL;
426 }
427
428
CompileStoreInterceptor(JSObject * receiver,String * name)429 MaybeObject* StoreStubCompiler::CompileStoreInterceptor(JSObject* receiver,
430 String* name) {
431 UNIMPLEMENTED_MIPS();
432 return NULL;
433 }
434
435
CompileStoreGlobal(GlobalObject * object,JSGlobalPropertyCell * cell,String * name)436 MaybeObject* StoreStubCompiler::CompileStoreGlobal(GlobalObject* object,
437 JSGlobalPropertyCell* cell,
438 String* name) {
439 UNIMPLEMENTED_MIPS();
440 return NULL;
441 }
442
443
CompileLoadNonexistent(String * name,JSObject * object,JSObject * last)444 MaybeObject* LoadStubCompiler::CompileLoadNonexistent(String* name,
445 JSObject* object,
446 JSObject* last) {
447 UNIMPLEMENTED_MIPS();
448 return NULL;
449 }
450
451
CompileLoadField(JSObject * object,JSObject * holder,int index,String * name)452 MaybeObject* LoadStubCompiler::CompileLoadField(JSObject* object,
453 JSObject* holder,
454 int index,
455 String* name) {
456 UNIMPLEMENTED_MIPS();
457 return NULL;
458 }
459
460
CompileLoadCallback(String * name,JSObject * object,JSObject * holder,AccessorInfo * callback)461 MaybeObject* LoadStubCompiler::CompileLoadCallback(String* name,
462 JSObject* object,
463 JSObject* holder,
464 AccessorInfo* callback) {
465 UNIMPLEMENTED_MIPS();
466 return NULL;
467 }
468
469
CompileLoadConstant(JSObject * object,JSObject * holder,Object * value,String * name)470 MaybeObject* LoadStubCompiler::CompileLoadConstant(JSObject* object,
471 JSObject* holder,
472 Object* value,
473 String* name) {
474 UNIMPLEMENTED_MIPS();
475 return NULL;
476 }
477
478
CompileLoadInterceptor(JSObject * object,JSObject * holder,String * name)479 MaybeObject* LoadStubCompiler::CompileLoadInterceptor(JSObject* object,
480 JSObject* holder,
481 String* name) {
482 UNIMPLEMENTED_MIPS();
483 return NULL;
484 }
485
486
CompileLoadGlobal(JSObject * object,GlobalObject * holder,JSGlobalPropertyCell * cell,String * name,bool is_dont_delete)487 MaybeObject* LoadStubCompiler::CompileLoadGlobal(JSObject* object,
488 GlobalObject* holder,
489 JSGlobalPropertyCell* cell,
490 String* name,
491 bool is_dont_delete) {
492 UNIMPLEMENTED_MIPS();
493 return NULL;
494 }
495
496
CompileLoadField(String * name,JSObject * receiver,JSObject * holder,int index)497 MaybeObject* KeyedLoadStubCompiler::CompileLoadField(String* name,
498 JSObject* receiver,
499 JSObject* holder,
500 int index) {
501 UNIMPLEMENTED_MIPS();
502 return NULL;
503 }
504
505
CompileLoadCallback(String * name,JSObject * receiver,JSObject * holder,AccessorInfo * callback)506 MaybeObject* KeyedLoadStubCompiler::CompileLoadCallback(
507 String* name,
508 JSObject* receiver,
509 JSObject* holder,
510 AccessorInfo* callback) {
511 UNIMPLEMENTED_MIPS();
512 return NULL;
513 }
514
515
CompileLoadConstant(String * name,JSObject * receiver,JSObject * holder,Object * value)516 MaybeObject* KeyedLoadStubCompiler::CompileLoadConstant(String* name,
517 JSObject* receiver,
518 JSObject* holder,
519 Object* value) {
520 UNIMPLEMENTED_MIPS();
521 return NULL;
522 }
523
524
CompileLoadInterceptor(JSObject * receiver,JSObject * holder,String * name)525 MaybeObject* KeyedLoadStubCompiler::CompileLoadInterceptor(JSObject* receiver,
526 JSObject* holder,
527 String* name) {
528 UNIMPLEMENTED_MIPS();
529 return NULL;
530 }
531
532
CompileLoadArrayLength(String * name)533 MaybeObject* KeyedLoadStubCompiler::CompileLoadArrayLength(String* name) {
534 UNIMPLEMENTED_MIPS();
535 return NULL;
536 }
537
538
CompileLoadStringLength(String * name)539 MaybeObject* KeyedLoadStubCompiler::CompileLoadStringLength(String* name) {
540 UNIMPLEMENTED_MIPS();
541 return NULL;
542 }
543
544
CompileLoadFunctionPrototype(String * name)545 MaybeObject* KeyedLoadStubCompiler::CompileLoadFunctionPrototype(String* name) {
546 UNIMPLEMENTED_MIPS();
547 return NULL;
548 }
549
550
CompileLoadSpecialized(JSObject * receiver)551 MaybeObject* KeyedLoadStubCompiler::CompileLoadSpecialized(JSObject* receiver) {
552 UNIMPLEMENTED_MIPS();
553 return NULL;
554 }
555
556
CompileStoreField(JSObject * object,int index,Map * transition,String * name)557 MaybeObject* KeyedStoreStubCompiler::CompileStoreField(JSObject* object,
558 int index,
559 Map* transition,
560 String* name) {
561 UNIMPLEMENTED_MIPS();
562 return NULL;
563 }
564
565
CompileStoreSpecialized(JSObject * receiver)566 MaybeObject* KeyedStoreStubCompiler::CompileStoreSpecialized(
567 JSObject* receiver) {
568 UNIMPLEMENTED_MIPS();
569 return NULL;
570 }
571
572
CompileConstructStub(JSFunction * function)573 MaybeObject* ConstructStubCompiler::CompileConstructStub(JSFunction* function) {
574 UNIMPLEMENTED_MIPS();
575 return NULL;
576 }
577
578
CompileKeyedLoadStub(JSObject * receiver_object,ExternalArrayType array_type,Code::Flags flags)579 MaybeObject* ExternalArrayStubCompiler::CompileKeyedLoadStub(
580 JSObject* receiver_object,
581 ExternalArrayType array_type,
582 Code::Flags flags) {
583 UNIMPLEMENTED_MIPS();
584 return NULL;
585 }
586
587
CompileKeyedStoreStub(JSObject * receiver_object,ExternalArrayType array_type,Code::Flags flags)588 MaybeObject* ExternalArrayStubCompiler::CompileKeyedStoreStub(
589 JSObject* receiver_object,
590 ExternalArrayType array_type,
591 Code::Flags flags) {
592 UNIMPLEMENTED_MIPS();
593 return NULL;
594 }
595
596
597 #undef __
598
599 } } // namespace v8::internal
600
601 #endif // V8_TARGET_ARCH_MIPS
602