Phasor
3.1.1
Stack VM based Programming Language
Loading...
Searching...
No Matches
OpCode.py
Go to the documentation of this file.
1
"""
2
phasor.OpCode
3
=============
4
OpCode enumeration — mirrors ISA.hpp exactly.
5
6
Values are assigned in declaration order starting at 0, matching the C++
7
``enum class OpCode : uint8_t`` which uses implicit sequential values.
8
"""
9
10
from
enum
import
IntEnum
11
12
13
class
OpCode
(IntEnum):
14
"""Phasor VM instruction opcodes"""
15
16
PUSH_CONST = 0x00
# Push constant from constant pool
17
POP = 0x01
# Pop top of stack
18
19
IADD = 0x02
# pop b, pop a → push a + b
20
ISUBTRACT = 0x03
# pop b, pop a → push a - b
21
IMULTIPLY = 0x04
# pop b, pop a → push a * b
22
IDIVIDE = 0x05
# pop b, pop a → push a / b
23
IMODULO = 0x06
# pop b, pop a → push a % b
24
25
FLADD = 0x07
26
FLSUBTRACT = 0x08
27
FLMULTIPLY = 0x09
28
FLDIVIDE = 0x0A
29
FLMODULO = 0x0B
30
31
SQRT = 0x0C
32
POW = 0x0D
33
LOG = 0x0E
34
EXP = 0x0F
35
SIN = 0x10
36
COS = 0x11
37
TAN = 0x12
38
39
NEGATE = 0x13
# pop a → push -a
40
NOT = 0x14
# pop a → push !a
41
42
IAND = 0x15
43
IOR = 0x16
44
FLAND = 0x17
45
FLOR = 0x18
46
47
IEQUAL = 0x19
48
INOT_EQUAL = 0x1A
49
ILESS_THAN = 0x1B
50
IGREATER_THAN = 0x1C
51
ILESS_EQUAL = 0x1D
52
IGREATER_EQUAL = 0x1E
53
54
FLEQUAL = 0x1F
55
FLNOT_EQUAL = 0x20
56
FLLESS_THAN = 0x21
57
FLGREATER_THAN = 0x22
58
FLLESS_EQUAL = 0x23
59
FLGREATER_EQUAL = 0x24
60
61
JUMP = 0x25
# unconditional jump to offset
62
JUMP_IF_FALSE = 0x26
# jump if TOS is false (pops value)
63
JUMP_IF_TRUE = 0x27
# jump if TOS is true (pops value)
64
JUMP_BACK = 0x28
# backward jump (loops)
65
66
STORE_VAR = 0x29
# pop TOS → variable slot
67
LOAD_VAR = 0x2A
# push variable value
68
69
PRINT = 0x2B
70
PRINTERROR = 0x2C
71
READLINE = 0x2D
72
IMPORT = 0x2E
73
HALT = 0x2F
74
CALL_NATIVE = 0x30
75
CALL = 0x31
76
SYSTEM = 0x32
77
SYSTEM_OUT = 0x33
78
SYSTEM_ERR = 0x34
79
RETURN = 0x35
80
81
TRUE_P = 0x36
82
FALSE_P = 0x37
83
NULL_VAL = 0x38
84
85
LEN = 0x39
# pop s → push len(s)
86
CHAR_AT = 0x3A
# pop index, pop s → push s[index]
87
SUBSTR = 0x3B
# pop len, pop start, pop s → push s[start:start+len]
88
89
NEW_STRUCT = 0x3C
90
GET_FIELD = 0x3D
91
SET_FIELD = 0x3E
92
93
NEW_STRUCT_INSTANCE_STATIC = 0x3F
94
GET_FIELD_STATIC = 0x40
95
SET_FIELD_STATIC = 0x41
96
97
MOV = 0x42
# R[rA] = R[rB]
98
LOAD_CONST_R = 0x43
# R[rA] = constants[imm]
99
LOAD_VAR_R = 0x44
# R[rA] = variables[imm]
100
STORE_VAR_R = 0x45
# variables[imm] = R[rA]
101
PUSH_R = 0x46
# push(R[rA])
102
PUSH2_R = 0x47
# push(R[rA]); push(R[rB])
103
POP_R = 0x48
# R[rA] = pop()
104
POP2_R = 0x49
# R[rA], R[rB] = pop2()
105
106
IADD_R = 0x4A
# R[rA] = R[rB] + R[rC]
107
ISUB_R = 0x4B
108
IMUL_R = 0x4C
109
IDIV_R = 0x4D
110
IMOD_R = 0x4E
111
FLADD_R = 0x4F
112
FLSUB_R = 0x50
113
FLMUL_R = 0x51
114
FLDIV_R = 0x52
115
FLMOD_R = 0x53
116
SQRT_R = 0x54
# R[rA] = sqrt(R[rB])
117
POW_R = 0x55
# R[rA] = pow(R[rB], R[rC])
118
LOG_R = 0x56
119
EXP_R = 0x57
120
SIN_R = 0x58
121
COS_R = 0x59
122
TAN_R = 0x5A
123
124
IAND_R = 0x5B
125
IOR_R = 0x5C
126
IEQ_R = 0x5D
127
INE_R = 0x5E
128
ILT_R = 0x5F
129
IGT_R = 0x60
130
ILE_R = 0x61
131
IGE_R = 0x62
132
FLAND_R = 0x63
133
FLOR_R = 0x64
134
FLEQ_R = 0x65
135
FLNE_R = 0x66
136
FLLT_R = 0x67
137
FLGT_R = 0x68
138
FLLE_R = 0x69
139
FLGE_R = 0x6A
140
141
NEG_R = 0x6B
# R[rA] = -R[rB]
142
NOT_R = 0x6C
# R[rA] = !R[rB]
143
144
PRINT_R = 0x6D
145
PRINTERROR_R = 0x6E
146
READLINE_R = 0x6F
147
SYSTEM_R = 0x70
148
SYSTEM_OUT_R = 0x71
149
SYSTEM_ERR_R = 0x72
phasor.OpCode.OpCode
Definition
OpCode.py:13
src
Extensions
py
phasor
OpCode.py
Generated by
1.16.1