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

Side by Side Diff: src/mips64/simulator-mips64.h

Issue 371923006: Add mips64 port. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Rebase Created 6 years, 5 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/mips64/regexp-macro-assembler-mips64.cc ('k') | src/mips64/simulator-mips64.cc » ('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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 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 5
6 // Declares a Simulator for MIPS instructions if we are not generating a native 6 // Declares a Simulator for MIPS instructions if we are not generating a native
7 // MIPS binary. This Simulator allows us to run and debug MIPS code generation 7 // MIPS binary. This Simulator allows us to run and debug MIPS code generation
8 // on regular desktop machines. 8 // on regular desktop machines.
9 // V8 calls into generated code by "calling" the CALL_GENERATED_CODE macro, 9 // V8 calls into generated code by "calling" the CALL_GENERATED_CODE macro,
10 // which will start execution in the Simulator or forwards to the real entry 10 // which will start execution in the Simulator or forwards to the real entry
11 // on a MIPS HW platform. 11 // on a MIPS HW platform.
12 12
13 #ifndef V8_MIPS_SIMULATOR_MIPS_H_ 13 #ifndef V8_MIPS_SIMULATOR_MIPS_H_
14 #define V8_MIPS_SIMULATOR_MIPS_H_ 14 #define V8_MIPS_SIMULATOR_MIPS_H_
15 15
16 #include "src/allocation.h" 16 #include "src/allocation.h"
17 #include "src/mips/constants-mips.h" 17 #include "src/mips64/constants-mips64.h"
18 18
19 #if !defined(USE_SIMULATOR) 19 #if !defined(USE_SIMULATOR)
20 // Running without a simulator on a native mips platform. 20 // Running without a simulator on a native mips platform.
21 21
22 namespace v8 { 22 namespace v8 {
23 namespace internal { 23 namespace internal {
24 24
25 // When running without a simulator we call the entry directly. 25 // When running without a simulator we call the entry directly.
26 #define CALL_GENERATED_CODE(entry, p0, p1, p2, p3, p4) \ 26 #define CALL_GENERATED_CODE(entry, p0, p1, p2, p3, p4) \
27 entry(p0, p1, p2, p3, p4) 27 entry(p0, p1, p2, p3, p4)
28 28
29 typedef int (*mips_regexp_matcher)(String*, int, const byte*, const byte*,
30 void*, int*, int, Address, int, Isolate*);
31
32 29
33 // Call the generated regexp code directly. The code at the entry address 30 // Call the generated regexp code directly. The code at the entry address
34 // should act as a function matching the type arm_regexp_matcher. 31 // should act as a function matching the type arm_regexp_matcher.
35 // The fifth argument is a dummy that reserves the space used for 32 // The fifth (or ninth) argument is a dummy that reserves the space used for
36 // the return address added by the ExitFrame in native calls. 33 // the return address added by the ExitFrame in native calls.
34 #ifdef MIPS_ABI_N64
35 typedef int (*mips_regexp_matcher)(String* input,
36 int64_t start_offset,
37 const byte* input_start,
38 const byte* input_end,
39 int* output,
40 int64_t output_size,
41 Address stack_base,
42 int64_t direct_call,
43 void* return_address,
44 Isolate* isolate);
45
46 #define CALL_GENERATED_REGEXP_CODE(entry, p0, p1, p2, p3, p4, p5, p6, p7, p8) \
47 (FUNCTION_CAST<mips_regexp_matcher>(entry)( \
48 p0, p1, p2, p3, p4, p5, p6, p7, NULL, p8))
49
50 #else // O32 Abi.
51
52 typedef int (*mips_regexp_matcher)(String* input,
53 int32_t start_offset,
54 const byte* input_start,
55 const byte* input_end,
56 void* return_address,
57 int* output,
58 int32_t output_size,
59 Address stack_base,
60 int32_t direct_call,
61 Isolate* isolate);
62
37 #define CALL_GENERATED_REGEXP_CODE(entry, p0, p1, p2, p3, p4, p5, p6, p7, p8) \ 63 #define CALL_GENERATED_REGEXP_CODE(entry, p0, p1, p2, p3, p4, p5, p6, p7, p8) \
38 (FUNCTION_CAST<mips_regexp_matcher>(entry)( \ 64 (FUNCTION_CAST<mips_regexp_matcher>(entry)( \
39 p0, p1, p2, p3, NULL, p4, p5, p6, p7, p8)) 65 p0, p1, p2, p3, NULL, p4, p5, p6, p7, p8))
40 66
67 #endif // MIPS_ABI_N64
68
69
41 // The stack limit beyond which we will throw stack overflow errors in 70 // The stack limit beyond which we will throw stack overflow errors in
42 // generated code. Because generated code on mips uses the C stack, we 71 // generated code. Because generated code on mips uses the C stack, we
43 // just use the C stack limit. 72 // just use the C stack limit.
44 class SimulatorStack : public v8::internal::AllStatic { 73 class SimulatorStack : public v8::internal::AllStatic {
45 public: 74 public:
46 static inline uintptr_t JsLimitFromCLimit(Isolate* isolate, 75 static inline uintptr_t JsLimitFromCLimit(Isolate* isolate,
47 uintptr_t c_limit) { 76 uintptr_t c_limit) {
48 return c_limit; 77 return c_limit;
49 } 78 }
50 79
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 class Simulator { 141 class Simulator {
113 public: 142 public:
114 friend class MipsDebugger; 143 friend class MipsDebugger;
115 144
116 // Registers are declared in order. See SMRL chapter 2. 145 // Registers are declared in order. See SMRL chapter 2.
117 enum Register { 146 enum Register {
118 no_reg = -1, 147 no_reg = -1,
119 zero_reg = 0, 148 zero_reg = 0,
120 at, 149 at,
121 v0, v1, 150 v0, v1,
122 a0, a1, a2, a3, 151 a0, a1, a2, a3, a4, a5, a6, a7,
123 t0, t1, t2, t3, t4, t5, t6, t7, 152 t0, t1, t2, t3,
124 s0, s1, s2, s3, s4, s5, s6, s7, 153 s0, s1, s2, s3, s4, s5, s6, s7,
125 t8, t9, 154 t8, t9,
126 k0, k1, 155 k0, k1,
127 gp, 156 gp,
128 sp, 157 sp,
129 s8, 158 s8,
130 ra, 159 ra,
131 // LO, HI, and pc. 160 // LO, HI, and pc.
132 LO, 161 LO,
133 HI, 162 HI,
(...skipping 16 matching lines...) Expand all
150 explicit Simulator(Isolate* isolate); 179 explicit Simulator(Isolate* isolate);
151 ~Simulator(); 180 ~Simulator();
152 181
153 // The currently executing Simulator instance. Potentially there can be one 182 // The currently executing Simulator instance. Potentially there can be one
154 // for each native thread. 183 // for each native thread.
155 static Simulator* current(v8::internal::Isolate* isolate); 184 static Simulator* current(v8::internal::Isolate* isolate);
156 185
157 // Accessors for register state. Reading the pc value adheres to the MIPS 186 // Accessors for register state. Reading the pc value adheres to the MIPS
158 // architecture specification and is off by a 8 from the currently executing 187 // architecture specification and is off by a 8 from the currently executing
159 // instruction. 188 // instruction.
160 void set_register(int reg, int32_t value); 189 void set_register(int reg, int64_t value);
190 void set_register_word(int reg, int32_t value);
161 void set_dw_register(int dreg, const int* dbl); 191 void set_dw_register(int dreg, const int* dbl);
162 int32_t get_register(int reg) const; 192 int64_t get_register(int reg) const;
163 double get_double_from_register_pair(int reg); 193 double get_double_from_register_pair(int reg);
164 // Same for FPURegisters. 194 // Same for FPURegisters.
165 void set_fpu_register(int fpureg, int32_t value); 195 void set_fpu_register(int fpureg, int64_t value);
196 void set_fpu_register_word(int fpureg, int32_t value);
197 void set_fpu_register_hi_word(int fpureg, int32_t value);
166 void set_fpu_register_float(int fpureg, float value); 198 void set_fpu_register_float(int fpureg, float value);
167 void set_fpu_register_double(int fpureg, double value); 199 void set_fpu_register_double(int fpureg, double value);
168 int32_t get_fpu_register(int fpureg) const; 200 int64_t get_fpu_register(int fpureg) const;
169 int64_t get_fpu_register_long(int fpureg) const; 201 int32_t get_fpu_register_word(int fpureg) const;
202 int32_t get_fpu_register_signed_word(int fpureg) const;
203 uint32_t get_fpu_register_hi_word(int fpureg) const;
170 float get_fpu_register_float(int fpureg) const; 204 float get_fpu_register_float(int fpureg) const;
171 double get_fpu_register_double(int fpureg) const; 205 double get_fpu_register_double(int fpureg) const;
172 void set_fcsr_bit(uint32_t cc, bool value); 206 void set_fcsr_bit(uint32_t cc, bool value);
173 bool test_fcsr_bit(uint32_t cc); 207 bool test_fcsr_bit(uint32_t cc);
174 bool set_fcsr_round_error(double original, double rounded); 208 bool set_fcsr_round_error(double original, double rounded);
209 bool set_fcsr_round64_error(double original, double rounded);
175 210
176 // Special case of set_register and get_register to access the raw PC value. 211 // Special case of set_register and get_register to access the raw PC value.
177 void set_pc(int32_t value); 212 void set_pc(int64_t value);
178 int32_t get_pc() const; 213 int64_t get_pc() const;
179 214
180 Address get_sp() { 215 Address get_sp() {
181 return reinterpret_cast<Address>(static_cast<intptr_t>(get_register(sp))); 216 return reinterpret_cast<Address>(static_cast<intptr_t>(get_register(sp)));
182 } 217 }
183 218
184 // Accessor to the internal simulator stack area. 219 // Accessor to the internal simulator stack area.
185 uintptr_t StackLimit() const; 220 uintptr_t StackLimit() const;
186 221
187 // Executes MIPS instructions until the PC reaches end_sim_pc. 222 // Executes MIPS instructions until the PC reaches end_sim_pc.
188 void Execute(); 223 void Execute();
189 224
190 // Call on program start. 225 // Call on program start.
191 static void Initialize(Isolate* isolate); 226 static void Initialize(Isolate* isolate);
192 227
193 // V8 generally calls into generated JS code with 5 parameters and into 228 // V8 generally calls into generated JS code with 5 parameters and into
194 // generated RegExp code with 7 parameters. This is a convenience function, 229 // generated RegExp code with 7 parameters. This is a convenience function,
195 // which sets up the simulator state and grabs the result on return. 230 // which sets up the simulator state and grabs the result on return.
196 int32_t Call(byte* entry, int argument_count, ...); 231 int64_t Call(byte* entry, int argument_count, ...);
197 // Alternative: call a 2-argument double function. 232 // Alternative: call a 2-argument double function.
198 double CallFP(byte* entry, double d0, double d1); 233 double CallFP(byte* entry, double d0, double d1);
199 234
200 // Push an address onto the JS stack. 235 // Push an address onto the JS stack.
201 uintptr_t PushAddress(uintptr_t address); 236 uintptr_t PushAddress(uintptr_t address);
202 237
203 // Pop an address from the JS stack. 238 // Pop an address from the JS stack.
204 uintptr_t PopAddress(); 239 uintptr_t PopAddress();
205 240
206 // Debugger input. 241 // Debugger input.
(...skipping 19 matching lines...) Expand all
226 // C code. 261 // C code.
227 end_sim_pc = -2, 262 end_sim_pc = -2,
228 // Unpredictable value. 263 // Unpredictable value.
229 Unpredictable = 0xbadbeaf 264 Unpredictable = 0xbadbeaf
230 }; 265 };
231 266
232 // Unsupported instructions use Format to print an error and stop execution. 267 // Unsupported instructions use Format to print an error and stop execution.
233 void Format(Instruction* instr, const char* format); 268 void Format(Instruction* instr, const char* format);
234 269
235 // Read and write memory. 270 // Read and write memory.
236 inline uint32_t ReadBU(int32_t addr); 271 inline uint32_t ReadBU(int64_t addr);
237 inline int32_t ReadB(int32_t addr); 272 inline int32_t ReadB(int64_t addr);
238 inline void WriteB(int32_t addr, uint8_t value); 273 inline void WriteB(int64_t addr, uint8_t value);
239 inline void WriteB(int32_t addr, int8_t value); 274 inline void WriteB(int64_t addr, int8_t value);
240 275
241 inline uint16_t ReadHU(int32_t addr, Instruction* instr); 276 inline uint16_t ReadHU(int64_t addr, Instruction* instr);
242 inline int16_t ReadH(int32_t addr, Instruction* instr); 277 inline int16_t ReadH(int64_t addr, Instruction* instr);
243 // Note: Overloaded on the sign of the value. 278 // Note: Overloaded on the sign of the value.
244 inline void WriteH(int32_t addr, uint16_t value, Instruction* instr); 279 inline void WriteH(int64_t addr, uint16_t value, Instruction* instr);
245 inline void WriteH(int32_t addr, int16_t value, Instruction* instr); 280 inline void WriteH(int64_t addr, int16_t value, Instruction* instr);
246 281
247 inline int ReadW(int32_t addr, Instruction* instr); 282 inline uint32_t ReadWU(int64_t addr, Instruction* instr);
248 inline void WriteW(int32_t addr, int value, Instruction* instr); 283 inline int32_t ReadW(int64_t addr, Instruction* instr);
284 inline void WriteW(int64_t addr, int32_t value, Instruction* instr);
285 inline int64_t Read2W(int64_t addr, Instruction* instr);
286 inline void Write2W(int64_t addr, int64_t value, Instruction* instr);
249 287
250 inline double ReadD(int32_t addr, Instruction* instr); 288 inline double ReadD(int64_t addr, Instruction* instr);
251 inline void WriteD(int32_t addr, double value, Instruction* instr); 289 inline void WriteD(int64_t addr, double value, Instruction* instr);
290
291 // Helper for debugging memory access.
292 inline void DieOrDebug();
293
294 // Helpers for data value tracing.
295 enum TraceType {
296 BYTE,
297 HALF,
298 WORD,
299 DWORD
300 // DFLOAT - Floats may have printing issues due to paired lwc1's
301 };
302
303 void TraceRegWr(int64_t value);
304 void TraceMemWr(int64_t addr, int64_t value, TraceType t);
305 void TraceMemRd(int64_t addr, int64_t value);
252 306
253 // Operations depending on endianness. 307 // Operations depending on endianness.
254 // Get Double Higher / Lower word. 308 // Get Double Higher / Lower word.
255 inline int32_t GetDoubleHIW(double* addr); 309 inline int32_t GetDoubleHIW(double* addr);
256 inline int32_t GetDoubleLOW(double* addr); 310 inline int32_t GetDoubleLOW(double* addr);
257 // Set Double Higher / Lower word. 311 // Set Double Higher / Lower word.
258 inline int32_t SetDoubleHIW(double* addr); 312 inline int32_t SetDoubleHIW(double* addr);
259 inline int32_t SetDoubleLOW(double* addr); 313 inline int32_t SetDoubleLOW(double* addr);
260 314
261 // Executing is handled based on the instruction type. 315 // Executing is handled based on the instruction type.
262 void DecodeTypeRegister(Instruction* instr); 316 void DecodeTypeRegister(Instruction* instr);
263 317
264 // Helper function for DecodeTypeRegister. 318 // Helper function for DecodeTypeRegister.
265 void ConfigureTypeRegister(Instruction* instr, 319 void ConfigureTypeRegister(Instruction* instr,
266 int32_t* alu_out, 320 int64_t* alu_out,
267 int64_t* i64hilo, 321 int64_t* i64hilo,
268 uint64_t* u64hilo, 322 uint64_t* u64hilo,
269 int32_t* next_pc, 323 int64_t* next_pc,
270 int32_t* return_addr_reg, 324 int64_t* return_addr_reg,
271 bool* do_interrupt); 325 bool* do_interrupt,
326 int64_t* result128H,
327 int64_t* result128L);
272 328
273 void DecodeTypeImmediate(Instruction* instr); 329 void DecodeTypeImmediate(Instruction* instr);
274 void DecodeTypeJump(Instruction* instr); 330 void DecodeTypeJump(Instruction* instr);
275 331
276 // Used for breakpoints and traps. 332 // Used for breakpoints and traps.
277 void SoftwareInterrupt(Instruction* instr); 333 void SoftwareInterrupt(Instruction* instr);
278 334
279 // Stop helper functions. 335 // Stop helper functions.
280 bool IsWatchpoint(uint32_t code); 336 bool IsWatchpoint(uint64_t code);
281 void PrintWatchpoint(uint32_t code); 337 void PrintWatchpoint(uint64_t code);
282 void HandleStop(uint32_t code, Instruction* instr); 338 void HandleStop(uint64_t code, Instruction* instr);
283 bool IsStopInstruction(Instruction* instr); 339 bool IsStopInstruction(Instruction* instr);
284 bool IsEnabledStop(uint32_t code); 340 bool IsEnabledStop(uint64_t code);
285 void EnableStop(uint32_t code); 341 void EnableStop(uint64_t code);
286 void DisableStop(uint32_t code); 342 void DisableStop(uint64_t code);
287 void IncreaseStopCounter(uint32_t code); 343 void IncreaseStopCounter(uint64_t code);
288 void PrintStopInfo(uint32_t code); 344 void PrintStopInfo(uint64_t code);
289 345
290 346
291 // Executes one instruction. 347 // Executes one instruction.
292 void InstructionDecode(Instruction* instr); 348 void InstructionDecode(Instruction* instr);
293 // Execute one instruction placed in a branch delay slot. 349 // Execute one instruction placed in a branch delay slot.
294 void BranchDelayInstructionDecode(Instruction* instr) { 350 void BranchDelayInstructionDecode(Instruction* instr) {
295 if (instr->InstructionBits() == nopInstr) { 351 if (instr->InstructionBits() == nopInstr) {
296 // Short-cut generic nop instructions. They are always valid and they 352 // Short-cut generic nop instructions. They are always valid and they
297 // never change the simulator state. 353 // never change the simulator state.
298 return; 354 return;
(...skipping 30 matching lines...) Expand all
329 ExternalReference::Type type); 385 ExternalReference::Type type);
330 386
331 // Handle arguments and return value for runtime FP functions. 387 // Handle arguments and return value for runtime FP functions.
332 void GetFpArgs(double* x, double* y, int32_t* z); 388 void GetFpArgs(double* x, double* y, int32_t* z);
333 void SetFpResult(const double& result); 389 void SetFpResult(const double& result);
334 390
335 void CallInternal(byte* entry); 391 void CallInternal(byte* entry);
336 392
337 // Architecture state. 393 // Architecture state.
338 // Registers. 394 // Registers.
339 int32_t registers_[kNumSimuRegisters]; 395 int64_t registers_[kNumSimuRegisters];
340 // Coprocessor Registers. 396 // Coprocessor Registers.
341 int32_t FPUregisters_[kNumFPURegisters]; 397 int64_t FPUregisters_[kNumFPURegisters];
342 // FPU control register. 398 // FPU control register.
343 uint32_t FCSR_; 399 uint32_t FCSR_;
344 400
345 // Simulator support. 401 // Simulator support.
346 // Allocate 1MB for stack. 402 // Allocate 1MB for stack.
347 static const size_t stack_size_ = 1 * 1024*1024; 403 size_t stack_size_;
348 char* stack_; 404 char* stack_;
349 bool pc_modified_; 405 bool pc_modified_;
350 int icount_; 406 int64_t icount_;
351 int break_count_; 407 int break_count_;
408 EmbeddedVector<char, 128> trace_buf_;
352 409
353 // Debugger input. 410 // Debugger input.
354 char* last_debugger_input_; 411 char* last_debugger_input_;
355 412
356 // Icache simulation. 413 // Icache simulation.
357 v8::internal::HashMap* i_cache_; 414 v8::internal::HashMap* i_cache_;
358 415
359 v8::internal::Isolate* isolate_; 416 v8::internal::Isolate* isolate_;
360 417
361 // Registered breakpoints. 418 // Registered breakpoints.
(...skipping 14 matching lines...) Expand all
376 StopCountAndDesc watched_stops_[kMaxStopCode + 1]; 433 StopCountAndDesc watched_stops_[kMaxStopCode + 1];
377 }; 434 };
378 435
379 436
380 // When running with the simulator transition into simulated execution at this 437 // When running with the simulator transition into simulated execution at this
381 // point. 438 // point.
382 #define CALL_GENERATED_CODE(entry, p0, p1, p2, p3, p4) \ 439 #define CALL_GENERATED_CODE(entry, p0, p1, p2, p3, p4) \
383 reinterpret_cast<Object*>(Simulator::current(Isolate::Current())->Call( \ 440 reinterpret_cast<Object*>(Simulator::current(Isolate::Current())->Call( \
384 FUNCTION_ADDR(entry), 5, p0, p1, p2, p3, p4)) 441 FUNCTION_ADDR(entry), 5, p0, p1, p2, p3, p4))
385 442
443 #ifdef MIPS_ABI_N64
444 #define CALL_GENERATED_REGEXP_CODE(entry, p0, p1, p2, p3, p4, p5, p6, p7, p8) \
445 Simulator::current(Isolate::Current())->Call( \
446 entry, 10, p0, p1, p2, p3, p4, p5, p6, p7, NULL, p8)
447 #else // Must be O32 Abi.
386 #define CALL_GENERATED_REGEXP_CODE(entry, p0, p1, p2, p3, p4, p5, p6, p7, p8) \ 448 #define CALL_GENERATED_REGEXP_CODE(entry, p0, p1, p2, p3, p4, p5, p6, p7, p8) \
387 Simulator::current(Isolate::Current())->Call( \ 449 Simulator::current(Isolate::Current())->Call( \
388 entry, 10, p0, p1, p2, p3, NULL, p4, p5, p6, p7, p8) 450 entry, 10, p0, p1, p2, p3, NULL, p4, p5, p6, p7, p8)
451 #endif // MIPS_ABI_N64
389 452
390 453
391 // The simulator has its own stack. Thus it has a different stack limit from 454 // The simulator has its own stack. Thus it has a different stack limit from
392 // the C-based native code. Setting the c_limit to indicate a very small 455 // the C-based native code. Setting the c_limit to indicate a very small
393 // stack cause stack overflow errors, since the simulator ignores the input. 456 // stack cause stack overflow errors, since the simulator ignores the input.
394 // This is unlikely to be an issue in practice, though it might cause testing 457 // This is unlikely to be an issue in practice, though it might cause testing
395 // trouble down the line. 458 // trouble down the line.
396 class SimulatorStack : public v8::internal::AllStatic { 459 class SimulatorStack : public v8::internal::AllStatic {
397 public: 460 public:
398 static inline uintptr_t JsLimitFromCLimit(Isolate* isolate, 461 static inline uintptr_t JsLimitFromCLimit(Isolate* isolate,
399 uintptr_t c_limit) { 462 uintptr_t c_limit) {
400 return Simulator::current(isolate)->StackLimit(); 463 return Simulator::current(isolate)->StackLimit();
401 } 464 }
402 465
403 static inline uintptr_t RegisterCTryCatch(uintptr_t try_catch_address) { 466 static inline uintptr_t RegisterCTryCatch(uintptr_t try_catch_address) {
404 Simulator* sim = Simulator::current(Isolate::Current()); 467 Simulator* sim = Simulator::current(Isolate::Current());
405 return sim->PushAddress(try_catch_address); 468 return sim->PushAddress(try_catch_address);
406 } 469 }
407 470
408 static inline void UnregisterCTryCatch() { 471 static inline void UnregisterCTryCatch() {
409 Simulator::current(Isolate::Current())->PopAddress(); 472 Simulator::current(Isolate::Current())->PopAddress();
410 } 473 }
411 }; 474 };
412 475
413 } } // namespace v8::internal 476 } } // namespace v8::internal
414 477
415 #endif // !defined(USE_SIMULATOR) 478 #endif // !defined(USE_SIMULATOR)
416 #endif // V8_MIPS_SIMULATOR_MIPS_H_ 479 #endif // V8_MIPS_SIMULATOR_MIPS_H_
OLDNEW
« no previous file with comments | « src/mips64/regexp-macro-assembler-mips64.cc ('k') | src/mips64/simulator-mips64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698