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

Side by Side Diff: src/mips/virtual-frame-mips.cc

Issue 6759025: Version 3.2.6 (Closed) Base URL: https://v8.googlecode.com/svn/trunk
Patch Set: Created 9 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « src/mips/virtual-frame-mips.h ('k') | src/mips/virtual-frame-mips-inl.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2010 the V8 project authors. All rights reserved. 1 // Copyright 2010 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
11 // with the distribution. 11 // with the distribution.
12 // * Neither the name of Google Inc. nor the names of its 12 // * Neither the name of Google Inc. nor the names of its
13 // contributors may be used to endorse or promote products derived 13 // contributors may be used to endorse or promote products derived
14 // from this software without specific prior written permission. 14 // from this software without specific prior written permission.
15 // 15 //
16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 19 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 20 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 21 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 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. 26 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 27
28
29
30 #include "v8.h" 28 #include "v8.h"
31 29
32 #if defined(V8_TARGET_ARCH_MIPS) 30 #if defined(V8_TARGET_ARCH_MIPS)
33 31
34 #include "codegen-inl.h" 32 #include "codegen-inl.h"
35 #include "register-allocator-inl.h" 33 #include "register-allocator-inl.h"
36 #include "scopes.h" 34 #include "scopes.h"
37 #include "virtual-frame-inl.h" 35 #include "virtual-frame-inl.h"
38 36
39 namespace v8 { 37 namespace v8 {
40 namespace internal { 38 namespace internal {
41 39
42 // -------------------------------------------------------------------------
43 // VirtualFrame implementation.
44
45 #define __ ACCESS_MASM(masm()) 40 #define __ ACCESS_MASM(masm())
46 41
47 void VirtualFrame::SyncElementBelowStackPointer(int index) { 42 void VirtualFrame::PopToA1A0() {
48 UNREACHABLE(); 43 UNIMPLEMENTED_MIPS();
49 } 44 }
50 45
51 46
52 void VirtualFrame::SyncElementByPushing(int index) { 47 void VirtualFrame::PopToA1() {
53 UNREACHABLE(); 48 UNIMPLEMENTED_MIPS();
54 } 49 }
55 50
56 51
57 void VirtualFrame::SyncRange(int begin, int end) { 52 void VirtualFrame::PopToA0() {
58 // All elements are in memory on MIPS (ie, synced). 53 UNIMPLEMENTED_MIPS();
59 #ifdef DEBUG
60 for (int i = begin; i <= end; i++) {
61 ASSERT(elements_[i].is_synced());
62 }
63 #endif
64 } 54 }
65 55
66 56
67 void VirtualFrame::MergeTo(VirtualFrame* expected) { 57 void VirtualFrame::MergeTo(const VirtualFrame* expected,
58 Condition cond,
59 Register r1,
60 const Operand& r2) {
61 UNIMPLEMENTED_MIPS();
62 }
63
64
65 void VirtualFrame::MergeTo(VirtualFrame* expected,
66 Condition cond,
67 Register r1,
68 const Operand& r2) {
69 UNIMPLEMENTED_MIPS();
70 }
71
72
73 void VirtualFrame::MergeTOSTo(
74 VirtualFrame::TopOfStack expected_top_of_stack_state,
75 Condition cond,
76 Register r1,
77 const Operand& r2) {
68 UNIMPLEMENTED_MIPS(); 78 UNIMPLEMENTED_MIPS();
69 } 79 }
70 80
71 81
72 void VirtualFrame::Enter() { 82 void VirtualFrame::Enter() {
73 // TODO(MIPS): Implement DEBUG 83 UNIMPLEMENTED_MIPS();
74
75 // We are about to push four values to the frame.
76 Adjust(4);
77 __ MultiPush(ra.bit() | fp.bit() | cp.bit() | a1.bit());
78 // Adjust FP to point to saved FP.
79 __ addiu(fp, sp, 2 * kPointerSize);
80 } 84 }
81 85
82 86
83 void VirtualFrame::Exit() { 87 void VirtualFrame::Exit() {
84 UNIMPLEMENTED_MIPS(); 88 UNIMPLEMENTED_MIPS();
85 } 89 }
86 90
87 91
88 void VirtualFrame::AllocateStackSlots() { 92 void VirtualFrame::AllocateStackSlots() {
89 int count = local_count(); 93 UNIMPLEMENTED_MIPS();
90 if (count > 0) { 94 }
91 Comment cmnt(masm(), "[ Allocate space for locals"); 95
92 Adjust(count);
93 // Initialize stack slots with 'undefined' value.
94 __ LoadRoot(t0, Heap::kUndefinedValueRootIndex);
95 __ addiu(sp, sp, -count * kPointerSize);
96 for (int i = 0; i < count; i++) {
97 __ sw(t0, MemOperand(sp, (count-i-1)*kPointerSize));
98 }
99 }
100 }
101
102
103 void VirtualFrame::SaveContextRegister() {
104 UNIMPLEMENTED_MIPS();
105 }
106
107
108 void VirtualFrame::RestoreContextRegister() {
109 UNIMPLEMENTED_MIPS();
110 }
111 96
112 97
113 void VirtualFrame::PushReceiverSlotAddress() { 98 void VirtualFrame::PushReceiverSlotAddress() {
114 UNIMPLEMENTED_MIPS(); 99 UNIMPLEMENTED_MIPS();
115 } 100 }
116 101
117 102
118 int VirtualFrame::InvalidateFrameSlotAt(int index) {
119 return kIllegalIndex;
120 }
121
122
123 void VirtualFrame::TakeFrameSlotAt(int index) {
124 UNIMPLEMENTED_MIPS();
125 }
126
127
128 void VirtualFrame::StoreToFrameSlotAt(int index) {
129 UNIMPLEMENTED_MIPS();
130 }
131
132
133 void VirtualFrame::PushTryHandler(HandlerType type) { 103 void VirtualFrame::PushTryHandler(HandlerType type) {
134 UNIMPLEMENTED_MIPS(); 104 UNIMPLEMENTED_MIPS();
135 } 105 }
136 106
137 107
138 void VirtualFrame::RawCallStub(CodeStub* stub) { 108 void VirtualFrame::CallJSFunction(int arg_count) {
139 UNIMPLEMENTED_MIPS(); 109 UNIMPLEMENTED_MIPS();
140 } 110 }
141 111
142 112
143 void VirtualFrame::CallStub(CodeStub* stub, Result* arg) { 113 void VirtualFrame::CallRuntime(const Runtime::Function* f, int arg_count) {
144 UNIMPLEMENTED_MIPS(); 114 UNIMPLEMENTED_MIPS();
145 }
146
147
148 void VirtualFrame::CallStub(CodeStub* stub, Result* arg0, Result* arg1) {
149 UNIMPLEMENTED_MIPS();
150 }
151
152
153 void VirtualFrame::CallRuntime(Runtime::Function* f, int arg_count) {
154 PrepareForCall(arg_count, arg_count);
155 ASSERT(cgen()->HasValidEntryRegisters());
156 __ CallRuntime(f, arg_count);
157 } 115 }
158 116
159 117
160 void VirtualFrame::CallRuntime(Runtime::FunctionId id, int arg_count) { 118 void VirtualFrame::CallRuntime(Runtime::FunctionId id, int arg_count) {
161 PrepareForCall(arg_count, arg_count); 119 UNIMPLEMENTED_MIPS();
162 ASSERT(cgen()->HasValidEntryRegisters()); 120 }
163 __ CallRuntime(id, arg_count); 121
164 } 122
165 123 #ifdef ENABLE_DEBUGGER_SUPPORT
166 124 void VirtualFrame::DebugBreak() {
167 void VirtualFrame::CallAlignedRuntime(Runtime::Function* f, int arg_count) { 125 UNIMPLEMENTED_MIPS();
168 UNIMPLEMENTED_MIPS(); 126 }
169 } 127 #endif
170
171
172 void VirtualFrame::CallAlignedRuntime(Runtime::FunctionId id, int arg_count) {
173 UNIMPLEMENTED_MIPS();
174 }
175 128
176 129
177 void VirtualFrame::InvokeBuiltin(Builtins::JavaScript id, 130 void VirtualFrame::InvokeBuiltin(Builtins::JavaScript id,
178 InvokeJSFlags flags, 131 InvokeJSFlags flags,
179 Result* arg_count_register,
180 int arg_count) { 132 int arg_count) {
181 UNIMPLEMENTED_MIPS(); 133 UNIMPLEMENTED_MIPS();
182 } 134 }
183 135
184 136
137 void VirtualFrame::CallLoadIC(Handle<String> name, RelocInfo::Mode mode) {
138 UNIMPLEMENTED_MIPS();
139 }
140
141
142 void VirtualFrame::CallStoreIC(Handle<String> name, bool is_contextual) {
143 UNIMPLEMENTED_MIPS();
144 }
145
146
147 void VirtualFrame::CallKeyedLoadIC() {
148 UNIMPLEMENTED_MIPS();
149 }
150
151
152 void VirtualFrame::CallKeyedStoreIC() {
153 UNIMPLEMENTED_MIPS();
154 }
155
156
185 void VirtualFrame::CallCodeObject(Handle<Code> code, 157 void VirtualFrame::CallCodeObject(Handle<Code> code,
186 RelocInfo::Mode rmode, 158 RelocInfo::Mode rmode,
187 int dropped_args) { 159 int dropped_args) {
188 switch (code->kind()) { 160 UNIMPLEMENTED_MIPS();
189 case Code::CALL_IC: 161 }
190 break; 162
191 case Code::FUNCTION: 163
192 UNIMPLEMENTED_MIPS(); 164 // NO_TOS_REGISTERS, A0_TOS, A1_TOS, A1_A0_TOS, A0_A1_TOS.
193 break; 165 const bool VirtualFrame::kA0InUse[TOS_STATES] =
194 case Code::KEYED_LOAD_IC: 166 { false, true, false, true, true };
195 UNIMPLEMENTED_MIPS(); 167 const bool VirtualFrame::kA1InUse[TOS_STATES] =
196 break; 168 { false, false, true, true, true };
197 case Code::LOAD_IC: 169 const int VirtualFrame::kVirtualElements[TOS_STATES] =
198 UNIMPLEMENTED_MIPS(); 170 { 0, 1, 1, 2, 2 };
199 break; 171 const Register VirtualFrame::kTopRegister[TOS_STATES] =
200 case Code::KEYED_STORE_IC: 172 { a0, a0, a1, a1, a0 };
201 UNIMPLEMENTED_MIPS(); 173 const Register VirtualFrame::kBottomRegister[TOS_STATES] =
202 break; 174 { a0, a0, a1, a0, a1 };
203 case Code::STORE_IC: 175 const Register VirtualFrame::kAllocatedRegisters[
204 UNIMPLEMENTED_MIPS(); 176 VirtualFrame::kNumberOfAllocatedRegisters] = { a2, a3, t0, t1, t2 };
205 break; 177 // Popping is done by the transition implied by kStateAfterPop. Of course if
206 case Code::BUILTIN: 178 // there were no stack slots allocated to registers then the physical SP must
207 UNIMPLEMENTED_MIPS(); 179 // be adjusted.
208 break; 180 const VirtualFrame::TopOfStack VirtualFrame::kStateAfterPop[TOS_STATES] =
209 default: 181 { NO_TOS_REGISTERS, NO_TOS_REGISTERS, NO_TOS_REGISTERS, A0_TOS, A1_TOS };
210 UNREACHABLE(); 182 // Pushing is done by the transition implied by kStateAfterPush. Of course if
211 break; 183 // the maximum number of registers was already allocated to the top of stack
212 } 184 // slots then one register must be physically pushed onto the stack.
213 Forget(dropped_args); 185 const VirtualFrame::TopOfStack VirtualFrame::kStateAfterPush[TOS_STATES] =
214 ASSERT(cgen()->HasValidEntryRegisters()); 186 { A0_TOS, A1_A0_TOS, A0_A1_TOS, A0_A1_TOS, A1_A0_TOS };
215 __ Call(code, rmode);
216 }
217
218
219 void VirtualFrame::CallCodeObject(Handle<Code> code,
220 RelocInfo::Mode rmode,
221 Result* arg,
222 int dropped_args) {
223 UNIMPLEMENTED_MIPS();
224 }
225
226
227 void VirtualFrame::CallCodeObject(Handle<Code> code,
228 RelocInfo::Mode rmode,
229 Result* arg0,
230 Result* arg1,
231 int dropped_args,
232 bool set_auto_args_slots) {
233 UNIMPLEMENTED_MIPS();
234 }
235 187
236 188
237 void VirtualFrame::Drop(int count) { 189 void VirtualFrame::Drop(int count) {
238 ASSERT(count >= 0); 190 UNIMPLEMENTED_MIPS();
239 ASSERT(height() >= count); 191 }
240 int num_virtual_elements = (element_count() - 1) - stack_pointer_; 192
241 193
242 // Emit code to lower the stack pointer if necessary. 194 void VirtualFrame::Pop() {
243 if (num_virtual_elements < count) { 195 UNIMPLEMENTED_MIPS();
244 int num_dropped = count - num_virtual_elements;
245 stack_pointer_ -= num_dropped;
246 __ addiu(sp, sp, num_dropped * kPointerSize);
247 }
248
249 // Discard elements from the virtual frame and free any registers.
250 for (int i = 0; i < count; i++) {
251 FrameElement dropped = elements_.RemoveLast();
252 if (dropped.is_register()) {
253 Unuse(dropped.reg());
254 }
255 }
256 }
257
258
259 void VirtualFrame::DropFromVFrameOnly(int count) {
260 UNIMPLEMENTED_MIPS();
261 }
262
263
264 Result VirtualFrame::Pop() {
265 UNIMPLEMENTED_MIPS();
266 Result res = Result();
267 return res; // UNIMPLEMENTED RETURN
268 } 196 }
269 197
270 198
271 void VirtualFrame::EmitPop(Register reg) { 199 void VirtualFrame::EmitPop(Register reg) {
272 ASSERT(stack_pointer_ == element_count() - 1); 200 UNIMPLEMENTED_MIPS();
273 stack_pointer_--; 201 }
274 elements_.RemoveLast(); 202
275 __ Pop(reg); 203
204 void VirtualFrame::SpillAllButCopyTOSToA0() {
205 UNIMPLEMENTED_MIPS();
206 }
207
208
209 void VirtualFrame::SpillAllButCopyTOSToA1() {
210 UNIMPLEMENTED_MIPS();
211 }
212
213
214 void VirtualFrame::SpillAllButCopyTOSToA1A0() {
215 UNIMPLEMENTED_MIPS();
216 }
217
218
219 Register VirtualFrame::Peek() {
220 UNIMPLEMENTED_MIPS();
221 return no_reg;
222 }
223
224
225 Register VirtualFrame::Peek2() {
226 UNIMPLEMENTED_MIPS();
227 return no_reg;
228 }
229
230
231 void VirtualFrame::Dup() {
232 UNIMPLEMENTED_MIPS();
233 }
234
235
236 void VirtualFrame::Dup2() {
237 UNIMPLEMENTED_MIPS();
238 }
239
240
241 Register VirtualFrame::PopToRegister(Register but_not_to_this_one) {
242 UNIMPLEMENTED_MIPS();
243 return no_reg;
244 }
245
246
247 void VirtualFrame::EnsureOneFreeTOSRegister() {
248 UNIMPLEMENTED_MIPS();
276 } 249 }
277 250
278 251
279 void VirtualFrame::EmitMultiPop(RegList regs) { 252 void VirtualFrame::EmitMultiPop(RegList regs) {
280 ASSERT(stack_pointer_ == element_count() - 1); 253 UNIMPLEMENTED_MIPS();
281 for (int16_t i = 0; i < kNumRegisters; i++) { 254 }
282 if ((regs & (1 << i)) != 0) { 255
283 stack_pointer_--; 256
284 elements_.RemoveLast(); 257 void VirtualFrame::EmitPush(Register reg, TypeInfo info) {
285 } 258 UNIMPLEMENTED_MIPS();
286 } 259 }
287 __ MultiPop(regs); 260
288 } 261
289 262 void VirtualFrame::SetElementAt(Register reg, int this_far_down) {
290 263 UNIMPLEMENTED_MIPS();
291 void VirtualFrame::EmitPush(Register reg) { 264 }
292 ASSERT(stack_pointer_ == element_count() - 1); 265
293 elements_.Add(FrameElement::MemoryElement(NumberInfo::Unknown())); 266
294 stack_pointer_++; 267 Register VirtualFrame::GetTOSRegister() {
295 __ Push(reg); 268 UNIMPLEMENTED_MIPS();
269 return no_reg;
270 }
271
272
273 void VirtualFrame::EmitPush(Operand operand, TypeInfo info) {
274 UNIMPLEMENTED_MIPS();
275 }
276
277
278 void VirtualFrame::EmitPush(MemOperand operand, TypeInfo info) {
279 UNIMPLEMENTED_MIPS();
280 }
281
282
283 void VirtualFrame::EmitPushRoot(Heap::RootListIndex index) {
284 UNIMPLEMENTED_MIPS();
296 } 285 }
297 286
298 287
299 void VirtualFrame::EmitMultiPush(RegList regs) { 288 void VirtualFrame::EmitMultiPush(RegList regs) {
300 ASSERT(stack_pointer_ == element_count() - 1); 289 UNIMPLEMENTED_MIPS();
301 for (int16_t i = kNumRegisters; i > 0; i--) { 290 }
302 if ((regs & (1 << i)) != 0) { 291
303 elements_.Add(FrameElement::MemoryElement(NumberInfo::Unknown())); 292
304 stack_pointer_++; 293 void VirtualFrame::EmitMultiPushReversed(RegList regs) {
305 } 294 UNIMPLEMENTED_MIPS();
306 } 295 }
307 __ MultiPush(regs); 296
308 } 297
309 298 void VirtualFrame::SpillAll() {
310 299 UNIMPLEMENTED_MIPS();
311 void VirtualFrame::EmitArgumentSlots(RegList reglist) { 300 }
312 UNIMPLEMENTED_MIPS(); 301
313 }
314 302
315 #undef __ 303 #undef __
316 304
317 } } // namespace v8::internal 305 } } // namespace v8::internal
318 306
319 #endif // V8_TARGET_ARCH_MIPS 307 #endif // V8_TARGET_ARCH_MIPS
OLDNEW
« no previous file with comments | « src/mips/virtual-frame-mips.h ('k') | src/mips/virtual-frame-mips-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698