Expand description
Pulley bytecode operations with their operands.
Structs§
low32(dst) = bitcast low32(src) as f32
dst = bitcast src as f64
low32(dst) = bitcast low32(src) as i32
dst = bitcast src as i64
- Conditionally transfer control to the given PC offset if
cond
contains a non-zero value. - Conditionally transfer control to the given PC offset if
cond
contains a zero value. - Branch if
a == b
. - Branch if
a == b
. - Branch if
a !=
b. - Branch if
a !=
b. - Branch if signed
a < b
. - Branch if signed
a < b
. - Branch if signed
a <= b
. - Branch if signed
a <= b
. - Branch if unsigned
a < b
. - Branch if unsigned
a < b
. - Branch if unsigned
a <= b
. - Branch if unsigned
a <= b
. - Branch to the label indicated by
idx
. - Transfer control to the PC at the given offset and set the
lr
register to the PC just after this instruction. - Transfer control to the PC in
reg
and setlr
to the PC just after this instruction. - A special opcode to use an indirect function call to reenter the host from the interpreter.
- Move between
f
registers. - Unconditionally transfer control to the PC at the given offset.
dst = load64(ptr)
dst = sign_extend(load32(ptr))
dst = sign_extend(load32(ptr + offset8))
dst = sign_extend(load32(ptr + offset64))
dst = zero_extend(load32(ptr))
dst = zero_extend(load32(ptr + offset8))
dst = zero_extend(load32(ptr + offset64))
dst = load64(ptr + offset8)
dst = load64(ptr + offset64)
- Materialize
OpsVisitor decode
A visitor that materializes wholeOp
s as it decodes the bytecode stream. - Do nothing.
sp = fp; pop fp; pop lr
push lr; push fp; fp = sp
- Transfer control the address in the
lr
register. sp = sp.checked_sub(amt)
sp = sp + amt
*ptr = low32(src)
*ptr = src
*(ptr + sign_extend(offset8)) = low32(src)
*(ptr + sign_extend(offset64)) = low32(src)
*(ptr + sign_extend(offset8)) = src
*(ptr + sign_extend(offset64)) = src
- Raise a trap.
- Move between
v
registers. *dst = *sp; sp -= 4
*dst = *sp; sp -= 8
for dst in dsts.rev() { xpop32 dst }
for dst in dsts.rev() { xpop64 dst }
*sp = low32(src); sp = sp.checked_add(4)
*sp = src; sp = sp.checked_add(8)
for src in srcs { xpush32 src }
for src in srcs { xpush64 src }
- 32-bit wrapping addition:
low32(dst) = low32(src1) + low32(src2)
. - 64-bit wrapping addition:
dst = src1 + src2
. - Set
dst = sign_extend(imm8)
. - Set
dst = sign_extend(imm16)
. - Set
dst = sign_extend(imm32)
. - Set
dst = imm64
. - 32-bit equality.
- 64-bit equality.
- Move between
x
registers. - 32-bit inequality.
- 64-bit inequality.
- 32-bit signed less-than.
- 64-bit signed less-than.
- 32-bit signed less-than-equal.
- 64-bit signed less-than-equal.
- 32-bit unsigned less-than.
- 64-bit unsigned less-than.
- 32-bit unsigned less-than-equal.
- 64-bit unsigned less-than-equal.
Enums§
- An extended operation/instruction.
- A complete, materialized operation/instruction.