Ruby  2.5.0dev(2017-10-22revision60238)
Macros | Enumerations | Variables
vm_insnhelper.h File Reference

Go to the source code of this file.

Macros

#define COLLECT_USAGE_INSN(insn)   /* none */
 
#define COLLECT_USAGE_OPERAND(insn, n, op)   /* none */
 
#define COLLECT_USAGE_REGISTER(reg, s)   /* none */
 
#define PUSH(x)   (SET_SV(x), INC_SP(1))
 
#define TOPN(n)   (*(GET_SP()-(n)-1))
 
#define POPN(n)   (DEC_SP(n))
 
#define POP()   (DEC_SP(1))
 
#define STACK_ADDR_FROM_TOP(n)   (GET_SP()-(n))
 
#define GET_TOS()   (tos) /* dummy */
 
#define VM_REG_CFP   (reg_cfp)
 
#define VM_REG_PC   (VM_REG_CFP->pc)
 
#define VM_REG_SP   (VM_REG_CFP->sp)
 
#define VM_REG_EP   (VM_REG_CFP->ep)
 
#define RESTORE_REGS()
 
#define REG_A   reg_a
 
#define REG_B   reg_b
 
#define COLLECT_USAGE_REGISTER_HELPER(a, b, v)   (v)
 
#define GET_PC()   (COLLECT_USAGE_REGISTER_HELPER(PC, GET, VM_REG_PC))
 
#define SET_PC(x)   (VM_REG_PC = (COLLECT_USAGE_REGISTER_HELPER(PC, SET, (x))))
 
#define GET_CURRENT_INSN()   (*GET_PC())
 
#define GET_OPERAND(n)   (GET_PC()[(n)])
 
#define ADD_PC(n)   (SET_PC(VM_REG_PC + (n)))
 
#define JUMP(dst)   (VM_REG_PC += (dst))
 
#define GET_CFP()   (COLLECT_USAGE_REGISTER_HELPER(CFP, GET, VM_REG_CFP))
 
#define GET_EP()   (COLLECT_USAGE_REGISTER_HELPER(EP, GET, VM_REG_EP))
 
#define SET_EP(x)   (VM_REG_EP = (COLLECT_USAGE_REGISTER_HELPER(EP, SET, (x))))
 
#define GET_LEP()   (VM_EP_LEP(GET_EP()))
 
#define GET_SP()   (COLLECT_USAGE_REGISTER_HELPER(SP, GET, VM_REG_SP))
 
#define SET_SP(x)   (VM_REG_SP = (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
 
#define INC_SP(x)   (VM_REG_SP += (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
 
#define DEC_SP(x)   (VM_REG_SP -= (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))
 
#define SET_SV(x)   (*GET_SP() = (x))
 
#define GET_SP_COUNT()   (VM_REG_SP - th->ec.vm_stack)
 
#define GET_ISEQ()   (GET_CFP()->iseq)
 
#define GET_PREV_EP(ep)   ((VALUE *)((ep)[VM_ENV_DATA_INDEX_SPECVAL] & ~0x03))
 
#define GET_GLOBAL(entry)   rb_gvar_get((struct rb_global_entry*)(entry))
 
#define SET_GLOBAL(entry, val)   rb_gvar_set((struct rb_global_entry*)(entry), (val))
 
#define GET_CONST_INLINE_CACHE(dst)   ((IC) * (GET_PC() + (dst) + 2))
 
#define GET_SELF()   (COLLECT_USAGE_REGISTER_HELPER(SELF, GET, GET_CFP()->self))
 
#define CALL_METHOD(calling, ci, cc)
 
#define OPT_CALL_FASTPATH   1
 
#define CI_SET_FASTPATH(cc, func, enabled)
 
#define GET_BLOCK_HANDLER()   (GET_LEP()[VM_ENV_DATA_INDEX_SPECVAL])
 
#define FIXNUM_2_P(a, b)   ((a) & (b) & 1)
 
#define FLONUM_2_P(a, b)   0
 
#define FLOAT_HEAP_P(x)   (!SPECIAL_CONST_P(x) && RBASIC_CLASS(x) == rb_cFloat)
 
#define FLOAT_INSTANCE_P(x)   (FLONUM_P(x) || FLOAT_HEAP_P(x))
 
#define USE_IC_FOR_SPECIALIZED_METHOD   1
 
#define CALL_SIMPLE_METHOD(recv_)
 
