OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 // Executes ARM instructions until the PC reaches end_sim_pc. | 198 // Executes ARM instructions until the PC reaches end_sim_pc. |
199 void Execute(); | 199 void Execute(); |
200 | 200 |
201 // Call on program start. | 201 // Call on program start. |
202 static void Initialize(Isolate* isolate); | 202 static void Initialize(Isolate* isolate); |
203 | 203 |
204 // V8 generally calls into generated JS code with 5 parameters and into | 204 // V8 generally calls into generated JS code with 5 parameters and into |
205 // generated RegExp code with 7 parameters. This is a convenience function, | 205 // generated RegExp code with 7 parameters. This is a convenience function, |
206 // which sets up the simulator state and grabs the result on return. | 206 // which sets up the simulator state and grabs the result on return. |
207 int32_t Call(byte* entry, int argument_count, ...); | 207 int32_t Call(byte* entry, int argument_count, ...); |
| 208 // Alternative: call a 2-argument double function. |
| 209 double CallFP(byte* entry, double d0, double d1); |
208 | 210 |
209 // Push an address onto the JS stack. | 211 // Push an address onto the JS stack. |
210 uintptr_t PushAddress(uintptr_t address); | 212 uintptr_t PushAddress(uintptr_t address); |
211 | 213 |
212 // Pop an address from the JS stack. | 214 // Pop an address from the JS stack. |
213 uintptr_t PopAddress(); | 215 uintptr_t PopAddress(); |
214 | 216 |
215 // Debugger input. | 217 // Debugger input. |
216 void set_last_debugger_input(char* input); | 218 void set_last_debugger_input(char* input); |
217 char* last_debugger_input() { return last_debugger_input_; } | 219 char* last_debugger_input() { return last_debugger_input_; } |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
349 void GetFpArgs(double* x, int32_t* y); | 351 void GetFpArgs(double* x, int32_t* y); |
350 void SetFpResult(const double& result); | 352 void SetFpResult(const double& result); |
351 void TrashCallerSaveRegisters(); | 353 void TrashCallerSaveRegisters(); |
352 | 354 |
353 template<class ReturnType, int register_size> | 355 template<class ReturnType, int register_size> |
354 ReturnType GetFromVFPRegister(int reg_index); | 356 ReturnType GetFromVFPRegister(int reg_index); |
355 | 357 |
356 template<class InputType, int register_size> | 358 template<class InputType, int register_size> |
357 void SetVFPRegister(int reg_index, const InputType& value); | 359 void SetVFPRegister(int reg_index, const InputType& value); |
358 | 360 |
| 361 void CallInternal(byte* entry); |
| 362 |
359 // Architecture state. | 363 // Architecture state. |
360 // Saturating instructions require a Q flag to indicate saturation. | 364 // Saturating instructions require a Q flag to indicate saturation. |
361 // There is currently no way to read the CPSR directly, and thus read the Q | 365 // There is currently no way to read the CPSR directly, and thus read the Q |
362 // flag, so this is left unimplemented. | 366 // flag, so this is left unimplemented. |
363 int32_t registers_[16]; | 367 int32_t registers_[16]; |
364 bool n_flag_; | 368 bool n_flag_; |
365 bool z_flag_; | 369 bool z_flag_; |
366 bool c_flag_; | 370 bool c_flag_; |
367 bool v_flag_; | 371 bool v_flag_; |
368 | 372 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
453 | 457 |
454 static inline void UnregisterCTryCatch() { | 458 static inline void UnregisterCTryCatch() { |
455 Simulator::current(Isolate::Current())->PopAddress(); | 459 Simulator::current(Isolate::Current())->PopAddress(); |
456 } | 460 } |
457 }; | 461 }; |
458 | 462 |
459 } } // namespace v8::internal | 463 } } // namespace v8::internal |
460 | 464 |
461 #endif // !defined(USE_SIMULATOR) | 465 #endif // !defined(USE_SIMULATOR) |
462 #endif // V8_ARM_SIMULATOR_ARM_H_ | 466 #endif // V8_ARM_SIMULATOR_ARM_H_ |
OLD | NEW |