blob: 2de45f67f0ac4e7d623e1ad4975a6ded30325d8e [file] [log] [blame]
Andrei Popescu31002712010-02-23 13:46:05 +00001// 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
29#include "v8.h"
30
31#include "bootstrapper.h"
32#include "codegen-inl.h"
33#include "debug.h"
34#include "parser.h"
35#include "register-allocator-inl.h"
36#include "runtime.h"
37#include "scopes.h"
38#include "compiler.h"
39
40
41
42namespace v8 {
43namespace internal {
44
45#define __ ACCESS_MASM(masm_)
46
47
48
49// -------------------------------------------------------------------------
50// Platform-specific DeferredCode functions.
51
52
53void DeferredCode::SaveRegisters() {
54 UNIMPLEMENTED_MIPS();
55}
56
57
58void DeferredCode::RestoreRegisters() {
59 UNIMPLEMENTED_MIPS();
60}
61
62
63// -------------------------------------------------------------------------
64// CodeGenerator implementation
65
66CodeGenerator::CodeGenerator(MacroAssembler* masm)
67 : deferred_(8),
68 masm_(masm),
69 scope_(NULL),
70 frame_(NULL),
71 allocator_(NULL),
72 cc_reg_(cc_always),
73 state_(NULL),
74 function_return_is_shadowed_(false) {
75}
76
77
78// Calling conventions:
79// s8_fp: caller's frame pointer
80// sp: stack pointer
81// a1: called JS function
82// cp: callee's context
83
84void CodeGenerator::Generate(CompilationInfo* info, Mode mode) {
85 UNIMPLEMENTED_MIPS();
86}
87
88
89void CodeGenerator::VisitStatements(ZoneList<Statement*>* statements) {
90 UNIMPLEMENTED_MIPS();
91}
92
93
94void CodeGenerator::VisitBlock(Block* node) {
95 UNIMPLEMENTED_MIPS();
96}
97
98
99void CodeGenerator::DeclareGlobals(Handle<FixedArray> pairs) {
100 UNIMPLEMENTED_MIPS();
101}
102
103
104void CodeGenerator::VisitDeclaration(Declaration* node) {
105 UNIMPLEMENTED_MIPS();
106}
107
108
109void CodeGenerator::VisitExpressionStatement(ExpressionStatement* node) {
110 UNIMPLEMENTED_MIPS();
111}
112
113
114void CodeGenerator::VisitEmptyStatement(EmptyStatement* node) {
115 UNIMPLEMENTED_MIPS();
116}
117
118
119void CodeGenerator::VisitIfStatement(IfStatement* node) {
120 UNIMPLEMENTED_MIPS();
121}
122
123
124void CodeGenerator::VisitContinueStatement(ContinueStatement* node) {
125 UNIMPLEMENTED_MIPS();
126}
127
128
129void CodeGenerator::VisitBreakStatement(BreakStatement* node) {
130 UNIMPLEMENTED_MIPS();
131}
132
133
134void CodeGenerator::VisitReturnStatement(ReturnStatement* node) {
135 UNIMPLEMENTED_MIPS();
136}
137
138
139void CodeGenerator::VisitWithEnterStatement(WithEnterStatement* node) {
140 UNIMPLEMENTED_MIPS();
141}
142
143
144void CodeGenerator::VisitWithExitStatement(WithExitStatement* node) {
145 UNIMPLEMENTED_MIPS();
146}
147
148
149void CodeGenerator::VisitSwitchStatement(SwitchStatement* node) {
150 UNIMPLEMENTED_MIPS();
151}
152
153
154void CodeGenerator::VisitDoWhileStatement(DoWhileStatement* node) {
155 UNIMPLEMENTED_MIPS();
156}
157
158
159void CodeGenerator::VisitWhileStatement(WhileStatement* node) {
160 UNIMPLEMENTED_MIPS();
161}
162
163
164void CodeGenerator::VisitForStatement(ForStatement* node) {
165 UNIMPLEMENTED_MIPS();
166}
167
168
169void CodeGenerator::VisitForInStatement(ForInStatement* node) {
170 UNIMPLEMENTED_MIPS();
171}
172
173
174void CodeGenerator::VisitTryCatchStatement(TryCatchStatement* node) {
175 UNIMPLEMENTED_MIPS();
176}
177
178
179void CodeGenerator::VisitTryFinallyStatement(TryFinallyStatement* node) {
180 UNIMPLEMENTED_MIPS();
181}
182
183
184void CodeGenerator::VisitDebuggerStatement(DebuggerStatement* node) {
185 UNIMPLEMENTED_MIPS();
186}
187
188
189void CodeGenerator::VisitFunctionLiteral(FunctionLiteral* node) {
190 UNIMPLEMENTED_MIPS();
191}
192
193
194void CodeGenerator::VisitFunctionBoilerplateLiteral(
195 FunctionBoilerplateLiteral* node) {
196 UNIMPLEMENTED_MIPS();
197}
198
199
200void CodeGenerator::VisitConditional(Conditional* node) {
201 UNIMPLEMENTED_MIPS();
202}
203
204
205void CodeGenerator::VisitSlot(Slot* node) {
206 UNIMPLEMENTED_MIPS();
207}
208
209
210void CodeGenerator::VisitVariableProxy(VariableProxy* node) {
211 UNIMPLEMENTED_MIPS();
212}
213
214
215void CodeGenerator::VisitLiteral(Literal* node) {
216 UNIMPLEMENTED_MIPS();
217}
218
219
220void CodeGenerator::VisitRegExpLiteral(RegExpLiteral* node) {
221 UNIMPLEMENTED_MIPS();
222}
223
224
225void CodeGenerator::VisitObjectLiteral(ObjectLiteral* node) {
226 UNIMPLEMENTED_MIPS();
227}
228
229
230void CodeGenerator::VisitArrayLiteral(ArrayLiteral* node) {
231 UNIMPLEMENTED_MIPS();
232}
233
234
235void CodeGenerator::VisitCatchExtensionObject(CatchExtensionObject* node) {
236 UNIMPLEMENTED_MIPS();
237}
238
239
240void CodeGenerator::VisitAssignment(Assignment* node) {
241 UNIMPLEMENTED_MIPS();
242}
243
244
245void CodeGenerator::VisitThrow(Throw* node) {
246 UNIMPLEMENTED_MIPS();
247}
248
249
250void CodeGenerator::VisitProperty(Property* node) {
251 UNIMPLEMENTED_MIPS();
252}
253
254
255void CodeGenerator::VisitCall(Call* node) {
256 UNIMPLEMENTED_MIPS();
257}
258
259
260void CodeGenerator::VisitCallNew(CallNew* node) {
261 UNIMPLEMENTED_MIPS();
262}
263
264
265void CodeGenerator::GenerateClassOf(ZoneList<Expression*>* args) {
266 UNIMPLEMENTED_MIPS();
267}
268
269
270void CodeGenerator::GenerateValueOf(ZoneList<Expression*>* args) {
271 UNIMPLEMENTED_MIPS();
272}
273
274
275void CodeGenerator::GenerateSetValueOf(ZoneList<Expression*>* args) {
276 UNIMPLEMENTED_MIPS();
277}
278
279
280void CodeGenerator::GenerateIsSmi(ZoneList<Expression*>* args) {
281 UNIMPLEMENTED_MIPS();
282}
283
284
285void CodeGenerator::GenerateLog(ZoneList<Expression*>* args) {
286 UNIMPLEMENTED_MIPS();
287}
288
289
290void CodeGenerator::GenerateIsNonNegativeSmi(ZoneList<Expression*>* args) {
291 UNIMPLEMENTED_MIPS();
292}
293
294
295// This should generate code that performs a charCodeAt() call or returns
296// undefined in order to trigger the slow case, Runtime_StringCharCodeAt.
297// It is not yet implemented on ARM, so it always goes to the slow case.
298void CodeGenerator::GenerateFastCharCodeAt(ZoneList<Expression*>* args) {
299 UNIMPLEMENTED_MIPS();
300}
301
302
303void CodeGenerator::GenerateIsArray(ZoneList<Expression*>* args) {
304 UNIMPLEMENTED_MIPS();
305}
306
307
Andrei Popescu402d9372010-02-26 13:31:12 +0000308void CodeGenerator::GenerateIsRegExp(ZoneList<Expression*>* args) {
309 UNIMPLEMENTED_MIPS();
310}
311
312
Andrei Popescu31002712010-02-23 13:46:05 +0000313void CodeGenerator::GenerateIsConstructCall(ZoneList<Expression*>* args) {
314 UNIMPLEMENTED_MIPS();
315}
316
317
318void CodeGenerator::GenerateArgumentsLength(ZoneList<Expression*>* args) {
319 UNIMPLEMENTED_MIPS();
320}
321
322
323void CodeGenerator::GenerateArgumentsAccess(ZoneList<Expression*>* args) {
324 UNIMPLEMENTED_MIPS();
325}
326
327
328void CodeGenerator::GenerateRandomPositiveSmi(ZoneList<Expression*>* args) {
329 UNIMPLEMENTED_MIPS();
330}
331
332
333void CodeGenerator::GenerateObjectEquals(ZoneList<Expression*>* args) {
334 UNIMPLEMENTED_MIPS();
335}
336
337
338void CodeGenerator::GenerateIsObject(ZoneList<Expression*>* args) {
339 UNIMPLEMENTED_MIPS();
340}
341
342
343void CodeGenerator::GenerateIsFunction(ZoneList<Expression*>* args) {
344 UNIMPLEMENTED_MIPS();
345}
346
347
348void CodeGenerator::GenerateIsUndetectableObject(ZoneList<Expression*>* args) {
349 UNIMPLEMENTED_MIPS();
350}
351
352
353void CodeGenerator::GenerateStringAdd(ZoneList<Expression*>* args) {
354 UNIMPLEMENTED_MIPS();
355}
356
357
358void CodeGenerator::GenerateSubString(ZoneList<Expression*>* args) {
359 UNIMPLEMENTED_MIPS();
360}
361
362
363void CodeGenerator::GenerateStringCompare(ZoneList<Expression*>* args) {
364 UNIMPLEMENTED_MIPS();
365}
366
367
368void CodeGenerator::GenerateRegExpExec(ZoneList<Expression*>* args) {
369 UNIMPLEMENTED_MIPS();
370}
371
372
Andrei Popescu402d9372010-02-26 13:31:12 +0000373void CodeGenerator::GenerateNumberToString(ZoneList<Expression*>* args) {
374 UNIMPLEMENTED_MIPS();
375}
376
377
Andrei Popescu31002712010-02-23 13:46:05 +0000378void CodeGenerator::VisitCallRuntime(CallRuntime* node) {
379 UNIMPLEMENTED_MIPS();
380}
381
382
383void CodeGenerator::VisitUnaryOperation(UnaryOperation* node) {
384 UNIMPLEMENTED_MIPS();
385}
386
387
388void CodeGenerator::VisitCountOperation(CountOperation* node) {
389 UNIMPLEMENTED_MIPS();
390}
391
392
393void CodeGenerator::VisitBinaryOperation(BinaryOperation* node) {
394 UNIMPLEMENTED_MIPS();
395}
396
397
398void CodeGenerator::VisitThisFunction(ThisFunction* node) {
399 UNIMPLEMENTED_MIPS();
400}
401
402
403void CodeGenerator::VisitCompareOperation(CompareOperation* node) {
404 UNIMPLEMENTED_MIPS();
405}
406
407
408#ifdef DEBUG
409bool CodeGenerator::HasValidEntryRegisters() { return true; }
410#endif
411
412
413#undef __
414#define __ ACCESS_MASM(masm)
415
416
417// On entry a0 and a1 are the things to be compared. On exit v0 is 0,
418// positive or negative to indicate the result of the comparison.
419void CompareStub::Generate(MacroAssembler* masm) {
420 UNIMPLEMENTED_MIPS();
421 __ break_(0x765);
422}
423
424
425void StackCheckStub::Generate(MacroAssembler* masm) {
426 UNIMPLEMENTED_MIPS();
427 __ break_(0x790);
428}
429
430
431void CEntryStub::GenerateThrowTOS(MacroAssembler* masm) {
432 UNIMPLEMENTED_MIPS();
433 __ break_(0x808);
434}
435
436
437void CEntryStub::GenerateThrowUncatchable(MacroAssembler* masm,
438 UncatchableExceptionType type) {
439 UNIMPLEMENTED_MIPS();
440 __ break_(0x815);
441}
442
443void CEntryStub::GenerateCore(MacroAssembler* masm,
444 Label* throw_normal_exception,
445 Label* throw_termination_exception,
446 Label* throw_out_of_memory_exception,
447 bool do_gc,
448 bool always_allocate) {
449 UNIMPLEMENTED_MIPS();
450 __ break_(0x826);
451}
452
453void CEntryStub::Generate(MacroAssembler* masm) {
454 UNIMPLEMENTED_MIPS();
455 __ break_(0x831);
456}
457
458void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
459 UNIMPLEMENTED_MIPS();
460 // Load a result.
461 __ li(v0, Operand(0x1234));
462 __ jr(ra);
463 // Return
464 __ nop();
465}
466
467
468// This stub performs an instanceof, calling the builtin function if
469// necessary. Uses a1 for the object, a0 for the function that it may
470// be an instance of (these are fetched from the stack).
471void InstanceofStub::Generate(MacroAssembler* masm) {
472 UNIMPLEMENTED_MIPS();
473 __ break_(0x845);
474}
475
476
477void ArgumentsAccessStub::GenerateReadLength(MacroAssembler* masm) {
478 UNIMPLEMENTED_MIPS();
479 __ break_(0x851);
480}
481
482
483void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) {
484 UNIMPLEMENTED_MIPS();
485 __ break_(0x857);
486}
487
488
489void ArgumentsAccessStub::GenerateNewObject(MacroAssembler* masm) {
490 UNIMPLEMENTED_MIPS();
491 __ break_(0x863);
492}
493
494
495const char* CompareStub::GetName() {
496 UNIMPLEMENTED_MIPS();
497 return NULL; // UNIMPLEMENTED RETURN
498}
499
500
501int CompareStub::MinorKey() {
502 // Encode the two parameters in a unique 16 bit value.
503 ASSERT(static_cast<unsigned>(cc_) >> 28 < (1 << 15));
504 return (static_cast<unsigned>(cc_) >> 27) | (strict_ ? 1 : 0);
505}
506
507
508#undef __
509
510} } // namespace v8::internal