mruby
3.3.0
mruby is the lightweight implementation of the Ruby language
Loading...
Searching...
No Matches
include
mruby
ops.h
1
/* operand types:
2
+ Z: no operand
3
+ B: 8bit
4
+ BB: 8+8bit
5
+ BBB: 8+8+8bit
6
+ BS: 8+16bit
7
+ BSS: 8+16+16bit
8
+ S: 16bit
9
+ W: 24bit
10
*/
11
12
/*-----------------------------------------------------------------------
13
operation code operands semantics
14
------------------------------------------------------------------------*/
15
OPCODE(NOP, Z)
/* no operation */
16
OPCODE(MOVE, BB)
/* R[a] = R[b] */
17
OPCODE(LOADL, BB)
/* R[a] = Pool[b] */
18
OPCODE(LOADI, BB)
/* R[a] = mrb_int(b) */
19
OPCODE(LOADINEG, BB)
/* R[a] = mrb_int(-b) */
20
OPCODE(LOADI__1, B)
/* R[a] = mrb_int(-1) */
21
OPCODE(LOADI_0, B)
/* R[a] = mrb_int(0) */
22
OPCODE(LOADI_1, B)
/* R[a] = mrb_int(1) */
23
OPCODE(LOADI_2, B)
/* R[a] = mrb_int(2) */
24
OPCODE(LOADI_3, B)
/* R[a] = mrb_int(3) */
25
OPCODE(LOADI_4, B)
/* R[a] = mrb_int(4) */
26
OPCODE(LOADI_5, B)
/* R[a] = mrb_int(5) */
27
OPCODE(LOADI_6, B)
/* R[a] = mrb_int(6) */
28
OPCODE(LOADI_7, B)
/* R[a] = mrb_int(7) */
29
OPCODE(LOADI16, BS)
/* R[a] = mrb_int(b) */
30
OPCODE(LOADI32, BSS)
/* R[a] = mrb_int((b<<16)+c) */
31
OPCODE(LOADSYM, BB)
/* R[a] = Syms[b] */
32
OPCODE(LOADNIL, B)
/* R[a] = nil */
33
OPCODE(LOADSELF, B)
/* R[a] = self */
34
OPCODE(LOADT, B)
/* R[a] = true */
35
OPCODE(LOADF, B)
/* R[a] = false */
36
OPCODE(GETGV, BB)
/* R[a] = getglobal(Syms[b]) */
37
OPCODE(SETGV, BB)
/* setglobal(Syms[b], R[a]) */
38
OPCODE(GETSV, BB)
/* R[a] = Special[Syms[b]] */
39
OPCODE(SETSV, BB)
/* Special[Syms[b]] = R[a] */
40
OPCODE(GETIV, BB)
/* R[a] = ivget(Syms[b]) */
41
OPCODE(SETIV, BB)
/* ivset(Syms[b],R[a]) */
42
OPCODE(GETCV, BB)
/* R[a] = cvget(Syms[b]) */
43
OPCODE(SETCV, BB)
/* cvset(Syms[b],R[a]) */
44
OPCODE(GETCONST, BB)
/* R[a] = constget(Syms[b]) */
45
OPCODE(SETCONST, BB)
/* constset(Syms[b],R[a]) */
46
OPCODE(GETMCNST, BB)
/* R[a] = R[a]::Syms[b] */
47
OPCODE(SETMCNST, BB)
/* R[a+1]::Syms[b] = R[a] */
48
OPCODE(GETUPVAR, BBB)
/* R[a] = uvget(b,c) */
49
OPCODE(SETUPVAR, BBB)
/* uvset(b,c,R[a]) */
50
OPCODE(GETIDX, B)
/* R[a] = R[a][R[a+1]] */
51
OPCODE(SETIDX, B)
/* R[a][R[a+1]] = R[a+2] */
52
OPCODE(JMP, S)
/* pc+=a */
53
OPCODE(JMPIF, BS)
/* if R[a] pc+=b */
54
OPCODE(JMPNOT, BS)
/* if !R[a] pc+=b */
55
OPCODE(JMPNIL, BS)
/* if R[a]==nil pc+=b */
56
OPCODE(JMPUW, S)
/* unwind_and_jump_to(a) */
57
OPCODE(EXCEPT, B)
/* R[a] = exc */
58
OPCODE(RESCUE, BB)
/* R[b] = R[a].isa?(R[b]) */
59
OPCODE(RAISEIF, B)
/* raise(R[a]) if R[a] */
60
OPCODE(SSEND, BBB)
/* R[a] = self.send(Syms[b],R[a+1]..,R[a+n+1]:R[a+n+2]..) (c=n|k<<4) */
61
OPCODE(SSENDB, BBB)
/* R[a] = self.send(Syms[b],R[a+1]..,R[a+n+1]:R[a+n+2]..,&R[a+n+2k+1]) */
62
OPCODE(SEND, BBB)
/* R[a] = R[a].send(Syms[b],R[a+1]..,R[a+n+1]:R[a+n+2]..) (c=n|k<<4) */
63
OPCODE(SENDB, BBB)
/* R[a] = R[a].send(Syms[b],R[a+1]..,R[a+n+1]:R[a+n+2]..,&R[a+n+2k+1]) */
64
OPCODE(CALL, Z)
/* self.call(*, **, &) (But overlay the current call frame; tailcall) */
65
OPCODE(SUPER, BB)
/* R[a] = super(R[a+1],... ,R[a+b+1]) */
66
OPCODE(ARGARY, BS)
/* R[a] = argument array (16=m5:r1:m5:d1:lv4) */
67
OPCODE(ENTER, W)
/* arg setup according to flags (23=m5:o5:r1:m5:k5:d1:b1) */
68
OPCODE(KEY_P, BB)
/* R[a] = kdict.key?(Syms[b]) */
69
OPCODE(KEYEND, Z)
/* raise unless kdict.empty? */
70
OPCODE(KARG, BB)
/* R[a] = kdict[Syms[b]]; kdict.delete(Syms[b]) */
71
OPCODE(RETURN, B)
/* return R[a] (normal) */
72
OPCODE(RETURN_BLK, B)
/* return R[a] (in-block return) */
73
OPCODE(BREAK, B)
/* break R[a] */
74
OPCODE(BLKPUSH, BS)
/* R[a] = block (16=m5:r1:m5:d1:lv4) */
75
OPCODE(ADD, B)
/* R[a] = R[a]+R[a+1] */
76
OPCODE(ADDI, BB)
/* R[a] = R[a]+mrb_int(b) */
77
OPCODE(SUB, B)
/* R[a] = R[a]-R[a+1] */
78
OPCODE(SUBI, BB)
/* R[a] = R[a]-mrb_int(b) */
79
OPCODE(MUL, B)
/* R[a] = R[a]*R[a+1] */
80
OPCODE(DIV, B)
/* R[a] = R[a]/R[a+1] */
81
OPCODE(EQ, B)
/* R[a] = R[a]==R[a+1] */
82
OPCODE(LT, B)
/* R[a] = R[a]<R[a+1] */
83
OPCODE(LE, B)
/* R[a] = R[a]<=R[a+1] */
84
OPCODE(GT, B)
/* R[a] = R[a]>R[a+1] */
85
OPCODE(GE, B)
/* R[a] = R[a]>=R[a+1] */
86
OPCODE(ARRAY, BB)
/* R[a] = ary_new(R[a],R[a+1]..R[a+b]) */
87
OPCODE(ARRAY2, BBB)
/* R[a] = ary_new(R[b],R[b+1]..R[b+c]) */
88
OPCODE(ARYCAT, B)
/* ary_cat(R[a],R[a+1]) */
89
OPCODE(ARYPUSH, BB)
/* ary_push(R[a],R[a+1]..R[a+b]) */
90
OPCODE(ARYSPLAT, B)
/* R[a] = ary_splat(R[a]) */
91
OPCODE(AREF, BBB)
/* R[a] = R[b][c] */
92
OPCODE(ASET, BBB)
/* R[b][c] = R[a] */
93
OPCODE(APOST, BBB)
/* *R[a],R[a+1]..R[a+c] = R[a][b..] */
94
OPCODE(INTERN, B)
/* R[a] = intern(R[a]) */
95
OPCODE(SYMBOL, BB)
/* R[a] = intern(Pool[b]) */
96
OPCODE(STRING, BB)
/* R[a] = str_dup(Pool[b]) */
97
OPCODE(STRCAT, B)
/* str_cat(R[a],R[a+1]) */
98
OPCODE(HASH, BB)
/* R[a] = hash_new(R[a],R[a+1]..R[a+b*2-1]) */
99
OPCODE(HASHADD, BB)
/* hash_push(R[a],R[a+1]..R[a+b*2]) */
100
OPCODE(HASHCAT, B)
/* R[a] = hash_cat(R[a],R[a+1]) */
101
OPCODE(LAMBDA, BB)
/* R[a] = lambda(Irep[b],L_LAMBDA) */
102
OPCODE(BLOCK, BB)
/* R[a] = lambda(Irep[b],L_BLOCK) */
103
OPCODE(METHOD, BB)
/* R[a] = lambda(Irep[b],L_METHOD) */
104
OPCODE(RANGE_INC, B)
/* R[a] = range_new(R[a],R[a+1],FALSE) */
105
OPCODE(RANGE_EXC, B)
/* R[a] = range_new(R[a],R[a+1],TRUE) */
106
OPCODE(OCLASS, B)
/* R[a] = ::Object */
107
OPCODE(CLASS, BB)
/* R[a] = newclass(R[a],Syms[b],R[a+1]) */
108
OPCODE(MODULE, BB)
/* R[a] = newmodule(R[a],Syms[b]) */
109
OPCODE(EXEC, BB)
/* R[a] = blockexec(R[a],Irep[b]) */
110
OPCODE(DEF, BB)
/* R[a].newmethod(Syms[b],R[a+1]); R[a] = Syms[b] */
111
OPCODE(ALIAS, BB)
/* alias_method(target_class,Syms[a],Syms[b]) */
112
OPCODE(UNDEF, B)
/* undef_method(target_class,Syms[a]) */
113
OPCODE(SCLASS, B)
/* R[a] = R[a].singleton_class */
114
OPCODE(TCLASS, B)
/* R[a] = target_class */
115
OPCODE(DEBUG, BBB)
/* print a,b,c */
116
OPCODE(ERR, B)
/* raise(LocalJumpError, Pool[a]) */
117
OPCODE(EXT1, Z)
/* make 1st operand (a) 16bit */
118
OPCODE(EXT2, Z)
/* make 2nd operand (b) 16bit */
119
OPCODE(EXT3, Z)
/* make 1st and 2nd operands 16bit */
120
OPCODE(STOP, Z)
/* stop VM */
Generated by
1.9.7