#define NEXT_CLASS_SERIAL()   (++ruby_vm_class_serial)
 
#define GET_GLOBAL_METHOD_STATE()   (ruby_vm_global_method_state)
 
#define INC_GLOBAL_METHOD_STATE()   (++ruby_vm_global_method_state)
 
#define GET_GLOBAL_CONSTANT_STATE()   (ruby_vm_global_constant_state)
 
#define INC_GLOBAL_CONSTANT_STATE()   (++ruby_vm_global_constant_state)
 

Enumerations

enum  vm_regan_regtype {
  VM_REGAN_PC = 0, VM_REGAN_SP = 1, VM_REGAN_EP = 2, VM_REGAN_CFP = 3,
  VM_REGAN_SELF = 4, VM_REGAN_ISEQ = 5
}
 
enum  vm_regan_acttype { VM_REGAN_ACT_GET = 0, VM_REGAN_ACT_SET = 1 }
 

Variables

RUBY_SYMBOL_EXPORT_BEGIN VALUE ruby_vm_const_missing_count
 
rb_serial_t ruby_vm_global_method_state
 
rb_serial_t ruby_vm_global_constant_state
 
rb_serial_t ruby_vm_class_serial
 

Macro Definition Documentation

◆ ADD_PC

#define ADD_PC (   n)    (SET_PC(VM_REG_PC + (n)))

Definition at line 88 of file vm_insnhelper.h.

◆ CALL_METHOD

#define CALL_METHOD (   calling,
  ci,
  cc 
)
Value:
do { \
VALUE v = (*(cc)->call)(th, GET_CFP(), (calling), (ci), (cc)); \
if (v == Qundef) { \
RESTORE_REGS(); \
NEXT_INSN(); \
} \
else { \
val = v; \
} \
} while (0)
#define GET_CFP()
Definition: vm_insnhelper.h:92
#define Qundef
Definition: ruby.h:439

Definition at line 131 of file vm_insnhelper.h.

◆ CALL_SIMPLE_METHOD

#define CALL_SIMPLE_METHOD (   recv_)
Value:
do { \
struct rb_calling_info calling; \
calling.argc = ci->orig_argc; \
vm_search_method(ci, cc, calling.recv = (recv_)); \
CALL_METHOD(&calling, ci, cc); \
} while (0)
#define VM_BLOCK_HANDLER_NONE
Definition: vm_core.h:1135
VALUE block_handler
Definition: vm_core.h:234

Definition at line 183 of file vm_insnhelper.h.

◆ CI_SET_FASTPATH

#define CI_SET_FASTPATH (   cc,
  func,
  enabled 
)
Value:
do { \
if (LIKELY(enabled)) ((cc)->call = (func)); \
} while (0)
#define LIKELY(x)
Definition: internal.h:42

Definition at line 151 of file vm_insnhelper.h.

◆ COLLECT_USAGE_INSN

#define COLLECT_USAGE_INSN (   insn)    /* none */

Definition at line 30 of file vm_insnhelper.h.

◆ COLLECT_USAGE_OPERAND

#define COLLECT_USAGE_OPERAND (   insn,
  n,
  op 
)    /* none */

Definition at line 31 of file vm_insnhelper.h.

◆ COLLECT_USAGE_REGISTER

#define COLLECT_USAGE_REGISTER (   reg,
 
)    /* none */

Definition at line 32 of file vm_insnhelper.h.

◆ COLLECT_USAGE_REGISTER_HELPER

#define COLLECT_USAGE_REGISTER_HELPER (   a,
  b,
 
)    (v)

Definition at line 80 of file vm_insnhelper.h.

◆ DEC_SP

#define DEC_SP (   x)    (VM_REG_SP -= (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))

Definition at line 101 of file vm_insnhelper.h.

◆ FIXNUM_2_P

#define FIXNUM_2_P (   a,
 
)    ((a) & (b) & 1)

Definition at line 170 of file vm_insnhelper.h.

◆ FLOAT_HEAP_P

#define FLOAT_HEAP_P (   x)    (!SPECIAL_CONST_P(x) && RBASIC_CLASS(x) == rb_cFloat)

Definition at line 176 of file vm_insnhelper.h.

◆ FLOAT_INSTANCE_P

#define FLOAT_INSTANCE_P (   x)    (FLONUM_P(x) || FLOAT_HEAP_P(x))

Definition at line 177 of file vm_insnhelper.h.

◆ FLONUM_2_P

#define FLONUM_2_P (   a,
 
)    0

