21 #define MAX_TEMP_TYPES 8
24 #define MAX_LOCAL_TYPES 8
27 #define DEFAULT_CTX ( (ctx_t){ 0 } )
56 STATIC_ASSERT(val_type_size,
sizeof(
val_type_t) == 1);
59 #define TYPE_UNKNOWN ( (val_type_t){ 0 } )
62 #define TYPE_HEAP ( (val_type_t){ .is_heap = 1 } )
65 #define TYPE_IMM ( (val_type_t){ .is_imm = 1 } )
67 #define TYPE_NIL ( (val_type_t){ .is_imm = 1, .type = ETYPE_NIL } )
68 #define TYPE_TRUE ( (val_type_t){ .is_imm = 1, .type = ETYPE_TRUE } )
69 #define TYPE_FALSE ( (val_type_t){ .is_imm = 1, .type = ETYPE_FALSE } )
70 #define TYPE_FIXNUM ( (val_type_t){ .is_imm = 1, .type = ETYPE_FIXNUM } )
71 #define TYPE_FLONUM ( (val_type_t){ .is_imm = 1, .type = ETYPE_FLONUM } )
72 #define TYPE_STATIC_SYMBOL ( (val_type_t){ .is_imm = 1, .type = ETYPE_SYMBOL } )
73 #define TYPE_ARRAY ( (val_type_t){ .is_heap = 1, .type = ETYPE_ARRAY } )
74 #define TYPE_HASH ( (val_type_t){ .is_heap = 1, .type = ETYPE_HASH } )
75 #define TYPE_STRING ( (val_type_t){ .is_heap = 1, .type = ETYPE_STRING } )
103 #define MAP_STACK ( (temp_mapping_t) { 0 } )
106 #define MAP_SELF ( (temp_mapping_t) { .kind = TEMP_SELF } )
126 #define OPND_SELF ( (insn_opnd_t){ .is_self = true } )
127 #define OPND_STACK(stack_idx) ( (insn_opnd_t){ .is_self = false, .idx = stack_idx } )
158 STATIC_ASSERT(yjit_ctx_size,
sizeof(
ctx_t) <= 32);
172 static const blockid_t BLOCKID_NULL = { 0, 0 };
175 typedef enum branch_shape
183 typedef void (*branchgen_fn)(
codeblock_t* cb, uint8_t* target0, uint8_t* target1, uint8_t shape);
204 ctx_t target_ctxs[2];
208 uint8_t *dst_addrs[2];
214 branch_shape_t shape : 2;
221 VALUE receiver_klass;
227 typedef rb_darray(
branch_t*) branch_array_t;
229 typedef rb_darray(uint32_t) int32_array_t;
249 branch_array_t incoming;
253 branch_array_t outgoing;
256 int32_array_t gc_object_offsets;
260 cme_dependency_array_t cme_dependencies;
295 uint8_t *side_exit_for_pc;
303 bool record_boundary_patch_point;
VALUE type(ANYARGS)
ANYARGS-ed function type.
Basic block version Represents a portion of an iseq compiled with a given context Note: care must be ...
Store info about an outgoing branch in a code segment Note: care must be taken to minimize the size o...
Code generation context Contains information we can use to optimize code.
uintptr_t VALUE
Type that represents a Ruby object.