21#define MAX_TEMP_TYPES 8
24#define MAX_LOCAL_TYPES 8
27#define DEFAULT_CTX ( (ctx_t){ 0 } )
56STATIC_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 } )
158STATIC_ASSERT(yjit_ctx_size,
sizeof(
ctx_t) <= 32);
172static const blockid_t BLOCKID_NULL = { 0, 0 };
175typedef enum branch_shape
183typedef 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;
227typedef rb_darray(
branch_t*) branch_array_t;
229typedef 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.