зеркало из https://github.com/github/ruby.git
Add ctcx_stack_push_local()
This commit is contained in:
Родитель
ad5cc39dcf
Коммит
e98d2c5ec8
19
yjit_core.c
19
yjit_core.c
|
@ -70,6 +70,25 @@ ctx_stack_push_self(ctx_t* ctx)
|
|||
return mem_opnd(64, REG_SP, offset);
|
||||
}
|
||||
|
||||
/*
|
||||
Push a local variable on the stack
|
||||
*/
|
||||
x86opnd_t
|
||||
ctx_stack_push_local(ctx_t* ctx, size_t local_idx)
|
||||
{
|
||||
// Keep track of the type of the value
|
||||
if (ctx->stack_size < MAX_TEMP_TYPES && local_idx < MAX_LOCAL_TYPES) {
|
||||
ctx->temp_mapping[ctx->stack_size] = (temp_mapping_t){ .kind = TEMP_LOCAL, .idx = local_idx };
|
||||
}
|
||||
|
||||
ctx->stack_size += 1;
|
||||
ctx->sp_offset += 1;
|
||||
|
||||
// SP points just above the topmost value
|
||||
int32_t offset = (ctx->sp_offset - 1) * sizeof(VALUE);
|
||||
return mem_opnd(64, REG_SP, offset);
|
||||
}
|
||||
|
||||
/*
|
||||
Pop N values off the stack
|
||||
Return a pointer to the stack top before the pop operation
|
||||
|
|
|
@ -73,8 +73,8 @@ typedef enum yjit_temp_loc
|
|||
{
|
||||
TEMP_STACK = 0,
|
||||
TEMP_SELF,
|
||||
//TEMP_LOCAL, // Local with index
|
||||
//TEMP_CONST, // Small constant (0, 1, 2, Qnil, Qfalse, Qtrue)
|
||||
TEMP_LOCAL, // Local with index
|
||||
//TEMP_CONST, // Small constant (0, 1, 2, Qnil, Qfalse, Qtrue)
|
||||
|
||||
} temp_loc_t;
|
||||
|
||||
|
@ -218,6 +218,7 @@ typedef struct yjit_block_version
|
|||
x86opnd_t ctx_sp_opnd(ctx_t* ctx, int32_t offset_bytes);
|
||||
x86opnd_t ctx_stack_push(ctx_t* ctx, val_type_t type);
|
||||
x86opnd_t ctx_stack_push_self(ctx_t* ctx);
|
||||
x86opnd_t ctx_stack_push_local(ctx_t* ctx, size_t local_idx);
|
||||
x86opnd_t ctx_stack_pop(ctx_t* ctx, size_t n);
|
||||
x86opnd_t ctx_stack_opnd(ctx_t* ctx, int32_t idx);
|
||||
val_type_t ctx_get_temp_type(const ctx_t* ctx, size_t idx);
|
||||
|
|
Загрузка…
Ссылка в новой задаче