 Chromium Code Reviews
 Chromium Code Reviews Issue 11574027:
  Use direct jump and call instruction for X64 when the deoptimization entries are in the code range  (Closed) 
  Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
    
  
    Issue 11574027:
  Use direct jump and call instruction for X64 when the deoptimization entries are in the code range  (Closed) 
  Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/| Index: src/assembler.h | 
| =================================================================== | 
| --- src/assembler.h (revision 13219) | 
| +++ src/assembler.h (working copy) | 
| @@ -241,9 +241,15 @@ | 
| EXTERNAL_REFERENCE, // The address of an external C++ function. | 
| INTERNAL_REFERENCE, // An address inside the same function. | 
| +#if defined(V8_TARGET_ARCH_X64) | 
| 
Sven Panne
2012/12/14 08:20:11
Similar to the comment in the related CL, I will s
 | 
| + // Marks a deopt entry. Only used on X64. | 
| + // It uses a custom noncompact encoding. | 
| + DEOPT_ENTRY, | 
| +#else | 
| // Marks a constant pool. Only used on ARM. | 
| // It uses a custom noncompact encoding. | 
| CONST_POOL, | 
| +#endif | 
| // add more as needed | 
| // Pseudo-types | 
| @@ -252,7 +258,11 @@ | 
| CODE_AGE_SEQUENCE, // Not stored in RelocInfo array, used explictly by | 
| // code aging. | 
| FIRST_REAL_RELOC_MODE = CODE_TARGET, | 
| +#if defined(V8_TARGET_ARCH_X64) | 
| 
Sven Panne
2012/12/14 08:20:11
see above
 | 
| + LAST_REAL_RELOC_MODE = DEOPT_ENTRY, | 
| +#else | 
| LAST_REAL_RELOC_MODE = CONST_POOL, | 
| +#endif | 
| FIRST_PSEUDO_RELOC_MODE = CODE_AGE_SEQUENCE, | 
| LAST_PSEUDO_RELOC_MODE = CODE_AGE_SEQUENCE, | 
| LAST_CODE_ENUM = DEBUG_BREAK, | 
| @@ -297,9 +307,15 @@ | 
| static inline bool IsComment(Mode mode) { | 
| return mode == COMMENT; | 
| } | 
| +#if defined(V8_TARGET_ARCH_X64) | 
| 
Sven Panne
2012/12/14 08:20:11
see above
 | 
| + static inline bool IsDeoptEntry(Mode mode) { | 
| + return mode == DEOPT_ENTRY; | 
| + } | 
| +#else | 
| static inline bool IsConstPool(Mode mode) { | 
| return mode == CONST_POOL; | 
| } | 
| +#endif | 
| static inline bool IsPosition(Mode mode) { | 
| return mode == POSITION || mode == STATEMENT_POSITION; | 
| } | 
| @@ -343,6 +359,9 @@ | 
| WriteBarrierMode mode = UPDATE_WRITE_BARRIER)); | 
| INLINE(Object* target_object()); | 
| INLINE(Handle<Object> target_object_handle(Assembler* origin)); | 
| +#if defined(V8_TARGET_ARCH_X64) | 
| 
Sven Panne
2012/12/14 08:20:11
see above
 | 
| + INLINE(Address target_deopt_entry(Assembler* origin)); | 
| +#endif | 
| INLINE(Object** target_object_address()); | 
| INLINE(void set_target_object(Object* target, | 
| WriteBarrierMode mode = UPDATE_WRITE_BARRIER)); | 
| @@ -477,7 +496,11 @@ | 
| inline void WriteTaggedPC(uint32_t pc_delta, int tag); | 
| inline void WriteExtraTaggedPC(uint32_t pc_delta, int extra_tag); | 
| inline void WriteExtraTaggedIntData(int data_delta, int top_tag); | 
| +#if !defined(V8_TARGET_ARCH_X64) | 
| 
Sven Panne
2012/12/14 08:20:11
see above
 | 
| inline void WriteExtraTaggedConstPoolData(int data); | 
| +#else | 
| + inline void WriteExtraTaggedDeoptEntryData(int data); | 
| +#endif | 
| inline void WriteExtraTaggedData(intptr_t data_delta, int top_tag); | 
| inline void WriteTaggedData(intptr_t data_delta, int tag); | 
| inline void WriteExtraTag(int extra_tag, int top_tag); |