OLD | NEW |
1 // Copyright (c) 1994-2006 Sun Microsystems Inc. | 1 // Copyright (c) 1994-2006 Sun Microsystems Inc. |
2 // All Rights Reserved. | 2 // All Rights Reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // met: |
7 // | 7 // |
8 // - Redistributions of source code must retain the above copyright notice, | 8 // - Redistributions of source code must retain the above copyright notice, |
9 // this list of conditions and the following disclaimer. | 9 // this list of conditions and the following disclaimer. |
10 // | 10 // |
(...skipping 465 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
476 virtual ~Assembler() { } | 476 virtual ~Assembler() { } |
477 | 477 |
478 // GetCode emits any pending (non-emitted) code and fills the descriptor | 478 // GetCode emits any pending (non-emitted) code and fills the descriptor |
479 // desc. GetCode() is idempotent; it returns the same result if no other | 479 // desc. GetCode() is idempotent; it returns the same result if no other |
480 // Assembler functions are invoked in between GetCode() calls. | 480 // Assembler functions are invoked in between GetCode() calls. |
481 void GetCode(CodeDesc* desc); | 481 void GetCode(CodeDesc* desc); |
482 | 482 |
483 // Read/Modify the code target in the branch/call instruction at pc. | 483 // Read/Modify the code target in the branch/call instruction at pc. |
484 inline static Address target_address_at(Address pc, Address constant_pool); | 484 inline static Address target_address_at(Address pc, Address constant_pool); |
485 inline static void set_target_address_at( | 485 inline static void set_target_address_at( |
486 Address pc, Address constant_pool, Address target, | 486 Isolate* isolate, Address pc, Address constant_pool, Address target, |
487 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED); | 487 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED); |
488 static inline Address target_address_at(Address pc, Code* code) { | 488 static inline Address target_address_at(Address pc, Code* code) { |
489 Address constant_pool = code ? code->constant_pool() : NULL; | 489 Address constant_pool = code ? code->constant_pool() : NULL; |
490 return target_address_at(pc, constant_pool); | 490 return target_address_at(pc, constant_pool); |
491 } | 491 } |
492 static inline void set_target_address_at(Address pc, | 492 static inline void set_target_address_at( |
493 Code* code, | 493 Isolate* isolate, Address pc, Code* code, Address target, |
494 Address target, | 494 ICacheFlushMode icache_flush_mode = FLUSH_ICACHE_IF_NEEDED) { |
495 ICacheFlushMode icache_flush_mode = | |
496 FLUSH_ICACHE_IF_NEEDED) { | |
497 Address constant_pool = code ? code->constant_pool() : NULL; | 495 Address constant_pool = code ? code->constant_pool() : NULL; |
498 set_target_address_at(pc, constant_pool, target); | 496 set_target_address_at(isolate, pc, constant_pool, target); |
499 } | 497 } |
500 | 498 |
501 // Return the code target address at a call site from the return address | 499 // Return the code target address at a call site from the return address |
502 // of that call in the instruction stream. | 500 // of that call in the instruction stream. |
503 inline static Address target_address_from_return_address(Address pc); | 501 inline static Address target_address_from_return_address(Address pc); |
504 | 502 |
505 // This sets the branch destination (which is in the instruction on x86). | 503 // This sets the branch destination (which is in the instruction on x86). |
506 // This is for calls and branches within generated code. | 504 // This is for calls and branches within generated code. |
507 inline static void deserialization_set_special_target_at( | 505 inline static void deserialization_set_special_target_at( |
508 Address instruction_payload, Code* code, Address target) { | 506 Isolate* isolate, Address instruction_payload, Code* code, |
509 set_target_address_at(instruction_payload, code, target); | 507 Address target) { |
| 508 set_target_address_at(isolate, instruction_payload, code, target); |
510 } | 509 } |
511 | 510 |
512 // This sets the internal reference at the pc. | 511 // This sets the internal reference at the pc. |
513 inline static void deserialization_set_target_internal_reference_at( | 512 inline static void deserialization_set_target_internal_reference_at( |
514 Address pc, Address target, | 513 Isolate* isolate, Address pc, Address target, |
515 RelocInfo::Mode mode = RelocInfo::INTERNAL_REFERENCE); | 514 RelocInfo::Mode mode = RelocInfo::INTERNAL_REFERENCE); |
516 | 515 |
517 static const int kSpecialTargetSize = kPointerSize; | 516 static const int kSpecialTargetSize = kPointerSize; |
518 | 517 |
519 // Distance between the address of the code target in the call instruction | 518 // Distance between the address of the code target in the call instruction |
520 // and the return address | 519 // and the return address |
521 static const int kCallTargetAddressOffset = kPointerSize; | 520 static const int kCallTargetAddressOffset = kPointerSize; |
522 | 521 |
523 static const int kCallInstructionLength = 5; | 522 static const int kCallInstructionLength = 5; |
524 | 523 |
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1074 Assembler* assembler_; | 1073 Assembler* assembler_; |
1075 #ifdef DEBUG | 1074 #ifdef DEBUG |
1076 int space_before_; | 1075 int space_before_; |
1077 #endif | 1076 #endif |
1078 }; | 1077 }; |
1079 | 1078 |
1080 } // namespace internal | 1079 } // namespace internal |
1081 } // namespace v8 | 1080 } // namespace v8 |
1082 | 1081 |
1083 #endif // V8_X87_ASSEMBLER_X87_H_ | 1082 #endif // V8_X87_ASSEMBLER_X87_H_ |
OLD | NEW |