Definition at line 174 of file vm_insnhelper.h.

◆ GET_BLOCK_HANDLER

#define GET_BLOCK_HANDLER ( )    (GET_LEP()[VM_ENV_DATA_INDEX_SPECVAL])

Definition at line 158 of file vm_insnhelper.h.

◆ GET_CFP

#define GET_CFP ( )    (COLLECT_USAGE_REGISTER_HELPER(CFP, GET, VM_REG_CFP))

Definition at line 92 of file vm_insnhelper.h.

◆ GET_CONST_INLINE_CACHE

#define GET_CONST_INLINE_CACHE (   dst)    ((IC) * (GET_PC() + (dst) + 2))

Definition at line 119 of file vm_insnhelper.h.

◆ GET_CURRENT_INSN

#define GET_CURRENT_INSN ( )    (*GET_PC())

Definition at line 86 of file vm_insnhelper.h.

◆ GET_EP

#define GET_EP ( )    (COLLECT_USAGE_REGISTER_HELPER(EP, GET, VM_REG_EP))

Definition at line 93 of file vm_insnhelper.h.

◆ GET_GLOBAL

#define GET_GLOBAL (   entry)    rb_gvar_get((struct rb_global_entry*)(entry))

Definition at line 116 of file vm_insnhelper.h.

◆ GET_GLOBAL_CONSTANT_STATE

#define GET_GLOBAL_CONSTANT_STATE ( )    (ruby_vm_global_constant_state)

Definition at line 194 of file vm_insnhelper.h.

◆ GET_GLOBAL_METHOD_STATE

#define GET_GLOBAL_METHOD_STATE ( )    (ruby_vm_global_method_state)

Definition at line 192 of file vm_insnhelper.h.

◆ GET_ISEQ

#define GET_ISEQ ( )    (GET_CFP()->iseq)

Definition at line 108 of file vm_insnhelper.h.

◆ GET_LEP

#define GET_LEP ( )    (VM_EP_LEP(GET_EP()))

Definition at line 95 of file vm_insnhelper.h.

◆ GET_OPERAND

#define GET_OPERAND (   n)    (GET_PC()[(n)])

Definition at line 87 of file vm_insnhelper.h.

◆ GET_PC

#define GET_PC ( )    (COLLECT_USAGE_REGISTER_HELPER(PC, GET, VM_REG_PC))

Definition at line 84 of file vm_insnhelper.h.

◆ GET_PREV_EP

#define GET_PREV_EP (   ep)    ((VALUE *)((ep)[VM_ENV_DATA_INDEX_SPECVAL] & ~0x03))

Definition at line 114 of file vm_insnhelper.h.

◆ GET_SELF

#define GET_SELF ( )    (COLLECT_USAGE_REGISTER_HELPER(SELF, GET, GET_CFP()->self))

Definition at line 125 of file vm_insnhelper.h.

Referenced by rb_vm_opt_struct_aref(), and rb_vm_opt_struct_aset().

◆ GET_SP

#define GET_SP ( )    (COLLECT_USAGE_REGISTER_HELPER(SP, GET, VM_REG_SP))

Definition at line 98 of file vm_insnhelper.h.

◆ GET_SP_COUNT

#define GET_SP_COUNT ( )    (VM_REG_SP - th->ec.vm_stack)

Definition at line 105 of file vm_insnhelper.h.

◆ GET_TOS

#define GET_TOS ( )    (tos) /* dummy */

Definition at line 45 of file vm_insnhelper.h.

◆ INC_GLOBAL_CONSTANT_STATE

#define INC_GLOBAL_CONSTANT_STATE ( )    (++ruby_vm_global_constant_state)

Definition at line 195 of file vm_insnhelper.h.

Referenced by rb_clear_constant_cache().

◆ INC_GLOBAL_METHOD_STATE

#define INC_GLOBAL_METHOD_STATE ( )    (++ruby_vm_global_method_state)

Definition at line 193 of file vm_insnhelper.h.

Referenced by rb_clear_method_cache_by_class().

◆ INC_SP

#define INC_SP (   x)    (VM_REG_SP += (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))

Definition at line 100 of file vm_insnhelper.h.

◆ JUMP

#define JUMP (   dst)    (VM_REG_PC += (dst))

Definition at line 89 of file vm_insnhelper.h.

◆ NEXT_CLASS_SERIAL

#define NEXT_CLASS_SERIAL ( )    (++ruby_vm_class_serial)

