14#if VM_COLLECT_USAGE_DETAILS
15static void vm_analysis_insn(
int insn);
19#define DECL_SC_REG(type, r, reg) register type reg_##r
21#elif defined(__GNUC__) && defined(__x86_64__)
22#define DECL_SC_REG(type, r, reg) register type reg_##r __asm__("r" reg)
24#elif defined(__GNUC__) && defined(__i386__)
25#define DECL_SC_REG(type, r, reg) register type reg_##r __asm__("e" reg)
27#elif defined(__GNUC__) && defined(__powerpc64__)
28#define DECL_SC_REG(type, r, reg) register type reg_##r __asm__("r" reg)
30#elif defined(__GNUC__) && defined(__aarch64__)
31#define DECL_SC_REG(type, r, reg) register type reg_##r __asm__("x" reg)
34#define DECL_SC_REG(type, r, reg) register type reg_##r
38#if VM_DEBUG_STACKOVERFLOW
39NORETURN(
static void vm_stack_overflow_for_insn(
void));
41vm_stack_overflow_for_insn(
void)
43 rb_bug(
"CHECK_VM_STACK_OVERFLOW_FOR_INSN: should not overflow here. "
44 "Please contact ruby-core/dev with your (a part of) script. "
45 "This check will be removed soon.");
49#if !OPT_CALL_THREADED_CODE
56#elif __GNUC__ && __x86_64__
65#if defined(__GNUC__) && defined(__i386__)
68#define USE_MACHINE_REGS 1
70#elif defined(__GNUC__) && defined(__x86_64__)
73#define USE_MACHINE_REGS 1
75#elif defined(__GNUC__) && defined(__powerpc64__)
78#define USE_MACHINE_REGS 1
80#elif defined(__GNUC__) && defined(__aarch64__)
83#define USE_MACHINE_REGS 1
93#define RESTORE_REGS() \
95 VM_REG_CFP = ec->cfp; \
96 reg_pc = reg_cfp->pc; \
100#define VM_REG_PC reg_pc
102#define GET_PC() (reg_pc)
104#define SET_PC(x) (reg_cfp->pc = VM_REG_PC = (x))
107#if OPT_TOKEN_THREADED_CODE || OPT_DIRECT_THREADED_CODE
110 return (
VALUE)insns_address_table;
129 rb_bug(
"vm_eval: unreachable");
136 return (
const void **)vm_exec_core(0, 0);
147 return (
const void **)insns_address_table;
164 if ((th = rb_ec_thread_ptr(ec))->retval !=
Qundef) {
165 VALUE ret = th->retval;
void rb_bug(const char *fmt,...)
rb_control_frame_t *FUNC_FASTCALL rb_insn_func_t(rb_execution_context_t *, rb_control_frame_t *)
const void ** rb_vm_get_insns_address_table(void)
#define DECL_SC_REG(type, r, reg)