Github User Fetcher
1.0.0
C Application with Server and GUI
Loading...
Searching...
No Matches
duktape-1.8.0/src-separate/duk_js_bytecode.h
Go to the documentation of this file.
1
/*
2
* Ecmascript bytecode
3
*/
4
5
#ifndef DUK_JS_BYTECODE_H_INCLUDED
6
#define DUK_JS_BYTECODE_H_INCLUDED
7
8
/*
9
* Logical instruction layout
10
* ==========================
11
*
12
* !3!3!2!2!2!2!2!2!2!2!2!2!1!1!1!1!1!1!1!1!1!1! ! ! ! ! ! ! ! ! ! !
13
* !1!0!9!8!7!6!5!4!3!2!1!0!9!8!7!6!5!4!3!2!1!0!9!8!7!6!5!4!3!2!1!0!
14
* +---------------------------------------------------+-----------+
15
* ! C ! B ! A ! OP !
16
* +---------------------------------------------------+-----------+
17
*
18
* OP (6 bits): opcode (DUK_OP_*), access should be fastest
19
* A (8 bits): typically a target register number
20
* B (9 bits): typically first source register/constant number
21
* C (9 bits): typically second source register/constant number
22
*
23
* Some instructions combine BC or ABC together for larger parameter values.
24
* Signed integers (e.g. jump offsets) are encoded as unsigned, with an opcode
25
* specific bias. B and C may denote a register or a constant, see
26
* DUK_BC_ISREG() and DUK_BC_ISCONST().
27
*
28
* Note: macro naming is a bit misleading, e.g. "ABC" in macro name but
29
* the field layout is logically "CBA".
30
*/
31
32
typedef
duk_uint32_t
duk_instr_t
;
33
34
#define DUK_DEC_OP(x) ((x) & 0x3fUL)
35
#define DUK_DEC_A(x) (((x) >> 6) & 0xffUL)
36
#define DUK_DEC_B(x) (((x) >> 14) & 0x1ffUL)
37
#define DUK_DEC_C(x) (((x) >> 23) & 0x1ffUL)
38
#define DUK_DEC_BC(x) (((x) >> 14) & 0x3ffffUL)
39
#define DUK_DEC_ABC(x) (((x) >> 6) & 0x3ffffffUL)
40
41
#define DUK_ENC_OP(op) ((duk_instr_t) (op))
42
#define DUK_ENC_OP_ABC(op,abc) ((duk_instr_t) ( \
43
(((duk_instr_t) (abc)) << 6) | \
44
((duk_instr_t) (op)) \
45
))
46
#define DUK_ENC_OP_A_BC(op,a,bc) ((duk_instr_t) ( \
47
(((duk_instr_t) (bc)) << 14) | \
48
(((duk_instr_t) (a)) << 6) | \
49
((duk_instr_t) (op)) \
50
))
51
#define DUK_ENC_OP_A_B_C(op,a,b,c) ((duk_instr_t) ( \
52
(((duk_instr_t) (c)) << 23) | \
53
(((duk_instr_t) (b)) << 14) | \
54
(((duk_instr_t) (a)) << 6) | \
55
((duk_instr_t) (op)) \
56
))
57
#define DUK_ENC_OP_A_B(op,a,b) DUK_ENC_OP_A_B_C(op,a,b,0)
58
#define DUK_ENC_OP_A(op,a) DUK_ENC_OP_A_B_C(op,a,0,0)
59
60
/* Constants should be signed so that signed arithmetic involving them
61
* won't cause values to be coerced accidentally to unsigned.
62
*/
63
#define DUK_BC_OP_MIN 0
64
#define DUK_BC_OP_MAX 0x3fL
65
#define DUK_BC_A_MIN 0
66
#define DUK_BC_A_MAX 0xffL
67
#define DUK_BC_B_MIN 0
68
#define DUK_BC_B_MAX 0x1ffL
69
#define DUK_BC_C_MIN 0
70
#define DUK_BC_C_MAX 0x1ffL
71
#define DUK_BC_BC_MIN 0
72
#define DUK_BC_BC_MAX 0x3ffffL
73
#define DUK_BC_ABC_MIN 0
74
#define DUK_BC_ABC_MAX 0x3ffffffL
75
#define DUK_BC_EXTRAOP_MIN DUK_BC_A_MIN
76
#define DUK_BC_EXTRAOP_MAX DUK_BC_A_MAX
77
78
#define DUK_OP_LDREG 0
79
#define DUK_OP_STREG 1
80
#define DUK_OP_LDCONST 2
81
#define DUK_OP_LDINT 3
82
#define DUK_OP_LDINTX 4
83
#define DUK_OP_MPUTOBJ 5
84
#define DUK_OP_MPUTOBJI 6
85
#define DUK_OP_MPUTARR 7
86
#define DUK_OP_MPUTARRI 8
87
#define DUK_OP_NEW 9
88
#define DUK_OP_NEWI 10
89
#define DUK_OP_REGEXP 11
90
#define DUK_OP_CSREG 12
91
#define DUK_OP_CSREGI 13
92
#define DUK_OP_GETVAR 14
93
#define DUK_OP_PUTVAR 15
94
#define DUK_OP_DECLVAR 16
95
#define DUK_OP_DELVAR 17
96
#define DUK_OP_CSVAR 18
97
#define DUK_OP_CSVARI 19
98
#define DUK_OP_CLOSURE 20
99
#define DUK_OP_GETPROP 21
100
#define DUK_OP_PUTPROP 22
101
#define DUK_OP_DELPROP 23
102
#define DUK_OP_CSPROP 24
103
#define DUK_OP_CSPROPI 25
104
#define DUK_OP_ADD 26
105
#define DUK_OP_SUB 27
106
#define DUK_OP_MUL 28
107
#define DUK_OP_DIV 29
108
#define DUK_OP_MOD 30
109
#define DUK_OP_BAND 31
110
#define DUK_OP_BOR 32
111
#define DUK_OP_BXOR 33
112
#define DUK_OP_BASL 34
113
#define DUK_OP_BLSR 35
114
#define DUK_OP_BASR 36
115
#define DUK_OP_EQ 37
116
#define DUK_OP_NEQ 38
117
#define DUK_OP_SEQ 39
118
#define DUK_OP_SNEQ 40
119
#define DUK_OP_GT 41
120
#define DUK_OP_GE 42
121
#define DUK_OP_LT 43
122
#define DUK_OP_LE 44
123
#define DUK_OP_IF 45
124
#define DUK_OP_JUMP 46
125
#define DUK_OP_RETURN 47
126
#define DUK_OP_CALL 48
127
#define DUK_OP_CALLI 49
128
#define DUK_OP_TRYCATCH 50
129
#define DUK_OP_EXTRA 51
130
#define DUK_OP_PREINCR 52
/* pre/post opcode values have constraints, */
131
#define DUK_OP_PREDECR 53
/* see duk_js_executor.c */
132
#define DUK_OP_POSTINCR 54
133
#define DUK_OP_POSTDECR 55
134
#define DUK_OP_PREINCV 56
135
#define DUK_OP_PREDECV 57
136
#define DUK_OP_POSTINCV 58
137
#define DUK_OP_POSTDECV 59
138
#define DUK_OP_PREINCP 60
139
#define DUK_OP_PREDECP 61
140
#define DUK_OP_POSTINCP 62
141
#define DUK_OP_POSTDECP 63
142
#define DUK_OP_NONE 64
/* dummy value used as marker */
143
144
/* DUK_OP_EXTRA, sub-operation in A */
145
#define DUK_EXTRAOP_NOP 0
146
#define DUK_EXTRAOP_INVALID 1
147
#define DUK_EXTRAOP_LDTHIS 2
148
#define DUK_EXTRAOP_LDUNDEF 3
149
#define DUK_EXTRAOP_LDNULL 4
150
#define DUK_EXTRAOP_LDTRUE 5
151
#define DUK_EXTRAOP_LDFALSE 6
152
#define DUK_EXTRAOP_NEWOBJ 7
153
#define DUK_EXTRAOP_NEWARR 8
154
#define DUK_EXTRAOP_SETALEN 9
155
#define DUK_EXTRAOP_TYPEOF 10
156
#define DUK_EXTRAOP_TYPEOFID 11
157
#define DUK_EXTRAOP_INITENUM 12
158
#define DUK_EXTRAOP_NEXTENUM 13
159
#define DUK_EXTRAOP_INITSET 14
160
#define DUK_EXTRAOP_INITSETI 15
161
#define DUK_EXTRAOP_INITGET 16
162
#define DUK_EXTRAOP_INITGETI 17
163
#define DUK_EXTRAOP_ENDTRY 18
164
#define DUK_EXTRAOP_ENDCATCH 19
165
#define DUK_EXTRAOP_ENDFIN 20
166
#define DUK_EXTRAOP_THROW 21
167
#define DUK_EXTRAOP_INVLHS 22
168
#define DUK_EXTRAOP_UNM 23
169
#define DUK_EXTRAOP_UNP 24
170
#define DUK_EXTRAOP_DEBUGGER 25
171
#define DUK_EXTRAOP_BREAK 26
172
#define DUK_EXTRAOP_CONTINUE 27
173
#define DUK_EXTRAOP_BNOT 28
174
#define DUK_EXTRAOP_LNOT 29
175
#define DUK_EXTRAOP_INSTOF 30
176
#define DUK_EXTRAOP_IN 31
177
#define DUK_EXTRAOP_LABEL 32
178
#define DUK_EXTRAOP_ENDLABEL 33
179
180
/* DUK_OP_CALL flags in A */
181
#define DUK_BC_CALL_FLAG_TAILCALL (1 << 0)
182
#define DUK_BC_CALL_FLAG_EVALCALL (1 << 1)
183
184
/* DUK_OP_TRYCATCH flags in A */
185
#define DUK_BC_TRYCATCH_FLAG_HAVE_CATCH (1 << 0)
186
#define DUK_BC_TRYCATCH_FLAG_HAVE_FINALLY (1 << 1)
187
#define DUK_BC_TRYCATCH_FLAG_CATCH_BINDING (1 << 2)
188
#define DUK_BC_TRYCATCH_FLAG_WITH_BINDING (1 << 3)
189
190
/* DUK_OP_RETURN flags in A */
191
#define DUK_BC_RETURN_FLAG_HAVE_RETVAL (1 << 0)
192
193
/* DUK_OP_DECLVAR flags in A; bottom bits are reserved for propdesc flags (DUK_PROPDESC_FLAG_XXX) */
194
#define DUK_BC_DECLVAR_FLAG_UNDEF_VALUE (1 << 4)
/* use 'undefined' for value automatically */
195
#define DUK_BC_DECLVAR_FLAG_FUNC_DECL (1 << 5)
/* function declaration */
196
197
/* misc constants and helper macros */
198
#define DUK_BC_REGLIMIT 256
/* if B/C is >= this value, refers to a const */
199
#define DUK_BC_ISREG(x) ((x) < DUK_BC_REGLIMIT)
200
#define DUK_BC_ISCONST(x) ((x) >= DUK_BC_REGLIMIT)
201
#define DUK_BC_LDINT_BIAS (1L << 17)
202
#define DUK_BC_LDINTX_SHIFT 18
203
#define DUK_BC_JUMP_BIAS (1L << 25)
204
205
#endif
/* DUK_JS_BYTECODE_H_INCLUDED */
duk_instr_t
duk_uint32_t duk_instr_t
Definition
duktape-1.8.0/src-separate/duk_js_bytecode.h:32
vendor
civetweb
third_party
duktape-1.8.0
src-separate
duk_js_bytecode.h
Generated by
1.10.0