1.9 KiB
Slang Bytecode
Standalone
NOP
0x00
Does nothing.
RET
0x01
Returns
TOS
to caller.
Unary
POS
0x10
Pushes
abs(TOS)
.
NEG
0x11
Pushes
-TOS
.
NOT
0x12
Pushes
!TOS
.
INV
0x13
Pushes
~TOS
.
ATOI
0x14
Pushes integer of smallest possible width parsed from string
TOS
.
ITOA
0x15
Pushes string representation of integer
TOS
.
ITOF
0x16
Pushes real of smallest possible width equal to integer
TOS
.
CEIL
0x17
Pushes smallest integer of smallest possible width greater or equal to real
TOS
.
FLR
0x18
Pushes largest integer of smallest possible width less or equal to real
TOS
.
RND
0x19
Pushes integer of smallest possible width equal to rounded
TOS
.
CTOS
0x1a
Pushes string consisting of char
TOS
and a null byte.
Binary
ADD
0x20
Pushes
TOS1 + TOS
.
SUB
0x21
Pushes
TOS1 - TOS
.
MUL
0x22
Pushes
TOS1 * TOS
.
DIV
0x23
Pushes
TOS1 / TOS
.
FLRDIV
0x24
Pushes
TOS1 // TOS
.
MOD
0x25
Pushes
TOS1 % TOS
.
POW
0x26
Pushes
TOS1 ** TOS
.
SHL
0x27
Pushes
TOS1 << TOS
.
SHR
0x28
Pushes
TOS1 >> TOS
.
AND
0x29
Pushes
TOS1 & TOS
.
OR
0x2a
Pushes
TOS1 | TOS
.
XOR
0x2b
Pushes
TOS1 ^ TOS
.
With argument
ALLOC*(bytes)*
0xa0
Pushes reference to
calloc(1, bytes)
.
EXTEND*(bytes)*
0xa1
Extends integer
TOS
width tobytes
bytes if narrower.
CONST*(bytes)*
0xa2
Reads next
bytes
bytes of bytecode and pushes a reference to a copy of them.
JUMPF*(offset)*
0xa3
Jumps
offset
bytes of bytecode forward.
JUMPB*(offset)*
0xa4
Jumps
offset
bytes of bytecode backward.
SCPGET*(cell)*
0xa5
Pushes the value of cell
cell
of local scope variables array.
SCPSET*(cell)*
0xa6
Sets the value of cell
cell
of local scope variables array toTOS
.
CALL*(nargs)*
0xa7
Pops
nargs ^ (1 << 7)
TODO