Mercurial > hg > graal-jvmci-8
comparison src/share/vm/asm/codeBuffer.hpp @ 1762:0878d7bae69f
6961697: move nmethod constants section before instruction section
Summary: This is a preparation for 6961690.
Reviewed-by: kvn, never
author | twisti |
---|---|
date | Fri, 27 Aug 2010 01:51:27 -0700 |
parents | 3e8fbc61cee8 |
children | d55217dc206f |
comparison
equal
deleted
inserted
replaced
1761:14b92b91f460 | 1762:0878d7bae69f |
---|---|
287 void operator delete(void* p) { ShouldNotCallThis(); } | 287 void operator delete(void* p) { ShouldNotCallThis(); } |
288 | 288 |
289 public: | 289 public: |
290 typedef int csize_t; // code size type; would be size_t except for history | 290 typedef int csize_t; // code size type; would be size_t except for history |
291 enum { | 291 enum { |
292 // Here is the list of all possible sections, in order of ascending address. | 292 // Here is the list of all possible sections. The order reflects |
293 // the final layout. | |
294 SECT_FIRST = 0, | |
295 SECT_CONSTS = SECT_FIRST, // Non-instruction data: Floats, jump tables, etc. | |
293 SECT_INSTS, // Executable instructions. | 296 SECT_INSTS, // Executable instructions. |
294 SECT_STUBS, // Outbound trampolines for supporting call sites. | 297 SECT_STUBS, // Outbound trampolines for supporting call sites. |
295 SECT_CONSTS, // Non-instruction data: Floats, jump tables, etc. | |
296 SECT_LIMIT, SECT_NONE = -1 | 298 SECT_LIMIT, SECT_NONE = -1 |
297 }; | 299 }; |
298 | 300 |
299 private: | 301 private: |
300 enum { | 302 enum { |
302 sect_mask = (1<<sect_bits)-1 | 304 sect_mask = (1<<sect_bits)-1 |
303 }; | 305 }; |
304 | 306 |
305 const char* _name; | 307 const char* _name; |
306 | 308 |
309 CodeSection _consts; // constants, jump tables | |
307 CodeSection _insts; // instructions (the main section) | 310 CodeSection _insts; // instructions (the main section) |
308 CodeSection _stubs; // stubs (call site support), deopt, exception handling | 311 CodeSection _stubs; // stubs (call site support), deopt, exception handling |
309 CodeSection _consts; // constants, jump tables | |
310 | 312 |
311 CodeBuffer* _before_expand; // dead buffer, from before the last expansion | 313 CodeBuffer* _before_expand; // dead buffer, from before the last expansion |
312 | 314 |
313 BufferBlob* _blob; // optional buffer in CodeCache for generated code | 315 BufferBlob* _blob; // optional buffer in CodeCache for generated code |
314 address _total_start; // first address of combined memory buffer | 316 address _total_start; // first address of combined memory buffer |
332 _decode_begin = NULL; | 334 _decode_begin = NULL; |
333 _overflow_arena = NULL; | 335 _overflow_arena = NULL; |
334 } | 336 } |
335 | 337 |
336 void initialize(address code_start, csize_t code_size) { | 338 void initialize(address code_start, csize_t code_size) { |
339 _consts.initialize_outer(this, SECT_CONSTS); | |
337 _insts.initialize_outer(this, SECT_INSTS); | 340 _insts.initialize_outer(this, SECT_INSTS); |
338 _stubs.initialize_outer(this, SECT_STUBS); | 341 _stubs.initialize_outer(this, SECT_STUBS); |
339 _consts.initialize_outer(this, SECT_CONSTS); | |
340 _total_start = code_start; | 342 _total_start = code_start; |
341 _total_size = code_size; | 343 _total_size = code_size; |
342 // Initialize the main section: | 344 // Initialize the main section: |
343 _insts.initialize(code_start, code_size); | 345 _insts.initialize(code_start, code_size); |
344 assert(!_stubs.is_allocated(), "no garbage here"); | 346 assert(!_stubs.is_allocated(), "no garbage here"); |
412 // constructor 4 is equivalent to calling constructor 3 and then | 414 // constructor 4 is equivalent to calling constructor 3 and then |
413 // calling this method. It's been factored out for convenience of | 415 // calling this method. It's been factored out for convenience of |
414 // construction. | 416 // construction. |
415 void initialize(csize_t code_size, csize_t locs_size); | 417 void initialize(csize_t code_size, csize_t locs_size); |
416 | 418 |
419 CodeSection* consts() { return &_consts; } | |
417 CodeSection* insts() { return &_insts; } | 420 CodeSection* insts() { return &_insts; } |
418 CodeSection* stubs() { return &_stubs; } | 421 CodeSection* stubs() { return &_stubs; } |
419 CodeSection* consts() { return &_consts; } | 422 |
420 | 423 // present sections in order; return NULL at end; consts is #0, etc. |
421 // present sections in order; return NULL at end; insts is #0, etc. | |
422 CodeSection* code_section(int n) { | 424 CodeSection* code_section(int n) { |
423 // This makes the slightly questionable but portable assumption that | 425 // This makes the slightly questionable but portable assumption |
424 // the various members (_insts, _stubs, etc.) are adjacent in the | 426 // that the various members (_consts, _insts, _stubs, etc.) are |
425 // layout of CodeBuffer. | 427 // adjacent in the layout of CodeBuffer. |
426 CodeSection* cs = &_insts + n; | 428 CodeSection* cs = &_consts + n; |
427 assert(cs->index() == n || !cs->is_allocated(), "sanity"); | 429 assert(cs->index() == n || !cs->is_allocated(), "sanity"); |
428 return cs; | 430 return cs; |
429 } | 431 } |
430 const CodeSection* code_section(int n) const { // yucky const stuff | 432 const CodeSection* code_section(int n) const { // yucky const stuff |
431 return ((CodeBuffer*)this)->code_section(n); | 433 return ((CodeBuffer*)this)->code_section(n); |
482 // Allocated size in all sections, when aligned and concatenated | 484 // Allocated size in all sections, when aligned and concatenated |
483 // (this is the eventual state of the content in its final | 485 // (this is the eventual state of the content in its final |
484 // CodeBlob). | 486 // CodeBlob). |
485 csize_t total_content_size() const; | 487 csize_t total_content_size() const; |
486 | 488 |
487 // combined offset (relative to start of insts) of given address, | 489 // Combined offset (relative to start of first section) of given |
488 // as eventually found in the final CodeBlob | 490 // section, as eventually found in the final CodeBlob. |
489 csize_t total_offset_of(address addr) const; | 491 csize_t total_offset_of(CodeSection* cs) const; |
490 | 492 |
491 // allocated size of all relocation data, including index, rounded up | 493 // allocated size of all relocation data, including index, rounded up |
492 csize_t total_relocation_size() const; | 494 csize_t total_relocation_size() const; |
493 | 495 |
494 // allocated size of any and all recorded oops | 496 // allocated size of any and all recorded oops |