Skip to content

Instantly share code, notes, and snippets.

@sogaiu
Last active April 21, 2026 08:07
Show Gist options
  • Select an option

  • Save sogaiu/02d78dc89fdc0d37c123abe552c89ec6 to your computer and use it in GitHub Desktop.

Select an option

Save sogaiu/02d78dc89fdc0d37c123abe552c89ec6 to your computer and use it in GitHub Desktop.
Number Opcode Name Signature Arity Type Bytes Description
0 JOP_NOOP noop (noop) 0 JINT_0 Does nothing.
1 JOP_ERROR err (err message) 1 JINT_S A Throw error $message.
2 JOP_TYPECHECK tchck (tchck slot types) 2 JINT_ST A:E Assert $slot matches types
3 JOP_RETURN ret (ret val) 1 JINT_S D:A Return $val
4 JOP_RETURN_NIL retn (retn) 0 JINT_0 A Return nil
5 JOP_ADD_IMMEDIATE addim (addim dest lhs im) 3 JINT_SSI B:CS:A $dest = $lhs + im
6 JOP_ADD add (add dest lhs rhs) 3 JINT_SSS B:C:A $dest = $lhs + $rhs
7 JOP_SUBTRACT_IMMEDIATE subim (subim dest lhs im) 3 JINT_SSI B:CS:A $dest = $lhs - im
8 JOP_SUBTRACT sub (sub dest lhs rhs) 3 JINT_SSS B:C:A $dest = $lhs - $rhs
9 JOP_MULTIPLY_IMMEDIATE mulim (mulim dest lhs im) 3 JINT_SSI B:CS:A $dest = $lhs * im
10 JOP_MULTIPLY mul (mul dest lhs rhs) 3 JINT_SSS B:C:A $dest = $lhs * $rhs
11 JOP_DIVIDE_IMMEDIATE divim (divim dest lhs im) 3 JINT_SSI B:CS:A $dest = $lhs / im
12 JOP_DIVIDE div (div dest lhs rhs) 3 JINT_SSS B:C:A $dest = $lhs / $rhs
13 JOP_DIVIDE_FLOOR divf (divf dest lhs rhs) 3 JINT_SSS B:C:A $dest = floor($lhs / $rhs)
14 JOP_MODULO mod (mod dest lhs rhs) 3 JINT_SSS B:C:A $dest = $lhs mod $rhs
15 JOP_REMAINDER rem (rem dest lhs rhs) 3 JINT_SSS B:C:A $dest = $lhs % $rhs
16 JOP_BAND band (band dest lhs rhs) 3 JINT_SSS B:C:A $dest = $lhs & $rhs
17 JOP_BOR bor (bor dest lhs rhs) 3 JINT_SSS B:C:A $dest = $lhs | $rhs
18 JOP_BXOR bxor (bxor dest lhs rhs) 3 JINT_SSS B:C:A $dest = $lhs ^ $rhs
19 JOP_BNOT bnot (bnot dest operand) 2 JINT_SS E:A $dest = ~$operand
20 JOP_SHIFT_LEFT sl (sl dest lhs rhs) 3 JINT_SSS B:C:A $dest = $lhs << $rhs
21 JOP_SHIFT_LEFT_IMMEDIATE slim (slim dest lhs shamt) 3 JINT_SSI B:CS:A $dest = $lhs << shamt
22 JOP_SHIFT_RIGHT sr (sr dest lhs rhs) 3 JINT_SSS B:C:A $dest = $lhs >> $rhs
23 JOP_SHIFT_RIGHT_IMMEDIATE srim (srim dest lhs shamt) 3 JINT_SSI B:CS:A $dest = $lhs >> shamt
24 JOP_SHIFT_RIGHT_UNSIGNED sru (sru dest lhs rhs) 3 JINT_SSS B:C:A $dest = $lhs >>> $rhs
25 JOP_SHIFT_RIGHT_UNSIGNED_IMMEDIATE sruim (sruim dest lhs shamt) 3 JINT_SSU B:CS:A $dest = $lhs >>> shamt
26 JOP_MOVE_FAR movf (movf src dest) 2 JINT_SS E:A $dest = $src
27 JOP_MOVE_NEAR movn (movn dest src) 2 JINT_SS A:E $dest = $src
28 JOP_JUMP jmp (jmp offset) 1 JINT_L DS pc += offset
29 JOP_JUMP_IF jmpif (jmpif cond offset) 2 JINT_SL A:ES if $cond pc += offset else pc++
30 JOP_JUMP_IF_NOT jmpno (jmpno cond offset) 2 JINT_SL A:ES if $cond pc++ else pc += offset
31 JOP_JUMP_IF_NIL jmpni (jmpni cond offset) 2 JINT_SL A:ES if $cond == nil pc += offset else pc++
32 JOP_JUMP_IF_NOT_NIL jmpnn (jmpnn cond offset) 2 JINT_SL A:ES if $cond != nil pc += offset else pc++
33 JOP_GREATER_THAN gt (gt dest lhs rhs) 3 JINT_SSS B:C:A $dest = $lhs > $rhs
34 JOP_GREATER_THAN_IMMEDIATE gtim (gtim dest lhs im) 3 JINT_SSI B:CS:A $dest = $lhs > im
35 JOP_LESS_THAN lt (lt dest lhs rhs) 3 JINT_SSS B:C:A $dest = $lhs < $rhs
36 JOP_LESS_THAN_IMMEDIATE ltim (ltim dest lhs im) 3 JINT_SSI B:CS:A $dest = $lhs < im
37 JOP_EQUALS eq (eq dest lhs rhs) 3 JINT_SSS A:B:C $dest = $lhs == $rhs
38 JOP_EQUALS_IMMEDIATE eqim (eqim dest lhs im) 3 JINT_SSI A:B:CS $dest = $lhs == im
39 JOP_COMPARE cmp (cmp dest lhs rhs) 3 JINT_SSS B:C:A $dest = janet_compare($lhs, $rhs)
40 JOP_LOAD_NIL ldn (ldn dest) 1 JINT_S D $dest = nil
41 JOP_LOAD_TRUE ldt (ldt dest) 1 JINT_S D $dest = true
42 JOP_LOAD_FALSE ldf (ldf dest) 1 JINT_S D $dest = false
43 JOP_LOAD_INTEGER ldi (ldi dest integer) 2 JINT_SI A:ES $dest = integer
44 JOP_LOAD_CONSTANT ldc (ldc dest index) 2 JINT_SC E:A $dest = constants[index]
45 JOP_LOAD_UPVALUE ldu (ldu dest env index) 3 JINT_SES B:C:A $dest = envs[env][index]
46 JOP_LOAD_SELF lds (lds dest) 1 JINT_S D $dest = current closure (self)
47 JOP_SET_UPVALUE setu (setu val env index) 3 JINT_SES B:C:A envs[env][index] = $val
48 JOP_CLOSURE clo (clo dest index) 2 JINT_SD E:A $dest = closure(defs[$index])
49 JOP_PUSH push (push val) 1 JINT_S D Push $val on args
50 JOP_PUSH_2 push2 (push2 val1 val2) 2 JINT_SS A:E Push $val1, $val2 on args
51 JOP_PUSH_3 push3 (push3 val1 val2 val3) 3 JINT_SSS A:B:C Push $val1, $val2, $val3, on args
52 JOP_PUSH_ARRAY pusha (pusha array) 1 JINT_S D Push values in $array on args
53 JOP_CALL call (call dest callee) 2 JINT_SS E:A $dest = call($callee, args)
54 JOP_TAILCALL tcall (tcall callee) 1 JINT_S D:A Return call($callee, args)
55 JOP_RESUME res (res dest fiber val) 3 JINT_SSS B:C:A $dest = resume $fiber with $val
56 JOP_SIGNAL sig (sig dest value sigtype) 3 JINT_SSU C:B $dest = emit $value as sigtype
57 JOP_PROPAGATE prop (prop dest val fiber) 3 JINT_SSS C:B Propagate (Re-raise) a signal that has been caught.
58 JOP_IN in (in dest ds key) 3 JINT_SSS B:C:A $dest = $ds[$key] using `in`
59 JOP_GET get (get dest ds key) 3 JINT_SSS B:C:A $dest = $ds[$key]
60 JOP_PUT put (put ds key val) 3 JINT_SSS A:B:C $ds[$key] = $val
61 JOP_GET_INDEX geti (geti dest ds index) 3 JINT_SSU B:C:A $dest = $ds[index]
62 JOP_PUT_INDEX puti (puti ds val index) 3 JINT_SSU A:C:B $ds[index] = $val
63 JOP_LENGTH len (len dest ds) 2 JINT_SS E:A $dest = length(ds)
64 JOP_MAKE_ARRAY mkarr (mkarr dest) 1 JINT_S D $dest = call(array, args)
65 JOP_MAKE_BUFFER mkbuf (mkbuf dest) 1 JINT_S D $dest = call(buffer, args)
66 JOP_MAKE_STRING mkstr (mkstr dest) 1 JINT_S D $dest = call(string, args)
67 JOP_MAKE_STRUCT mkstu (mkstu dest) 1 JINT_S D $dest = call(struct, args)
68 JOP_MAKE_TABLE mktab (mktab dest) 1 JINT_S D $dest = call(table, args)
69 JOP_MAKE_TUPLE mktup (mktup dest) 1 JINT_S D $dest = call(tuple, args)
70 JOP_MAKE_BRACKET_TUPLE mkbtp (mkbtp dest) 1 JINT_S D $dest = call(tuple/brackets, args)
71 JOP_GREATER_THAN_EQUAL gte (gte dest lhs rhs) 3 JINT_SSS B:C:A $dest = $lhs >= $rhs
72 JOP_LESS_THAN_EQUAL lte (lte dest lhs rhs) 3 JINT_SSS B:C:A $dest = $lhs <= $rhs
73 JOP_NEXT next (next dest ds key) 3 JINT_SSS B:C:A $dest = next($ds, $key)
74 JOP_NOT_EQUALS neq (neq dest lhs rhs) 3 JINT_SSS A:B:C $dest = $lhs != $rhs
75 JOP_NOT_EQUALS_IMMEDIATE neqim (neqim dest lhs im) 3 JINT_SSI A:B:CS $dest = $lhs != $im
76 JOP_CANCEL cncl (cncl dest fiber err) 3 JINT_SSS B:C:A Resume fiber, but raise error immediately
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment