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 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 INTERNAL_REFERENCE, // An address inside the same function. | 204 INTERNAL_REFERENCE, // An address inside the same function. |
205 | 205 |
206 // Marks a constant pool. Only used on ARM. | 206 // Marks a constant pool. Only used on ARM. |
207 // It uses a custom noncompact encoding. | 207 // It uses a custom noncompact encoding. |
208 CONST_POOL, | 208 CONST_POOL, |
209 | 209 |
210 // add more as needed | 210 // add more as needed |
211 // Pseudo-types | 211 // Pseudo-types |
212 NUMBER_OF_MODES, // There are at most 15 modes with noncompact encoding. | 212 NUMBER_OF_MODES, // There are at most 15 modes with noncompact encoding. |
213 NONE, // never recorded | 213 NONE, // never recorded |
| 214 CODE_AGE_SEQUENCE, // Not stored in RelocInfo array, used explictly by |
| 215 // code aging. |
| 216 FIRST_REAL_RELOC_MODE = CODE_TARGET, |
| 217 LAST_REAL_RELOC_MODE = CONST_POOL, |
| 218 FIRST_PSEUDO_RELOC_MODE = CODE_AGE_SEQUENCE, |
| 219 LAST_PSEUDO_RELOC_MODE = CODE_AGE_SEQUENCE, |
214 LAST_CODE_ENUM = DEBUG_BREAK, | 220 LAST_CODE_ENUM = DEBUG_BREAK, |
215 LAST_GCED_ENUM = GLOBAL_PROPERTY_CELL, | 221 LAST_GCED_ENUM = GLOBAL_PROPERTY_CELL, |
216 // Modes <= LAST_COMPACT_ENUM are guaranteed to have compact encoding. | 222 // Modes <= LAST_COMPACT_ENUM are guaranteed to have compact encoding. |
217 LAST_COMPACT_ENUM = CODE_TARGET_WITH_ID, | 223 LAST_COMPACT_ENUM = CODE_TARGET_WITH_ID, |
218 LAST_STANDARD_NONCOMPACT_ENUM = INTERNAL_REFERENCE | 224 LAST_STANDARD_NONCOMPACT_ENUM = INTERNAL_REFERENCE |
219 }; | 225 }; |
220 | 226 |
221 | 227 |
222 RelocInfo() {} | 228 RelocInfo() {} |
223 | 229 |
224 RelocInfo(byte* pc, Mode rmode, intptr_t data, Code* host) | 230 RelocInfo(byte* pc, Mode rmode, intptr_t data, Code* host) |
225 : pc_(pc), rmode_(rmode), data_(data), host_(host) { | 231 : pc_(pc), rmode_(rmode), data_(data), host_(host) { |
226 } | 232 } |
227 | 233 |
| 234 static inline bool IsRealRelocMode(Mode mode) { |
| 235 return mode >= FIRST_REAL_RELOC_MODE && |
| 236 mode <= LAST_REAL_RELOC_MODE; |
| 237 } |
| 238 static inline bool IsPseudoRelocMode(Mode mode) { |
| 239 ASSERT(!IsRealRelocMode(mode)); |
| 240 return mode >= FIRST_PSEUDO_RELOC_MODE && |
| 241 mode <= LAST_PSEUDO_RELOC_MODE; |
| 242 } |
228 static inline bool IsConstructCall(Mode mode) { | 243 static inline bool IsConstructCall(Mode mode) { |
229 return mode == CONSTRUCT_CALL; | 244 return mode == CONSTRUCT_CALL; |
230 } | 245 } |
231 static inline bool IsCodeTarget(Mode mode) { | 246 static inline bool IsCodeTarget(Mode mode) { |
232 return mode <= LAST_CODE_ENUM; | 247 return mode <= LAST_CODE_ENUM; |
233 } | 248 } |
234 static inline bool IsEmbeddedObject(Mode mode) { | 249 static inline bool IsEmbeddedObject(Mode mode) { |
235 return mode == EMBEDDED_OBJECT; | 250 return mode == EMBEDDED_OBJECT; |
236 } | 251 } |
237 // Is the relocation mode affected by GC? | 252 // Is the relocation mode affected by GC? |
(...skipping 17 matching lines...) Expand all Loading... |
255 } | 270 } |
256 static inline bool IsExternalReference(Mode mode) { | 271 static inline bool IsExternalReference(Mode mode) { |
257 return mode == EXTERNAL_REFERENCE; | 272 return mode == EXTERNAL_REFERENCE; |
258 } | 273 } |
259 static inline bool IsInternalReference(Mode mode) { | 274 static inline bool IsInternalReference(Mode mode) { |
260 return mode == INTERNAL_REFERENCE; | 275 return mode == INTERNAL_REFERENCE; |
261 } | 276 } |
262 static inline bool IsDebugBreakSlot(Mode mode) { | 277 static inline bool IsDebugBreakSlot(Mode mode) { |
263 return mode == DEBUG_BREAK_SLOT; | 278 return mode == DEBUG_BREAK_SLOT; |
264 } | 279 } |
| 280 static inline bool IsCodeAgeSequence(Mode mode) { |
| 281 return mode == CODE_AGE_SEQUENCE; |
| 282 } |
265 static inline int ModeMask(Mode mode) { return 1 << mode; } | 283 static inline int ModeMask(Mode mode) { return 1 << mode; } |
266 | 284 |
267 // Accessors | 285 // Accessors |
268 byte* pc() const { return pc_; } | 286 byte* pc() const { return pc_; } |
269 void set_pc(byte* pc) { pc_ = pc; } | 287 void set_pc(byte* pc) { pc_ = pc; } |
270 Mode rmode() const { return rmode_; } | 288 Mode rmode() const { return rmode_; } |
271 intptr_t data() const { return data_; } | 289 intptr_t data() const { return data_; } |
272 Code* host() const { return host_; } | 290 Code* host() const { return host_; } |
273 | 291 |
274 // Apply a relocation by delta bytes | 292 // Apply a relocation by delta bytes |
(...skipping 12 matching lines...) Expand all Loading... |
287 WriteBarrierMode mode = UPDATE_WRITE_BARRIER)); | 305 WriteBarrierMode mode = UPDATE_WRITE_BARRIER)); |
288 INLINE(Object* target_object()); | 306 INLINE(Object* target_object()); |
289 INLINE(Handle<Object> target_object_handle(Assembler* origin)); | 307 INLINE(Handle<Object> target_object_handle(Assembler* origin)); |
290 INLINE(Object** target_object_address()); | 308 INLINE(Object** target_object_address()); |
291 INLINE(void set_target_object(Object* target, | 309 INLINE(void set_target_object(Object* target, |
292 WriteBarrierMode mode = UPDATE_WRITE_BARRIER)); | 310 WriteBarrierMode mode = UPDATE_WRITE_BARRIER)); |
293 INLINE(JSGlobalPropertyCell* target_cell()); | 311 INLINE(JSGlobalPropertyCell* target_cell()); |
294 INLINE(Handle<JSGlobalPropertyCell> target_cell_handle()); | 312 INLINE(Handle<JSGlobalPropertyCell> target_cell_handle()); |
295 INLINE(void set_target_cell(JSGlobalPropertyCell* cell, | 313 INLINE(void set_target_cell(JSGlobalPropertyCell* cell, |
296 WriteBarrierMode mode = UPDATE_WRITE_BARRIER)); | 314 WriteBarrierMode mode = UPDATE_WRITE_BARRIER)); |
297 | 315 INLINE(Code* code_age_stub()); |
| 316 INLINE(void set_code_age_stub(Code* stub)); |
298 | 317 |
299 // Read the address of the word containing the target_address in an | 318 // Read the address of the word containing the target_address in an |
300 // instruction stream. What this means exactly is architecture-independent. | 319 // instruction stream. What this means exactly is architecture-independent. |
301 // The only architecture-independent user of this function is the serializer. | 320 // The only architecture-independent user of this function is the serializer. |
302 // The serializer uses it to find out how many raw bytes of instruction to | 321 // The serializer uses it to find out how many raw bytes of instruction to |
303 // output before the next target. Architecture-independent code shouldn't | 322 // output before the next target. Architecture-independent code shouldn't |
304 // dereference the pointer it gets back from this. | 323 // dereference the pointer it gets back from this. |
305 INLINE(Address target_address_address()); | 324 INLINE(Address target_address_address()); |
306 // This indicates how much space a target takes up when deserializing a code | 325 // This indicates how much space a target takes up when deserializing a code |
307 // stream. For most architectures this is just the size of a pointer. For | 326 // stream. For most architectures this is just the size of a pointer. For |
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
483 void ReadTaggedPosition(); | 502 void ReadTaggedPosition(); |
484 | 503 |
485 // If the given mode is wanted, set it in rinfo_ and return true. | 504 // If the given mode is wanted, set it in rinfo_ and return true. |
486 // Else return false. Used for efficiently skipping unwanted modes. | 505 // Else return false. Used for efficiently skipping unwanted modes. |
487 bool SetMode(RelocInfo::Mode mode) { | 506 bool SetMode(RelocInfo::Mode mode) { |
488 return (mode_mask_ & (1 << mode)) ? (rinfo_.rmode_ = mode, true) : false; | 507 return (mode_mask_ & (1 << mode)) ? (rinfo_.rmode_ = mode, true) : false; |
489 } | 508 } |
490 | 509 |
491 byte* pos_; | 510 byte* pos_; |
492 byte* end_; | 511 byte* end_; |
| 512 byte* code_age_sequence_; |
493 RelocInfo rinfo_; | 513 RelocInfo rinfo_; |
494 bool done_; | 514 bool done_; |
495 int mode_mask_; | 515 int mode_mask_; |
496 int last_id_; | 516 int last_id_; |
497 int last_position_; | 517 int last_position_; |
498 DISALLOW_COPY_AND_ASSIGN(RelocIterator); | 518 DISALLOW_COPY_AND_ASSIGN(RelocIterator); |
499 }; | 519 }; |
500 | 520 |
501 | 521 |
502 //------------------------------------------------------------------------------ | 522 //------------------------------------------------------------------------------ |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
591 static ExternalReference perform_gc_function(Isolate* isolate); | 611 static ExternalReference perform_gc_function(Isolate* isolate); |
592 static ExternalReference fill_heap_number_with_random_function( | 612 static ExternalReference fill_heap_number_with_random_function( |
593 Isolate* isolate); | 613 Isolate* isolate); |
594 static ExternalReference random_uint32_function(Isolate* isolate); | 614 static ExternalReference random_uint32_function(Isolate* isolate); |
595 static ExternalReference transcendental_cache_array_address(Isolate* isolate); | 615 static ExternalReference transcendental_cache_array_address(Isolate* isolate); |
596 static ExternalReference delete_handle_scope_extensions(Isolate* isolate); | 616 static ExternalReference delete_handle_scope_extensions(Isolate* isolate); |
597 | 617 |
598 static ExternalReference get_date_field_function(Isolate* isolate); | 618 static ExternalReference get_date_field_function(Isolate* isolate); |
599 static ExternalReference date_cache_stamp(Isolate* isolate); | 619 static ExternalReference date_cache_stamp(Isolate* isolate); |
600 | 620 |
| 621 static ExternalReference get_make_code_young_function(Isolate* isolate); |
| 622 |
601 // Deoptimization support. | 623 // Deoptimization support. |
602 static ExternalReference new_deoptimizer_function(Isolate* isolate); | 624 static ExternalReference new_deoptimizer_function(Isolate* isolate); |
603 static ExternalReference compute_output_frames_function(Isolate* isolate); | 625 static ExternalReference compute_output_frames_function(Isolate* isolate); |
604 | 626 |
605 // Static data in the keyed lookup cache. | 627 // Static data in the keyed lookup cache. |
606 static ExternalReference keyed_lookup_cache_keys(Isolate* isolate); | 628 static ExternalReference keyed_lookup_cache_keys(Isolate* isolate); |
607 static ExternalReference keyed_lookup_cache_field_offsets(Isolate* isolate); | 629 static ExternalReference keyed_lookup_cache_field_offsets(Isolate* isolate); |
608 | 630 |
609 // Static variable Heap::roots_array_start() | 631 // Static variable Heap::roots_array_start() |
610 static ExternalReference roots_array_start(Isolate* isolate); | 632 static ExternalReference roots_array_start(Isolate* isolate); |
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
890 public: | 912 public: |
891 NullCallWrapper() { } | 913 NullCallWrapper() { } |
892 virtual ~NullCallWrapper() { } | 914 virtual ~NullCallWrapper() { } |
893 virtual void BeforeCall(int call_size) const { } | 915 virtual void BeforeCall(int call_size) const { } |
894 virtual void AfterCall() const { } | 916 virtual void AfterCall() const { } |
895 }; | 917 }; |
896 | 918 |
897 } } // namespace v8::internal | 919 } } // namespace v8::internal |
898 | 920 |
899 #endif // V8_ASSEMBLER_H_ | 921 #endif // V8_ASSEMBLER_H_ |
OLD | NEW |