14 #if VM_COLLECT_USAGE_DETAILS
15 static 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)
28 #define DECL_SC_REG(type, r, reg) register type reg_##r
32 #if VM_DEBUG_STACKOVERFLOW
33 NORETURN(
static void vm_stack_overflow_for_insn(
void));
35 vm_stack_overflow_for_insn(
void)
37 rb_bug(
"CHECK_VM_STACK_OVERFLOW_FOR_INSN: should not overflow here. "
38 "Please contact ruby-core/dev with your (a part of) script. "
39 "This check will be removed soon.");
43 #if !OPT_CALL_THREADED_CODE
50 #elif __GNUC__ && __x86_64__
59 #if defined(__GNUC__) && defined(__i386__)
62 #define USE_MACHINE_REGS 1
64 #elif defined(__GNUC__) && defined(__x86_64__)
67 #define USE_MACHINE_REGS 1
77 #define RESTORE_REGS() \
80 reg_pc = reg_cfp->pc; \
86 #define GET_PC() (reg_pc)
88 #define SET_PC(x) (reg_cfp->pc = REG_PC = (x))
91 #if OPT_TOKEN_THREADED_CODE || OPT_DIRECT_THREADED_CODE
94 return (
VALUE)insns_address_table;
100 #if OPT_STACK_CACHING
113 rb_bug(
"vm_eval: unreachable");
131 return (
const void **)insns_address_table;
147 if (th->retval !=
Qundef) {
#define END_INSNS_DISPATCH()
void rb_bug(const char *fmt,...)
const void ** rb_vm_get_insns_address_table(void)
#define DECL_SC_REG(type, r, reg)
static VALUE vm_exec_core(rb_thread_t *th, VALUE initial)
rb_control_frame_t *FUNC_FASTCALL rb_insn_func_t(rb_thread_t *, rb_control_frame_t *)