Definition at line 191 of file vm_insnhelper.h.

Referenced by rb_next_class_serial().

◆ OPT_CALL_FASTPATH

#define OPT_CALL_FASTPATH   1

Definition at line 147 of file vm_insnhelper.h.

◆ POP

#define POP ( )    (DEC_SP(1))

Definition at line 42 of file vm_insnhelper.h.

◆ POPN

#define POPN (   n)    (DEC_SP(n))

Definition at line 41 of file vm_insnhelper.h.

◆ PUSH

#define PUSH (   x)    (SET_SV(x), INC_SP(1))

Definition at line 39 of file vm_insnhelper.h.

◆ REG_A

#define REG_A   reg_a

Definition at line 60 of file vm_insnhelper.h.

◆ REG_B

#define REG_B   reg_b

Definition at line 61 of file vm_insnhelper.h.

◆ RESTORE_REGS

#define RESTORE_REGS ( )
Value:
do { \
VM_REG_CFP = th->ec.cfp; \
} while (0)

Definition at line 56 of file vm_insnhelper.h.

◆ SET_EP

#define SET_EP (   x)    (VM_REG_EP = (COLLECT_USAGE_REGISTER_HELPER(EP, SET, (x))))

Definition at line 94 of file vm_insnhelper.h.

◆ SET_GLOBAL

#define SET_GLOBAL (   entry,
  val 
)    rb_gvar_set((struct rb_global_entry*)(entry), (val))

Definition at line 117 of file vm_insnhelper.h.

◆ SET_PC

#define SET_PC (   x)    (VM_REG_PC = (COLLECT_USAGE_REGISTER_HELPER(PC, SET, (x))))

Definition at line 85 of file vm_insnhelper.h.

◆ SET_SP

#define SET_SP (   x)    (VM_REG_SP = (COLLECT_USAGE_REGISTER_HELPER(SP, SET, (x))))

Definition at line 99 of file vm_insnhelper.h.

◆ SET_SV

#define SET_SV (   x)    (*GET_SP() = (x))

Definition at line 102 of file vm_insnhelper.h.

◆ STACK_ADDR_FROM_TOP

#define STACK_ADDR_FROM_TOP (   n)    (GET_SP()-(n))

Definition at line 43 of file vm_insnhelper.h.

◆ TOPN

#define TOPN (   n)    (*(GET_SP()-(n)-1))

Definition at line 40 of file vm_insnhelper.h.

Referenced by rb_vm_opt_struct_aref(), and rb_vm_opt_struct_aset().

◆ USE_IC_FOR_SPECIALIZED_METHOD

#define USE_IC_FOR_SPECIALIZED_METHOD   1

Definition at line 180 of file vm_insnhelper.h.

◆ VM_REG_CFP

#define VM_REG_CFP   (reg_cfp)

Definition at line 51 of file vm_insnhelper.h.

◆ VM_REG_EP

#define VM_REG_EP   (VM_REG_CFP->ep)

Definition at line 54 of file vm_insnhelper.h.

◆ VM_REG_PC

#define VM_REG_PC   (VM_REG_CFP->pc)

Definition at line 52 of file vm_insnhelper.h.

◆ VM_REG_SP

#define VM_REG_SP   (VM_REG_CFP->sp)

Definition at line 53 of file vm_insnhelper.h.

Enumeration Type Documentation

◆ vm_regan_acttype

Enumerator
VM_REGAN_ACT_GET 
VM_REGAN_ACT_SET 

Definition at line 71 of file vm_insnhelper.h.

◆ vm_regan_regtype

Enumerator
VM_REGAN_PC 
VM_REGAN_SP 
VM_REGAN_EP 
VM_REGAN_CFP 
VM_REGAN_SELF 
VM_REGAN_ISEQ 

Definition at line 63 of file vm_insnhelper.h.

Variable Documentation

◆ ruby_vm_class_serial

rb_serial_t ruby_vm_class_serial

Definition at line 325 of file vm.c.

◆ ruby_vm_const_missing_count

RUBY_SYMBOL_EXPORT_BEGIN VALUE ruby_vm_const_missing_count

Definition at line 319 of file vm.c.

◆ ruby_vm_global_constant_state

rb_serial_t ruby_vm_global_constant_state

Definition at line 324 of file vm.c.

◆ ruby_vm_global_method_state

rb_serial_t ruby_vm_global_method_state

Definition at line 323 of file vm.c.