OLD | NEW |
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 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 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 // a retry after GC failure. | 303 // a retry after GC failure. |
304 Object* TryTailCallStub(CodeStub* stub); | 304 Object* TryTailCallStub(CodeStub* stub); |
305 | 305 |
306 // Return from a code stub after popping its arguments. | 306 // Return from a code stub after popping its arguments. |
307 void StubReturn(int argc); | 307 void StubReturn(int argc); |
308 | 308 |
309 // Call a runtime routine. | 309 // Call a runtime routine. |
310 // Eventually this should be used for all C calls. | 310 // Eventually this should be used for all C calls. |
311 void CallRuntime(Runtime::Function* f, int num_arguments); | 311 void CallRuntime(Runtime::Function* f, int num_arguments); |
312 | 312 |
| 313 // Call a runtime function, returning the RuntimeStub object called. |
| 314 // Try to generate the stub code if necessary. Do not perform a GC |
| 315 // but instead return a retry after GC failure. |
| 316 Object* TryCallRuntime(Runtime::Function* f, int num_arguments); |
| 317 |
313 // Convenience function: Same as above, but takes the fid instead. | 318 // Convenience function: Same as above, but takes the fid instead. |
314 void CallRuntime(Runtime::FunctionId id, int num_arguments); | 319 void CallRuntime(Runtime::FunctionId id, int num_arguments); |
315 | 320 |
| 321 // Convenience function: Same as above, but takes the fid instead. |
| 322 Object* TryCallRuntime(Runtime::FunctionId id, int num_arguments); |
| 323 |
316 // Tail call of a runtime routine (jump). | 324 // Tail call of a runtime routine (jump). |
317 // Like JumpToRuntime, but also takes care of passing the number | 325 // Like JumpToRuntime, but also takes care of passing the number |
318 // of arguments. | 326 // of arguments. |
319 void TailCallRuntime(const ExternalReference& ext, | 327 void TailCallRuntime(const ExternalReference& ext, |
320 int num_arguments, | 328 int num_arguments, |
321 int result_size); | 329 int result_size); |
322 | 330 |
323 void PushHandleScope(Register scratch); | 331 void PushHandleScope(Register scratch); |
324 | 332 |
325 // Pops a handle scope using the specified scratch register and | 333 // Pops a handle scope using the specified scratch register and |
326 // ensuring that saved register, it is not no_reg, is left unchanged. | 334 // ensuring that saved register, it is not no_reg, is left unchanged. |
327 void PopHandleScope(Register saved, Register scratch); | 335 void PopHandleScope(Register saved, Register scratch); |
328 | 336 |
| 337 // As PopHandleScope, but does not perform a GC. Instead, returns a |
| 338 // retry after GC failure object if GC is necessary. |
| 339 Object* TryPopHandleScope(Register saved, Register scratch); |
| 340 |
329 // Jump to a runtime routine. | 341 // Jump to a runtime routine. |
330 void JumpToRuntime(const ExternalReference& ext); | 342 void JumpToRuntime(const ExternalReference& ext); |
331 | 343 |
332 | 344 |
333 // --------------------------------------------------------------------------- | 345 // --------------------------------------------------------------------------- |
334 // Utilities | 346 // Utilities |
335 | 347 |
336 void Ret(); | 348 void Ret(); |
337 | 349 |
338 void Drop(int element_count); | 350 void Drop(int element_count); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
411 | 423 |
412 void EnterExitFramePrologue(ExitFrame::Mode mode); | 424 void EnterExitFramePrologue(ExitFrame::Mode mode); |
413 void EnterExitFrameEpilogue(ExitFrame::Mode mode, int argc); | 425 void EnterExitFrameEpilogue(ExitFrame::Mode mode, int argc); |
414 | 426 |
415 // Allocation support helpers. | 427 // Allocation support helpers. |
416 void LoadAllocationTopHelper(Register result, | 428 void LoadAllocationTopHelper(Register result, |
417 Register result_end, | 429 Register result_end, |
418 Register scratch, | 430 Register scratch, |
419 AllocationFlags flags); | 431 AllocationFlags flags); |
420 void UpdateAllocationTopHelper(Register result_end, Register scratch); | 432 void UpdateAllocationTopHelper(Register result_end, Register scratch); |
| 433 |
| 434 // Helper for PopHandleScope. Allowed to perform a GC and returns |
| 435 // NULL if gc_allowed. Does not perform a GC if !gc_allowed, and |
| 436 // possibly returns a failure object indicating an allocation failure. |
| 437 Object* PopHandleScopeHelper(Register saved, |
| 438 Register scratch, |
| 439 bool gc_allowed); |
421 }; | 440 }; |
422 | 441 |
423 | 442 |
424 // The code patcher is used to patch (typically) small parts of code e.g. for | 443 // The code patcher is used to patch (typically) small parts of code e.g. for |
425 // debugging and other types of instrumentation. When using the code patcher | 444 // debugging and other types of instrumentation. When using the code patcher |
426 // the exact number of bytes specified must be emitted. Is not legal to emit | 445 // the exact number of bytes specified must be emitted. Is not legal to emit |
427 // relocation information. If any of these constraints are violated it causes | 446 // relocation information. If any of these constraints are violated it causes |
428 // an assertion. | 447 // an assertion. |
429 class CodePatcher { | 448 class CodePatcher { |
430 public: | 449 public: |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 } \ | 496 } \ |
478 masm-> | 497 masm-> |
479 #else | 498 #else |
480 #define ACCESS_MASM(masm) masm-> | 499 #define ACCESS_MASM(masm) masm-> |
481 #endif | 500 #endif |
482 | 501 |
483 | 502 |
484 } } // namespace v8::internal | 503 } } // namespace v8::internal |
485 | 504 |
486 #endif // V8_IA32_MACRO_ASSEMBLER_IA32_H_ | 505 #endif // V8_IA32_MACRO_ASSEMBLER_IA32_H_ |
OLD | NEW |