blob: 5a27c2864856a806dde44a67334c54ef83fe43a5 [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
308void CodeGenerator::GenerateIsConstructCall(ZoneList<Expression*>* args) {
309 UNIMPLEMENTED_MIPS();
310}
311
312
313void CodeGenerator::GenerateArgumentsLength(ZoneList<Expression*>* args) {
314 UNIMPLEMENTED_MIPS();
315}
316
317
318void CodeGenerator::GenerateArgumentsAccess(ZoneList<Expression*>* args) {
319 UNIMPLEMENTED_MIPS();
320}
321
322
323void CodeGenerator::GenerateRandomPositiveSmi(ZoneList<Expression*>* args) {
324 UNIMPLEMENTED_MIPS();
325}
326
327
328void CodeGenerator::GenerateObjectEquals(ZoneList<Expression*>* args) {
329 UNIMPLEMENTED_MIPS();
330}
331
332
333void CodeGenerator::GenerateIsObject(ZoneList<Expression*>* args) {
334 UNIMPLEMENTED_MIPS();
335}
336
337
338void CodeGenerator::GenerateIsFunction(ZoneList<Expression*>* args) {
339 UNIMPLEMENTED_MIPS();
340}
341
342
343void CodeGenerator::GenerateIsUndetectableObject(ZoneList<Expression*>* args) {
344 UNIMPLEMENTED_MIPS();
345}
346
347
348void CodeGenerator::GenerateStringAdd(ZoneList<Expression*>* args) {
349 UNIMPLEMENTED_MIPS();
350}
351
352
353void CodeGenerator::GenerateSubString(ZoneList<Expression*>* args) {
354 UNIMPLEMENTED_MIPS();
355}
356
357
358void CodeGenerator::GenerateStringCompare(ZoneList<Expression*>* args) {
359 UNIMPLEMENTED_MIPS();
360}
361
362
363void CodeGenerator::GenerateRegExpExec(ZoneList<Expression*>* args) {
364 UNIMPLEMENTED_MIPS();
365}
366
367
368void CodeGenerator::VisitCallRuntime(CallRuntime* node) {
369 UNIMPLEMENTED_MIPS();
370}
371
372
373void CodeGenerator::VisitUnaryOperation(UnaryOperation* node) {
374 UNIMPLEMENTED_MIPS();
375}
376
377
378void CodeGenerator::VisitCountOperation(CountOperation* node) {
379 UNIMPLEMENTED_MIPS();
380}
381
382
383void CodeGenerator::VisitBinaryOperation(BinaryOperation* node) {
384 UNIMPLEMENTED_MIPS();
385}
386
387
388void CodeGenerator::VisitThisFunction(ThisFunction* node) {
389 UNIMPLEMENTED_MIPS();
390}
391
392
393void CodeGenerator::VisitCompareOperation(CompareOperation* node) {
394 UNIMPLEMENTED_MIPS();
395}
396
397
398#ifdef DEBUG
399bool CodeGenerator::HasValidEntryRegisters() { return true; }
400#endif
401
402
403#undef __
404#define __ ACCESS_MASM(masm)
405
406
407// On entry a0 and a1 are the things to be compared. On exit v0 is 0,
408// positive or negative to indicate the result of the comparison.
409void CompareStub::Generate(MacroAssembler* masm) {
410 UNIMPLEMENTED_MIPS();
411 __ break_(0x765);
412}
413
414
415void StackCheckStub::Generate(MacroAssembler* masm) {
416 UNIMPLEMENTED_MIPS();
417 __ break_(0x790);
418}
419
420
421void CEntryStub::GenerateThrowTOS(MacroAssembler* masm) {
422 UNIMPLEMENTED_MIPS();
423 __ break_(0x808);
424}
425
426
427void CEntryStub::GenerateThrowUncatchable(MacroAssembler* masm,
428 UncatchableExceptionType type) {
429 UNIMPLEMENTED_MIPS();
430 __ break_(0x815);
431}
432
433void CEntryStub::GenerateCore(MacroAssembler* masm,
434 Label* throw_normal_exception,
435 Label* throw_termination_exception,
436 Label* throw_out_of_memory_exception,
437 bool do_gc,
438 bool always_allocate) {
439 UNIMPLEMENTED_MIPS();
440 __ break_(0x826);
441}
442
443void CEntryStub::Generate(MacroAssembler* masm) {
444 UNIMPLEMENTED_MIPS();
445 __ break_(0x831);
446}
447
448void JSEntryStub::GenerateBody(MacroAssembler* masm, bool is_construct) {
449 UNIMPLEMENTED_MIPS();
450 // Load a result.
451 __ li(v0, Operand(0x1234));
452 __ jr(ra);
453 // Return
454 __ nop();
455}
456
457
458// This stub performs an instanceof, calling the builtin function if
459// necessary. Uses a1 for the object, a0 for the function that it may
460// be an instance of (these are fetched from the stack).
461void InstanceofStub::Generate(MacroAssembler* masm) {
462 UNIMPLEMENTED_MIPS();
463 __ break_(0x845);
464}
465
466
467void ArgumentsAccessStub::GenerateReadLength(MacroAssembler* masm) {
468 UNIMPLEMENTED_MIPS();
469 __ break_(0x851);
470}
471
472
473void ArgumentsAccessStub::GenerateReadElement(MacroAssembler* masm) {
474 UNIMPLEMENTED_MIPS();
475 __ break_(0x857);
476}
477
478
479void ArgumentsAccessStub::GenerateNewObject(MacroAssembler* masm) {
480 UNIMPLEMENTED_MIPS();
481 __ break_(0x863);
482}
483
484
485const char* CompareStub::GetName() {
486 UNIMPLEMENTED_MIPS();
487 return NULL; // UNIMPLEMENTED RETURN
488}
489
490
491int CompareStub::MinorKey() {
492 // Encode the two parameters in a unique 16 bit value.
493 ASSERT(static_cast<unsigned>(cc_) >> 28 < (1 << 15));
494 return (static_cast<unsigned>(cc_) >> 27) | (strict_ ? 1 : 0);
495}
496
497
498#undef __
499
500} } // namespace v8::internal
501