evoBasic VM ISA设计
January 5, 2023,operand types
| Format | Description |
|---|---|
boolean |
|
i8 |
|
i16 |
|
i32 |
|
i64 |
|
u8 |
|
u16 |
|
u32 |
|
u64 |
|
f32 |
|
f64 |
|
ref |
reference to instance |
hld |
handle of /Fields/Argument/local variable/static field |
ftn |
reference to method slot |
vftn |
reference to virtual function slot |
sftn |
reference to static function |
ctor |
reference to ctor |
emconst |
enum constant |
record<Token> |
memory of whole record |
instructions
Function Loading and Invocation
option count is omitted in invocation when function declaration did not have any optional parameter.
virtual function
…, ref,
arg2 value,arg1 value,option value2,option info2,option value1,option info1,u8 option count,paramArray, vftn | …,result1 value,result2 valuemethod
…, ref,
arg2 value,arg1 value,option value2,option info2,option value1,option info1,u8 option count,paramArray, ftn | …,result1 value,result2 valuestatic function
…,
arg2 value,arg1 value,option value2,option info2,option value1,option info1,u8 option count,paramArray, sftn | …,result1 value,result2 valueconstructor
…, ref,
arg2 value,arg1 value,option value2,option info2,option value1,option info1,u8 option count,paramArray, ctor | …
| Format | Operand | Result |
|---|---|---|
ldsftn <Token> |
… | …, sftn |
ldvftn <Token> |
… | …, vftn |
ldftn <Token> |
… | …, ftn |
ldctor <Token> |
… | …, ctor |
ldforeign <Token> |
… | …, foreign |
wrapsftn |
…, sftn | …, dlg |
wrapvftn |
…, vftn, ref | …, dlg |
wrapftn |
…, ftn, ref | …, dlg |
wrapctor |
…, ctor | …, dlg |
wrapforeign |
…, foreign | …, dlg |
callmethod |
…, ftn, ref, … | … |
callvirtual |
…, vftn, ref, … | … |
callstatic |
…, sftn, … | … |
callctor |
…, ctor | … |
callforeign |
…, foreign | … |
callintrinsic <Token> |
… | … |
calldlg |
…, dlg | … |
Fields/Parameters/Local Variables/Enum Constant Access
| Format | Operand | Result |
|---|---|---|
starg.<Type> |
…, value, u16 |
… |
ldarg.<Type> |
…, u16 | …, value |
ldarga |
…, u16 | …, hld |
stloc.<Type> |
…, value, u16 |
… |
ldloc.<Type> |
…, u16 | …, value |
ldloca |
…, u16 | …, hld |
stfld.<Type> <Token> |
…, value, ref or hld |
… |
ldfld.<Type> <Token> |
…, ref, hld or record |
…, value |
ldflda <Token> |
…, ref or hld |
…, hld |
stsfld.<Type> <Token> |
…, value |
… |
ldsfld.<Type> <Token> |
… | …, value |
ldsflda <Token> |
… | …, hld |
testopt |
…, u16 * n, u8, | …, boolean |
ldoptinfo <Token> |
… | …, option info |
ldenumc <Token> |
… | …, enum constant |
Array
数组操作指令中的Token为元素类型的Token。
| Format | Operand | Result |
|---|---|---|
stelemr.<Type> <Token> |
…, ref, i32, value |
… |
stelem.<Type> <Token> |
…, value, ref, i32 |
… |
ldelem.<Type> <Token> |
…, ref, i32 | …, value |
ldelema <Token> |
…, ref, i32 | …, hld |
newarray <Token> |
…, i32 | …, ref |
Control Flow
| Format | Operand | Result |
|---|---|---|
jif <u32 address> |
…, boolean | … |
br <u32 address> |
… | … |
ret |
… | … |
Data Operation
| Format | Operand | Result |
|---|---|---|
nop |
… | … |
dup |
…, value | …, value, value |
push.<Type> <Value> |
… | …, value |
pop.<Type> |
… value |
… |
store.<Type> |
…, value, hld |
… |
load.<Type> |
…, hld | …, value |
ldnothing |
… | …, nothing |
convert <Type> <Type> |
…, value |
…, value |
castClass <Token> <Token> |
…, ref | ref |
instanceof <classToken> |
…,ref | …, boolean |
ldstr <Token> |
… | …, ref |
newobj <Token> |
… | …, ref |
pin |
…, ref | … |
unpin |
…, ref | … |
Exception Handling
| Format | Operand | Result |
|---|---|---|
throw |
…,ref | … |
enter <constructed Token of exception class> <u32 address> |
… | … |
leave <constructed Token of exeception class> |
Binary operation
transform: …, lhs, rhs -> …, result
- Add
- Sub
- Mul
- Div
- And
- Or
- Xor
- EQ
- NE
- LT
- GT
- LE
- GE
- Mod
Unary operation
transform: …, value -> …, value
- Neg
- Not
Site created with