Last active
April 21, 2026 08:07
-
-
Save sogaiu/02d78dc89fdc0d37c123abe552c89ec6 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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