Skip to content

Instantly share code, notes, and snippets.

@timo
Created March 30, 2016 00:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save timo/23a1edfe46f9d0afb0b5a01f6f39ce4a to your computer and use it in GitHub Desktop.
Save timo/23a1edfe46f9d0afb0b5a01f6f39ce4a to your computer and use it in GitHub Desktop.
partial pahole output for MoarVM's libmoar.so
struct MVMCompUnitBody {
MVMuint8 * data_start; /* 0 8 */
MVMuint32 data_size; /* 8 4 */
/* XXX 4 bytes hole, try to pack */
MVMObject * * coderefs; /* 16 8 */
MVMuint32 num_frames; /* 24 4 */
MVMuint32 orig_frames; /* 28 4 */
MVMStaticFrame * main_frame; /* 32 8 */
MVMStaticFrame * load_frame; /* 40 8 */
MVMStaticFrame * deserialize_frame; /* 48 8 */
MVMCallsite * * callsites; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
MVMuint32 num_callsites; /* 64 4 */
MVMuint32 orig_callsites; /* 68 4 */
MVMuint16 max_callsite_size; /* 72 2 */
MVMuint16 num_extops; /* 74 2 */
/* XXX 4 bytes hole, try to pack */
MVMExtOpRecord * extops; /* 80 8 */
MVMString * * strings; /* 88 8 */
MVMuint32 num_strings; /* 96 4 */
MVMuint32 orig_strings; /* 100 4 */
MVMuint32 * string_heap_fast_table; /* 104 8 */
MVMuint32 string_heap_fast_table_top; /* 112 4 */
/* XXX 4 bytes hole, try to pack */
MVMuint8 * string_heap_start; /* 120 8 */
/* --- cacheline 2 boundary (128 bytes) --- */
MVMuint8 * string_heap_read_limit; /* 128 8 */
MVMint32 serialized_size; /* 136 4 */
/* XXX 4 bytes hole, try to pack */
MVMuint8 * serialized; /* 144 8 */
MVMSerializationContext * * scs; /* 152 8 */
MVMuint32 num_scs; /* 160 4 */
MVMDeallocate deallocate; /* 164 4 */
MVMSerializationContextBody * * scs_to_resolve; /* 168 8 */
MVMint32 * sc_handle_idxs; /* 176 8 */
MVMHLLConfig * hll_config; /* 184 8 */
/* --- cacheline 3 boundary (192 bytes) --- */
MVMString * hll_name; /* 192 8 */
MVMString * filename; /* 200 8 */
void * handle; /* 208 8 */
MVMObject * update_mutex; /* 216 8 */
MVMuint16 bytecode_version; /* 224 2 */
/* size: 232, cachelines: 4, members: 34 */
/* sum members: 210, holes: 4, sum holes: 16 */
/* padding: 6 */
/* last cacheline: 40 bytes */
};
struct MVMExtOpRecord {
MVMString * name; /* 0 8 */
MVMOpInfo * info; /* 8 8 */
MVMExtOpFunc * func; /* 16 8 */
MVMuint16 operand_bytes; /* 24 2 */
MVMuint16 no_jit; /* 26 2 */
MVMuint16 allocating; /* 28 2 */
MVMuint8 operand_descriptor[8]; /* 30 8 */
/* XXX 2 bytes hole, try to pack */
MVMExtOpSpesh * spesh; /* 40 8 */
MVMExtOpFactDiscover * discover; /* 48 8 */
/* size: 56, cachelines: 1, members: 9 */
/* sum members: 54, holes: 1, sum holes: 2 */
/* last cacheline: 56 bytes */
};
struct MVMFrame {
MVMThreadContext * tc; /* 0 8 */
MVMRegister * env; /* 8 8 */
MVMRegister * work; /* 16 8 */
MVMRegister * args; /* 24 8 */
MVMCallsite * cur_args_callsite; /* 32 8 */
MVMFrame * outer; /* 40 8 */
MVMFrame * caller; /* 48 8 */
MVMStaticFrame * static_info; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
MVMObject * code_ref; /* 64 8 */
MVMArgProcContext params; /* 72 40 */
size_t ref_count; /* 112 8 */
MVMint32 refd_by_object; /* 120 4 */
/* XXX 4 bytes hole, try to pack */
/* --- cacheline 2 boundary (128 bytes) --- */
MVMuint8 * effective_bytecode; /* 128 8 */
MVMFrameHandler * effective_handlers; /* 136 8 */
MVMCollectable * * effective_spesh_slots; /* 144 8 */
MVMCollectable * * spesh_log_slots; /* 152 8 */
MVMSpeshCandidate * spesh_cand; /* 160 8 */
MVMuint8 * return_address; /* 168 8 */
MVMRegister * return_value; /* 176 8 */
MVMReturnType return_type; /* 184 4 */
/* XXX 4 bytes hole, try to pack */
/* --- cacheline 3 boundary (192 bytes) --- */
MVMSpecialReturn special_return; /* 192 8 */
MVMSpecialReturn special_unwind; /* 200 8 */
void * special_return_data; /* 208 8 */
MVMSpecialReturnDataMark mark_special_return_data; /* 216 8 */
size_t gc_seq_number; /* 224 8 */
MVMuint8 * throw_address; /* 232 8 */
MVMContinuationTag * continuation_tags; /* 240 8 */
MVMObject * context_object; /* 248 8 */
/* --- cacheline 4 boundary (256 bytes) --- */
MVMString * dynlex_cache_name; /* 256 8 */
MVMRegister * dynlex_cache_reg; /* 264 8 */
MVMuint16 dynlex_cache_type; /* 272 2 */
MVMuint16 allocd_work; /* 274 2 */
MVMuint16 allocd_env; /* 276 2 */
MVMuint8 keep_caller; /* 278 1 */
MVMuint8 in_continuation; /* 279 1 */
MVMuint8 flags; /* 280 1 */
MVMint8 spesh_log_idx; /* 281 1 */
MVMuint8 osr_counter; /* 282 1 */
/* XXX 5 bytes hole, try to pack */
void * jit_entry_label; /* 288 8 */
/* size: 296, cachelines: 5, members: 39 */
/* sum members: 283, holes: 3, sum holes: 13 */
/* last cacheline: 40 bytes */
};
struct MVMLexicalRegistry {
MVMString * key; /* 0 8 */
MVMuint32 value; /* 8 4 */
/* XXX 4 bytes hole, try to pack */
UT_hash_handle hash_handle; /* 16 40 */
/* size: 56, cachelines: 1, members: 3 */
/* sum members: 52, holes: 1, sum holes: 4 */
/* last cacheline: 56 bytes */
};
struct MVMNGFTrieNodeEntry {
MVMCodepoint code; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
MVMNFGTrieNode * node; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* sum members: 12, holes: 1, sum holes: 4 */
/* last cacheline: 16 bytes */
};
struct MVMOpInfo {
MVMuint16 opcode; /* 0 2 */
/* XXX 6 bytes hole, try to pack */
const char * name; /* 8 8 */
char mark[2]; /* 16 2 */
MVMuint16 num_operands; /* 18 2 */
MVMuint8 pure; /* 20 1 */
MVMuint8 deopt_point; /* 21 1 */
MVMuint8 no_inline; /* 22 1 */
MVMuint8 jittivity; /* 23 1 */
MVMuint8 operands[8]; /* 24 8 */
/* size: 32, cachelines: 1, members: 9 */
/* sum members: 26, holes: 1, sum holes: 6 */
/* last cacheline: 32 bytes */
};
struct MVMSpeshGraph {
MVMStaticFrame * sf; /* 0 8 */
MVMCallsite * cs; /* 8 8 */
MVMuint8 * bytecode; /* 16 8 */
MVMFrameHandler * handlers; /* 24 8 */
MVMuint32 bytecode_size; /* 32 4 */
MVMuint32 num_handlers; /* 36 4 */
MVMSpeshBB * entry; /* 40 8 */
MVMSpeshFacts * * facts; /* 48 8 */
MVMuint16 * fact_counts; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
MVMSpeshGuard * arg_guards; /* 64 8 */
MVMint32 num_arg_guards; /* 72 4 */
/* XXX 4 bytes hole, try to pack */
MVMSpeshLogGuard * log_guards; /* 80 8 */
MVMint32 num_log_guards; /* 88 4 */
/* XXX 4 bytes hole, try to pack */
MVMSpeshMemBlock * mem_block; /* 96 8 */
MVMCollectable * * spesh_slots; /* 104 8 */
MVMint32 num_spesh_slots; /* 112 4 */
MVMint32 alloc_spesh_slots; /* 116 4 */
MVMint32 * deopt_addrs; /* 120 8 */
/* --- cacheline 2 boundary (128 bytes) --- */
MVMint32 num_deopt_addrs; /* 128 4 */
MVMint32 alloc_deopt_addrs; /* 132 4 */
MVMSpeshInline * inlines; /* 136 8 */
MVMint32 num_inlines; /* 144 4 */
MVMint32 num_log_slots; /* 148 4 */
MVMCollectable * * log_slots; /* 152 8 */
MVMint32 num_bbs; /* 160 4 */
/* XXX 4 bytes hole, try to pack */
MVMuint16 * local_types; /* 168 8 */
MVMuint16 * lexical_types; /* 176 8 */
MVMuint16 num_locals; /* 184 2 */
MVMuint16 num_lexicals; /* 186 2 */
MVMuint16 num_temps; /* 188 2 */
MVMuint16 alloc_temps; /* 190 2 */
/* --- cacheline 3 boundary (192 bytes) --- */
MVMSpeshTemporary * temps; /* 192 8 */
MVMOpInfo * phi_infos; /* 200 8 */
MVMSpeshCandidate * cand; /* 208 8 */
/* size: 216, cachelines: 4, members: 34 */
/* sum members: 204, holes: 3, sum holes: 12 */
/* last cacheline: 24 bytes */
};
struct MVMSpeshCandidate {
MVMCallsite * cs; /* 0 8 */
MVMSpeshGuard * guards; /* 8 8 */
MVMuint32 num_guards; /* 16 4 */
MVMuint32 bytecode_size; /* 20 4 */
MVMuint8 * bytecode; /* 24 8 */
MVMFrameHandler * handlers; /* 32 8 */
MVMCollectable * * spesh_slots; /* 40 8 */
MVMuint32 num_spesh_slots; /* 48 4 */
MVMuint32 num_deopts; /* 52 4 */
MVMint32 * deopts; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
size_t log_enter_idx; /* 64 8 */
size_t log_exits_remaining; /* 72 8 */
MVMSpeshGraph * sg; /* 80 8 */
MVMCollectable * * log_slots; /* 88 8 */
MVMuint32 num_log_slots; /* 96 4 */
MVMint32 num_inlines; /* 100 4 */
MVMSpeshInline * inlines; /* 104 8 */
MVMuint16 * local_types; /* 112 8 */
MVMuint16 * lexical_types; /* 120 8 */
/* --- cacheline 2 boundary (128 bytes) --- */
MVMuint16 num_locals; /* 128 2 */
MVMuint16 num_lexicals; /* 130 2 */
MVMuint32 work_size; /* 132 4 */
MVMuint32 env_size; /* 136 4 */
MVMuint32 num_handlers; /* 140 4 */
MVMuint32 osr_logging; /* 144 4 */
/* XXX 4 bytes hole, try to pack */
MVMJitCode * jitcode; /* 152 8 */
/* size: 160, cachelines: 3, members: 26 */
/* sum members: 156, holes: 1, sum holes: 4 */
/* last cacheline: 32 bytes */
};
struct MVMSpeshInline {
MVMuint32 start; /* 0 4 */
MVMuint32 end; /* 4 4 */
MVMCode * code; /* 8 8 */
MVMuint16 locals_start; /* 16 2 */
MVMuint16 lexicals_start; /* 18 2 */
MVMuint16 res_reg; /* 20 2 */
/* XXX 2 bytes hole, try to pack */
MVMReturnType res_type; /* 24 4 */
MVMuint32 return_deopt_idx; /* 28 4 */
MVMSpeshGraph * g; /* 32 8 */
/* size: 40, cachelines: 1, members: 9 */
/* sum members: 38, holes: 1, sum holes: 2 */
/* last cacheline: 40 bytes */
};
struct MVMStaticFrameBody {
MVMuint8 * bytecode; /* 0 8 */
MVMCompUnit * cu; /* 8 8 */
MVMuint16 * local_types; /* 16 8 */
MVMuint16 * lexical_types; /* 24 8 */
MVMLexicalRegistry * lexical_names; /* 32 8 */
MVMLexicalRegistry * * lexical_names_list; /* 40 8 */
MVMRegister * static_env; /* 48 8 */
MVMuint8 * static_env_flags; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
MVMuint32 has_state_vars; /* 64 4 */
MVMuint32 instrumentation_level; /* 68 4 */
MVMuint32 invocations; /* 72 4 */
MVMuint32 spesh_threshold; /* 76 4 */
MVMSpeshCandidate * spesh_candidates; /* 80 8 */
MVMuint32 num_spesh_candidates; /* 88 4 */
MVMuint32 env_size; /* 92 4 */
MVMuint32 work_size; /* 96 4 */
MVMuint32 bytecode_size; /* 100 4 */
MVMuint32 num_locals; /* 104 4 */
MVMuint32 num_lexicals; /* 108 4 */
MVMFrameHandler * handlers; /* 112 8 */
MVMuint32 num_handlers; /* 120 4 */
/* XXX 4 bytes hole, try to pack */
/* --- cacheline 2 boundary (128 bytes) --- */
MVMString * cuuid; /* 128 8 */
MVMString * name; /* 136 8 */
MVMStaticFrame * outer; /* 144 8 */
MVMCode * static_code; /* 152 8 */
MVMuint32 pool_index; /* 160 4 */
MVMuint32 num_annotations; /* 164 4 */
MVMuint8 * annotations_data; /* 168 8 */
MVMuint8 has_exit_handler; /* 176 1 */
MVMuint8 is_thunk; /* 177 1 */
MVMuint8 fully_deserialized; /* 178 1 */
/* XXX 5 bytes hole, try to pack */
MVMuint8 * orig_bytecode; /* 184 8 */
/* --- cacheline 3 boundary (192 bytes) --- */
MVMuint8 * frame_data_pos; /* 192 8 */
MVMuint8 * frame_static_lex_pos; /* 200 8 */
MVMint32 code_obj_sc_dep_idx; /* 208 4 */
MVMint32 code_obj_sc_idx; /* 212 4 */
MVMStaticFrameInstrumentation * instrumentation; /* 216 8 */
/* size: 224, cachelines: 4, members: 37 */
/* sum members: 215, holes: 2, sum holes: 9 */
/* last cacheline: 32 bytes */
};
struct MVMNativeCallback {
void * cb; /* 0 8 */
MVMObject * target; /* 8 8 */
MVMThreadContext * tc; /* 16 8 */
MVMint16 * typeinfos; /* 24 8 */
MVMObject * * types; /* 32 8 */
MVMint32 num_types; /* 40 4 */
/* XXX 4 bytes hole, try to pack */
MVMCallsite * cs; /* 48 8 */
MVMNativeCallback * next; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
/* size: 64, cachelines: 1, members: 8 */
/* sum members: 60, holes: 1, sum holes: 4 */
};
struct MVMJitCode {
MVMJitFunc func_ptr; /* 0 8 */
size_t size; /* 8 8 */
MVMuint8 * bytecode; /* 16 8 */
MVMStaticFrame * sf; /* 24 8 */
MVMint32 num_labels; /* 32 4 */
/* XXX 4 bytes hole, try to pack */
void * * labels; /* 40 8 */
MVMint32 num_bbs; /* 48 4 */
/* XXX 4 bytes hole, try to pack */
MVMint32 * bb_labels; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
MVMint32 num_deopts; /* 64 4 */
/* XXX 4 bytes hole, try to pack */
MVMJitDeopt * deopts; /* 72 8 */
MVMint32 num_inlines; /* 80 4 */
/* XXX 4 bytes hole, try to pack */
MVMJitInline * inlines; /* 88 8 */
MVMint32 num_handlers; /* 96 4 */
/* XXX 4 bytes hole, try to pack */
MVMJitHandler * handlers; /* 104 8 */
MVMint32 seq_nr; /* 112 4 */
/* size: 120, cachelines: 2, members: 15 */
/* sum members: 96, holes: 5, sum holes: 20 */
/* padding: 4 */
/* last cacheline: 56 bytes */
};
struct MVMHeapSnapshotCollectable {
MVMuint16 kind; /* 0 2 */
MVMuint16 collectable_size; /* 2 2 */
MVMuint32 type_or_frame_index; /* 4 4 */
MVMuint32 num_refs; /* 8 4 */
/* XXX 4 bytes hole, try to pack */
MVMuint64 refs_start; /* 16 8 */
MVMuint64 unmanaged_size; /* 24 8 */
/* size: 32, cachelines: 1, members: 6 */
/* sum members: 28, holes: 1, sum holes: 4 */
/* last cacheline: 32 bytes */
};
struct MVMHeapSnapshotWorkItem {
MVMuint16 kind; /* 0 2 */
/* XXX 6 bytes hole, try to pack */
MVMuint64 col_idx; /* 8 8 */
void * target; /* 16 8 */
/* size: 24, cachelines: 1, members: 3 */
/* sum members: 18, holes: 1, sum holes: 6 */
/* last cacheline: 24 bytes */
};
struct MVMExceptionBody {
MVMString * message; /* 0 8 */
MVMObject * payload; /* 8 8 */
MVMint32 category; /* 16 4 */
MVMuint8 return_after_unwind; /* 20 1 */
/* XXX 3 bytes hole, try to pack */
MVMFrame * origin; /* 24 8 */
MVMuint8 * resume_addr; /* 32 8 */
void * jit_resume_label; /* 40 8 */
/* size: 48, cachelines: 1, members: 7 */
/* sum members: 45, holes: 1, sum holes: 3 */
/* last cacheline: 48 bytes */
};
struct MVMIterBody {
MVMuint32 mode; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
MVMObject * target; /* 8 8 */
union {
struct {
MVMHashEntry * curr; /* 16 8 */
MVMHashEntry * next; /* 24 8 */
unsigned int bucket_state; /* 32 4 */
} hash_state; /* 24 */
struct {
MVMint64 index; /* 16 8 */
MVMint64 limit; /* 24 8 */
} array_state; /* 16 */
}; /* 16 24 */
/* size: 40, cachelines: 1, members: 3 */
/* sum members: 36, holes: 1, sum holes: 4 */
/* last cacheline: 40 bytes */
};
struct MVMNativeCallBody {
char * lib_name; /* 0 8 */
DLLib * lib_handle; /* 8 8 */
char * sym_name; /* 16 8 */
void * entry_point; /* 24 8 */
MVMint16 convention; /* 32 2 */
MVMint16 num_args; /* 34 2 */
MVMint16 ret_type; /* 36 2 */
/* XXX 2 bytes hole, try to pack */
MVMint16 * arg_types; /* 40 8 */
MVMObject * * arg_info; /* 48 8 */
/* size: 56, cachelines: 1, members: 9 */
/* sum members: 54, holes: 1, sum holes: 2 */
/* last cacheline: 56 bytes */
};
struct MVMNormalizer {
MVMNormalization form; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
MVMCodepoint * buffer; /* 8 8 */
MVMint32 buffer_size; /* 16 4 */
MVMint32 buffer_start; /* 20 4 */
MVMint32 buffer_end; /* 24 4 */
MVMint32 buffer_norm_end; /* 28 4 */
MVMCodepoint first_significant; /* 32 4 */
MVMint32 quick_check_property; /* 36 4 */
MVMint32 translate_newlines; /* 40 4 */
/* size: 48, cachelines: 1, members: 9 */
/* sum members: 40, holes: 1, sum holes: 4 */
/* padding: 4 */
/* last cacheline: 48 bytes */
};
struct MVMDecodeStream {
MVMDecodeStreamBytes * bytes_head; /* 0 8 */
MVMDecodeStreamBytes * bytes_tail; /* 8 8 */
MVMDecodeStreamChars * chars_head; /* 16 8 */
MVMDecodeStreamChars * chars_tail; /* 24 8 */
MVMint64 abs_byte_pos; /* 32 8 */
MVMint32 bytes_head_pos; /* 40 4 */
MVMint32 chars_head_pos; /* 44 4 */
MVMint32 encoding; /* 48 4 */
/* XXX 4 bytes hole, try to pack */
MVMNormalizer norm; /* 56 48 */
/* --- cacheline 1 boundary (64 bytes) was 40 bytes ago --- */
/* size: 104, cachelines: 2, members: 9 */
/* sum members: 100, holes: 1, sum holes: 4 */
/* last cacheline: 40 bytes */
};
struct MVMDecodeStreamBytes {
char * bytes; /* 0 8 */
MVMint32 length; /* 8 4 */
/* XXX 4 bytes hole, try to pack */
MVMDecodeStreamBytes * next; /* 16 8 */
/* size: 24, cachelines: 1, members: 3 */
/* sum members: 20, holes: 1, sum holes: 4 */
/* last cacheline: 24 bytes */
};
struct MVMDecodeStreamChars {
MVMGrapheme32 * chars; /* 0 8 */
MVMint32 length; /* 8 4 */
/* XXX 4 bytes hole, try to pack */
MVMDecodeStreamChars * next; /* 16 8 */
/* size: 24, cachelines: 1, members: 3 */
/* sum members: 20, holes: 1, sum holes: 4 */
/* last cacheline: 24 bytes */
};
struct MVMIOSyncStreamData {
MVMint8 is_tty; /* 0 1 */
/* XXX 7 bytes hole, try to pack */
uv_stream_t * handle; /* 8 8 */
MVMint64 encoding; /* 16 8 */
MVMint64 eof; /* 24 8 */
MVMDecodeStream * ds; /* 32 8 */
MVMThreadContext * cur_tc; /* 40 8 */
MVMint64 total_bytes_written; /* 48 8 */
MVMDecodeStreamSeparators sep_spec; /* 56 24 */
/* --- cacheline 1 boundary (64 bytes) was 16 bytes ago --- */
MVMint32 translate_newlines; /* 80 4 */
/* size: 88, cachelines: 2, members: 9 */
/* sum members: 77, holes: 1, sum holes: 7 */
/* padding: 4 */
/* last cacheline: 24 bytes */
};
struct MVMMultiArityCache {
MVMuint8 num_entries; /* 0 1 */
/* XXX 7 bytes hole, try to pack */
MVMint64 * type_ids; /* 8 8 */
MVMuint8 * named_ok; /* 16 8 */
MVMObject * * results; /* 24 8 */
/* size: 32, cachelines: 1, members: 4 */
/* sum members: 25, holes: 1, sum holes: 7 */
/* last cacheline: 32 bytes */
};
struct MVMGraphemeIter {
union {
MVMGrapheme32 * blob_32; /* 8 */
MVMGraphemeASCII * blob_ascii; /* 8 */
MVMGrapheme8 * blob_8; /* 8 */
void * any; /* 8 */
} active_blob; /* 0 8 */
MVMuint16 blob_type; /* 8 2 */
MVMuint16 strands_remaining; /* 10 2 */
MVMStringIndex pos; /* 12 4 */
MVMStringIndex end; /* 16 4 */
MVMStringIndex start; /* 20 4 */
MVMuint32 repetitions; /* 24 4 */
/* XXX 4 bytes hole, try to pack */
MVMStringStrand * next_strand; /* 32 8 */
/* size: 40, cachelines: 1, members: 8 */
/* sum members: 36, holes: 1, sum holes: 4 */
/* last cacheline: 40 bytes */
};
struct MVMSpeshCode {
MVMuint8 * bytecode; /* 0 8 */
MVMuint32 bytecode_size; /* 8 4 */
/* XXX 4 bytes hole, try to pack */
MVMFrameHandler * handlers; /* 16 8 */
/* size: 24, cachelines: 1, members: 3 */
/* sum members: 20, holes: 1, sum holes: 4 */
/* last cacheline: 24 bytes */
};
struct MVMJitGraph {
MVMSpeshGraph * sg; /* 0 8 */
MVMJitNode * first_node; /* 8 8 */
MVMJitNode * last_node; /* 16 8 */
MVMint32 num_labels; /* 24 4 */
MVMint32 num_bbs; /* 28 4 */
MVMint32 * bb_labels; /* 32 8 */
MVMint32 num_deopts; /* 40 4 */
/* XXX 4 bytes hole, try to pack */
MVMJitDeopt * deopts; /* 48 8 */
MVMint32 num_handlers; /* 56 4 */
/* XXX 4 bytes hole, try to pack */
/* --- cacheline 1 boundary (64 bytes) --- */
MVMJitHandler * handlers; /* 64 8 */
MVMint32 num_inlines; /* 72 4 */
/* XXX 4 bytes hole, try to pack */
MVMJitInline * inlines; /* 80 8 */
/* size: 88, cachelines: 2, members: 12 */
/* sum members: 76, holes: 3, sum holes: 12 */
/* last cacheline: 24 bytes */
};
struct MVMJitNode {
MVMJitNode * next; /* 0 8 */
MVMJitNodeType type; /* 8 4 */
/* XXX 4 bytes hole, try to pack */
union {
MVMJitPrimitive prim; /* 8 */
MVMJitCallC call; /* 32 */
MVMJitBranch branch; /* 16 */
MVMJitLabel label; /* 4 */
MVMJitGuard guard; /* 16 */
MVMJitInvoke invoke; /* 32 */
MVMJitJumpList jumplist; /* 32 */
MVMJitControl control; /* 16 */
} u; /* 16 32 */
/* size: 48, cachelines: 1, members: 3 */
/* sum members: 44, holes: 1, sum holes: 4 */
/* last cacheline: 48 bytes */
};
struct MVMJitBranch {
MVMint32 dest; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
MVMSpeshIns * ins; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* sum members: 12, holes: 1, sum holes: 4 */
/* last cacheline: 16 bytes */
};
struct MVMJitCallArg {
MVMJitArgType type; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
union {
MVMint64 lit_i64; /* 8 */
MVMnum64 lit_n64; /* 8 */
MVMJitInterpVar ivar; /* 4 */
MVMint16 reg; /* 2 */
void * ptr; /* 8 */
} v; /* 8 8 */
/* size: 16, cachelines: 1, members: 2 */
/* sum members: 12, holes: 1, sum holes: 4 */
/* last cacheline: 16 bytes */
};
struct MVMJitInvoke {
MVMint16 callsite_idx; /* 0 2 */
MVMint16 arg_count; /* 2 2 */
/* XXX 4 bytes hole, try to pack */
MVMSpeshIns * * arg_ins; /* 8 8 */
MVMReturnType return_type; /* 16 4 */
MVMint16 return_register; /* 20 2 */
MVMint16 code_register; /* 22 2 */
MVMint16 spesh_cand; /* 24 2 */
MVMint8 is_fast; /* 26 1 */
/* XXX 1 byte hole, try to pack */
MVMint32 reentry_label; /* 28 4 */
/* size: 32, cachelines: 1, members: 9 */
/* sum members: 27, holes: 2, sum holes: 5 */
/* last cacheline: 32 bytes */
};
struct MVMJitJumpList {
MVMint64 num_labels; /* 0 8 */
MVMint16 reg; /* 8 2 */
/* XXX 6 bytes hole, try to pack */
MVMint32 * in_labels; /* 16 8 */
MVMint32 * out_labels; /* 24 8 */
/* size: 32, cachelines: 1, members: 4 */
/* sum members: 26, holes: 1, sum holes: 6 */
/* last cacheline: 32 bytes */
};
struct MVMUnicodeNameRegistry {
char * name; /* 0 8 */
MVMGrapheme32 codepoint; /* 8 4 */
/* XXX 4 bytes hole, try to pack */
UT_hash_handle hash_handle; /* 16 40 */
/* size: 56, cachelines: 1, members: 3 */
/* sum members: 52, holes: 1, sum holes: 4 */
/* last cacheline: 56 bytes */
};
struct MVMSerializationReader {
MVMSerializationRoot root; /* 0 152 */
/* --- cacheline 2 boundary (128 bytes) was 24 bytes ago --- */
MVMint32 stables_data_offset; /* 152 4 */
MVMint32 objects_data_offset; /* 156 4 */
MVMint32 contexts_data_offset; /* 160 4 */
MVMint32 param_interns_data_offset; /* 164 4 */
char * stables_data_end; /* 168 8 */
char * objects_data_end; /* 176 8 */
char * contexts_data_end; /* 184 8 */
/* --- cacheline 3 boundary (192 bytes) --- */
char * param_interns_data_end; /* 192 8 */
char * * cur_read_buffer; /* 200 8 */
MVMint32 * cur_read_offset; /* 208 8 */
char * * cur_read_end; /* 216 8 */
MVMObject * codes_list; /* 224 8 */
MVMuint32 num_static_codes; /* 232 4 */
/* XXX 4 bytes hole, try to pack */
MVMFrame * * contexts; /* 240 8 */
MVMDeserializeWorklist wl_objects; /* 248 16 */
/* --- cacheline 4 boundary (256 bytes) was 8 bytes ago --- */
MVMDeserializeWorklist wl_stables; /* 264 16 */
MVMuint32 working; /* 280 4 */
/* XXX 4 bytes hole, try to pack */
MVMObject * current_object; /* 288 8 */
char * data; /* 296 8 */
MVMuint32 data_needs_free; /* 304 4 */
/* size: 312, cachelines: 5, members: 21 */
/* sum members: 300, holes: 2, sum holes: 8 */
/* padding: 4 */
/* last cacheline: 56 bytes */
};
struct MVMSerializationRoot {
MVMint32 version; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
MVMSerializationContext * sc; /* 8 8 */
MVMSerializationContext * * dependent_scs; /* 16 8 */
char * dependencies_table; /* 24 8 */
MVMint32 num_dependencies; /* 32 4 */
MVMint32 num_stables; /* 36 4 */
char * stables_table; /* 40 8 */
char * stables_data; /* 48 8 */
char * objects_table; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
char * objects_data; /* 64 8 */
MVMint32 num_objects; /* 72 4 */
MVMint32 num_closures; /* 76 4 */
char * closures_table; /* 80 8 */
char * contexts_table; /* 88 8 */
char * contexts_data; /* 96 8 */
MVMint32 num_contexts; /* 104 4 */
MVMint32 num_repos; /* 108 4 */
char * repos_table; /* 112 8 */
MVMint32 num_param_interns; /* 120 4 */
/* XXX 4 bytes hole, try to pack */
/* --- cacheline 2 boundary (128 bytes) --- */
char * param_interns_data; /* 128 8 */
MVMObject * string_heap; /* 136 8 */
MVMCompUnit * string_comp_unit; /* 144 8 */
/* size: 152, cachelines: 3, members: 22 */
/* sum members: 144, holes: 2, sum holes: 8 */
/* last cacheline: 24 bytes */
};
struct MVMThreadContext {
void * nursery_alloc; /* 0 8 */
void * nursery_alloc_limit; /* 8 8 */
size_t gc_status; /* 16 8 */
MVMuint32 allocate_in_gen2; /* 24 4 */
MVMuint32 thread_id; /* 28 4 */
MVMThread * thread_obj; /* 32 8 */
MVMFrame * thread_entry_frame; /* 40 8 */
MVMuint8 * * interp_cur_op; /* 48 8 */
MVMuint8 * * interp_bytecode_start; /* 56 8 */
/* --- cacheline 1 boundary (64 bytes) --- */
MVMRegister * * interp_reg_base; /* 64 8 */
MVMCompUnit * * interp_cu; /* 72 8 */
MVMFrame * cur_frame; /* 80 8 */
uv_loop_t * loop; /* 88 8 */
MVMObject * cur_usecapture; /* 96 8 */
MVMActiveHandler * active_handlers; /* 104 8 */
MVMObject * last_handler_result; /* 112 8 */
uv_mutex_t * ex_release_mutex; /* 120 8 */
/* --- cacheline 2 boundary (128 bytes) --- */
MVMInstance * instance; /* 128 8 */
void * nursery_fromspace; /* 136 8 */
void * nursery_tospace; /* 144 8 */
MVMGen2Allocator * gen2; /* 152 8 */
MVMuint32 gc_promoted_bytes; /* 160 4 */
MVMint32 serialized_size; /* 164 4 */
char * serialized; /* 168 8 */
MVMObject * serialized_string_heap; /* 176 8 */
MVMuint32 num_temproots; /* 184 4 */
MVMuint32 mark_temproots; /* 188 4 */
/* --- cacheline 3 boundary (192 bytes) --- */
MVMuint32 alloc_temproots; /* 192 4 */
/* XXX 4 bytes hole, try to pack */
MVMCollectable * * * temproots; /* 200 8 */
MVMuint32 num_gen2roots; /* 208 4 */
MVMuint32 alloc_gen2roots; /* 212 4 */
MVMCollectable * * gen2roots; /* 216 8 */
MVMuint32 num_finalize; /* 224 4 */
MVMuint32 alloc_finalize; /* 228 4 */
MVMObject * * finalize; /* 232 8 */
MVMuint32 num_finalizing; /* 240 4 */
MVMuint32 alloc_finalizing; /* 244 4 */
MVMObject * * finalizing; /* 248 8 */
/* --- cacheline 4 boundary (256 bytes) --- */
MVMGCPassedWork * gc_in_tray; /* 256 8 */
MVMWorkThread * gc_work; /* 264 8 */
MVMuint32 gc_work_size; /* 272 4 */
MVMuint32 gc_work_count; /* 276 4 */
MVMLexotic * * lexotic_cache; /* 280 8 */
MVMuint32 lexotic_cache_size; /* 288 4 */
MVMint32 sc_wb_disable_depth; /* 292 4 */
MVMObject * compiling_scs; /* 296 8 */
MVMObject * cur_dispatcher; /* 304 8 */
MVMNativeCallbackCacheHead * native_callback_cache; /* 312 8 */
/* --- cacheline 5 boundary (320 bytes) --- */
/* --- cacheline 5 boundary (320 bytes) --- */
MVMuint64 rand_state[2]; /* 320 16 */
jmp_buf interp_jump; /* 336 200 */
/* --- cacheline 8 boundary (512 bytes) was 24 bytes ago --- */
MVMint64 * nfa_done; /* 536 8 */
MVMint64 * nfa_curst; /* 544 8 */
MVMint64 * nfa_nextst; /* 552 8 */
MVMint64 nfa_alloc_states; /* 560 8 */
MVMint64 * nfa_fates; /* 568 8 */
/* --- cacheline 9 boundary (576 bytes) --- */
MVMint64 nfa_fates_len; /* 576 8 */
MVMint64 * nfa_longlit; /* 584 8 */
MVMint64 nfa_longlit_len; /* 592 8 */
MVMint64 * multi_dim_indices; /* 600 8 */
MVMint64 num_multi_dim_indices; /* 608 8 */
MVMint64 num_locks; /* 616 8 */
MVMProfileThreadData * prof_data; /* 624 8 */
/* size: 632, cachelines: 10, members: 62 */
/* sum members: 628, holes: 1, sum holes: 4 */
/* last cacheline: 56 bytes */
};
struct MVMArrayREPRData {
size_t elem_size; /* 0 8 */
MVMuint8 slot_type; /* 8 1 */
/* XXX 7 bytes hole, try to pack */
MVMObject * elem_type; /* 16 8 */
/* size: 24, cachelines: 1, members: 3 */
/* sum members: 17, holes: 1, sum holes: 7 */
/* last cacheline: 24 bytes */
};
struct MVMCArrayREPRData {
MVMint32 elem_size; /* 0 4 */
/* XXX 4 bytes hole, try to pack */
MVMObject * elem_type; /* 8 8 */
MVMint32 elem_kind; /* 16 4 */
/* size: 24, cachelines: 1, members: 3 */
/* sum members: 16, holes: 1, sum holes: 4 */
/* padding: 4 */
/* last cacheline: 24 bytes */
};
struct MVMSpeshCallInfo {
MVMCallsite * cs; /* 0 8 */
MVMint8 arg_is_const[4]; /* 8 4 */
/* XXX 4 bytes hole, try to pack */
MVMSpeshFacts * arg_facts[4]; /* 16 32 */
MVMSpeshIns * prepargs_ins; /* 48 8 */
MVMSpeshIns * arg_ins[4]; /* 56 32 */
/* --- cacheline 1 boundary (64 bytes) was 24 bytes ago --- */
/* size: 88, cachelines: 2, members: 5 */
/* sum members: 84, holes: 1, sum holes: 4 */
/* last cacheline: 24 bytes */
};
struct MVMMultiDimArrayREPRData {
MVMint64 num_dimensions; /* 0 8 */
size_t elem_size; /* 8 8 */
MVMuint8 slot_type; /* 16 1 */
/* XXX 7 bytes hole, try to pack */
MVMObject * elem_type; /* 24 8 */
/* size: 32, cachelines: 1, members: 4 */
/* sum members: 25, holes: 1, sum holes: 7 */
/* last cacheline: 32 bytes */
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment