From fae713d0bc893b1aa1c4c6891e57357b7dadff06 Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Wed, 15 Oct 2025 21:52:11 +0400 Subject: [PATCH] feat: use latest TVM specification --- server/src/languages/fift/asm/asm.json | 33114 ------- server/src/languages/fift/asm/gas.ts | 5 +- server/src/languages/fift/asm/schema.json | 1389 +- .../fift/asm/specification-schema.ts | 142 + .../fift/asm/stack-signatures-schema.ts | 202 + .../languages/fift/asm/tvm-specification.json | 71512 ++++++++++++++++ server/src/languages/fift/asm/types.ts | 129 +- .../fift/documentation/asm_documentation.ts | 46 +- .../fift/documentation/documentation.ts | 3 +- server/src/languages/fift/inlays/collect.ts | 18 +- tsconfig.json | 1 + 11 files changed, 72741 insertions(+), 33820 deletions(-) delete mode 100644 server/src/languages/fift/asm/asm.json create mode 100644 server/src/languages/fift/asm/specification-schema.ts create mode 100644 server/src/languages/fift/asm/stack-signatures-schema.ts create mode 100644 server/src/languages/fift/asm/tvm-specification.json diff --git a/server/src/languages/fift/asm/asm.json b/server/src/languages/fift/asm/asm.json deleted file mode 100644 index 30e3c626..00000000 --- a/server/src/languages/fift/asm/asm.json +++ /dev/null @@ -1,33114 +0,0 @@ -{ - "$schema": "schema.json", - "instructions": [ - { - "mnemonic": "NOP", - "since_version": 0, - "doc": { - "category": "stack_basic", - "description": "Does nothing.", - "gas": "18", - "fift": "NOP", - "fift_examples": [], - "opcode": "00", - "stack": "-" - }, - "bytecode": {"tlb": "#00", "prefix": "00", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "XCHG_0I", - "since_version": 0, - "doc": { - "category": "stack_basic", - "description": "Interchanges `s0` with `s[i]`, `1 <= i <= 15`.", - "gas": "18", - "fift": "s[i] XCHG0", - "fift_examples": [], - "opcode": "0i", - "stack": "" - }, - "bytecode": { - "tlb": "#0 i:(## 4) {1 <= i}", - "prefix": "0", - "operands_range_check": {"length": 4, "from": 1, "to": 15}, - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 1, - "max_value": 15, - "display_hints": [{"type": "stack"}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "XCHG_IJ", - "since_version": 0, - "doc": { - "category": "stack_basic", - "description": "Interchanges `s[i]` with `s[j]`, `1 <= i < j <= 15`.", - "gas": "26", - "fift": "s[i] s[j] XCHG", - "fift_examples": [], - "opcode": "10ij", - "stack": "" - }, - "bytecode": { - "tlb": "#10 i:(## 4) j:(## 4) {1 <= i} {i + 1 <= j}", - "prefix": "10", - "operands_range_check": {"length": 4, "from": 1, "to": 15}, - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 1, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "XCHG_0I_LONG", - "since_version": 0, - "doc": { - "category": "stack_basic", - "description": "Interchanges `s0` with `s[ii]`, `0 <= ii <= 255`.", - "gas": "26", - "fift": "s0 [ii] s() XCHG", - "fift_examples": [], - "opcode": "11ii", - "stack": "" - }, - "bytecode": { - "tlb": "#11 ii:uint8", - "prefix": "11", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "stack"}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "XCHG_1I", - "since_version": 0, - "doc": { - "category": "stack_basic", - "description": "Interchanges `s1` with `s[i]`, `2 <= i <= 15`.", - "gas": "18", - "fift": "s1 s[i] XCHG", - "fift_examples": [], - "opcode": "1i", - "stack": "" - }, - "bytecode": { - "tlb": "#1 i:(## 4) {2 <= i}", - "prefix": "1", - "operands_range_check": {"length": 4, "from": 2, "to": 15}, - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 2, - "max_value": 15, - "display_hints": [{"type": "stack"}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSH", - "since_version": 0, - "doc": { - "category": "stack_basic", - "description": "Pushes a copy of the old `s[i]` into the stack.", - "gas": "18", - "fift": "s[i] PUSH", - "fift_examples": [], - "opcode": "2i", - "stack": "" - }, - "bytecode": { - "tlb": "#2 i:uint4", - "prefix": "2", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "POP", - "since_version": 0, - "doc": { - "category": "stack_basic", - "description": "Pops the old `s0` value into the old `s[i]`.", - "gas": "18", - "fift": "s[i] POP", - "fift_examples": [], - "opcode": "3i", - "stack": "" - }, - "bytecode": { - "tlb": "#3 i:uint4", - "prefix": "3", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "XCHG3", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `s2 s[i] XCHG` `s1 s[j] XCHG` `s[k] XCHG0`.", - "gas": "26", - "fift": "s[i] s[j] s[k] XCHG3", - "fift_examples": [], - "opcode": "4ijk", - "stack": "" - }, - "bytecode": { - "tlb": "#4 i:uint4 j:uint4 k:uint4", - "prefix": "4", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "k", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "XCHG2", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `s1 s[i] XCHG` `s[j] XCHG0`.", - "gas": "26", - "fift": "s[i] s[j] XCHG2", - "fift_examples": [], - "opcode": "50ij", - "stack": "" - }, - "bytecode": { - "tlb": "#50 i:uint4 j:uint4", - "prefix": "50", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "XCPU", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `s[i] XCHG0` `s[j] PUSH`.", - "gas": "26", - "fift": "s[i] s[j] XCPU", - "fift_examples": [], - "opcode": "51ij", - "stack": "" - }, - "bytecode": { - "tlb": "#51 i:uint4 j:uint4", - "prefix": "51", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUXC", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `s[i] PUSH` `SWAP` `s[j] XCHG0`.", - "gas": "26", - "fift": "s[i] s[j-1] PUXC", - "fift_examples": [], - "opcode": "52ij", - "stack": "" - }, - "bytecode": { - "tlb": "#52 i:uint4 j:uint4", - "prefix": "52", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}, {"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSH2", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `s[i] PUSH` `s[j+1] PUSH`.", - "gas": "26", - "fift": "s[i] s[j] PUSH2", - "fift_examples": [], - "opcode": "53ij", - "stack": "" - }, - "bytecode": { - "tlb": "#53 i:uint4 j:uint4", - "prefix": "53", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "XCHG3_ALT", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Long form of `XCHG3`.", - "gas": "34", - "fift": "s[i] s[j] s[k] XCHG3_l", - "fift_examples": [], - "opcode": "540ijk", - "stack": "" - }, - "bytecode": { - "tlb": "#540 i:uint4 j:uint4 k:uint4", - "prefix": "540", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "k", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "XC2PU", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `s[i] s[j] XCHG2` `s[k] PUSH`.", - "gas": "34", - "fift": "s[i] s[j] s[k] XC2PU", - "fift_examples": [], - "opcode": "541ijk", - "stack": "" - }, - "bytecode": { - "tlb": "#541 i:uint4 j:uint4 k:uint4", - "prefix": "541", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "k", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "XCPUXC", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `s1 s[i] XCHG` `s[j] s[k-1] PUXC`.", - "gas": "34", - "fift": "s[i] s[j] s[k-1] XCPUXC", - "fift_examples": [], - "opcode": "542ijk", - "stack": "" - }, - "bytecode": { - "tlb": "#542 i:uint4 j:uint4 k:uint4", - "prefix": "542", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "k", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}, {"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "XCPU2", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `s[i] XCHG0` `s[j] s[k] PUSH2`.", - "gas": "34", - "fift": "s[i] s[j] s[k] XCPU2", - "fift_examples": [], - "opcode": "543ijk", - "stack": "" - }, - "bytecode": { - "tlb": "#543 i:uint4 j:uint4 k:uint4", - "prefix": "543", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "k", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUXC2", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `s[i] PUSH` `s2 XCHG0` `s[j] s[k] XCHG2`.", - "gas": "34", - "fift": "s[i] s[j-1] s[k-1] PUXC2", - "fift_examples": [], - "opcode": "544ijk", - "stack": "" - }, - "bytecode": { - "tlb": "#544 i:uint4 j:uint4 k:uint4", - "prefix": "544", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}, {"type": "add", "value": 1}] - }, - { - "name": "k", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}, {"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUXCPU", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `s[i] s[j-1] PUXC` `s[k] PUSH`.", - "gas": "34", - "fift": "s[i] s[j-1] s[k-1] PUXCPU", - "fift_examples": [], - "opcode": "545ijk", - "stack": "" - }, - "bytecode": { - "tlb": "#545 i:uint4 j:uint4 k:uint4", - "prefix": "545", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}, {"type": "add", "value": 1}] - }, - { - "name": "k", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}, {"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PU2XC", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `s[i] PUSH` `SWAP` `s[j] s[k-1] PUXC`.", - "gas": "34", - "fift": "s[i] s[j-1] s[k-2] PU2XC", - "fift_examples": [], - "opcode": "546ijk", - "stack": "" - }, - "bytecode": { - "tlb": "#546 i:uint4 j:uint4 k:uint4", - "prefix": "546", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}, {"type": "add", "value": 1}] - }, - { - "name": "k", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}, {"type": "add", "value": 2}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSH3", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `s[i] PUSH` `s[j+1] s[k+1] PUSH2`.", - "gas": "34", - "fift": "s[i] s[j] s[k] PUSH3", - "fift_examples": [], - "opcode": "547ijk", - "stack": "" - }, - "bytecode": { - "tlb": "#547 i:uint4 j:uint4 k:uint4", - "prefix": "547", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - }, - { - "name": "k", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLKSWAP", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Permutes two blocks `s[j+i+1] ... s[j+1]` and `s[j] ... s0`.\n`0 <= i,j <= 15`\nEquivalent to `[i+1] [j+1] REVERSE` `[j+1] 0 REVERSE` `[i+j+2] 0 REVERSE`.", - "gas": "26", - "fift": "[i+1] [j+1] BLKSWAP", - "fift_examples": [], - "opcode": "55ij", - "stack": "" - }, - "bytecode": { - "tlb": "#55 i:uint4 j:uint4", - "prefix": "55", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}, {"type": "add", "value": 1}] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "stack"}, {"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSH_LONG", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Pushes a copy of the old `s[ii]` into the stack.\n`0 <= ii <= 255`", - "gas": "26", - "fift": "[ii] s() PUSH", - "fift_examples": [], - "opcode": "56ii", - "stack": "" - }, - "bytecode": { - "tlb": "#56 ii:uint8", - "prefix": "56", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "stack"}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "POP_LONG", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Pops the old `s0` value into the old `s[ii]`.\n`0 <= ii <= 255`", - "gas": "26", - "fift": "[ii] s() POP", - "fift_examples": [], - "opcode": "57ii", - "stack": "" - }, - "bytecode": { - "tlb": "#57 ii:uint8", - "prefix": "57", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "stack"}] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ROT", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `1 2 BLKSWAP` or to `s2 s1 XCHG2`.", - "gas": "18", - "fift": "ROT", - "fift_examples": [], - "opcode": "58", - "stack": "a b c - b c a" - }, - "bytecode": {"tlb": "#58", "prefix": "58", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ROTREV", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `2 1 BLKSWAP` or to `s2 s2 XCHG2`.", - "gas": "18", - "fift": "ROTREV\n-ROT", - "fift_examples": [], - "opcode": "59", - "stack": "a b c - c a b" - }, - "bytecode": {"tlb": "#59", "prefix": "59", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SWAP2", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `2 2 BLKSWAP` or to `s3 s2 XCHG2`.", - "gas": "18", - "fift": "SWAP2\n2SWAP", - "fift_examples": [], - "opcode": "5A", - "stack": "a b c d - c d a b" - }, - "bytecode": {"tlb": "#5A", "prefix": "5A", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DROP2", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `DROP` `DROP`.", - "gas": "18", - "fift": "DROP2\n2DROP", - "fift_examples": [], - "opcode": "5B", - "stack": "a b - " - }, - "bytecode": {"tlb": "#5B", "prefix": "5B", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DUP2", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `s1 s0 PUSH2`.", - "gas": "18", - "fift": "DUP2\n2DUP", - "fift_examples": [], - "opcode": "5C", - "stack": "a b - a b a b" - }, - "bytecode": {"tlb": "#5C", "prefix": "5C", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "OVER2", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `s3 s2 PUSH2`.", - "gas": "18", - "fift": "OVER2\n2OVER", - "fift_examples": [], - "opcode": "5D", - "stack": "a b c d - a b c d a b" - }, - "bytecode": {"tlb": "#5D", "prefix": "5D", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "REVERSE", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Reverses the order of `s[j+i+1] ... s[j]`.", - "gas": "26", - "fift": "[i+2] [j] REVERSE", - "fift_examples": [], - "opcode": "5Eij", - "stack": "" - }, - "bytecode": { - "tlb": "#5E i:uint4 j:uint4", - "prefix": "5E", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLKDROP", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `DROP` performed `i` times.", - "gas": "26", - "fift": "[i] BLKDROP", - "fift_examples": [], - "opcode": "5F0i", - "stack": "" - }, - "bytecode": { - "tlb": "#5F0 i:uint4", - "prefix": "5F0", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLKPUSH", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `PUSH s(j)` performed `i` times.\n`1 <= i <= 15`, `0 <= j <= 15`.", - "gas": "26", - "fift": "[i] [j] BLKPUSH", - "fift_examples": [], - "opcode": "5Fij", - "stack": "" - }, - "bytecode": { - "tlb": "#5F i:(## 4) j:uint4 {1 <= i}", - "prefix": "5F", - "operands_range_check": {"length": 4, "from": 1, "to": 15}, - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 1, - "max_value": 15, - "display_hints": [] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PICK", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Pops integer `i` from the stack, then performs `s[i] PUSH`.", - "gas": "18", - "fift": "PICK\nPUSHX", - "fift_examples": [], - "opcode": "60", - "stack": "" - }, - "bytecode": {"tlb": "#60", "prefix": "60", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ROLLX", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Pops integer `i` from the stack, then performs `1 [i] BLKSWAP`.", - "gas": "18", - "fift": "ROLLX", - "fift_examples": [], - "opcode": "61", - "stack": "" - }, - "bytecode": {"tlb": "#61", "prefix": "61", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "-ROLLX", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Pops integer `i` from the stack, then performs `[i] 1 BLKSWAP`.", - "gas": "18", - "fift": "-ROLLX\nROLLREVX", - "fift_examples": [], - "opcode": "62", - "stack": "" - }, - "bytecode": {"tlb": "#62", "prefix": "62", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLKSWX", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Pops integers `i`,`j` from the stack, then performs `[i] [j] BLKSWAP`.", - "gas": "18", - "fift": "BLKSWX", - "fift_examples": [], - "opcode": "63", - "stack": "" - }, - "bytecode": {"tlb": "#63", "prefix": "63", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "REVX", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Pops integers `i`,`j` from the stack, then performs `[i] [j] REVERSE`.", - "gas": "18", - "fift": "REVX", - "fift_examples": [], - "opcode": "64", - "stack": "" - }, - "bytecode": {"tlb": "#64", "prefix": "64", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DROPX", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Pops integer `i` from the stack, then performs `[i] BLKDROP`.", - "gas": "18", - "fift": "DROPX", - "fift_examples": [], - "opcode": "65", - "stack": "" - }, - "bytecode": {"tlb": "#65", "prefix": "65", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "TUCK", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Equivalent to `SWAP` `OVER` or to `s1 s1 XCPU`.", - "gas": "18", - "fift": "TUCK", - "fift_examples": [], - "opcode": "66", - "stack": "a b - b a b" - }, - "bytecode": {"tlb": "#66", "prefix": "66", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "XCHGX", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Pops integer `i` from the stack, then performs `s[i] XCHG`.", - "gas": "18", - "fift": "XCHGX", - "fift_examples": [], - "opcode": "67", - "stack": "" - }, - "bytecode": {"tlb": "#67", "prefix": "67", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DEPTH", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Pushes the current depth of the stack.", - "gas": "18", - "fift": "DEPTH", - "fift_examples": [], - "opcode": "68", - "stack": "- depth" - }, - "bytecode": {"tlb": "#68", "prefix": "68", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "depth", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CHKDEPTH", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Pops integer `i` from the stack, then checks whether there are at least `i` elements, generating a stack underflow exception otherwise.", - "gas": "18/58", - "fift": "CHKDEPTH", - "fift_examples": [], - "opcode": "69", - "stack": "i -" - }, - "bytecode": {"tlb": "#69", "prefix": "69", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "i", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ONLYTOPX", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Pops integer `i` from the stack, then removes all but the top `i` elements.", - "gas": "18", - "fift": "ONLYTOPX", - "fift_examples": [], - "opcode": "6A", - "stack": "" - }, - "bytecode": {"tlb": "#6A", "prefix": "6A", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ONLYX", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Pops integer `i` from the stack, then leaves only the bottom `i` elements. Approximately equivalent to `DEPTH` `SWAP` `SUB` `DROPX`.", - "gas": "18", - "fift": "ONLYX", - "fift_examples": [], - "opcode": "6B", - "stack": "" - }, - "bytecode": {"tlb": "#6B", "prefix": "6B", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLKDROP2", - "since_version": 0, - "doc": { - "category": "stack_complex", - "description": "Drops `i` stack elements under the top `j` elements.\n`1 <= i <= 15`, `0 <= j <= 15`\nEquivalent to `[i+j] 0 REVERSE` `[i] BLKDROP` `[j] 0 REVERSE`.", - "gas": "26", - "fift": "[i] [j] BLKDROP2", - "fift_examples": [], - "opcode": "6Cij", - "stack": "" - }, - "bytecode": { - "tlb": "#6C i:(## 4) j:uint4 {1 <= i}", - "prefix": "6C", - "operands_range_check": {"length": 4, "from": 1, "to": 15}, - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 1, - "max_value": 15, - "display_hints": [] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "NULL", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Pushes the only value of type _Null_.", - "gas": "18", - "fift": "NULL\nPUSHNULL", - "fift_examples": [], - "opcode": "6D", - "stack": " - null" - }, - "bytecode": {"tlb": "#6D", "prefix": "6D", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "const", "value": null, "value_type": "Null"}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ISNULL", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Checks whether `x` is a _Null_, and returns `-1` or `0` accordingly.", - "gas": "18", - "fift": "ISNULL", - "fift_examples": [], - "opcode": "6E", - "stack": "x - ?" - }, - "bytecode": {"tlb": "#6E", "prefix": "6E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "TUPLE", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Creates a new _Tuple_ `t=(x_1, ... ,x_n)` containing `n` values `x_1`,..., `x_n`.\n`0 <= n <= 15`", - "gas": "26+n", - "fift": "[n] TUPLE", - "fift_examples": [], - "opcode": "6F0n", - "stack": "x_1 ... x_n - t" - }, - "bytecode": { - "tlb": "#6F0 n:uint4", - "prefix": "6F0", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "tuple_elements", - "length_var": "n", - "array_entry": [{"type": "simple", "name": "x"}] - } - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "t", "value_types": ["Tuple"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "INDEX", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Returns the `k`-th element of a _Tuple_ `t`.\n`0 <= k <= 15`.", - "gas": "26", - "fift": "[k] INDEX", - "fift_examples": [], - "opcode": "6F1k", - "stack": "t - x" - }, - "bytecode": { - "tlb": "#6F1 k:uint4", - "prefix": "6F1", - "operands": [ - { - "name": "k", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "t", "value_types": ["Tuple"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "UNTUPLE", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Unpacks a _Tuple_ `t=(x_1,...,x_n)` of length equal to `0 <= n <= 15`.\nIf `t` is not a _Tuple_, or if `|t| != n`, a type check exception is thrown.", - "gas": "26+n", - "fift": "[n] UNTUPLE", - "fift_examples": [], - "opcode": "6F2n", - "stack": "t - x_1 ... x_n" - }, - "bytecode": { - "tlb": "#6F2 n:uint4", - "prefix": "6F2", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "t", "value_types": ["Tuple"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "array", - "name": "tuple_elements", - "length_var": "n", - "array_entry": [{"type": "simple", "name": "x"}] - } - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "UNPACKFIRST", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Unpacks first `0 <= k <= 15` elements of a _Tuple_ `t`.\nIf `|t|= |t|`, throws a range check exception.", - "gas": "26+|t|", - "fift": "[k] SETINDEX", - "fift_examples": [], - "opcode": "6F5k", - "stack": "t x - t'" - }, - "bytecode": { - "tlb": "#6F5 k:uint4", - "prefix": "6F5", - "operands": [ - { - "name": "k", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "t", "value_types": ["Tuple"]}, - {"type": "simple", "name": "x"} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "t2", "value_types": ["Tuple"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "INDEXQ", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Returns the `k`-th element of a _Tuple_ `t`, where `0 <= k <= 15`. In other words, returns `x_{k+1}` if `t=(x_1,...,x_n)`. If `k>=n`, or if `t` is _Null_, returns a _Null_ instead of `x`.", - "gas": "26", - "fift": "[k] INDEXQ", - "fift_examples": [], - "opcode": "6F6k", - "stack": "t - x" - }, - "bytecode": { - "tlb": "#6F6 k:uint4", - "prefix": "6F6", - "operands": [ - { - "name": "k", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "t", "value_types": ["Tuple", "Null"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETINDEXQ", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Sets the `k`-th component of _Tuple_ `t` to `x`, where `0 <= k < 16`, and returns the resulting _Tuple_ `t'`.\nIf `|t| <= k`, first extends the original _Tuple_ to length `n'=k+1` by setting all new components to _Null_. If the original value of `t` is _Null_, treats it as an empty _Tuple_. If `t` is not _Null_ or _Tuple_, throws an exception. If `x` is _Null_ and either `|t| <= k` or `t` is _Null_, then always returns `t'=t` (and does not consume tuple creation gas).", - "gas": "26+|t'|", - "fift": "[k] SETINDEXQ", - "fift_examples": [], - "opcode": "6F7k", - "stack": "t x - t'" - }, - "bytecode": { - "tlb": "#6F7 k:uint4", - "prefix": "6F7", - "operands": [ - { - "name": "k", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "t", "value_types": ["Tuple", "Null"]}, - {"type": "simple", "name": "x"} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "t2", "value_types": ["Tuple", "Null"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "TUPLEVAR", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Creates a new _Tuple_ `t` of length `n` similarly to `TUPLE`, but with `0 <= n <= 255` taken from the stack.", - "gas": "26+n", - "fift": "TUPLEVAR", - "fift_examples": [], - "opcode": "6F80", - "stack": "x_1 ... x_n n - t" - }, - "bytecode": {"tlb": "#6F80", "prefix": "6F80", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "tuple_elements", - "length_var": "n", - "array_entry": [{"type": "simple", "name": "x"}] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "t", "value_types": ["Tuple"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "INDEXVAR", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Similar to `k INDEX`, but with `0 <= k <= 254` taken from the stack.", - "gas": "26", - "fift": "INDEXVAR", - "fift_examples": [], - "opcode": "6F81", - "stack": "t k - x" - }, - "bytecode": {"tlb": "#6F81", "prefix": "6F81", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "t", "value_types": ["Tuple"]}, - {"type": "simple", "name": "k", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "UNTUPLEVAR", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Similar to `n UNTUPLE`, but with `0 <= n <= 255` taken from the stack.", - "gas": "26+n", - "fift": "UNTUPLEVAR", - "fift_examples": [], - "opcode": "6F82", - "stack": "t n - x_1 ... x_n" - }, - "bytecode": {"tlb": "#6F82", "prefix": "6F82", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "t", "value_types": ["Tuple"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "array", - "name": "tuple_elements", - "length_var": "n", - "array_entry": [{"type": "simple", "name": "x"}] - } - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "UNPACKFIRSTVAR", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Similar to `n UNPACKFIRST`, but with `0 <= n <= 255` taken from the stack.", - "gas": "26+n", - "fift": "UNPACKFIRSTVAR", - "fift_examples": [], - "opcode": "6F83", - "stack": "t n - x_1 ... x_n" - }, - "bytecode": {"tlb": "#6F83", "prefix": "6F83", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "t", "value_types": ["Tuple"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "array", - "name": "tuple_elements", - "length_var": "n", - "array_entry": [{"type": "simple", "name": "x"}] - } - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "EXPLODEVAR", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Similar to `n EXPLODE`, but with `0 <= n <= 255` taken from the stack.", - "gas": "26+m", - "fift": "EXPLODEVAR", - "fift_examples": [], - "opcode": "6F84", - "stack": "t n - x_1 ... x_m m" - }, - "bytecode": {"tlb": "#6F84", "prefix": "6F84", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "t", "value_types": ["Tuple"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "array", - "name": "tuple_elements", - "length_var": "m", - "array_entry": [{"type": "simple", "name": "x"}] - }, - {"type": "simple", "name": "m", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETINDEXVAR", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Similar to `k SETINDEX`, but with `0 <= k <= 254` taken from the stack.", - "gas": "26+|t'|", - "fift": "SETINDEXVAR", - "fift_examples": [], - "opcode": "6F85", - "stack": "t x k - t'" - }, - "bytecode": {"tlb": "#6F85", "prefix": "6F85", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "t", "value_types": ["Tuple"]}, - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "k", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "t2", "value_types": ["Tuple"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "INDEXVARQ", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Similar to `n INDEXQ`, but with `0 <= k <= 254` taken from the stack.", - "gas": "26", - "fift": "INDEXVARQ", - "fift_examples": [], - "opcode": "6F86", - "stack": "t k - x" - }, - "bytecode": {"tlb": "#6F86", "prefix": "6F86", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "t", "value_types": ["Tuple", "Null"]}, - {"type": "simple", "name": "k", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETINDEXVARQ", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Similar to `k SETINDEXQ`, but with `0 <= k <= 254` taken from the stack.", - "gas": "26+|t'|", - "fift": "SETINDEXVARQ", - "fift_examples": [], - "opcode": "6F87", - "stack": "t x k - t'" - }, - "bytecode": {"tlb": "#6F87", "prefix": "6F87", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "t", "value_types": ["Tuple", "Null"]}, - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "k", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "t2", "value_types": ["Tuple", "Null"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "TLEN", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Returns the length of a _Tuple_.", - "gas": "26", - "fift": "TLEN", - "fift_examples": [], - "opcode": "6F88", - "stack": "t - n" - }, - "bytecode": {"tlb": "#6F88", "prefix": "6F88", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "t", "value_types": ["Tuple"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "n", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QTLEN", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Similar to `TLEN`, but returns `-1` if `t` is not a _Tuple_.", - "gas": "26", - "fift": "QTLEN", - "fift_examples": [], - "opcode": "6F89", - "stack": "t - n or -1" - }, - "bytecode": {"tlb": "#6F89", "prefix": "6F89", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "t", "value_types": ["Tuple"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "n", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ISTUPLE", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Returns `-1` or `0` depending on whether `t` is a _Tuple_.", - "gas": "26", - "fift": "ISTUPLE", - "fift_examples": [], - "opcode": "6F8A", - "stack": "t - ?" - }, - "bytecode": {"tlb": "#6F8A", "prefix": "6F8A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "t", "value_types": ["Tuple"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "n", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LAST", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Returns the last element of a non-empty _Tuple_ `t`.", - "gas": "26", - "fift": "LAST", - "fift_examples": [], - "opcode": "6F8B", - "stack": "t - x" - }, - "bytecode": {"tlb": "#6F8B", "prefix": "6F8B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "t", "value_types": ["Tuple"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "TPUSH", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Appends a value `x` to a _Tuple_ `t=(x_1,...,x_n)`, but only if the resulting _Tuple_ `t'=(x_1,...,x_n,x)` is of length at most 255. Otherwise throws a type check exception.", - "gas": "26+|t'|", - "fift": "TPUSH\nCOMMA", - "fift_examples": [], - "opcode": "6F8C", - "stack": "t x - t'" - }, - "bytecode": {"tlb": "#6F8C", "prefix": "6F8C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "t", "value_types": ["Tuple"]}, - {"type": "simple", "name": "x"} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "t2", "value_types": ["Tuple"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "TPOP", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Detaches the last element `x=x_n` from a non-empty _Tuple_ `t=(x_1,...,x_n)`, and returns both the resulting _Tuple_ `t'=(x_1,...,x_{n-1})` and the original last element `x`.", - "gas": "26+|t'|", - "fift": "TPOP", - "fift_examples": [], - "opcode": "6F8D", - "stack": "t - t' x" - }, - "bytecode": {"tlb": "#6F8D", "prefix": "6F8D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "t", "value_types": ["Tuple"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "t2", "value_types": ["Tuple"]}, - {"type": "simple", "name": "x"} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "NULLSWAPIF", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Pushes a _Null_ under the topmost _Integer_ `x`, but only if `x!=0`.", - "gas": "26", - "fift": "NULLSWAPIF", - "fift_examples": [], - "opcode": "6FA0", - "stack": "x - x or null x" - }, - "bytecode": {"tlb": "#6FA0", "prefix": "6FA0", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "x", - "match": [{"value": 0, "stack": []}], - "else": [{"type": "const", "value": null, "value_type": "Null"}] - }, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "NULLSWAPIFNOT", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Pushes a _Null_ under the topmost _Integer_ `x`, but only if `x=0`. May be used for stack alignment after quiet primitives such as `PLDUXQ`.", - "gas": "26", - "fift": "NULLSWAPIFNOT", - "fift_examples": [], - "opcode": "6FA1", - "stack": "x - x or null x" - }, - "bytecode": {"tlb": "#6FA1", "prefix": "6FA1", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "x", - "match": [ - { - "value": 0, - "stack": [ - {"type": "const", "value": null, "value_type": "Null"} - ] - } - ], - "else": [] - }, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "NULLROTRIF", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Pushes a _Null_ under the second stack entry from the top, but only if the topmost _Integer_ `y` is non-zero.", - "gas": "26", - "fift": "NULLROTRIF", - "fift_examples": [], - "opcode": "6FA2", - "stack": "x y - x y or null x y" - }, - "bytecode": {"tlb": "#6FA2", "prefix": "6FA2", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "y", - "match": [{"value": 0, "stack": []}], - "else": [{"type": "const", "value": null, "value_type": "Null"}] - }, - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "NULLROTRIFNOT", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Pushes a _Null_ under the second stack entry from the top, but only if the topmost _Integer_ `y` is zero. May be used for stack alignment after quiet primitives such as `LDUXQ`.", - "gas": "26", - "fift": "NULLROTRIFNOT", - "fift_examples": [], - "opcode": "6FA3", - "stack": "x y - x y or null x y" - }, - "bytecode": {"tlb": "#6FA3", "prefix": "6FA3", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "y", - "match": [ - { - "value": 0, - "stack": [ - {"type": "const", "value": null, "value_type": "Null"} - ] - } - ], - "else": [] - }, - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "NULLSWAPIF2", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Pushes two nulls under the topmost _Integer_ `x`, but only if `x!=0`.\nEquivalent to `NULLSWAPIF` `NULLSWAPIF`.", - "gas": "26", - "fift": "NULLSWAPIF2", - "fift_examples": [], - "opcode": "6FA4", - "stack": "x - x or null null x" - }, - "bytecode": {"tlb": "#6FA4", "prefix": "6FA4", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "x", - "match": [{"value": 0, "stack": []}], - "else": [ - {"type": "const", "value": null, "value_type": "Null"}, - {"type": "const", "value": null, "value_type": "Null"} - ] - }, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "NULLSWAPIFNOT2", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Pushes two nulls under the topmost _Integer_ `x`, but only if `x=0`.\nEquivalent to `NULLSWAPIFNOT` `NULLSWAPIFNOT`.", - "gas": "26", - "fift": "NULLSWAPIFNOT2", - "fift_examples": [], - "opcode": "6FA5", - "stack": "x - x or null null x" - }, - "bytecode": {"tlb": "#6FA5", "prefix": "6FA5", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "x", - "match": [ - { - "value": 0, - "stack": [ - {"type": "const", "value": null, "value_type": "Null"}, - {"type": "const", "value": null, "value_type": "Null"} - ] - } - ], - "else": [] - }, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "NULLROTRIF2", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Pushes two nulls under the second stack entry from the top, but only if the topmost _Integer_ `y` is non-zero.\nEquivalent to `NULLROTRIF` `NULLROTRIF`.", - "gas": "26", - "fift": "NULLROTRIF2", - "fift_examples": [], - "opcode": "6FA6", - "stack": "x y - x y or null null x y" - }, - "bytecode": {"tlb": "#6FA6", "prefix": "6FA6", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "y", - "match": [{"value": 0, "stack": []}], - "else": [ - {"type": "const", "value": null, "value_type": "Null"}, - {"type": "const", "value": null, "value_type": "Null"} - ] - }, - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "NULLROTRIFNOT2", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Pushes two nulls under the second stack entry from the top, but only if the topmost _Integer_ `y` is zero.\nEquivalent to `NULLROTRIFNOT` `NULLROTRIFNOT`.", - "gas": "26", - "fift": "NULLROTRIFNOT2", - "fift_examples": [], - "opcode": "6FA7", - "stack": "x y - x y or null null x y" - }, - "bytecode": {"tlb": "#6FA7", "prefix": "6FA7", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "y", - "match": [ - { - "value": 0, - "stack": [ - {"type": "const", "value": null, "value_type": "Null"}, - {"type": "const", "value": null, "value_type": "Null"} - ] - } - ], - "else": [] - }, - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "INDEX2", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Recovers `x=(t_{i+1})_{j+1}` for `0 <= i,j <= 3`.\nEquivalent to `[i] INDEX` `[j] INDEX`.", - "gas": "26", - "fift": "[i] [j] INDEX2", - "fift_examples": [], - "opcode": "6FBij", - "stack": "t - x" - }, - "bytecode": { - "tlb": "#6FB i:uint2 j:uint2", - "prefix": "6FB", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 2, - "min_value": 0, - "max_value": 3, - "display_hints": [] - }, - { - "name": "j", - "type": "uint", - "size": 2, - "min_value": 0, - "max_value": 3, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "t", "value_types": ["Tuple"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "INDEX3", - "since_version": 0, - "doc": { - "category": "tuple", - "description": "Recovers `x=t_{i+1}_{j+1}_{k+1}`.\n`0 <= i,j,k <= 3`\nEquivalent to `[i] [j] INDEX2` `[k] INDEX`.", - "gas": "26", - "fift": "[i] [j] [k] INDEX3", - "fift_examples": [], - "opcode": "6FE_ijk", - "stack": "t - x" - }, - "bytecode": { - "tlb": "#6FE_ i:uint2 j:uint2 k:uint2", - "prefix": "6FE_", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 2, - "min_value": 0, - "max_value": 3, - "display_hints": [] - }, - { - "name": "j", - "type": "uint", - "size": 2, - "min_value": 0, - "max_value": 3, - "display_hints": [] - }, - { - "name": "k", - "type": "uint", - "size": 2, - "min_value": 0, - "max_value": 3, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "t", "value_types": ["Tuple"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHINT_4", - "since_version": 0, - "doc": { - "category": "const_int", - "description": "Pushes integer `x` into the stack. `-5 <= x <= 10`.\nHere `i` equals four lower-order bits of `x` (`i=x mod 16`).", - "gas": "18", - "fift": "[x] PUSHINT\n[x] INT", - "fift_examples": [], - "opcode": "7i", - "stack": "- x" - }, - "bytecode": { - "tlb": "#7 i:uint4", - "prefix": "7", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "pushint4"}] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHINT_8", - "since_version": 0, - "doc": { - "category": "const_int", - "description": "Pushes integer `xx`. `-128 <= xx <= 127`.", - "gas": "26", - "fift": "[xx] PUSHINT\n[xx] INT", - "fift_examples": [], - "opcode": "80xx", - "stack": "- xx" - }, - "bytecode": { - "tlb": "#80 xx:int8", - "prefix": "80", - "operands": [ - { - "name": "x", - "type": "int", - "size": 8, - "min_value": -128, - "max_value": 127, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHINT_16", - "since_version": 0, - "doc": { - "category": "const_int", - "description": "Pushes integer `xxxx`. `-2^15 <= xx < 2^15`.", - "gas": "34", - "fift": "[xxxx] PUSHINT\n[xxxx] INT", - "fift_examples": [], - "opcode": "81xxxx", - "stack": "- xxxx" - }, - "bytecode": { - "tlb": "#81 xxxx:int16", - "prefix": "81", - "operands": [ - { - "name": "x", - "type": "int", - "size": 16, - "min_value": -32768, - "max_value": 32767, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHINT_LONG", - "since_version": 0, - "doc": { - "category": "const_int", - "description": "Pushes integer `xxx`.\n_Details:_ 5-bit `0 <= l <= 30` determines the length `n=8l+19` of signed big-endian integer `xxx`.\nThe total length of this instruction is `l+4` bytes or `n+13=8l+32` bits.", - "gas": "23", - "fift": "[xxx] PUSHINT\n[xxx] INT", - "fift_examples": [], - "opcode": "82lxxx", - "stack": "- xxx" - }, - "bytecode": { - "tlb": "#82 l:(## 5) xxx:(int (8 * l + 19))", - "prefix": "82", - "operands_range_check": {"length": 5, "from": 0, "to": 30}, - "operands": [{"name": "x", "type": "pushint_long"}] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHPOW2", - "since_version": 0, - "doc": { - "category": "const_int", - "description": "(Quietly) pushes `2^(xx+1)` for `0 <= xx <= 255`.\n`2^256` is a `NaN`.", - "gas": "26", - "fift": "[xx+1] PUSHPOW2", - "fift_examples": [], - "opcode": "83xx", - "stack": "- 2^(xx+1)" - }, - "bytecode": { - "tlb": "#83 xx:uint8", - "prefix": "83", - "operands_range_check": {"length": 8, "from": 0, "to": 254}, - "operands": [ - { - "name": "x", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 254, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHNAN", - "since_version": 0, - "doc": { - "category": "const_int", - "description": "Pushes a `NaN`.", - "gas": "26", - "fift": "PUSHNAN", - "fift_examples": [], - "opcode": "83FF", - "stack": "- NaN" - }, - "bytecode": {"tlb": "#83FF", "prefix": "83FF", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "const", "value_type": "Integer", "value": null}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHPOW2DEC", - "since_version": 0, - "doc": { - "category": "const_int", - "description": "Pushes `2^(xx+1)-1` for `0 <= xx <= 255`.", - "gas": "26", - "fift": "[xx+1] PUSHPOW2DEC", - "fift_examples": [], - "opcode": "84xx", - "stack": "- 2^(xx+1)-1" - }, - "bytecode": { - "tlb": "#84 xx:uint8", - "prefix": "84", - "operands": [ - { - "name": "x", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHNEGPOW2", - "since_version": 0, - "doc": { - "category": "const_int", - "description": "Pushes `-2^(xx+1)` for `0 <= xx <= 255`.", - "gas": "26", - "fift": "[xx+1] PUSHNEGPOW2", - "fift_examples": [], - "opcode": "85xx", - "stack": "- -2^(xx+1)" - }, - "bytecode": { - "tlb": "#85 xx:uint8", - "prefix": "85", - "operands": [ - { - "name": "x", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHREF", - "since_version": 0, - "doc": { - "category": "const_data", - "description": "Pushes the reference `ref` into the stack.\n_Details:_ Pushes the first reference of `cc.code` into the stack as a _Cell_ (and removes this reference from the current continuation).", - "gas": "18", - "fift": "[ref] PUSHREF", - "fift_examples": [], - "opcode": "88", - "stack": "- c" - }, - "bytecode": { - "tlb": "#88 c:^Cell", - "prefix": "88", - "operands": [{"name": "c", "type": "ref", "display_hints": []}] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Cell"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHREFSLICE", - "since_version": 0, - "doc": { - "category": "const_data", - "description": "Similar to `PUSHREF`, but converts the cell into a _Slice_.", - "gas": "118/43", - "fift": "[ref] PUSHREFSLICE", - "fift_examples": [], - "opcode": "89", - "stack": "- s" - }, - "bytecode": { - "tlb": "#89 c:^Cell", - "prefix": "89", - "operands": [{"name": "c", "type": "ref", "display_hints": []}] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHREFCONT", - "since_version": 0, - "doc": { - "category": "const_data", - "description": "Similar to `PUSHREFSLICE`, but makes a simple ordinary _Continuation_ out of the cell.", - "gas": "118/43", - "fift": "[ref] PUSHREFCONT", - "fift_examples": [], - "opcode": "8A", - "stack": "- cont" - }, - "bytecode": { - "tlb": "#8A c:^Cell", - "prefix": "8A", - "operands": [ - { - "name": "c", - "type": "ref", - "display_hints": [{"type": "continuation"}] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [ - { - "type": "simple", - "name": "result", - "value_types": ["Continuation"] - } - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHSLICE", - "since_version": 0, - "doc": { - "category": "const_data", - "description": "Pushes the slice `slice` into the stack.\n_Details:_ Pushes the (prefix) subslice of `cc.code` consisting of its first `8x+4` bits and no references (i.e., essentially a bitstring), where `0 <= x <= 15`.\nA completion tag is assumed, meaning that all trailing zeroes and the last binary one (if present) are removed from this bitstring.\nIf the original bitstring consists only of zeroes, an empty slice will be pushed.", - "gas": "22", - "fift": "[slice] PUSHSLICE\n[slice] SLICE", - "fift_examples": [], - "opcode": "8Bxsss", - "stack": "- s" - }, - "bytecode": { - "tlb": "#8B x:(## 4) sss:((8 * x + 4) * Bit)", - "prefix": "8B", - "operands": [ - { - "name": "s", - "type": "subslice", - "bits_length_var_size": 4, - "bits_padding": 4, - "completion_tag": true, - "max_bits": 123, - "min_bits": 0, - "max_refs": 0, - "min_refs": 0, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHSLICE_REFS", - "since_version": 0, - "doc": { - "category": "const_data", - "description": "Pushes the slice `slice` into the stack.\n_Details:_ Pushes the (prefix) subslice of `cc.code` consisting of its first `1 <= r+1 <= 4` references and up to first `8xx+1` bits of data, with `0 <= xx <= 31`.\nA completion tag is also assumed.", - "gas": "25", - "fift": "[slice] PUSHSLICE\n[slice] SLICE", - "fift_examples": [], - "opcode": "8Crxxssss", - "stack": "- s" - }, - "bytecode": { - "tlb": "#8C r:(## 2) xx:(## 5) c:((r + 1) * ^Cell) ssss:((8 * xx + 1) * Bit)", - "prefix": "8C", - "operands": [ - { - "name": "slice", - "type": "subslice", - "bits_length_var_size": 5, - "refs_length_var_size": 2, - "bits_padding": 1, - "refs_add": 1, - "completion_tag": true, - "max_bits": 248, - "min_bits": 0, - "max_refs": 4, - "min_refs": 1, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHSLICE_LONG", - "since_version": 0, - "doc": { - "category": "const_data", - "description": "Pushes the slice `slice` into the stack.\n_Details:_ Pushes the subslice of `cc.code` consisting of `0 <= r <= 4` references and up to `8xx+6` bits of data, with `0 <= xx <= 127`.\nA completion tag is assumed.", - "gas": "28", - "fift": "[slice] PUSHSLICE\n[slice] SLICE", - "fift_examples": [ - { - "fift": "x{} PUSHSLICE x{ABCD1234} PUSHSLICE b{01101} PUSHSLICE", - "description": "Examples of `PUSHSLICE`. `x{}` is an empty slice. `x{...}` is a hexadecimal literal. `b{...}` is a binary literal. More on slice literals [here](https://github.com/Piterden/TON-docs/blob/master/Fift.%20A%20Brief%20Introduction.md#user-content-51-slice-literals). Note that the assembler can replace `PUSHSLICE` with `PUSHREFSLICE` in certain situations (e.g. if there's not enough space in the current continuation)." - }, - { - "fift": " PUSHREF PUSHREFSLICE", - "description": "Examples of `PUSHREF` and `PUSHREFSLICE`. More on building cells in fift [here](https://github.com/Piterden/TON-docs/blob/master/Fift.%20A%20Brief%20Introduction.md#user-content-52-builder-primitives)." - } - ], - "opcode": "8Drxxsssss", - "stack": "- s" - }, - "bytecode": { - "tlb": "#8D r:(#<= 4) xx:(## 7) c:(r * ^Cell) ssss:((8 * xx + 6) * Bit)", - "prefix": "8D", - "operands_range_check": {"length": 3, "from": 0, "to": 4}, - "operands": [ - { - "name": "slice", - "type": "subslice", - "bits_length_var_size": 7, - "refs_length_var_size": 3, - "bits_padding": 6, - "refs_add": 0, - "completion_tag": true, - "max_bits": 1021, - "min_bits": 0, - "max_refs": 4, - "min_refs": 0, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHCONT", - "since_version": 0, - "doc": { - "category": "const_data", - "description": "Pushes a continuation made from `builder`.\n_Details:_ Pushes the simple ordinary continuation `cccc` made from the first `0 <= r <= 3` references and the first `0 <= xx <= 127` bytes of `cc.code`.", - "gas": "26", - "fift": "[builder] PUSHCONT\n[builder] CONT", - "fift_examples": [], - "opcode": "8F_rxxcccc", - "stack": "- c" - }, - "bytecode": { - "tlb": "#8F_ r:(## 2) xx:(## 7) c:(r * ^Cell) ssss:((8 * xx) * Bit)", - "prefix": "8F_", - "operands": [ - { - "name": "s", - "type": "subslice", - "bits_length_var_size": 7, - "refs_length_var_size": 2, - "bits_padding": 0, - "refs_add": 0, - "completion_tag": false, - "max_bits": 1016, - "min_bits": 0, - "max_refs": 3, - "min_refs": 0, - "display_hints": [{"type": "continuation"}] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [ - { - "type": "simple", - "name": "result", - "value_types": ["Continuation"] - } - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHCONT_SHORT", - "since_version": 0, - "doc": { - "category": "const_data", - "description": "Pushes a continuation made from `builder`.\n_Details:_ Pushes an `x`-byte continuation for `0 <= x <= 15`.", - "gas": "18", - "fift": "[builder] PUSHCONT\n[builder] CONT", - "fift_examples": [ - { - "fift": "<{ code }> PUSHCONT <{ code }> CONT CONT:<{ code }>", - "description": "Pushes a continuation with code `code`. Note that the assembler can replace `PUSHCONT` with `PUSHREFCONT` in certain situations (e.g. if there's not enough space in the current continuation)." - } - ], - "opcode": "9xccc", - "stack": "- c" - }, - "bytecode": { - "tlb": "#9 x:(## 4) ssss:((8 * x) * Bit)", - "prefix": "9", - "operands": [ - { - "name": "s", - "type": "subslice", - "bits_length_var_size": 4, - "bits_padding": 0, - "completion_tag": false, - "max_bits": 120, - "min_bits": 0, - "max_refs": 0, - "min_refs": 0, - "display_hints": [{"type": "continuation"}] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ADD", - "since_version": 0, - "doc": { - "category": "arithm_basic", - "description": "", - "gas": "18", - "fift": "ADD", - "fift_examples": [], - "opcode": "A0", - "stack": "x y - x+y" - }, - "bytecode": {"tlb": "#A0", "prefix": "A0", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SUB", - "since_version": 0, - "doc": { - "category": "arithm_basic", - "description": "", - "gas": "18", - "fift": "SUB", - "fift_examples": [], - "opcode": "A1", - "stack": "x y - x-y" - }, - "bytecode": {"tlb": "#A1", "prefix": "A1", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SUBR", - "since_version": 0, - "doc": { - "category": "arithm_basic", - "description": "Equivalent to `SWAP` `SUB`.", - "gas": "18", - "fift": "SUBR", - "fift_examples": [], - "opcode": "A2", - "stack": "x y - y-x" - }, - "bytecode": {"tlb": "#A2", "prefix": "A2", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "NEGATE", - "since_version": 0, - "doc": { - "category": "arithm_basic", - "description": "Equivalent to `-1 MULCONST` or to `ZERO SUBR`.\nNotice that it triggers an integer overflow exception if `x=-2^256`.", - "gas": "18", - "fift": "NEGATE", - "fift_examples": [], - "opcode": "A3", - "stack": "x - -x" - }, - "bytecode": {"tlb": "#A3", "prefix": "A3", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "INC", - "since_version": 0, - "doc": { - "category": "arithm_basic", - "description": "Equivalent to `1 ADDCONST`.", - "gas": "18", - "fift": "INC", - "fift_examples": [], - "opcode": "A4", - "stack": "x - x+1" - }, - "bytecode": {"tlb": "#A4", "prefix": "A4", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DEC", - "since_version": 0, - "doc": { - "category": "arithm_basic", - "description": "Equivalent to `-1 ADDCONST`.", - "gas": "18", - "fift": "DEC", - "fift_examples": [], - "opcode": "A5", - "stack": "x - x-1" - }, - "bytecode": {"tlb": "#A5", "prefix": "A5", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ADDCONST", - "since_version": 0, - "doc": { - "category": "arithm_basic", - "description": "`-128 <= cc <= 127`.", - "gas": "26", - "fift": "[cc] ADDCONST\n[cc] ADDINT\n[-cc] SUBCONST\n[-cc] SUBINT", - "fift_examples": [], - "opcode": "A6cc", - "stack": "x - x+cc" - }, - "bytecode": { - "tlb": "#A6 cc:int8", - "prefix": "A6", - "operands": [ - { - "name": "c", - "type": "int", - "size": 8, - "min_value": -128, - "max_value": 127, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULCONST", - "since_version": 0, - "doc": { - "category": "arithm_basic", - "description": "`-128 <= cc <= 127`.", - "gas": "26", - "fift": "[cc] MULCONST\n[cc] MULINT", - "fift_examples": [], - "opcode": "A7cc", - "stack": "x - x*cc" - }, - "bytecode": { - "tlb": "#A7 cc:int8", - "prefix": "A7", - "operands": [ - { - "name": "c", - "type": "int", - "size": 8, - "min_value": -128, - "max_value": 127, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MUL", - "since_version": 0, - "doc": { - "category": "arithm_basic", - "description": "", - "gas": "18", - "fift": "MUL", - "fift_examples": [], - "opcode": "A8", - "stack": "x y - x*y" - }, - "bytecode": {"tlb": "#A8", "prefix": "A8", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ADDDIVMOD", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "ADDDIVMOD", - "fift_examples": [], - "opcode": "A900", - "stack": "x w z - q=floor((x+w)/z) r=(x+w)-zq" - }, - "bytecode": {"tlb": "#A900", "prefix": "A900", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ADDDIVMODR", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "ADDDIVMODR", - "fift_examples": [], - "opcode": "A901", - "stack": "x w z - q=round((x+w)/z) r=(x+w)-zq" - }, - "bytecode": {"tlb": "#A901", "prefix": "A901", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ADDDIVMODC", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "ADDDIVMODC", - "fift_examples": [], - "opcode": "A902", - "stack": "x w y - q=ceil((x+w)/z) r=(x+w)-zq" - }, - "bytecode": {"tlb": "#A902", "prefix": "A902", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DIV", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "`q=floor(x/y)`, `r=x-y*q`", - "gas": "26", - "fift": "DIV", - "fift_examples": [], - "opcode": "A904", - "stack": "x y - q" - }, - "bytecode": {"tlb": "#A904", "prefix": "A904", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DIVR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "`q'=round(x/y)`, `r'=x-y*q'`", - "gas": "26", - "fift": "DIVR", - "fift_examples": [], - "opcode": "A905", - "stack": "x y - q'" - }, - "bytecode": {"tlb": "#A905", "prefix": "A905", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DIVC", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "`q''=ceil(x/y)`, `r''=x-y*q''`", - "gas": "26", - "fift": "DIVC", - "fift_examples": [], - "opcode": "A906", - "stack": "x y - q''" - }, - "bytecode": {"tlb": "#A906", "prefix": "A906", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MOD", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MOD", - "fift_examples": [], - "opcode": "A908", - "stack": "x y - r" - }, - "bytecode": {"tlb": "#A908", "prefix": "A908", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MODR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MODR", - "fift_examples": [], - "opcode": "A909", - "stack": "x y - r" - }, - "bytecode": {"tlb": "#A909", "prefix": "A909", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MODC", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MODC", - "fift_examples": [], - "opcode": "A90A", - "stack": "x y - r" - }, - "bytecode": {"tlb": "#A90A", "prefix": "A90A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DIVMOD", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "DIVMOD", - "fift_examples": [], - "opcode": "A90C", - "stack": "x y - q r" - }, - "bytecode": {"tlb": "#A90C", "prefix": "A90C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DIVMODR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "DIVMODR", - "fift_examples": [], - "opcode": "A90D", - "stack": "x y - q' r'" - }, - "bytecode": {"tlb": "#A90D", "prefix": "A90D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DIVMODC", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "DIVMODC", - "fift_examples": [], - "opcode": "A90E", - "stack": "x y - q'' r''" - }, - "bytecode": {"tlb": "#A90E", "prefix": "A90E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ADDRSHIFTMOD", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "ADDRSHIFTMOD", - "fift_examples": [], - "opcode": "A920", - "stack": "x w z - q=floor((x+w)/2^z) r=(x+w)-q*2^z" - }, - "bytecode": {"tlb": "#A920", "prefix": "A920", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ADDRSHIFTMODR", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "ADDRSHIFTMODR", - "fift_examples": [], - "opcode": "A921", - "stack": "x w z - q=round((x+w)/2^z) r=(x+w)-q*2^z" - }, - "bytecode": {"tlb": "#A921", "prefix": "A921", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ADDRSHIFTMODC", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "ADDRSHIFTMODC", - "fift_examples": [], - "opcode": "A922", - "stack": "x w z - q=ceil((x+w)/2^z) r=(x+w)-q*2^z" - }, - "bytecode": {"tlb": "#A922", "prefix": "A922", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RSHIFTR_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "RSHIFTR", - "fift_examples": [], - "opcode": "A925", - "stack": "x y - round(x/2^y)" - }, - "bytecode": {"tlb": "#A925", "prefix": "A925", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RSHIFTC_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "RSHIFTC", - "fift_examples": [], - "opcode": "A926", - "stack": "x y - ceil(x/2^y)" - }, - "bytecode": {"tlb": "#A926", "prefix": "A926", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MODPOW2_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MODPOW2", - "fift_examples": [], - "opcode": "A928", - "stack": "x y - x mod 2^y" - }, - "bytecode": {"tlb": "#A928", "prefix": "A928", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MODPOW2R_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MODPOW2R", - "fift_examples": [], - "opcode": "A929", - "stack": "x y - x mod 2^y" - }, - "bytecode": {"tlb": "#A929", "prefix": "A929", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MODPOW2C_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MODPOW2C", - "fift_examples": [], - "opcode": "A92A", - "stack": "x y - x mod 2^y" - }, - "bytecode": {"tlb": "#A92A", "prefix": "A92A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RSHIFTMOD_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "RSHIFTMOD", - "fift_examples": [], - "opcode": "A92C", - "stack": "x y - q=floor(x/2^y) r=x-q*2^y" - }, - "bytecode": {"tlb": "#A92C", "prefix": "A92C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RSHIFTMODR_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "RSHIFTMODR", - "fift_examples": [], - "opcode": "A92D", - "stack": "x y - q=round(x/2^y) r=x-q*2^y" - }, - "bytecode": {"tlb": "#A92D", "prefix": "A92D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RSHIFTMODC_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "RSHIFTMODC", - "fift_examples": [], - "opcode": "A92E", - "stack": "x y - q=ceil(x/2^y) r=x-q*2^y" - }, - "bytecode": {"tlb": "#A92E", "prefix": "A92E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ADDRSHIFTMOD", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] ADDRSHIFT#MOD", - "fift_examples": [], - "opcode": "A930tt", - "stack": "x w - q=floor((x+w)/2^(tt+1)) r=(x+w)-q*2^(tt+1)" - }, - "bytecode": { - "tlb": "#A930 tt:uint8", - "prefix": "A930", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ADDRSHIFTRMOD", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] ADDRSHIFTR#MOD", - "fift_examples": [], - "opcode": "A931tt", - "stack": "x w - q=round((x+w)/2^(tt+1)) r=(x+w)-q*2^(tt+1)" - }, - "bytecode": { - "tlb": "#A931 tt:uint8", - "prefix": "A931", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ADDRSHIFTCMOD", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] ADDRSHIFTC#MOD", - "fift_examples": [], - "opcode": "A932tt", - "stack": "x w - q=round((x+w)/2^(tt+1)) r=(x+w)-q*2^(tt+1)" - }, - "bytecode": { - "tlb": "#A932 tt:uint8", - "prefix": "A932", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RSHIFTR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] RSHIFTR#", - "fift_examples": [], - "opcode": "A935tt", - "stack": "x - round(x/2^(tt+1))" - }, - "bytecode": { - "tlb": "#A935 tt:uint8", - "prefix": "A935", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RSHIFTC", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] RSHIFTC#", - "fift_examples": [], - "opcode": "A936tt", - "stack": "x - ceil(x/2^(tt+1))" - }, - "bytecode": { - "tlb": "#A936 tt:uint8", - "prefix": "A936", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MODPOW2", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] MODPOW2#", - "fift_examples": [], - "opcode": "A938tt", - "stack": "x - x mod 2^(tt+1)" - }, - "bytecode": { - "tlb": "#A938 tt:uint8", - "prefix": "A938", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MODPOW2R", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] MODPOW2R#", - "fift_examples": [], - "opcode": "A939tt", - "stack": "x - x mod 2^(tt+1)" - }, - "bytecode": { - "tlb": "#A939 tt:uint8", - "prefix": "A939", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MODPOW2C", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] MODPOW2C#", - "fift_examples": [], - "opcode": "A93Att", - "stack": "x - x mod 2^(tt+1)" - }, - "bytecode": { - "tlb": "#A93A tt:uint8", - "prefix": "A93A", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RSHIFTMOD", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] RSHIFT#MOD", - "fift_examples": [], - "opcode": "A93Ctt", - "stack": "x - q=floor(x/2^(tt+1)) r=x-q*2^(tt+1)" - }, - "bytecode": { - "tlb": "#A93C tt:uint8", - "prefix": "A93C", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RSHIFTRMOD", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] RSHIFTR#MOD", - "fift_examples": [], - "opcode": "A93Dtt", - "stack": "x - q=round(x/2^(tt+1)) r=x-q*2^(tt+1)" - }, - "bytecode": { - "tlb": "#A93D tt:uint8", - "prefix": "A93D", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RSHIFTCMOD", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] RSHIFTC#MOD", - "fift_examples": [], - "opcode": "A93Ett", - "stack": "x - q=ceil(x/2^(tt+1)) r=x-q*2^(tt+1)" - }, - "bytecode": { - "tlb": "#A93E tt:uint8", - "prefix": "A93E", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULADDDIVMOD", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MULADDDIVMOD", - "fift_examples": [], - "opcode": "A980", - "stack": "x y w z - q=floor((xy+w)/z) r=(xy+w)-zq" - }, - "bytecode": {"tlb": "#A980", "prefix": "A980", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULADDDIVMODR", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MULADDDIVMODR", - "fift_examples": [], - "opcode": "A981", - "stack": "x y w z - q=round((xy+w)/z) r=(xy+w)-zq" - }, - "bytecode": {"tlb": "#A981", "prefix": "A981", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULADDDIVMODC", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MULADDDIVMODC", - "fift_examples": [], - "opcode": "A982", - "stack": "x y w z - q=ceil((xy+w)/z) r=(xy+w)-zq" - }, - "bytecode": {"tlb": "#A982", "prefix": "A982", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULDIV", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "`q=floor(x*y/z)`", - "gas": "26", - "fift": "MULDIV", - "fift_examples": [], - "opcode": "A984", - "stack": "x y z - q" - }, - "bytecode": {"tlb": "#A984", "prefix": "A984", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULDIVR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "`q'=round(x*y/z)`", - "gas": "26", - "fift": "MULDIVR", - "fift_examples": [], - "opcode": "A985", - "stack": "x y z - q'" - }, - "bytecode": {"tlb": "#A985", "prefix": "A985", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULDIVC", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "`q'=ceil(x*y/z)`", - "gas": "26", - "fift": "MULDIVC", - "fift_examples": [], - "opcode": "A986", - "stack": "x y z - q'" - }, - "bytecode": {"tlb": "#A986", "prefix": "A986", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULMOD", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MULMOD", - "fift_examples": [], - "opcode": "A988", - "stack": "x y z - x*y mod z" - }, - "bytecode": {"tlb": "#A988", "prefix": "A988", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULMODR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MULMODR", - "fift_examples": [], - "opcode": "A989", - "stack": "x y z - x*y mod z" - }, - "bytecode": {"tlb": "#A989", "prefix": "A989", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULMODC", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MULMODC", - "fift_examples": [], - "opcode": "A98A", - "stack": "x y z - x*y mod z" - }, - "bytecode": {"tlb": "#A98A", "prefix": "A98A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULDIVMOD", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "`q=floor(x*y/z)`, `r=x*y-z*q`", - "gas": "26", - "fift": "MULDIVMOD", - "fift_examples": [], - "opcode": "A98C", - "stack": "x y z - q r" - }, - "bytecode": {"tlb": "#A98C", "prefix": "A98C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULDIVMODR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "`q=round(x*y/z)`, `r=x*y-z*q`", - "gas": "26", - "fift": "MULDIVMODR", - "fift_examples": [], - "opcode": "A98D", - "stack": "x y z - q r" - }, - "bytecode": {"tlb": "#A98D", "prefix": "A98D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULDIVMODC", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "`q=ceil(x*y/z)`, `r=x*y-z*q`", - "gas": "26", - "fift": "MULDIVMODC", - "fift_examples": [], - "opcode": "A98E", - "stack": "x y z - q r" - }, - "bytecode": {"tlb": "#A98E", "prefix": "A98E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULADDRSHIFTMOD", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MULADDRSHIFTMOD", - "fift_examples": [], - "opcode": "A9A0", - "stack": "x y w z - q=floor((xy+w)/2^z) r=(xy+w)-q*2^z" - }, - "bytecode": {"tlb": "#A9A0", "prefix": "A9A0", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULADDRSHIFTRMOD", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MULADDRSHIFTRMOD", - "fift_examples": [], - "opcode": "A9A1", - "stack": "x y w z - q=round((xy+w)/2^z) r=(xy+w)-q*2^z" - }, - "bytecode": {"tlb": "#A9A1", "prefix": "A9A1", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULADDRSHIFTCMOD", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MULADDRSHIFTCMOD", - "fift_examples": [], - "opcode": "A9A2", - "stack": "x y w z - q=ceil((xy+w)/2^z) r=(xy+w)-q*2^z" - }, - "bytecode": {"tlb": "#A9A2", "prefix": "A9A2", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULRSHIFT_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "`0 <= z <= 256`", - "gas": "26", - "fift": "MULRSHIFT", - "fift_examples": [], - "opcode": "A9A4", - "stack": "x y z - floor(x*y/2^z)" - }, - "bytecode": {"tlb": "#A9A4", "prefix": "A9A4", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULRSHIFTR_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "`0 <= z <= 256`", - "gas": "26", - "fift": "MULRSHIFTR", - "fift_examples": [], - "opcode": "A9A5", - "stack": "x y z - round(x*y/2^z)" - }, - "bytecode": {"tlb": "#A9A5", "prefix": "A9A5", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULRSHIFTC_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "`0 <= z <= 256`", - "gas": "26", - "fift": "MULRSHIFTC", - "fift_examples": [], - "opcode": "A9A6", - "stack": "x y z - ceil(x*y/2^z)" - }, - "bytecode": {"tlb": "#A9A6", "prefix": "A9A6", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULMODPOW2_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MULMODPOW2_VAR", - "fift_examples": [], - "opcode": "A9A8", - "stack": "x y z - x*y mod 2^z" - }, - "bytecode": {"tlb": "#A9A8", "prefix": "A9A8", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULMODPOW2R_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MULMODPOW2R_VAR", - "fift_examples": [], - "opcode": "A9A9", - "stack": "x y z - x*y mod 2^z" - }, - "bytecode": {"tlb": "#A9A9", "prefix": "A9A9", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULMODPOW2C_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MULMODPOW2C_VAR", - "fift_examples": [], - "opcode": "A9AA", - "stack": "x y z - x*y mod 2^z" - }, - "bytecode": {"tlb": "#A9AA", "prefix": "A9AA", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULRSHIFTMOD_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MULRSHIFTMOD_VAR", - "fift_examples": [], - "opcode": "A9AC", - "stack": "x y z - q=floor(x*y/2^z) r=xy-q*2^z" - }, - "bytecode": {"tlb": "#A9AC", "prefix": "A9AC", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULRSHIFTRMOD_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MULRSHIFTRMOD_VAR", - "fift_examples": [], - "opcode": "A9AD", - "stack": "x y z - q=round(x*y/2^z) r=xy-q*2^z" - }, - "bytecode": {"tlb": "#A9AD", "prefix": "A9AD", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULRSHIFTCMOD_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "MULRSHIFTCMOD_VAR", - "fift_examples": [], - "opcode": "A9AE", - "stack": "x y z - q=ceil(x*y/2^z) r=xy-q*2^z" - }, - "bytecode": {"tlb": "#A9AE", "prefix": "A9AE", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULADDRSHIFTMOD", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] MULADDRSHIFT#MOD", - "fift_examples": [], - "opcode": "A9B0tt", - "stack": "x y w - q=floor((xy+w)/2^z) r=(xy+w)-q*2^z" - }, - "bytecode": { - "tlb": "#A9B0 tt:uint8", - "prefix": "A9B0", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULADDRSHIFTRMOD", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] MULADDRSHIFTR#MOD", - "fift_examples": [], - "opcode": "A9B1tt", - "stack": "x y w - q=round((xy+w)/2^z) r=(xy+w)-q*2^z" - }, - "bytecode": { - "tlb": "#A9B1 tt:uint8", - "prefix": "A9B1", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULADDRSHIFTCMOD", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] MULADDRSHIFTC#MOD", - "fift_examples": [], - "opcode": "A9B2tt", - "stack": "x y w - q=ceil((xy+w)/2^z) r=(xy+w)-q*2^z" - }, - "bytecode": { - "tlb": "#A9B2 tt:uint8", - "prefix": "A9B2", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULRSHIFT", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] MULRSHIFT#", - "fift_examples": [], - "opcode": "A9B4tt", - "stack": "x y - floor(x*y/2^(tt+1))" - }, - "bytecode": { - "tlb": "#A9B4 tt:uint8", - "prefix": "A9B4", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULRSHIFTR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] MULRSHIFTR#", - "fift_examples": [], - "opcode": "A9B5tt", - "stack": "x y - round(x*y/2^(tt+1))" - }, - "bytecode": { - "tlb": "#A9B5 tt:uint8", - "prefix": "A9B5", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULRSHIFTC", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] MULRSHIFTC#", - "fift_examples": [], - "opcode": "A9B6tt", - "stack": "x y - ceil(x*y/2^(tt+1))" - }, - "bytecode": { - "tlb": "#A9B6 tt:uint8", - "prefix": "A9B6", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULMODPOW2", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] MULMODPOW2#", - "fift_examples": [], - "opcode": "A9B8tt", - "stack": "x y - x*y mod 2^(tt+1)" - }, - "bytecode": { - "tlb": "#A9B8 tt:uint8", - "prefix": "A9B8", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULMODPOW2R", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] MULMODPOW2R#", - "fift_examples": [], - "opcode": "A9B9tt", - "stack": "x y - x*y mod 2^(tt+1)" - }, - "bytecode": { - "tlb": "#A9B9 tt:uint8", - "prefix": "A9B9", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULMODPOW2C", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] MULMODPOW2C#", - "fift_examples": [], - "opcode": "A9BAtt", - "stack": "x y - x*y mod 2^(tt+1)" - }, - "bytecode": { - "tlb": "#A9BA tt:uint8", - "prefix": "A9BA", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULRSHIFTMOD", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "MULRSHIFT#MOD", - "fift_examples": [], - "opcode": "A9BC", - "stack": "x y - q=floor(x*y/2^(tt+1)) r=xy-q*2^(tt+1)" - }, - "bytecode": { - "tlb": "#A9BC", - "prefix": "A9BC", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULRSHIFTRMOD", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "MULRSHIFTR#MOD", - "fift_examples": [], - "opcode": "A9BD", - "stack": "x y - q=round(x*y/2^(tt+1)) r=xy-q*2^(tt+1)" - }, - "bytecode": { - "tlb": "#A9BD", - "prefix": "A9BD", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MULRSHIFTCMOD", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "MULRSHIFTC#MOD", - "fift_examples": [], - "opcode": "A9BE", - "stack": "x y - q=ceil(x*y/2^(tt+1)) r=xy-q*2^(tt+1)" - }, - "bytecode": { - "tlb": "#A9BE", - "prefix": "A9BE", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTADDDIVMOD_VAR", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "LSHIFTADDDIVMOD", - "fift_examples": [], - "opcode": "A9C0", - "stack": "x w z y - q=floor((x*2^y+w)/z) r=(x*2^y+w)-zq" - }, - "bytecode": {"tlb": "#A9C0", "prefix": "A9C0", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTADDDIVMODR_VAR", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "LSHIFTADDDIVMODR", - "fift_examples": [], - "opcode": "A9C1", - "stack": "x w z y - q=round((x*2^y+w)/z) r=(x*2^y+w)-zq" - }, - "bytecode": {"tlb": "#A9C1", "prefix": "A9C1", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTADDDIVMODC_VAR", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "LSHIFTADDDIVMODC", - "fift_examples": [], - "opcode": "A9C2", - "stack": "x w z y - q=round((x*2^y+w)/z) r=(x*2^y+w)-zq" - }, - "bytecode": {"tlb": "#A9C2", "prefix": "A9C2", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTDIV_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "`0 <= z <= 256`", - "gas": "26", - "fift": "LSHIFTDIV", - "fift_examples": [], - "opcode": "A9C4", - "stack": "x y z - floor(2^z*x/y)" - }, - "bytecode": {"tlb": "#A9C4", "prefix": "A9C4", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTDIVR_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "`0 <= z <= 256`", - "gas": "26", - "fift": "LSHIFTDIVR", - "fift_examples": [], - "opcode": "A9C5", - "stack": "x y z - round(2^z*x/y)" - }, - "bytecode": {"tlb": "#A9C5", "prefix": "A9C5", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTDIVC_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "`0 <= z <= 256`", - "gas": "26", - "fift": "LSHIFTDIVC", - "fift_examples": [], - "opcode": "A9C6", - "stack": "x y z - ceil(2^z*x/y)" - }, - "bytecode": {"tlb": "#A9C6", "prefix": "A9C6", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTMOD_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "LSHIFTMOD", - "fift_examples": [], - "opcode": "A9C8", - "stack": "x y z - 2^z*x mod y" - }, - "bytecode": {"tlb": "#A9C8", "prefix": "A9C8", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTMODR_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "LSHIFTMODR", - "fift_examples": [], - "opcode": "A9C9", - "stack": "x y z - 2^z*x mod y" - }, - "bytecode": {"tlb": "#A9C9", "prefix": "A9C9", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTMODC_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "LSHIFTMODC", - "fift_examples": [], - "opcode": "A9CA", - "stack": "x y z - 2^z*x mod y" - }, - "bytecode": {"tlb": "#A9CA", "prefix": "A9CA", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTDIVMOD_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "LSHIFTDIVMOD", - "fift_examples": [], - "opcode": "A9CC", - "stack": "x y z - q=floor(2^z*x/y) r=2^z*x-q*y" - }, - "bytecode": {"tlb": "#A9CC", "prefix": "A9CC", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTDIVMODR_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "LSHIFTDIVMODR", - "fift_examples": [], - "opcode": "A9CD", - "stack": "x y z - q=round(2^z*x/y) r=2^z*x-q*y" - }, - "bytecode": {"tlb": "#A9CD", "prefix": "A9CD", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTDIVMODC_VAR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "LSHIFTDIVMODC", - "fift_examples": [], - "opcode": "A9CE", - "stack": "x y z - q=ceil(2^z*x/y) r=2^z*x-q*y" - }, - "bytecode": {"tlb": "#A9CE", "prefix": "A9CE", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTADDDIVMOD", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] LSHIFT#ADDDIVMOD", - "fift_examples": [], - "opcode": "A9D0tt", - "stack": "x w z - q=floor((x*2^y+w)/z) r=(x*2^y+w)-zq" - }, - "bytecode": { - "tlb": "#A9D0 tt:uint8", - "prefix": "A9D0", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTADDDIVMODR", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] LSHIFT#ADDDIVMODR", - "fift_examples": [], - "opcode": "A9D1tt", - "stack": "x w z - q=round((x*2^y+w)/z) r=(x*2^y+w)-zq" - }, - "bytecode": { - "tlb": "#A9D1 tt:uint8", - "prefix": "A9D1", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTADDDIVMODC", - "since_version": 4, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] LSHIFT#ADDDIVMODC", - "fift_examples": [], - "opcode": "A9D2tt", - "stack": "x w z - q=ceil((x*2^y+w)/z) r=(x*2^y+w)-zq" - }, - "bytecode": { - "tlb": "#A9D2 tt:uint8", - "prefix": "A9D2", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTDIV", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] LSHIFT#DIV", - "fift_examples": [], - "opcode": "A9D4tt", - "stack": "x y - floor(2^(tt+1)*x/y)" - }, - "bytecode": { - "tlb": "#A9D4 tt:uint8", - "prefix": "A9D4", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTDIVR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] LSHIFT#DIVR", - "fift_examples": [], - "opcode": "A9D5tt", - "stack": "x y - round(2^(tt+1)*x/y)" - }, - "bytecode": { - "tlb": "#A9D5 tt:uint8", - "prefix": "A9D5", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTDIVC", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "26", - "fift": "[tt+1] LSHIFT#DIVC", - "fift_examples": [], - "opcode": "A9D6tt", - "stack": "x y - ceil(2^(tt+1)*x/y)" - }, - "bytecode": { - "tlb": "#A9D6 tt:uint8", - "prefix": "A9D6", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTMOD", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] LSHIFT#MOD", - "fift_examples": [], - "opcode": "A9D8tt", - "stack": "x y - 2^(tt+1)*x mod y" - }, - "bytecode": { - "tlb": "#A9D8 tt:uint8", - "prefix": "A9D8", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTMODR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] LSHIFT#MODR", - "fift_examples": [], - "opcode": "A9D9tt", - "stack": "x y - 2^(tt+1)*x mod y" - }, - "bytecode": { - "tlb": "#A9D9 tt:uint8", - "prefix": "A9D9", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTMODC", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] LSHIFT#MODC", - "fift_examples": [], - "opcode": "A9DAtt", - "stack": "x y - 2^(tt+1)*x mod y" - }, - "bytecode": { - "tlb": "#A9DA tt:uint8", - "prefix": "A9DA", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTDIVMOD", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] LSHIFT#DIVMOD", - "fift_examples": [], - "opcode": "A9DCtt", - "stack": "x y - q=floor(2^(tt+1)*x/y) r=2^(tt+1)*x-q*y" - }, - "bytecode": { - "tlb": "#A9DC tt:uint8", - "prefix": "A9DC", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTDIVMODR", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] LSHIFT#DIVMODR", - "fift_examples": [], - "opcode": "A9DDtt", - "stack": "x y - q=round(2^(tt+1)*x/y) r=2^(tt+1)*x-q*y" - }, - "bytecode": { - "tlb": "#A9DD tt:uint8", - "prefix": "A9DD", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFTDIVMODC", - "since_version": 0, - "doc": { - "category": "arithm_div", - "description": "", - "gas": "34", - "fift": "[tt+1] LSHIFT#DIVMODC", - "fift_examples": [], - "opcode": "A9DEtt", - "stack": "x y - q=ceil(2^(tt+1)*x/y) r=2^(tt+1)*x-q*y" - }, - "bytecode": { - "tlb": "#A9DE tt:uint8", - "prefix": "A9DE", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFT", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "`0 <= cc <= 255`", - "gas": "26", - "fift": "[cc+1] LSHIFT#", - "fift_examples": [], - "opcode": "AAcc", - "stack": "x - x*2^(cc+1)" - }, - "bytecode": { - "tlb": "#AA cc:uint8", - "prefix": "AA", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RSHIFT", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "`0 <= cc <= 255`", - "gas": "18", - "fift": "[cc+1] RSHIFT#", - "fift_examples": [], - "opcode": "ABcc", - "stack": "x - floor(x/2^(cc+1))" - }, - "bytecode": { - "tlb": "#AB cc:uint8", - "prefix": "AB", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LSHIFT_VAR", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "`0 <= y <= 1023`", - "gas": "18", - "fift": "LSHIFT", - "fift_examples": [], - "opcode": "AC", - "stack": "x y - x*2^y" - }, - "bytecode": {"tlb": "#AC", "prefix": "AC", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RSHIFT_VAR", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "`0 <= y <= 1023`", - "gas": "18", - "fift": "RSHIFT", - "fift_examples": [], - "opcode": "AD", - "stack": "x y - floor(x/2^y)" - }, - "bytecode": {"tlb": "#AD", "prefix": "AD", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "POW2", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "`0 <= y <= 1023`\nEquivalent to `ONE` `SWAP` `LSHIFT`.", - "gas": "18", - "fift": "POW2", - "fift_examples": [], - "opcode": "AE", - "stack": "y - 2^y" - }, - "bytecode": {"tlb": "#AE", "prefix": "AE", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "y", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "AND", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "Bitwise and of two signed integers `x` and `y`, sign-extended to infinity.", - "gas": "18", - "fift": "AND", - "fift_examples": [], - "opcode": "B0", - "stack": "x y - x&y" - }, - "bytecode": {"tlb": "#B0", "prefix": "B0", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "OR", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "Bitwise or of two integers.", - "gas": "18", - "fift": "OR", - "fift_examples": [], - "opcode": "B1", - "stack": "x y - x|y" - }, - "bytecode": {"tlb": "#B1", "prefix": "B1", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "XOR", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "Bitwise xor of two integers.", - "gas": "18", - "fift": "XOR", - "fift_examples": [], - "opcode": "B2", - "stack": "x y - x xor y" - }, - "bytecode": {"tlb": "#B2", "prefix": "B2", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "NOT", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "Bitwise not of an integer.", - "gas": "26", - "fift": "NOT", - "fift_examples": [], - "opcode": "B3", - "stack": "x - ~x" - }, - "bytecode": {"tlb": "#B3", "prefix": "B3", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "FITS", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "Checks whether `x` is a `cc+1`-bit signed integer for `0 <= cc <= 255` (i.e., whether `-2^cc <= x < 2^cc`).\nIf not, either triggers an integer overflow exception, or replaces `x` with a `NaN` (quiet version).", - "gas": "26/76", - "fift": "[cc+1] FITS", - "fift_examples": [], - "opcode": "B4cc", - "stack": "x - x" - }, - "bytecode": { - "tlb": "#B4 cc:uint8", - "prefix": "B4", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "UFITS", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "Checks whether `x` is a `cc+1`-bit unsigned integer for `0 <= cc <= 255` (i.e., whether `0 <= x < 2^(cc+1)`).", - "gas": "26/76", - "fift": "[cc+1] UFITS", - "fift_examples": [], - "opcode": "B5cc", - "stack": "x - x" - }, - "bytecode": { - "tlb": "#B5 cc:uint8", - "prefix": "B5", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "FITSX", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "Checks whether `x` is a `c`-bit signed integer for `0 <= c <= 1023`.", - "gas": "26/76", - "fift": "FITSX", - "fift_examples": [], - "opcode": "B600", - "stack": "x c - x" - }, - "bytecode": {"tlb": "#B600", "prefix": "B600", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "c", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "UFITSX", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "Checks whether `x` is a `c`-bit unsigned integer for `0 <= c <= 1023`.", - "gas": "26/76", - "fift": "UFITSX", - "fift_examples": [], - "opcode": "B601", - "stack": "x c - x" - }, - "bytecode": {"tlb": "#B601", "prefix": "B601", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "c", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BITSIZE", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "Computes smallest `c >= 0` such that `x` fits into a `c`-bit signed integer (`-2^(c-1) <= c < 2^(c-1)`).", - "gas": "26", - "fift": "BITSIZE", - "fift_examples": [], - "opcode": "B602", - "stack": "x - c" - }, - "bytecode": {"tlb": "#B602", "prefix": "B602", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "UBITSIZE", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "Computes smallest `c >= 0` such that `x` fits into a `c`-bit unsigned integer (`0 <= x < 2^c`), or throws a range check exception.", - "gas": "26", - "fift": "UBITSIZE", - "fift_examples": [], - "opcode": "B603", - "stack": "x - c" - }, - "bytecode": {"tlb": "#B603", "prefix": "B603", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MIN", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "Computes the minimum of two integers `x` and `y`.", - "gas": "26", - "fift": "MIN", - "fift_examples": [], - "opcode": "B608", - "stack": "x y - x or y" - }, - "bytecode": {"tlb": "#B608", "prefix": "B608", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MAX", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "Computes the maximum of two integers `x` and `y`.", - "gas": "26", - "fift": "MAX", - "fift_examples": [], - "opcode": "B609", - "stack": "x y - x or y" - }, - "bytecode": {"tlb": "#B609", "prefix": "B609", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "MINMAX", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "Sorts two integers. Quiet version of this operation returns two `NaN`s if any of the arguments are `NaN`s.", - "gas": "26", - "fift": "MINMAX\nINTSORT2", - "fift_examples": [], - "opcode": "B60A", - "stack": "x y - x y or y x" - }, - "bytecode": {"tlb": "#B60A", "prefix": "B60A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "r1", "value_types": ["Integer"]}, - {"type": "simple", "name": "r2", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ABS", - "since_version": 0, - "doc": { - "category": "arithm_logical", - "description": "Computes the absolute value of an integer `x`.", - "gas": "26", - "fift": "ABS", - "fift_examples": [], - "opcode": "B60B", - "stack": "x - |x|" - }, - "bytecode": {"tlb": "#B60B", "prefix": "B60B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QADD", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "26", - "fift": "QADD", - "fift_examples": [], - "opcode": "B7A0", - "stack": "x y - x+y" - }, - "bytecode": {"tlb": "#B7A0", "prefix": "B7A0", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QSUB", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "26", - "fift": "QSUB", - "fift_examples": [], - "opcode": "B7A1", - "stack": "x y - x-y" - }, - "bytecode": {"tlb": "#B7A1", "prefix": "B7A1", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QSUBR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "26", - "fift": "QSUBR", - "fift_examples": [], - "opcode": "B7A2", - "stack": "x y - y-x" - }, - "bytecode": {"tlb": "#B7A2", "prefix": "B7A2", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QNEGATE", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "26", - "fift": "QNEGATE", - "fift_examples": [], - "opcode": "B7A3", - "stack": "x - -x" - }, - "bytecode": {"tlb": "#B7A3", "prefix": "B7A3", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QINC", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "26", - "fift": "QINC", - "fift_examples": [], - "opcode": "B7A4", - "stack": "x - x+1" - }, - "bytecode": {"tlb": "#B7A4", "prefix": "B7A4", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QDEC", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "26", - "fift": "QDEC", - "fift_examples": [], - "opcode": "B7A5", - "stack": "x - x-1" - }, - "bytecode": {"tlb": "#B7A5", "prefix": "B7A5", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMUL", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "26", - "fift": "QMUL", - "fift_examples": [], - "opcode": "B7A8", - "stack": "x y - x*y" - }, - "bytecode": {"tlb": "#B7A8", "prefix": "B7A8", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QADDDIVMOD", - "since_version": 4, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QADDDIVMOD", - "fift_examples": [], - "opcode": "B7A900", - "stack": "x w z - q=floor((x+w)/z) r=(x+w)-zq" - }, - "bytecode": {"tlb": "#B7A900", "prefix": "B7A900", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QADDDIVMODR", - "since_version": 4, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QADDDIVMODR", - "fift_examples": [], - "opcode": "B7A901", - "stack": "x w z - q=round((x+w)/z) r=(x+w)-zq" - }, - "bytecode": {"tlb": "#B7A901", "prefix": "B7A901", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QADDDIVMODC", - "since_version": 4, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QADDDIVMODC", - "fift_examples": [], - "opcode": "B7A902", - "stack": "x w y - q=ceil((x+w)/z) r=(x+w)-zq" - }, - "bytecode": {"tlb": "#B7A902", "prefix": "B7A902", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QDIV", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "Division returns `NaN` if `y=0`.", - "gas": "34", - "fift": "QDIV", - "fift_examples": [], - "opcode": "B7A904", - "stack": "x y - q" - }, - "bytecode": {"tlb": "#B7A904", "prefix": "B7A904", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QDIVR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QDIVR", - "fift_examples": [], - "opcode": "B7A905", - "stack": "x y - q'" - }, - "bytecode": {"tlb": "#B7A905", "prefix": "B7A905", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QDIVC", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QDIVC", - "fift_examples": [], - "opcode": "B7A906", - "stack": "x y - q''" - }, - "bytecode": {"tlb": "#B7A906", "prefix": "B7A906", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMOD", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMOD", - "fift_examples": [], - "opcode": "B7A908", - "stack": "x y - r" - }, - "bytecode": {"tlb": "#B7A908", "prefix": "B7A908", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMODR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMODR", - "fift_examples": [], - "opcode": "B7A909", - "stack": "x y - r" - }, - "bytecode": {"tlb": "#B7A909", "prefix": "B7A909", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMODC", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMODC", - "fift_examples": [], - "opcode": "B7A90A", - "stack": "x y - r" - }, - "bytecode": {"tlb": "#B7A90A", "prefix": "B7A90A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QDIVMOD", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QDIVMOD", - "fift_examples": [], - "opcode": "B7A90C", - "stack": "x y - q r" - }, - "bytecode": {"tlb": "#B7A90C", "prefix": "B7A90C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QDIVMODR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QDIVMODR", - "fift_examples": [], - "opcode": "B7A90D", - "stack": "x y - q' r'" - }, - "bytecode": {"tlb": "#B7A90D", "prefix": "B7A90D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QDIVMODC", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QDIVMODC", - "fift_examples": [], - "opcode": "B7A90E", - "stack": "x y - q'' r''" - }, - "bytecode": {"tlb": "#B7A90E", "prefix": "B7A90E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QADDRSHIFTMOD", - "since_version": 4, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QADDRSHIFTMOD", - "fift_examples": [], - "opcode": "B7A920", - "stack": "x w z - q=floor((x+w)/2^z) r=(x+w)-q*2^z" - }, - "bytecode": {"tlb": "#B7A920", "prefix": "B7A920", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QADDRSHIFTMODR", - "since_version": 4, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QADDRSHIFTMODR", - "fift_examples": [], - "opcode": "B7A921", - "stack": "x w z - q=round((x+w)/2^z) r=(x+w)-q*2^z" - }, - "bytecode": {"tlb": "#B7A921", "prefix": "B7A921", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QADDRSHIFTMODC", - "since_version": 4, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QADDRSHIFTMODC", - "fift_examples": [], - "opcode": "B7A922", - "stack": "x w z - q=ceil((x+w)/2^z) r=(x+w)-q*2^z" - }, - "bytecode": {"tlb": "#B7A922", "prefix": "B7A922", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QRSHIFTR_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QRSHIFTR", - "fift_examples": [], - "opcode": "B7A925", - "stack": "x y - round(x/2^y)" - }, - "bytecode": {"tlb": "#B7A925", "prefix": "B7A925", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QRSHIFTC_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QRSHIFTC", - "fift_examples": [], - "opcode": "B7A926", - "stack": "x y - ceil(x/2^y)" - }, - "bytecode": {"tlb": "#B7A926", "prefix": "B7A926", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMODPOW2_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMODPOW2", - "fift_examples": [], - "opcode": "B7A928", - "stack": "x y - x mod 2^y" - }, - "bytecode": {"tlb": "#B7A928", "prefix": "B7A928", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMODPOW2R_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMODPOW2R", - "fift_examples": [], - "opcode": "B7A929", - "stack": "x y - x mod 2^y" - }, - "bytecode": {"tlb": "#B7A929", "prefix": "B7A929", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMODPOW2C_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMODPOW2C", - "fift_examples": [], - "opcode": "B7A92A", - "stack": "x y - x mod 2^y" - }, - "bytecode": {"tlb": "#B7A92A", "prefix": "B7A92A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QRSHIFTMOD_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QRSHIFTMOD", - "fift_examples": [], - "opcode": "B7A92C", - "stack": "x y - q=floor(x/2^y) r=x-q*2^y" - }, - "bytecode": {"tlb": "#B7A92C", "prefix": "B7A92C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QRSHIFTMODR_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QRSHIFTMODR", - "fift_examples": [], - "opcode": "B7A92D", - "stack": "x y - q=round(x/2^y) r=x-q*2^y" - }, - "bytecode": {"tlb": "#B7A92D", "prefix": "B7A92D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QRSHIFTMODC_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QRSHIFTMODC", - "fift_examples": [], - "opcode": "B7A92E", - "stack": "x y - q=ceil(x/2^y) r=x-q*2^y" - }, - "bytecode": {"tlb": "#B7A92E", "prefix": "B7A92E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QADDRSHIFTMOD", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QADDRSHIFT#MOD", - "fift_examples": [], - "opcode": "B7A930tt", - "stack": "x w - q=floor((x+w)/2^(tt+1)) r=(x+w)-q*2^(tt+1)" - }, - "bytecode": { - "tlb": "#B7A930 tt:uint8", - "prefix": "B7A930", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QADDRSHIFTRMOD", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QADDRSHIFTR#MOD", - "fift_examples": [], - "opcode": "B7A931tt", - "stack": "x w - q=round((x+w)/2^(tt+1)) r=(x+w)-q*2^(tt+1)" - }, - "bytecode": { - "tlb": "#B7A931 tt:uint8", - "prefix": "B7A931", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QADDRSHIFTCMOD", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QADDRSHIFTC#MOD", - "fift_examples": [], - "opcode": "B7A932tt", - "stack": "x w - q=round((x+w)/2^(tt+1)) r=(x+w)-q*2^(tt+1)" - }, - "bytecode": { - "tlb": "#B7A932 tt:uint8", - "prefix": "B7A932", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QRSHIFTR", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QRSHIFTR#", - "fift_examples": [], - "opcode": "B7A935tt", - "stack": "x - round(x/2^(tt+1))" - }, - "bytecode": { - "tlb": "#B7A935 tt:uint8", - "prefix": "B7A935", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QRSHIFTC", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QRSHIFTC#", - "fift_examples": [], - "opcode": "B7A936tt", - "stack": "x - ceil(x/2^(tt+1))" - }, - "bytecode": { - "tlb": "#B7A936 tt:uint8", - "prefix": "B7A936", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMODPOW2", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QMODPOW2#", - "fift_examples": [], - "opcode": "B7A938tt", - "stack": "x - x mod 2^(tt+1)" - }, - "bytecode": { - "tlb": "#B7A938 tt:uint8", - "prefix": "B7A938", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMODPOW2R", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QMODPOW2R#", - "fift_examples": [], - "opcode": "B7A939tt", - "stack": "x - x mod 2^(tt+1)" - }, - "bytecode": { - "tlb": "#B7A939 tt:uint8", - "prefix": "B7A939", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMODPOW2C", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QMODPOW2C#", - "fift_examples": [], - "opcode": "B7A93Att", - "stack": "x - x mod 2^(tt+1)" - }, - "bytecode": { - "tlb": "#B7A93A tt:uint8", - "prefix": "B7A93A", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QRSHIFTMOD", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QRSHIFT#MOD", - "fift_examples": [], - "opcode": "A93Ctt", - "stack": "x - q=floor(x/2^(tt+1)) r=x-q*2^(tt+1)" - }, - "bytecode": { - "tlb": "#A93C tt:uint8", - "prefix": "A93C", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QRSHIFTRMOD", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QRSHIFTR#MOD", - "fift_examples": [], - "opcode": "A93Dtt", - "stack": "x - q=round(x/2^(tt+1)) r=x-q*2^(tt+1)" - }, - "bytecode": { - "tlb": "#A93D tt:uint8", - "prefix": "A93D", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QRSHIFTCMOD", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QRSHIFTC#MOD", - "fift_examples": [], - "opcode": "B7A93Ett", - "stack": "x - q=ceil(x/2^(tt+1)) r=x-q*2^(tt+1)" - }, - "bytecode": { - "tlb": "#B7A93E tt:uint8", - "prefix": "B7A93E", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULADDDIVMOD", - "since_version": 4, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULADDDIVMOD", - "fift_examples": [], - "opcode": "B7A980", - "stack": "x y w z - q=floor((xy+w)/z) r=(xy+w)-zq" - }, - "bytecode": {"tlb": "#B7A980", "prefix": "B7A980", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULADDDIVMODR", - "since_version": 4, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULADDDIVMODR", - "fift_examples": [], - "opcode": "B7A981", - "stack": "x y w z - q=round((xy+w)/z) r=(xy+w)-zq" - }, - "bytecode": {"tlb": "#B7A981", "prefix": "B7A981", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULADDDIVMODC", - "since_version": 4, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULADDDIVMODC", - "fift_examples": [], - "opcode": "B7A982", - "stack": "x y w z - q=ceil((xy+w)/z) r=(xy+w)-zq" - }, - "bytecode": {"tlb": "#B7A982", "prefix": "B7A982", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULDIV", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "`q=floor(x*y/z)`", - "gas": "34", - "fift": "QMULDIV", - "fift_examples": [], - "opcode": "B7A984", - "stack": "x y z - q" - }, - "bytecode": {"tlb": "#B7A984", "prefix": "B7A984", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULDIVR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULDIVR", - "fift_examples": [], - "opcode": "B7A985", - "stack": "x y z - q'" - }, - "bytecode": {"tlb": "#B7A985", "prefix": "B7A985", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "q", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULDIVC", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "`q'=ceil(x*y/z)`", - "gas": "34", - "fift": "QMULDIVC", - "fift_examples": [], - "opcode": "B7A986", - "stack": "x y z - q'" - }, - "bytecode": {"tlb": "#B7A986", "prefix": "B7A986", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULMOD", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULMOD", - "fift_examples": [], - "opcode": "B7A988", - "stack": "x y z - x*y mod z" - }, - "bytecode": {"tlb": "#B7A988", "prefix": "B7A988", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULMODR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULMODR", - "fift_examples": [], - "opcode": "B7A989", - "stack": "x y z - x*y mod z" - }, - "bytecode": {"tlb": "#B7A989", "prefix": "B7A989", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULMODC", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULMODC", - "fift_examples": [], - "opcode": "B7A98A", - "stack": "x y z - x*y mod z" - }, - "bytecode": {"tlb": "#B7A98A", "prefix": "B7A98A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULDIVMOD", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULDIVMOD", - "fift_examples": [], - "opcode": "B7A98C", - "stack": "x y z - q r" - }, - "bytecode": {"tlb": "#B7A98C", "prefix": "B7A98C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULDIVMODR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "`q=round(x*y/z)`, `r=x*y-z*q`", - "gas": "34", - "fift": "QMULDIVMODR", - "fift_examples": [], - "opcode": "B7A98D", - "stack": "x y z - q r" - }, - "bytecode": {"tlb": "#B7A98D", "prefix": "B7A98D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULDIVMODC", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "`q=ceil(x*y/z)`, `r=x*y-z*q`", - "gas": "34", - "fift": "QMULDIVMODC", - "fift_examples": [], - "opcode": "B7A98E", - "stack": "x y z - q r" - }, - "bytecode": {"tlb": "#B7A98E", "prefix": "B7A98E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULADDRSHIFTMOD", - "since_version": 4, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULADDRSHIFTMOD", - "fift_examples": [], - "opcode": "B7A9A0", - "stack": "x y w z - q=floor((xy+w)/2^z) r=(xy+w)-q*2^z" - }, - "bytecode": {"tlb": "#B7A9A0", "prefix": "B7A9A0", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULADDRSHIFTRMOD", - "since_version": 4, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULADDRSHIFTRMOD", - "fift_examples": [], - "opcode": "B7A9A1", - "stack": "x y w z - q=round((xy+w)/2^z) r=(xy+w)-q*2^z" - }, - "bytecode": {"tlb": "#B7A9A1", "prefix": "B7A9A1", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULADDRSHIFTCMOD", - "since_version": 4, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULADDRSHIFTCMOD", - "fift_examples": [], - "opcode": "B7A9A2", - "stack": "x y w z - q=ceil((xy+w)/2^z) r=(xy+w)-q*2^z" - }, - "bytecode": {"tlb": "#B7A9A2", "prefix": "B7A9A2", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "q", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULRSHIFT_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "`0 <= z <= 256`", - "gas": "34", - "fift": "QMULRSHIFT", - "fift_examples": [], - "opcode": "B7A9A4", - "stack": "x y z - floor(x*y/2^z)" - }, - "bytecode": {"tlb": "#B7A9A4", "prefix": "B7A9A4", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULRSHIFTR_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "`0 <= z <= 256`", - "gas": "34", - "fift": "QMULRSHIFTR", - "fift_examples": [], - "opcode": "B7A9A5", - "stack": "x y z - round(x*y/2^z)" - }, - "bytecode": {"tlb": "#B7A9A5", "prefix": "B7A9A5", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULRSHIFTC_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "`0 <= z <= 256`", - "gas": "34", - "fift": "QMULRSHIFTC", - "fift_examples": [], - "opcode": "B7A9A6", - "stack": "x y z - ceil(x*y/2^z)" - }, - "bytecode": {"tlb": "#B7A9A6", "prefix": "B7A9A6", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULMODPOW2_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULMODPOW2_VAR", - "fift_examples": [], - "opcode": "B7A9A8", - "stack": "x y z - x*y mod 2^z" - }, - "bytecode": {"tlb": "#B7A9A8", "prefix": "B7A9A8", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULMODPOW2R_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULMODPOW2R_VAR", - "fift_examples": [], - "opcode": "B7A9A9", - "stack": "x y z - x*y mod 2^z" - }, - "bytecode": {"tlb": "#B7A9A9", "prefix": "B7A9A9", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULMODPOW2C_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULMODPOW2C_VAR", - "fift_examples": [], - "opcode": "B7A9AA", - "stack": "x y z - x*y mod 2^z" - }, - "bytecode": {"tlb": "#B7A9AA", "prefix": "B7A9AA", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULRSHIFTMOD_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULRSHIFTMOD_VAR", - "fift_examples": [], - "opcode": "B7A9AC", - "stack": "x y z - q=floor(x*y/2^z) r=xy-q*2^z" - }, - "bytecode": {"tlb": "#B7A9AC", "prefix": "B7A9AC", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULRSHIFTRMOD_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULRSHIFTRMOD_VAR", - "fift_examples": [], - "opcode": "B7A9AD", - "stack": "x y z - q=round(x*y/2^z) r=xy-q*2^z" - }, - "bytecode": {"tlb": "#B7A9AD", "prefix": "B7A9AD", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULRSHIFTCMOD_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QMULRSHIFTCMOD_VAR", - "fift_examples": [], - "opcode": "B7A9AE", - "stack": "x y z - q=ceil(x*y/2^z) r=xy-q*2^z" - }, - "bytecode": {"tlb": "#B7A9AE", "prefix": "B7A9AE", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULADDRSHIFTMOD", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QMULADDRSHIFT#MOD", - "fift_examples": [], - "opcode": "B7A9B0tt", - "stack": "x y w - q=floor((xy+w)/2^z) r=(xy+w)-q*2^z" - }, - "bytecode": { - "tlb": "#B7A9B0 tt:uint8", - "prefix": "B7A9B0", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULADDRSHIFTRMOD", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QMULADDRSHIFTR#MOD", - "fift_examples": [], - "opcode": "B7A9B1tt", - "stack": "x y w - q=round((xy+w)/2^z) r=(xy+w)-q*2^z" - }, - "bytecode": { - "tlb": "#B7A9B1 tt:uint8", - "prefix": "B7A9B1", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULADDRSHIFTCMOD", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QMULADDRSHIFTC#MOD", - "fift_examples": [], - "opcode": "B7A9B2tt", - "stack": "x y w - q=ceil((xy+w)/2^z) r=(xy+w)-q*2^z" - }, - "bytecode": { - "tlb": "#B7A9B2 tt:uint8", - "prefix": "B7A9B2", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULRSHIFT", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QMULRSHIFT#", - "fift_examples": [], - "opcode": "B7A9B4tt", - "stack": "x y - floor(x*y/2^(tt+1))" - }, - "bytecode": { - "tlb": "#B7A9B4 tt:uint8", - "prefix": "B7A9B4", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULRSHIFTR", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QMULRSHIFTR#", - "fift_examples": [], - "opcode": "B7A9B5tt", - "stack": "x y - round(x*y/2^(tt+1))" - }, - "bytecode": { - "tlb": "#B7A9B5 tt:uint8", - "prefix": "B7A9B5", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULRSHIFTC", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QMULRSHIFTC#", - "fift_examples": [], - "opcode": "B7A9B6tt", - "stack": "x y - ceil(x*y/2^(tt+1))" - }, - "bytecode": { - "tlb": "#B7A9B6 tt:uint8", - "prefix": "B7A9B6", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULMODPOW2", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QMULMODPOW2#", - "fift_examples": [], - "opcode": "B7A9B8tt", - "stack": "x y - x*y mod 2^(tt+1)" - }, - "bytecode": { - "tlb": "#B7A9B8 tt:uint8", - "prefix": "B7A9B8", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULMODPOW2R", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QMULMODPOW2R#", - "fift_examples": [], - "opcode": "B7A9B9tt", - "stack": "x y - x*y mod 2^(tt+1)" - }, - "bytecode": { - "tlb": "#B7A9B9 tt:uint8", - "prefix": "B7A9B9", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULMODPOW2C", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QMULMODPOW2C#", - "fift_examples": [], - "opcode": "B7A9BAtt", - "stack": "x y - x*y mod 2^(tt+1)" - }, - "bytecode": { - "tlb": "#B7A9BA tt:uint8", - "prefix": "B7A9BA", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULRSHIFTMOD", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "QMULRSHIFT#MOD", - "fift_examples": [], - "opcode": "B7A9BC", - "stack": "x y - q=floor(x*y/2^(tt+1)) r=xy-q*2^(tt+1)" - }, - "bytecode": {"tlb": "#B7A9BC", "prefix": "B7A9BC", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULRSHIFTRMOD", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "QMULRSHIFTR#MOD", - "fift_examples": [], - "opcode": "B7A9BD", - "stack": "x y - q=round(x*y/2^(tt+1)) r=xy-q*2^(tt+1)" - }, - "bytecode": {"tlb": "#B7A9BD", "prefix": "B7A9BD", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QMULRSHIFTCMOD", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "QMULRSHIFTC#MOD", - "fift_examples": [], - "opcode": "B7A9BE", - "stack": "x y - q=ceil(x*y/2^(tt+1)) r=xy-q*2^(tt+1)" - }, - "bytecode": {"tlb": "#B7A9BE", "prefix": "B7A9BE", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTADDDIVMOD_VAR", - "since_version": 4, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QLSHIFTADDDIVMOD", - "fift_examples": [], - "opcode": "B7A9C0", - "stack": "x w z y - q=floor((x*2^y+w)/z) r=(x*2^y+w)-zq" - }, - "bytecode": {"tlb": "#B7A9C0", "prefix": "B7A9C0", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTADDDIVMODR_VAR", - "since_version": 4, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QLSHIFTADDDIVMODR", - "fift_examples": [], - "opcode": "B7A9C1", - "stack": "x w z y - q=round((x*2^y+w)/z) r=(x*2^y+w)-zq" - }, - "bytecode": {"tlb": "#B7A9C1", "prefix": "B7A9C1", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTADDDIVMODC_VAR", - "since_version": 4, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QLSHIFTADDDIVMODC", - "fift_examples": [], - "opcode": "B7A9C2", - "stack": "x w z y - q=round((x*2^y+w)/z) r=(x*2^y+w)-zq" - }, - "bytecode": {"tlb": "#B7A9C2", "prefix": "B7A9C2", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTDIV_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "`0 <= z <= 256`", - "gas": "34", - "fift": "QLSHIFTDIV", - "fift_examples": [], - "opcode": "B7A9C4", - "stack": "x y z - floor(2^z*x/y)" - }, - "bytecode": {"tlb": "#B7A9C4", "prefix": "B7A9C4", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTDIVR_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "`0 <= z <= 256`", - "gas": "34", - "fift": "QLSHIFTDIVR", - "fift_examples": [], - "opcode": "B7A9C5", - "stack": "x y z - round(2^z*x/y)" - }, - "bytecode": {"tlb": "#B7A9C5", "prefix": "B7A9C5", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTDIVC_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "`0 <= z <= 256`", - "gas": "34", - "fift": "QLSHIFTDIVC", - "fift_examples": [], - "opcode": "B7A9C6", - "stack": "x y z - ceil(2^z*x/y)" - }, - "bytecode": {"tlb": "#B7A9C6", "prefix": "B7A9C6", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTMOD_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QLSHIFTMOD", - "fift_examples": [], - "opcode": "B7A9C8", - "stack": "x y z - 2^z*x mod y" - }, - "bytecode": {"tlb": "#B7A9C8", "prefix": "B7A9C8", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTMODR_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QLSHIFTMODR", - "fift_examples": [], - "opcode": "B7A9C9", - "stack": "x y z - 2^z*x mod y" - }, - "bytecode": {"tlb": "#B7A9C9", "prefix": "B7A9C9", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTMODC_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QLSHIFTMODC", - "fift_examples": [], - "opcode": "B7A9CA", - "stack": "x y z - 2^z*x mod y" - }, - "bytecode": {"tlb": "#B7A9CA", "prefix": "B7A9CA", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTDIVMOD_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QLSHIFTDIVMOD", - "fift_examples": [], - "opcode": "B7A9CC", - "stack": "x y z - q=floor(2^z*x/y) r=2^z*x-q*y" - }, - "bytecode": {"tlb": "#B7A9CC", "prefix": "B7A9CC", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTDIVMODR_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QLSHIFTDIVMODR", - "fift_examples": [], - "opcode": "B7A9CD", - "stack": "x y z - q=round(2^z*x/y) r=2^z*x-q*y" - }, - "bytecode": {"tlb": "#B7A9CD", "prefix": "B7A9CD", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTDIVMODC_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "QLSHIFTDIVMODC", - "fift_examples": [], - "opcode": "B7A9CE", - "stack": "x y z - q=ceil(2^z*x/y) r=2^z*x-q*y" - }, - "bytecode": {"tlb": "#B7A9CE", "prefix": "B7A9CE", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTADDDIVMOD", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QLSHIFT#ADDDIVMOD", - "fift_examples": [], - "opcode": "B7A9D0tt", - "stack": "x w z - q=floor((x*2^(tt+1)+w)/z) r=(x*2^(tt+1)+w)-zq" - }, - "bytecode": { - "tlb": "#B7A9D0 tt:uint8", - "prefix": "B7A9D0", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTADDDIVMODR", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QLSHIFT#ADDDIVMODR", - "fift_examples": [], - "opcode": "B7A9D1tt", - "stack": "x w z - q=round((x*2^(tt+1)+w)/z) r=(x*2^(tt+1)+w)-zq" - }, - "bytecode": { - "tlb": "#B7A9D1 tt:uint8", - "prefix": "B7A9D1", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTADDDIVMODC", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QLSHIFT#ADDDIVMODC", - "fift_examples": [], - "opcode": "B7A9D2tt", - "stack": "x w z - q=ceil((x*2^(tt+1)+w)/z) r=(x*2^(tt+1)+w)-zq" - }, - "bytecode": { - "tlb": "#B7A9D2 tt:uint8", - "prefix": "B7A9D2", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "w", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTDIV", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QLSHIFT#DIV", - "fift_examples": [], - "opcode": "B7A9D4tt", - "stack": "x y - floor(2^(tt+1)*x/y)" - }, - "bytecode": { - "tlb": "#B7A9D4 tt:uint8", - "prefix": "B7A9D4", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTDIVR", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QLSHIFT#DIVR", - "fift_examples": [], - "opcode": "B7A9D5tt", - "stack": "x y - round(2^(tt+1)*x/y)" - }, - "bytecode": { - "tlb": "#B7A9D5 tt:uint8", - "prefix": "B7A9D5", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTDIVC", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "34", - "fift": "[tt+1] QLSHIFT#DIVC", - "fift_examples": [], - "opcode": "B7A9D6tt", - "stack": "x y - ceil(2^(tt+1)*x/y)" - }, - "bytecode": { - "tlb": "#B7A9D6 tt:uint8", - "prefix": "B7A9D6", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTMOD", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QLSHIFT#MOD", - "fift_examples": [], - "opcode": "B7A9D8tt", - "stack": "x y - 2^(tt+1)*x mod y" - }, - "bytecode": { - "tlb": "#B7A9D8 tt:uint8", - "prefix": "B7A9D8", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTMODR", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] LSHIFT#MODR", - "fift_examples": [], - "opcode": "B7A9D9tt", - "stack": "x y - 2^(tt+1)*x mod y" - }, - "bytecode": { - "tlb": "#B7A9D9 tt:uint8", - "prefix": "B7A9D9", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTMODC", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QLSHIFT#MODC", - "fift_examples": [], - "opcode": "B7A9DAtt", - "stack": "x y - 2^(tt+1)*x mod y" - }, - "bytecode": { - "tlb": "#B7A9DA tt:uint8", - "prefix": "B7A9DA", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTDIVMOD", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QLSHIFT#DIVMOD", - "fift_examples": [], - "opcode": "B7A9DCtt", - "stack": "x y - q=floor(2^(tt+1)*x/y) r=2^(tt+1)*x-q*y" - }, - "bytecode": { - "tlb": "#B7A9DC tt:uint8", - "prefix": "B7A9DC", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTDIVMODR", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QLSHIFT#DIVMODR", - "fift_examples": [], - "opcode": "B7A9DDtt", - "stack": "x y - q=round(2^(tt+1)*x/y) r=2^(tt+1)*x-q*y" - }, - "bytecode": { - "tlb": "#B7A9DD tt:uint8", - "prefix": "B7A9DD", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFTDIVMODC", - "since_version": 9999, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "42", - "fift": "[tt+1] QLSHIFT#DIVMODC", - "fift_examples": [], - "opcode": "B7A9DEtt", - "stack": "x y - q=ceil(2^(tt+1)*x/y) r=2^(tt+1)*x-q*y" - }, - "bytecode": { - "tlb": "#B7A9DE tt:uint8", - "prefix": "B7A9DE", - "operands": [ - { - "name": "t", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFT", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "`0 <= cc <= 255`", - "gas": "34", - "fift": "[cc+1] QLSHIFT#", - "fift_examples": [], - "opcode": "B7AAcc", - "stack": "x - x*2^(cc+1)" - }, - "bytecode": { - "tlb": "#B7AA cc:uint8", - "prefix": "B7AA", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QRSHIFT", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "`0 <= cc <= 255`", - "gas": "26", - "fift": "[cc+1] RSHIFT#", - "fift_examples": [], - "opcode": "B7ABcc", - "stack": "x - floor(x/2^(cc+1))" - }, - "bytecode": { - "tlb": "#B7AB cc:uint8", - "prefix": "B7AB", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QLSHIFT_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "26", - "fift": "QLSHIFT", - "fift_examples": [], - "opcode": "B7AC", - "stack": "x y - x*2^y" - }, - "bytecode": {"tlb": "#B7AC", "prefix": "B7AC", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QRSHIFT_VAR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "26", - "fift": "QRSHIFT", - "fift_examples": [], - "opcode": "B7AD", - "stack": "x y - floor(x/2^y)" - }, - "bytecode": {"tlb": "#B7AD", "prefix": "B7AD", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QPOW2", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "26", - "fift": "QPOW2", - "fift_examples": [], - "opcode": "B7AE", - "stack": "y - 2^y" - }, - "bytecode": {"tlb": "#B7AE", "prefix": "B7AE", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "y", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QAND", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "26", - "fift": "QAND", - "fift_examples": [], - "opcode": "B7B0", - "stack": "x y - x&y" - }, - "bytecode": {"tlb": "#B7B0", "prefix": "B7B0", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QOR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "26", - "fift": "QOR", - "fift_examples": [], - "opcode": "B7B1", - "stack": "x y - x|y" - }, - "bytecode": {"tlb": "#B7B1", "prefix": "B7B1", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QXOR", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "26", - "fift": "QXOR", - "fift_examples": [], - "opcode": "B7B2", - "stack": "x y - x xor y" - }, - "bytecode": {"tlb": "#B7B2", "prefix": "B7B2", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QNOT", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "", - "gas": "26", - "fift": "QNOT", - "fift_examples": [], - "opcode": "B7B3", - "stack": "x - ~x" - }, - "bytecode": {"tlb": "#B7B3", "prefix": "B7B3", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QFITS", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "Replaces `x` with a `NaN` if x is not a `cc+1`-bit signed integer, leaves it intact otherwise.", - "gas": "34", - "fift": "[cc+1] QFITS", - "fift_examples": [], - "opcode": "B7B4cc", - "stack": "x - x" - }, - "bytecode": { - "tlb": "#B7B4 cc:uint8", - "prefix": "B7B4", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QUFITS", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "Replaces `x` with a `NaN` if x is not a `cc+1`-bit unsigned integer, leaves it intact otherwise.", - "gas": "34", - "fift": "[cc+1] QUFITS", - "fift_examples": [], - "opcode": "B7B5cc", - "stack": "x - x" - }, - "bytecode": { - "tlb": "#B7B5 cc:uint8", - "prefix": "B7B5", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QFITSX", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "Replaces `x` with a `NaN` if x is not a c-bit signed integer, leaves it intact otherwise.", - "gas": "34", - "fift": "QFITSX", - "fift_examples": [], - "opcode": "B7B600", - "stack": "x c - x" - }, - "bytecode": {"tlb": "#B7B600", "prefix": "B7B600", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "c", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "QUFITSX", - "since_version": 0, - "doc": { - "category": "arithm_quiet", - "description": "Replaces `x` with a `NaN` if x is not a c-bit unsigned integer, leaves it intact otherwise.", - "gas": "34", - "fift": "QUFITSX", - "fift_examples": [], - "opcode": "B7B601", - "stack": "x c - x" - }, - "bytecode": {"tlb": "#B7B601", "prefix": "B7B601", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "c", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SGN", - "since_version": 0, - "doc": { - "category": "compare_int", - "description": "Computes the sign of an integer `x`:\n`-1` if `x<0`, `0` if `x=0`, `1` if `x>0`.", - "gas": "18", - "fift": "SGN", - "fift_examples": [], - "opcode": "B8", - "stack": "x - sgn(x)" - }, - "bytecode": {"tlb": "#B8", "prefix": "B8", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LESS", - "since_version": 0, - "doc": { - "category": "compare_int", - "description": "Returns `-1` if `xy" - }, - "bytecode": {"tlb": "#BC", "prefix": "BC", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "NEQ", - "since_version": 0, - "doc": { - "category": "compare_int", - "description": "Equivalent to `EQUAL` `NOT`.", - "gas": "18", - "fift": "NEQ", - "fift_examples": [], - "opcode": "BD", - "stack": "x y - x!=y" - }, - "bytecode": {"tlb": "#BD", "prefix": "BD", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "GEQ", - "since_version": 0, - "doc": { - "category": "compare_int", - "description": "Equivalent to `LESS` `NOT`.", - "gas": "18", - "fift": "GEQ", - "fift_examples": [], - "opcode": "BE", - "stack": "x y - x>=y" - }, - "bytecode": {"tlb": "#BE", "prefix": "BE", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CMP", - "since_version": 0, - "doc": { - "category": "compare_int", - "description": "Computes the sign of `x-y`:\n`-1` if `xy`.\nNo integer overflow can occur here unless `x` or `y` is a `NaN`.", - "gas": "18", - "fift": "CMP", - "fift_examples": [], - "opcode": "BF", - "stack": "x y - sgn(x-y)" - }, - "bytecode": {"tlb": "#BF", "prefix": "BF", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "EQINT", - "since_version": 0, - "doc": { - "category": "compare_int", - "description": "Returns `-1` if `x=yy`, `0` otherwise.\n`-2^7 <= yy < 2^7`.", - "gas": "26", - "fift": "[yy] EQINT", - "fift_examples": [], - "opcode": "C0yy", - "stack": "x - x=yy" - }, - "bytecode": { - "tlb": "#C0 yy:int8", - "prefix": "C0", - "operands": [ - { - "name": "y", - "type": "int", - "size": 8, - "min_value": -128, - "max_value": 127, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LESSINT", - "since_version": 0, - "doc": { - "category": "compare_int", - "description": "Returns `-1` if `xyy`, `0` otherwise.\n`-2^7 <= yy < 2^7`.", - "gas": "26", - "fift": "[yy] GTINT\n[yy+1] GEQINT", - "fift_examples": [], - "opcode": "C2yy", - "stack": "x - x>yy" - }, - "bytecode": { - "tlb": "#C2 yy:int8", - "prefix": "C2", - "operands": [ - { - "name": "y", - "type": "int", - "size": 8, - "min_value": -128, - "max_value": 127, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "NEQINT", - "since_version": 0, - "doc": { - "category": "compare_int", - "description": "Returns `-1` if `x!=yy`, `0` otherwise.\n`-2^7 <= yy < 2^7`.", - "gas": "26", - "fift": "[yy] NEQINT", - "fift_examples": [], - "opcode": "C3yy", - "stack": "x - x!=yy" - }, - "bytecode": { - "tlb": "#C3 yy:int8", - "prefix": "C3", - "operands": [ - { - "name": "y", - "type": "int", - "size": 8, - "min_value": -128, - "max_value": 127, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ISNAN", - "since_version": 0, - "doc": { - "category": "compare_int", - "description": "Checks whether `x` is a `NaN`.", - "gas": "18", - "fift": "ISNAN", - "fift_examples": [], - "opcode": "C4", - "stack": "x - x=NaN" - }, - "bytecode": {"tlb": "#C4", "prefix": "C4", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CHKNAN", - "since_version": 0, - "doc": { - "category": "compare_int", - "description": "Throws an arithmetic overflow exception if `x` is a `NaN`.", - "gas": "18/68", - "fift": "CHKNAN", - "fift_examples": [], - "opcode": "C5", - "stack": "x - x" - }, - "bytecode": {"tlb": "#C5", "prefix": "C5", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SEMPTY", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Checks whether a _Slice_ `s` is empty (i.e., contains no bits of data and no cell references).", - "gas": "26", - "fift": "SEMPTY", - "fift_examples": [], - "opcode": "C700", - "stack": "s - ?" - }, - "bytecode": {"tlb": "#C700", "prefix": "C700", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDEMPTY", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Checks whether _Slice_ `s` has no bits of data.", - "gas": "26", - "fift": "SDEMPTY", - "fift_examples": [], - "opcode": "C701", - "stack": "s - ?" - }, - "bytecode": {"tlb": "#C701", "prefix": "C701", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SREMPTY", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Checks whether _Slice_ `s` has no references.", - "gas": "26", - "fift": "SREMPTY", - "fift_examples": [], - "opcode": "C702", - "stack": "s - ?" - }, - "bytecode": {"tlb": "#C702", "prefix": "C702", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDFIRST", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Checks whether the first bit of _Slice_ `s` is a one.", - "gas": "26", - "fift": "SDFIRST", - "fift_examples": [], - "opcode": "C703", - "stack": "s - ?" - }, - "bytecode": {"tlb": "#C703", "prefix": "C703", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDLEXCMP", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Compares the data of `s` lexicographically with the data of `s'`, returning `-1`, 0, or 1 depending on the result.", - "gas": "26", - "fift": "SDLEXCMP", - "fift_examples": [], - "opcode": "C704", - "stack": "s s' - x" - }, - "bytecode": {"tlb": "#C704", "prefix": "C704", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDEQ", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Checks whether the data parts of `s` and `s'` coincide, equivalent to `SDLEXCMP` `ISZERO`.", - "gas": "26", - "fift": "SDEQ", - "fift_examples": [], - "opcode": "C705", - "stack": "s s' - ?" - }, - "bytecode": {"tlb": "#C705", "prefix": "C705", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDPFX", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Checks whether `s` is a prefix of `s'`.", - "gas": "26", - "fift": "SDPFX", - "fift_examples": [], - "opcode": "C708", - "stack": "s s' - ?" - }, - "bytecode": {"tlb": "#C708", "prefix": "C708", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDPFXREV", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Checks whether `s'` is a prefix of `s`, equivalent to `SWAP` `SDPFX`.", - "gas": "26", - "fift": "SDPFXREV", - "fift_examples": [], - "opcode": "C709", - "stack": "s s' - ?" - }, - "bytecode": {"tlb": "#C709", "prefix": "C709", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDPPFX", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Checks whether `s` is a proper prefix of `s'` (i.e., a prefix distinct from `s'`).", - "gas": "26", - "fift": "SDPPFX", - "fift_examples": [], - "opcode": "C70A", - "stack": "s s' - ?" - }, - "bytecode": {"tlb": "#C70A", "prefix": "C70A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDPPFXREV", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Checks whether `s'` is a proper prefix of `s`.", - "gas": "26", - "fift": "SDPPFXREV", - "fift_examples": [], - "opcode": "C70B", - "stack": "s s' - ?" - }, - "bytecode": {"tlb": "#C70B", "prefix": "C70B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDSFX", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Checks whether `s` is a suffix of `s'`.", - "gas": "26", - "fift": "SDSFX", - "fift_examples": [], - "opcode": "C70C", - "stack": "s s' - ?" - }, - "bytecode": {"tlb": "#C70C", "prefix": "C70C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDSFXREV", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Checks whether `s'` is a suffix of `s`.", - "gas": "26", - "fift": "SDSFXREV", - "fift_examples": [], - "opcode": "C70D", - "stack": "s s' - ?" - }, - "bytecode": {"tlb": "#C70D", "prefix": "C70D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDPSFX", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Checks whether `s` is a proper suffix of `s'`.", - "gas": "26", - "fift": "SDPSFX", - "fift_examples": [], - "opcode": "C70E", - "stack": "s s' - ?" - }, - "bytecode": {"tlb": "#C70E", "prefix": "C70E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDPSFXREV", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Checks whether `s'` is a proper suffix of `s`.", - "gas": "26", - "fift": "SDPSFXREV", - "fift_examples": [], - "opcode": "C70F", - "stack": "s s' - ?" - }, - "bytecode": {"tlb": "#C70F", "prefix": "C70F", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDCNTLEAD0", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Returns the number of leading zeroes in `s`.", - "gas": "26", - "fift": "SDCNTLEAD0", - "fift_examples": [], - "opcode": "C710", - "stack": "s - n" - }, - "bytecode": {"tlb": "#C710", "prefix": "C710", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDCNTLEAD1", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Returns the number of leading ones in `s`.", - "gas": "26", - "fift": "SDCNTLEAD1", - "fift_examples": [], - "opcode": "C711", - "stack": "s - n" - }, - "bytecode": {"tlb": "#C711", "prefix": "C711", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDCNTTRAIL0", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Returns the number of trailing zeroes in `s`.", - "gas": "26", - "fift": "SDCNTTRAIL0", - "fift_examples": [], - "opcode": "C712", - "stack": "s - n" - }, - "bytecode": {"tlb": "#C712", "prefix": "C712", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDCNTTRAIL1", - "since_version": 0, - "doc": { - "category": "compare_other", - "description": "Returns the number of trailing ones in `s`.", - "gas": "26", - "fift": "SDCNTTRAIL1", - "fift_examples": [], - "opcode": "C713", - "stack": "s - n" - }, - "bytecode": {"tlb": "#C713", "prefix": "C713", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "NEWC", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Creates a new empty _Builder_.", - "gas": "18", - "fift": "NEWC", - "fift_examples": [], - "opcode": "C8", - "stack": "- b" - }, - "bytecode": {"tlb": "#C8", "prefix": "C8", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "b", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ENDC", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Converts a _Builder_ into an ordinary _Cell_.", - "gas": "518", - "fift": "ENDC", - "fift_examples": [], - "opcode": "C9", - "stack": "b - c" - }, - "bytecode": {"tlb": "#C9", "prefix": "C9", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "b", "value_types": ["Builder"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Cell"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STI", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Stores a signed `cc+1`-bit integer `x` into _Builder_ `b` for `0 <= cc <= 255`, throws a range check exception if `x` does not fit into `cc+1` bits.", - "gas": "26", - "fift": "[cc+1] STI", - "fift_examples": [], - "opcode": "CAcc", - "stack": "x b - b'" - }, - "bytecode": { - "tlb": "#CA cc:uint8", - "prefix": "CA", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STU", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Stores an unsigned `cc+1`-bit integer `x` into _Builder_ `b`. In all other respects it is similar to `STI`.", - "gas": "26", - "fift": "[cc+1] STU", - "fift_examples": [], - "opcode": "CBcc", - "stack": "x b - b'" - }, - "bytecode": { - "tlb": "#CB cc:uint8", - "prefix": "CB", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STREF", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Stores a reference to _Cell_ `c` into _Builder_ `b`.", - "gas": "18", - "fift": "STREF", - "fift_examples": [], - "opcode": "CC", - "stack": "c b - b'" - }, - "bytecode": {"tlb": "#CC", "prefix": "CC", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STBREFR", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Equivalent to `ENDC` `SWAP` `STREF`.", - "gas": "518", - "fift": "STBREFR\nENDCST", - "fift_examples": [], - "opcode": "CD", - "stack": "b b'' - b" - }, - "bytecode": {"tlb": "#CD", "prefix": "CD", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "child", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STSLICE", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Stores _Slice_ `s` into _Builder_ `b`.", - "gas": "18", - "fift": "STSLICE", - "fift_examples": [], - "opcode": "CE", - "stack": "s b - b'" - }, - "bytecode": {"tlb": "#CE", "prefix": "CE", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STIX", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Stores a signed `l`-bit integer `x` into `b` for `0 <= l <= 257`.", - "gas": "26", - "fift": "STIX", - "fift_examples": [], - "opcode": "CF00", - "stack": "x b l - b'" - }, - "bytecode": {"tlb": "#CF00", "prefix": "CF00", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STUX", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Stores an unsigned `l`-bit integer `x` into `b` for `0 <= l <= 256`.", - "gas": "26", - "fift": "STUX", - "fift_examples": [], - "opcode": "CF01", - "stack": "x b l - b'" - }, - "bytecode": {"tlb": "#CF01", "prefix": "CF01", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STIXR", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Similar to `STIX`, but with arguments in a different order.", - "gas": "26", - "fift": "STIXR", - "fift_examples": [], - "opcode": "CF02", - "stack": "b x l - b'" - }, - "bytecode": {"tlb": "#CF02", "prefix": "CF02", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STUXR", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Similar to `STUX`, but with arguments in a different order.", - "gas": "26", - "fift": "STUXR", - "fift_examples": [], - "opcode": "CF03", - "stack": "b x l - b'" - }, - "bytecode": {"tlb": "#CF03", "prefix": "CF03", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STIXQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "A quiet version of `STIX`. If there is no space in `b`, sets `b'=b` and `f=-1`.\nIf `x` does not fit into `l` bits, sets `b'=b` and `f=1`.\nIf the operation succeeds, `b'` is the new _Builder_ and `f=0`.\nHowever, `0 <= l <= 257`, with a range check exception if this is not so.", - "gas": "26", - "fift": "STIXQ", - "fift_examples": [], - "opcode": "CF04", - "stack": "x b l - x b f or b' 0" - }, - "bytecode": {"tlb": "#CF04", "prefix": "CF04", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "b2", - "value_types": ["Builder"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - } - ] - }, - { - "value": 1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STUXQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "A quiet version of `STUX`.", - "gas": "26", - "fift": "STUXQ", - "fift_examples": [], - "opcode": "CF05", - "stack": "x b l - x b f or b' 0" - }, - "bytecode": {"tlb": "#CF05", "prefix": "CF05", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "b2", - "value_types": ["Builder"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - } - ] - }, - { - "value": 1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STIXRQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "A quiet version of `STIXR`.", - "gas": "26", - "fift": "STIXRQ", - "fift_examples": [], - "opcode": "CF06", - "stack": "b x l - b x f or b' 0" - }, - "bytecode": {"tlb": "#CF06", "prefix": "CF06", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "b2", - "value_types": ["Builder"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - }, - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - } - ] - }, - { - "value": 1, - "stack": [ - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - }, - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STUXRQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "A quiet version of `STUXR`.", - "gas": "26", - "fift": "STUXRQ", - "fift_examples": [], - "opcode": "CF07", - "stack": "b x l - b x f or b' 0" - }, - "bytecode": {"tlb": "#CF07", "prefix": "CF07", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "b2", - "value_types": ["Builder"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - }, - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - } - ] - }, - { - "value": 1, - "stack": [ - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - }, - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STI_ALT", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "A longer version of `[cc+1] STI`.", - "gas": "34", - "fift": "[cc+1] STI_l", - "fift_examples": [], - "opcode": "CF08cc", - "stack": "x b - b'" - }, - "bytecode": { - "tlb": "#CF08 cc:uint8", - "prefix": "CF08", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STU_ALT", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "A longer version of `[cc+1] STU`.", - "gas": "34", - "fift": "[cc+1] STU_l", - "fift_examples": [], - "opcode": "CF09cc", - "stack": "x b - b'" - }, - "bytecode": { - "tlb": "#CF09 cc:uint8", - "prefix": "CF09", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STIR", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Equivalent to `SWAP` `[cc+1] STI`.", - "gas": "34", - "fift": "[cc+1] STIR", - "fift_examples": [], - "opcode": "CF0Acc", - "stack": "b x - b'" - }, - "bytecode": { - "tlb": "#CF0A cc:uint8", - "prefix": "CF0A", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STUR", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Equivalent to `SWAP` `[cc+1] STU`.", - "gas": "34", - "fift": "[cc+1] STUR", - "fift_examples": [], - "opcode": "CF0Bcc", - "stack": "b x - b'" - }, - "bytecode": { - "tlb": "#CF0B cc:uint8", - "prefix": "CF0B", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STIQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "A quiet version of `STI`.", - "gas": "34", - "fift": "[cc+1] STIQ", - "fift_examples": [], - "opcode": "CF0Ccc", - "stack": "x b - x b f or b' 0" - }, - "bytecode": { - "tlb": "#CF0C cc:uint8", - "prefix": "CF0C", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "b2", - "value_types": ["Builder"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - } - ] - }, - { - "value": 1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STUQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "A quiet version of `STU`.", - "gas": "34", - "fift": "[cc+1] STUQ", - "fift_examples": [], - "opcode": "CF0Dcc", - "stack": "x b - x b f or b' 0" - }, - "bytecode": { - "tlb": "#CF0D cc:uint8", - "prefix": "CF0D", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "b2", - "value_types": ["Builder"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - } - ] - }, - { - "value": 1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STIRQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "A quiet version of `STIR`.", - "gas": "34", - "fift": "[cc+1] STIRQ", - "fift_examples": [], - "opcode": "CF0Ecc", - "stack": "b x - b x f or b' 0" - }, - "bytecode": { - "tlb": "#CF0E cc:uint8", - "prefix": "CF0E", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "b2", - "value_types": ["Builder"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - }, - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - } - ] - }, - { - "value": 1, - "stack": [ - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - }, - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STURQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "A quiet version of `STUR`.", - "gas": "34", - "fift": "[cc+1] STURQ", - "fift_examples": [], - "opcode": "CF0Fcc", - "stack": "b x - b x f or b' 0" - }, - "bytecode": { - "tlb": "#CF0F cc:uint8", - "prefix": "CF0F", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "b2", - "value_types": ["Builder"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - }, - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - } - ] - }, - { - "value": 1, - "stack": [ - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - }, - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STREF_ALT", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "A longer version of `STREF`.", - "gas": "26", - "fift": "STREF_l", - "fift_examples": [], - "opcode": "CF10", - "stack": "c b - b'" - }, - "bytecode": {"tlb": "#CF10", "prefix": "CF10", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STBREF", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Equivalent to `SWAP` `STBREFR`.", - "gas": "526", - "fift": "STBREF", - "fift_examples": [], - "opcode": "CF11", - "stack": "b' b - b''" - }, - "bytecode": {"tlb": "#CF11", "prefix": "CF11", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "child", "value_types": ["Builder"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STSLICE_ALT", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "A longer version of `STSLICE`.", - "gas": "26", - "fift": "STSLICE_l", - "fift_examples": [], - "opcode": "CF12", - "stack": "s b - b'" - }, - "bytecode": {"tlb": "#CF12", "prefix": "CF12", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STB", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Appends all data from _Builder_ `b'` to _Builder_ `b`.", - "gas": "26", - "fift": "STB", - "fift_examples": [], - "opcode": "CF13", - "stack": "b' b - b''" - }, - "bytecode": {"tlb": "#CF13", "prefix": "CF13", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b2", "value_types": ["Builder"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b3", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STREFR", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Equivalent to `SWAP` `STREF`.", - "gas": "26", - "fift": "STREFR", - "fift_examples": [], - "opcode": "CF14", - "stack": "b c - b'" - }, - "bytecode": {"tlb": "#CF14", "prefix": "CF14", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "c", "value_types": ["Cell"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STBREFR_ALT", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "A longer encoding of `STBREFR`.", - "gas": "526", - "fift": "STBREFR_l", - "fift_examples": [], - "opcode": "CF15", - "stack": "b b' - b''" - }, - "bytecode": {"tlb": "#CF15", "prefix": "CF15", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "b2", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b3", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STSLICER", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Equivalent to `SWAP` `STSLICE`.", - "gas": "26", - "fift": "STSLICER", - "fift_examples": [], - "opcode": "CF16", - "stack": "b s - b'" - }, - "bytecode": {"tlb": "#CF16", "prefix": "CF16", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STBR", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Concatenates two builders.\nEquivalent to `SWAP` `STB`.", - "gas": "26", - "fift": "STBR\nBCONCAT", - "fift_examples": [], - "opcode": "CF17", - "stack": "b b' - b''" - }, - "bytecode": {"tlb": "#CF17", "prefix": "CF17", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "b2", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b3", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STREFQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Quiet version of `STREF`.", - "gas": "26", - "fift": "STREFQ", - "fift_examples": [], - "opcode": "CF18", - "stack": "c b - c b -1 or b' 0" - }, - "bytecode": {"tlb": "#CF18", "prefix": "CF18", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "b2", - "value_types": ["Builder"] - } - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STBREFQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Quiet version of `STBREF`.", - "gas": "526", - "fift": "STBREFQ", - "fift_examples": [], - "opcode": "CF19", - "stack": "b' b - b' b -1 or b'' 0" - }, - "bytecode": {"tlb": "#CF19", "prefix": "CF19", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b2", "value_types": ["Builder"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "b3", - "value_types": ["Builder"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "b2", - "value_types": ["Builder"] - }, - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STSLICEQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Quiet version of `STSLICE`.", - "gas": "26", - "fift": "STSLICEQ", - "fift_examples": [], - "opcode": "CF1A", - "stack": "s b - s b -1 or b' 0" - }, - "bytecode": {"tlb": "#CF1A", "prefix": "CF1A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "b2", - "value_types": ["Builder"] - } - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STBQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Quiet version of `STB`.", - "gas": "26", - "fift": "STBQ", - "fift_examples": [], - "opcode": "CF1B", - "stack": "b' b - b' b -1 or b'' 0" - }, - "bytecode": {"tlb": "#CF1B", "prefix": "CF1B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b2", "value_types": ["Builder"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "b3", - "value_types": ["Builder"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "b2", - "value_types": ["Builder"] - }, - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STREFRQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Quiet version of `STREFR`.", - "gas": "26", - "fift": "STREFRQ", - "fift_examples": [], - "opcode": "CF1C", - "stack": "b c - b c -1 or b' 0" - }, - "bytecode": {"tlb": "#CF1C", "prefix": "CF1C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "c", "value_types": ["Cell"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "b2", - "value_types": ["Builder"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - }, - {"type": "simple", "name": "c", "value_types": ["Cell"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STBREFRQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Quiet version of `STBREFR`.", - "gas": "526", - "fift": "STBREFRQ", - "fift_examples": [], - "opcode": "CF1D", - "stack": "b b' - b b' -1 or b'' 0" - }, - "bytecode": {"tlb": "#CF1D", "prefix": "CF1D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b2", "value_types": ["Builder"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "b3", - "value_types": ["Builder"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "b2", - "value_types": ["Builder"] - }, - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STSLICERQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Quiet version of `STSLICER`.", - "gas": "26", - "fift": "STSLICERQ", - "fift_examples": [], - "opcode": "CF1E", - "stack": "b s - b s -1 or b'' 0" - }, - "bytecode": {"tlb": "#CF1E", "prefix": "CF1E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "b3", - "value_types": ["Builder"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - }, - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STBRQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Quiet version of `STBR`.", - "gas": "26", - "fift": "STBRQ\nBCONCATQ", - "fift_examples": [], - "opcode": "CF1F", - "stack": "b b' - b b' -1 or b'' 0" - }, - "bytecode": {"tlb": "#CF1F", "prefix": "CF1F", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "b2", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "b3", - "value_types": ["Builder"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "b", - "value_types": ["Builder"] - }, - { - "type": "simple", - "name": "b2", - "value_types": ["Builder"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STREFCONST", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Equivalent to `PUSHREF` `STREFR`.", - "gas": "26", - "fift": "[ref] STREFCONST", - "fift_examples": [], - "opcode": "CF20", - "stack": "b - b'" - }, - "bytecode": { - "tlb": "#CF20 c:^Cell", - "prefix": "CF20", - "operands": [{"name": "c", "type": "ref", "display_hints": []}] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "b", "value_types": ["Builder"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STREF2CONST", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Equivalent to `STREFCONST` `STREFCONST`.", - "gas": "26", - "fift": "[ref] [ref] STREF2CONST", - "fift_examples": [], - "opcode": "CF21", - "stack": "b - b'" - }, - "bytecode": { - "tlb": "#CF21 c1:^Cell c2:^Cell", - "prefix": "CF21", - "operands": [ - {"name": "c1", "type": "ref", "display_hints": []}, - {"name": "c2", "type": "ref", "display_hints": []} - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "b", "value_types": ["Builder"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ENDXC", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "If `x!=0`, creates a _special_ or _exotic_ cell from _Builder_ `b`.\nThe type of the exotic cell must be stored in the first 8 bits of `b`.\nIf `x=0`, it is equivalent to `ENDC`. Otherwise some validity checks on the data and references of `b` are performed before creating the exotic cell.", - "gas": "526", - "fift": "ENDXC", - "fift_examples": [], - "opcode": "CF23", - "stack": "b x - c" - }, - "bytecode": {"tlb": "#CF23", "prefix": "CF23", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Cell"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STILE4", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Stores a little-endian signed 32-bit integer.", - "gas": "26", - "fift": "STILE4", - "fift_examples": [], - "opcode": "CF28", - "stack": "x b - b'" - }, - "bytecode": {"tlb": "#CF28", "prefix": "CF28", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STULE4", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Stores a little-endian unsigned 32-bit integer.", - "gas": "26", - "fift": "STULE4", - "fift_examples": [], - "opcode": "CF29", - "stack": "x b - b'" - }, - "bytecode": {"tlb": "#CF29", "prefix": "CF29", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STILE8", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Stores a little-endian signed 64-bit integer.", - "gas": "26", - "fift": "STILE8", - "fift_examples": [], - "opcode": "CF2A", - "stack": "x b - b'" - }, - "bytecode": {"tlb": "#CF2A", "prefix": "CF2A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STULE8", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Stores a little-endian unsigned 64-bit integer.", - "gas": "26", - "fift": "STULE8", - "fift_examples": [], - "opcode": "CF2B", - "stack": "x b - b'" - }, - "bytecode": {"tlb": "#CF2B", "prefix": "CF2B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BDEPTH", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Returns the depth of _Builder_ `b`. If no cell references are stored in `b`, then `x=0`; otherwise `x` is one plus the maximum of depths of cells referred to from `b`.", - "gas": "26", - "fift": "BDEPTH", - "fift_examples": [], - "opcode": "CF30", - "stack": "b - x" - }, - "bytecode": {"tlb": "#CF30", "prefix": "CF30", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "b", "value_types": ["Builder"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BBITS", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Returns the number of data bits already stored in _Builder_ `b`.", - "gas": "26", - "fift": "BBITS", - "fift_examples": [], - "opcode": "CF31", - "stack": "b - x" - }, - "bytecode": {"tlb": "#CF31", "prefix": "CF31", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "b", "value_types": ["Builder"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BREFS", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Returns the number of cell references already stored in `b`.", - "gas": "26", - "fift": "BREFS", - "fift_examples": [], - "opcode": "CF32", - "stack": "b - y" - }, - "bytecode": {"tlb": "#CF32", "prefix": "CF32", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "b", "value_types": ["Builder"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "y", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BBITREFS", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Returns the numbers of both data bits and cell references in `b`.", - "gas": "26", - "fift": "BBITREFS", - "fift_examples": [], - "opcode": "CF33", - "stack": "b - x y" - }, - "bytecode": {"tlb": "#CF33", "prefix": "CF33", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "b", "value_types": ["Builder"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BREMBITS", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Returns the number of data bits that can still be stored in `b`.", - "gas": "26", - "fift": "BREMBITS", - "fift_examples": [], - "opcode": "CF35", - "stack": "b - x'" - }, - "bytecode": {"tlb": "#CF35", "prefix": "CF35", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "b", "value_types": ["Builder"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x2", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BREMREFS", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Returns the number of references that can still be stored in `b`.", - "gas": "26", - "fift": "BREMREFS", - "fift_examples": [], - "opcode": "CF36", - "stack": "b - y'" - }, - "bytecode": {"tlb": "#CF36", "prefix": "CF36", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "b", "value_types": ["Builder"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "y2", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BREMBITREFS", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Returns the numbers of both data bits and references that can still be stored in `b`.", - "gas": "26", - "fift": "BREMBITREFS", - "fift_examples": [], - "opcode": "CF37", - "stack": "b - x' y'" - }, - "bytecode": {"tlb": "#CF37", "prefix": "CF37", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "b", "value_types": ["Builder"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x2", "value_types": ["Integer"]}, - {"type": "simple", "name": "y2", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BCHKBITS", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Checks whether `cc+1` bits can be stored into `b`, where `0 <= cc <= 255`.", - "gas": "34/84", - "fift": "[cc+1] BCHKBITS#", - "fift_examples": [], - "opcode": "CF38cc", - "stack": "b -" - }, - "bytecode": { - "tlb": "#CF38 cc:uint8", - "prefix": "CF38", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "b", "value_types": ["Builder"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BCHKBITS_VAR", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Checks whether `x` bits can be stored into `b`, `0 <= x <= 1023`. If there is no space for `x` more bits in `b`, or if `x` is not within the range `0...1023`, throws an exception.", - "gas": "26/76", - "fift": "BCHKBITS", - "fift_examples": [], - "opcode": "CF39", - "stack": "b x - " - }, - "bytecode": {"tlb": "#CF39", "prefix": "CF39", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BCHKREFS", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Checks whether `y` references can be stored into `b`, `0 <= y <= 7`.", - "gas": "26/76", - "fift": "BCHKREFS", - "fift_examples": [], - "opcode": "CF3A", - "stack": "b y - " - }, - "bytecode": {"tlb": "#CF3A", "prefix": "CF3A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BCHKBITREFS", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Checks whether `x` bits and `y` references can be stored into `b`, `0 <= x <= 1023`, `0 <= y <= 7`.", - "gas": "26/76", - "fift": "BCHKBITREFS", - "fift_examples": [], - "opcode": "CF3B", - "stack": "b x y - " - }, - "bytecode": {"tlb": "#CF3B", "prefix": "CF3B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BCHKBITSQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Checks whether `cc+1` bits can be stored into `b`, where `0 <= cc <= 255`.", - "gas": "34", - "fift": "[cc+1] BCHKBITSQ#", - "fift_examples": [], - "opcode": "CF3Ccc", - "stack": "b - ?" - }, - "bytecode": { - "tlb": "#CF3C cc:uint8", - "prefix": "CF3C", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "b", "value_types": ["Builder"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BCHKBITSQ_VAR", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Checks whether `x` bits can be stored into `b`, `0 <= x <= 1023`.", - "gas": "26", - "fift": "BCHKBITSQ", - "fift_examples": [], - "opcode": "CF3D", - "stack": "b x - ?" - }, - "bytecode": {"tlb": "#CF3D", "prefix": "CF3D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BCHKREFSQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Checks whether `y` references can be stored into `b`, `0 <= y <= 7`.", - "gas": "26", - "fift": "BCHKREFSQ", - "fift_examples": [], - "opcode": "CF3E", - "stack": "b y - ?" - }, - "bytecode": {"tlb": "#CF3E", "prefix": "CF3E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BCHKBITREFSQ", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Checks whether `x` bits and `y` references can be stored into `b`, `0 <= x <= 1023`, `0 <= y <= 7`.", - "gas": "26", - "fift": "BCHKBITREFSQ", - "fift_examples": [], - "opcode": "CF3F", - "stack": "b x y - ?" - }, - "bytecode": {"tlb": "#CF3F", "prefix": "CF3F", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STZEROES", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Stores `n` binary zeroes into _Builder_ `b`.", - "gas": "26", - "fift": "STZEROES", - "fift_examples": [], - "opcode": "CF40", - "stack": "b n - b'" - }, - "bytecode": {"tlb": "#CF40", "prefix": "CF40", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STONES", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Stores `n` binary ones into _Builder_ `b`.", - "gas": "26", - "fift": "STONES", - "fift_examples": [], - "opcode": "CF41", - "stack": "b n - b'" - }, - "bytecode": {"tlb": "#CF41", "prefix": "CF41", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STSAME", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Stores `n` binary `x`es (`0 <= x <= 1`) into _Builder_ `b`.", - "gas": "26", - "fift": "STSAME", - "fift_examples": [], - "opcode": "CF42", - "stack": "b n x - b'" - }, - "bytecode": {"tlb": "#CF42", "prefix": "CF42", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STSLICECONST", - "since_version": 0, - "doc": { - "category": "cell_build", - "description": "Stores a constant subslice `sss`.\n_Details:_ `sss` consists of `0 <= x <= 3` references and up to `8y+2` data bits, with `0 <= y <= 7`. Completion bit is assumed.\nNote that the assembler can replace `STSLICECONST` with `PUSHSLICE` `STSLICER` if the slice is too big.", - "gas": "24", - "fift": "[slice] STSLICECONST", - "fift_examples": [], - "opcode": "CFC0_xysss", - "stack": "b - b'" - }, - "bytecode": { - "tlb": "#CFC0_ x:(## 2) y:(## 3) c:(x * ^Cell) sss:((8 * y + 2) * Bit)", - "prefix": "CFC0_", - "operands": [ - { - "name": "s", - "type": "subslice", - "bits_length_var_size": 3, - "refs_length_var_size": 2, - "bits_padding": 2, - "refs_add": 0, - "completion_tag": true, - "max_bits": 57, - "min_bits": 0, - "max_refs": 3, - "min_refs": 0, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "b", "value_types": ["Builder"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CTOS", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Converts a _Cell_ into a _Slice_. Notice that `c` must be either an ordinary cell, or an exotic cell which is automatically _loaded_ to yield an ordinary cell `c'`, converted into a _Slice_ afterwards.", - "gas": "118/43", - "fift": "CTOS", - "fift_examples": [], - "opcode": "D0", - "stack": "c - s" - }, - "bytecode": {"tlb": "#D0", "prefix": "D0", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Cell"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ENDS", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Removes a _Slice_ `s` from the stack, and throws an exception if it is not empty.", - "gas": "18/68", - "fift": "ENDS", - "fift_examples": [], - "opcode": "D1", - "stack": "s - " - }, - "bytecode": {"tlb": "#D1", "prefix": "D1", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDI", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Loads (i.e., parses) a signed `cc+1`-bit integer `x` from _Slice_ `s`, and returns the remainder of `s` as `s'`.", - "gas": "26", - "fift": "[cc+1] LDI", - "fift_examples": [], - "opcode": "D2cc", - "stack": "s - x s'" - }, - "bytecode": { - "tlb": "#D2 cc:uint8", - "prefix": "D2", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDU", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Loads an unsigned `cc+1`-bit integer `x` from _Slice_ `s`.", - "gas": "26", - "fift": "[cc+1] LDU", - "fift_examples": [], - "opcode": "D3cc", - "stack": "s - x s'" - }, - "bytecode": { - "tlb": "#D3 cc:uint8", - "prefix": "D3", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDREF", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Loads a cell reference `c` from `s`.", - "gas": "18", - "fift": "LDREF", - "fift_examples": [], - "opcode": "D4", - "stack": "s - c s'" - }, - "bytecode": {"tlb": "#D4", "prefix": "D4", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDREFRTOS", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Equivalent to `LDREF` `SWAP` `CTOS`.", - "gas": "118/43", - "fift": "LDREFRTOS", - "fift_examples": [], - "opcode": "D5", - "stack": "s - s' s''" - }, - "bytecode": {"tlb": "#D5", "prefix": "D5", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "s2", "value_types": ["Slice"]}, - {"type": "simple", "name": "s3", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDSLICE", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Cuts the next `cc+1` bits of `s` into a separate _Slice_ `s''`.", - "gas": "26", - "fift": "[cc+1] LDSLICE", - "fift_examples": [], - "opcode": "D6cc", - "stack": "s - s'' s'" - }, - "bytecode": { - "tlb": "#D6 cc:uint8", - "prefix": "D6", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "s3", "value_types": ["Slice"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDIX", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Loads a signed `l`-bit (`0 <= l <= 257`) integer `x` from _Slice_ `s`, and returns the remainder of `s` as `s'`.", - "gas": "26", - "fift": "LDIX", - "fift_examples": [], - "opcode": "D700", - "stack": "s l - x s'" - }, - "bytecode": {"tlb": "#D700", "prefix": "D700", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDUX", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Loads an unsigned `l`-bit integer `x` from (the first `l` bits of) `s`, with `0 <= l <= 256`.", - "gas": "26", - "fift": "LDUX", - "fift_examples": [], - "opcode": "D701", - "stack": "s l - x s'" - }, - "bytecode": {"tlb": "#D701", "prefix": "D701", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDIX", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Preloads a signed `l`-bit integer from _Slice_ `s`, for `0 <= l <= 257`.", - "gas": "26", - "fift": "PLDIX", - "fift_examples": [], - "opcode": "D702", - "stack": "s l - x" - }, - "bytecode": {"tlb": "#D702", "prefix": "D702", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDUX", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Preloads an unsigned `l`-bit integer from `s`, for `0 <= l <= 256`.", - "gas": "26", - "fift": "PLDUX", - "fift_examples": [], - "opcode": "D703", - "stack": "s l - x" - }, - "bytecode": {"tlb": "#D703", "prefix": "D703", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDIXQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Quiet version of `LDIX`: loads a signed `l`-bit integer from `s` similarly to `LDIX`, but returns a success flag, equal to `-1` on success or to `0` on failure (if `s` does not have `l` bits), instead of throwing a cell underflow exception.", - "gas": "26", - "fift": "LDIXQ", - "fift_examples": [], - "opcode": "D704", - "stack": "s l - x s' -1 or s 0" - }, - "bytecode": {"tlb": "#D704", "prefix": "D704", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDUXQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Quiet version of `LDUX`.", - "gas": "26", - "fift": "LDUXQ", - "fift_examples": [], - "opcode": "D705", - "stack": "s l - x s' -1 or s 0" - }, - "bytecode": {"tlb": "#D705", "prefix": "D705", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDIXQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Quiet version of `PLDIX`.", - "gas": "26", - "fift": "PLDIXQ", - "fift_examples": [], - "opcode": "D706", - "stack": "s l - x -1 or 0" - }, - "bytecode": {"tlb": "#D706", "prefix": "D706", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDUXQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Quiet version of `PLDUX`.", - "gas": "26", - "fift": "PLDUXQ", - "fift_examples": [], - "opcode": "D707", - "stack": "s l - x -1 or 0" - }, - "bytecode": {"tlb": "#D707", "prefix": "D707", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDI_ALT", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "A longer encoding for `LDI`.", - "gas": "34", - "fift": "[cc+1] LDI_l", - "fift_examples": [], - "opcode": "D708cc", - "stack": "s - x s'" - }, - "bytecode": { - "tlb": "#D708 cc:uint8", - "prefix": "D708", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDU_ALT", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "A longer encoding for `LDU`.", - "gas": "34", - "fift": "[cc+1] LDU_l", - "fift_examples": [], - "opcode": "D709cc", - "stack": "s - x s'" - }, - "bytecode": { - "tlb": "#D709 cc:uint8", - "prefix": "D709", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDI", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Preloads a signed `cc+1`-bit integer from _Slice_ `s`.", - "gas": "34", - "fift": "[cc+1] PLDI", - "fift_examples": [], - "opcode": "D70Acc", - "stack": "s - x" - }, - "bytecode": { - "tlb": "#D70A cc:uint8", - "prefix": "D70A", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDU", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Preloads an unsigned `cc+1`-bit integer from `s`.", - "gas": "34", - "fift": "[cc+1] PLDU", - "fift_examples": [], - "opcode": "D70Bcc", - "stack": "s - x" - }, - "bytecode": { - "tlb": "#D70B cc:uint8", - "prefix": "D70B", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDIQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "A quiet version of `LDI`.", - "gas": "34", - "fift": "[cc+1] LDIQ", - "fift_examples": [], - "opcode": "D70Ccc", - "stack": "s - x s' -1 or s 0" - }, - "bytecode": { - "tlb": "#D70C cc:uint8", - "prefix": "D70C", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDUQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "A quiet version of `LDU`.", - "gas": "34", - "fift": "[cc+1] LDUQ", - "fift_examples": [], - "opcode": "D70Dcc", - "stack": "s - x s' -1 or s 0" - }, - "bytecode": { - "tlb": "#D70D cc:uint8", - "prefix": "D70D", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDIQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "A quiet version of `PLDI`.", - "gas": "34", - "fift": "[cc+1] PLDIQ", - "fift_examples": [], - "opcode": "D70Ecc", - "stack": "s - x -1 or 0" - }, - "bytecode": { - "tlb": "#D70E cc:uint8", - "prefix": "D70E", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDUQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "A quiet version of `PLDU`.", - "gas": "34", - "fift": "[cc+1] PLDUQ", - "fift_examples": [], - "opcode": "D70Fcc", - "stack": "s - x -1 or 0" - }, - "bytecode": { - "tlb": "#D70F cc:uint8", - "prefix": "D70F", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDUZ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Preloads the first `32(c+1)` bits of _Slice_ `s` into an unsigned integer `x`, for `0 <= c <= 7`. If `s` is shorter than necessary, missing bits are assumed to be zero. This operation is intended to be used along with `IFBITJMP` and similar instructions.", - "gas": "26", - "fift": "[32(c+1)] PLDUZ", - "fift_examples": [], - "opcode": "D714_c", - "stack": "s - s x" - }, - "bytecode": { - "tlb": "#D714_ c:uint3", - "prefix": "D714_", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 3, - "min_value": 0, - "max_value": 7, - "display_hints": [{"type": "plduz"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDSLICEX", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Loads the first `0 <= l <= 1023` bits from _Slice_ `s` into a separate _Slice_ `s''`, returning the remainder of `s` as `s'`.", - "gas": "26", - "fift": "LDSLICEX", - "fift_examples": [], - "opcode": "D718", - "stack": "s l - s'' s'" - }, - "bytecode": {"tlb": "#D718", "prefix": "D718", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "s3", "value_types": ["Slice"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDSLICEX", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns the first `0 <= l <= 1023` bits of `s` as `s''`.", - "gas": "26", - "fift": "PLDSLICEX", - "fift_examples": [], - "opcode": "D719", - "stack": "s l - s''" - }, - "bytecode": {"tlb": "#D719", "prefix": "D719", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s3", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDSLICEXQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "A quiet version of `LDSLICEX`.", - "gas": "26", - "fift": "LDSLICEXQ", - "fift_examples": [], - "opcode": "D71A", - "stack": "s l - s'' s' -1 or s 0" - }, - "bytecode": {"tlb": "#D71A", "prefix": "D71A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "s3", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDSLICEXQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "A quiet version of `LDSLICEXQ`.", - "gas": "26", - "fift": "PLDSLICEXQ", - "fift_examples": [], - "opcode": "D71B", - "stack": "s l - s' -1 or 0" - }, - "bytecode": {"tlb": "#D71B", "prefix": "D71B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDSLICE_ALT", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "A longer encoding for `LDSLICE`.", - "gas": "34", - "fift": "[cc+1] LDSLICE_l", - "fift_examples": [], - "opcode": "D71Ccc", - "stack": "s - s'' s'" - }, - "bytecode": { - "tlb": "#D71C cc:uint8", - "prefix": "D71C", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "s3", "value_types": ["Slice"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDSLICE", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns the first `0 < cc+1 <= 256` bits of `s` as `s''`.", - "gas": "34", - "fift": "[cc+1] PLDSLICE", - "fift_examples": [], - "opcode": "D71Dcc", - "stack": "s - s''" - }, - "bytecode": { - "tlb": "#D71D cc:uint8", - "prefix": "D71D", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s3", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDSLICEQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "A quiet version of `LDSLICE`.", - "gas": "34", - "fift": "[cc+1] LDSLICEQ", - "fift_examples": [], - "opcode": "D71Ecc", - "stack": "s - s'' s' -1 or s 0" - }, - "bytecode": { - "tlb": "#D71E cc:uint8", - "prefix": "D71E", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "s3", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDSLICEQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "A quiet version of `PLDSLICE`.", - "gas": "34", - "fift": "[cc+1] PLDSLICEQ", - "fift_examples": [], - "opcode": "D71Fcc", - "stack": "s - s'' -1 or 0" - }, - "bytecode": { - "tlb": "#D71F cc:uint8", - "prefix": "D71F", - "operands": [ - { - "name": "c", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [{"type": "add", "value": 1}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "s3", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDCUTFIRST", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns the first `0 <= l <= 1023` bits of `s`. It is equivalent to `PLDSLICEX`.", - "gas": "26", - "fift": "SDCUTFIRST", - "fift_examples": [], - "opcode": "D720", - "stack": "s l - s'" - }, - "bytecode": {"tlb": "#D720", "prefix": "D720", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDSKIPFIRST", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns all but the first `0 <= l <= 1023` bits of `s`. It is equivalent to `LDSLICEX` `NIP`.", - "gas": "26", - "fift": "SDSKIPFIRST", - "fift_examples": [], - "opcode": "D721", - "stack": "s l - s'" - }, - "bytecode": {"tlb": "#D721", "prefix": "D721", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDCUTLAST", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns the last `0 <= l <= 1023` bits of `s`.", - "gas": "26", - "fift": "SDCUTLAST", - "fift_examples": [], - "opcode": "D722", - "stack": "s l - s'" - }, - "bytecode": {"tlb": "#D722", "prefix": "D722", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDSKIPLAST", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns all but the last `0 <= l <= 1023` bits of `s`.", - "gas": "26", - "fift": "SDSKIPLAST", - "fift_examples": [], - "opcode": "D723", - "stack": "s l - s'" - }, - "bytecode": {"tlb": "#D723", "prefix": "D723", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDSUBSTR", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns `0 <= l' <= 1023` bits of `s` starting from offset `0 <= l <= 1023`, thus extracting a bit substring out of the data of `s`.", - "gas": "26", - "fift": "SDSUBSTR", - "fift_examples": [], - "opcode": "D724", - "stack": "s l l' - s'" - }, - "bytecode": {"tlb": "#D724", "prefix": "D724", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "l2", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDBEGINSX", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Checks whether `s` begins with (the data bits of) `s'`, and removes `s'` from `s` on success. On failure throws a cell deserialization exception. Primitive `SDPFXREV` can be considered a quiet version of `SDBEGINSX`.", - "gas": "26", - "fift": "SDBEGINSX", - "fift_examples": [], - "opcode": "D726", - "stack": "s s' - s''" - }, - "bytecode": {"tlb": "#D726", "prefix": "D726", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s3", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDBEGINSXQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "A quiet version of `SDBEGINSX`.", - "gas": "26", - "fift": "SDBEGINSXQ", - "fift_examples": [], - "opcode": "D727", - "stack": "s s' - s'' -1 or s 0" - }, - "bytecode": {"tlb": "#D727", "prefix": "D727", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "s3", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDBEGINS", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Checks whether `s` begins with constant bitstring `sss` of length `8x+3` (with continuation bit assumed), where `0 <= x <= 127`, and removes `sss` from `s` on success.", - "gas": "31", - "fift": "[slice] SDBEGINS", - "fift_examples": [], - "opcode": "D72A_xsss", - "stack": "s - s''" - }, - "bytecode": { - "tlb": "#D72A_ x:(## 7) sss:((8 * x + 3) * Bit)", - "prefix": "D72A_", - "operands": [ - { - "name": "s", - "type": "subslice", - "bits_length_var_size": 7, - "bits_padding": 3, - "completion_tag": true, - "max_bits": 1018, - "min_bits": 0, - "max_refs": 0, - "min_refs": 0, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s3", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDBEGINSQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "A quiet version of `SDBEGINS`.", - "gas": "31", - "fift": "[slice] SDBEGINSQ", - "fift_examples": [], - "opcode": "D72E_xsss", - "stack": "s - s'' -1 or s 0" - }, - "bytecode": { - "tlb": "#D72E_ x:(## 7) sss:((8 * x + 3) * Bit)", - "prefix": "D72E_", - "operands": [ - { - "name": "s", - "type": "subslice", - "bits_length_var_size": 7, - "bits_padding": 3, - "completion_tag": true, - "max_bits": 1018, - "min_bits": 0, - "max_refs": 0, - "min_refs": 0, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "s3", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SCUTFIRST", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns the first `0 <= l <= 1023` bits and first `0 <= r <= 4` references of `s`.", - "gas": "26", - "fift": "SCUTFIRST", - "fift_examples": [], - "opcode": "D730", - "stack": "s l r - s'" - }, - "bytecode": {"tlb": "#D730", "prefix": "D730", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SSKIPFIRST", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns all but the first `l` bits of `s` and `r` references of `s`.", - "gas": "26", - "fift": "SSKIPFIRST", - "fift_examples": [], - "opcode": "D731", - "stack": "s l r - s'" - }, - "bytecode": {"tlb": "#D731", "prefix": "D731", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SCUTLAST", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns the last `0 <= l <= 1023` data bits and last `0 <= r <= 4` references of `s`.", - "gas": "26", - "fift": "SCUTLAST", - "fift_examples": [], - "opcode": "D732", - "stack": "s l r - s'" - }, - "bytecode": {"tlb": "#D732", "prefix": "D732", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SSKIPLAST", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns all but the last `l` bits of `s` and `r` references of `s`.", - "gas": "26", - "fift": "SSKIPLAST", - "fift_examples": [], - "opcode": "D733", - "stack": "s l r - s'" - }, - "bytecode": {"tlb": "#D733", "prefix": "D733", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SUBSLICE", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns `0 <= l' <= 1023` bits and `0 <= r' <= 4` references from _Slice_ `s`, after skipping the first `0 <= l <= 1023` bits and first `0 <= r <= 4` references.", - "gas": "26", - "fift": "SUBSLICE", - "fift_examples": [], - "opcode": "D734", - "stack": "s l r l' r' - s'" - }, - "bytecode": {"tlb": "#D734", "prefix": "D734", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]}, - {"type": "simple", "name": "l2", "value_types": ["Integer"]}, - {"type": "simple", "name": "r2", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SPLIT", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Splits the first `0 <= l <= 1023` data bits and first `0 <= r <= 4` references from `s` into `s'`, returning the remainder of `s` as `s''`.", - "gas": "26", - "fift": "SPLIT", - "fift_examples": [], - "opcode": "D736", - "stack": "s l r - s' s''" - }, - "bytecode": {"tlb": "#D736", "prefix": "D736", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "s2", "value_types": ["Slice"]}, - {"type": "simple", "name": "s3", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SPLITQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "A quiet version of `SPLIT`.", - "gas": "26", - "fift": "SPLITQ", - "fift_examples": [], - "opcode": "D737", - "stack": "s l r - s' s'' -1 or s 0" - }, - "bytecode": {"tlb": "#D737", "prefix": "D737", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "s2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "s3", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "XCTOS", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Transforms an ordinary or exotic cell into a _Slice_, as if it were an ordinary cell. A flag is returned indicating whether `c` is exotic. If that be the case, its type can later be deserialized from the first eight bits of `s`.", - "gas": "", - "fift": "XCTOS", - "fift_examples": [], - "opcode": "D739", - "stack": "c - s ?" - }, - "bytecode": {"tlb": "#D739", "prefix": "D739", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Cell"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "flag", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "XLOAD", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Loads an exotic cell `c` and returns an ordinary cell `c'`. If `c` is already ordinary, does nothing. If `c` cannot be loaded, throws an exception.", - "gas": "", - "fift": "XLOAD", - "fift_examples": [], - "opcode": "D73A", - "stack": "c - c'" - }, - "bytecode": {"tlb": "#D73A", "prefix": "D73A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Cell"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c2", "value_types": ["Cell"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "XLOADQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Loads an exotic cell `c` and returns an ordinary cell `c'`. If `c` is already ordinary, does nothing. If `c` cannot be loaded, returns 0.", - "gas": "", - "fift": "XLOADQ", - "fift_examples": [], - "opcode": "D73B", - "stack": "c - c' -1 or c 0" - }, - "bytecode": {"tlb": "#D73B", "prefix": "D73B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Cell"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "c2", "value_types": ["Cell"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SCHKBITS", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Checks whether there are at least `l` data bits in _Slice_ `s`. If this is not the case, throws a cell deserialisation (i.e., cell underflow) exception.", - "gas": "26/76", - "fift": "SCHKBITS", - "fift_examples": [], - "opcode": "D741", - "stack": "s l - " - }, - "bytecode": {"tlb": "#D741", "prefix": "D741", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SCHKREFS", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Checks whether there are at least `r` references in _Slice_ `s`.", - "gas": "26/76", - "fift": "SCHKREFS", - "fift_examples": [], - "opcode": "D742", - "stack": "s r - " - }, - "bytecode": {"tlb": "#D742", "prefix": "D742", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SCHKBITREFS", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Checks whether there are at least `l` data bits and `r` references in _Slice_ `s`.", - "gas": "26/76", - "fift": "SCHKBITREFS", - "fift_examples": [], - "opcode": "D743", - "stack": "s l r - " - }, - "bytecode": {"tlb": "#D743", "prefix": "D743", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SCHKBITSQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Checks whether there are at least `l` data bits in _Slice_ `s`.", - "gas": "26", - "fift": "SCHKBITSQ", - "fift_examples": [], - "opcode": "D745", - "stack": "s l - ?" - }, - "bytecode": {"tlb": "#D745", "prefix": "D745", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SCHKREFSQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Checks whether there are at least `r` references in _Slice_ `s`.", - "gas": "26", - "fift": "SCHKREFSQ", - "fift_examples": [], - "opcode": "D746", - "stack": "s r - ?" - }, - "bytecode": {"tlb": "#D746", "prefix": "D746", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SCHKBITREFSQ", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Checks whether there are at least `l` data bits and `r` references in _Slice_ `s`.", - "gas": "26", - "fift": "SCHKBITREFSQ", - "fift_examples": [], - "opcode": "D747", - "stack": "s l r - ?" - }, - "bytecode": {"tlb": "#D747", "prefix": "D747", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDREFVAR", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns the `n`-th cell reference of _Slice_ `s` for `0 <= n <= 3`.", - "gas": "26", - "fift": "PLDREFVAR", - "fift_examples": [], - "opcode": "D748", - "stack": "s n - c" - }, - "bytecode": {"tlb": "#D748", "prefix": "D748", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Cell"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SBITS", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns the number of data bits in _Slice_ `s`.", - "gas": "26", - "fift": "SBITS", - "fift_examples": [], - "opcode": "D749", - "stack": "s - l" - }, - "bytecode": {"tlb": "#D749", "prefix": "D749", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "l", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SREFS", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns the number of references in _Slice_ `s`.", - "gas": "26", - "fift": "SREFS", - "fift_examples": [], - "opcode": "D74A", - "stack": "s - r" - }, - "bytecode": {"tlb": "#D74A", "prefix": "D74A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "r", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SBITREFS", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns both the number of data bits and the number of references in `s`.", - "gas": "26", - "fift": "SBITREFS", - "fift_examples": [], - "opcode": "D74B", - "stack": "s - l r" - }, - "bytecode": {"tlb": "#D74B", "prefix": "D74B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDREFIDX", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns the `n`-th cell reference of _Slice_ `s`, where `0 <= n <= 3`.", - "gas": "26", - "fift": "[n] PLDREFIDX", - "fift_examples": [], - "opcode": "D74E_n", - "stack": "s - c" - }, - "bytecode": { - "tlb": "#D74E_ n:uint2", - "prefix": "D74E_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 2, - "min_value": 0, - "max_value": 3, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Cell"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDILE4", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Loads a little-endian signed 32-bit integer.", - "gas": "26", - "fift": "LDILE4", - "fift_examples": [], - "opcode": "D750", - "stack": "s - x s'" - }, - "bytecode": {"tlb": "#D750", "prefix": "D750", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDULE4", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Loads a little-endian unsigned 32-bit integer.", - "gas": "26", - "fift": "LDULE4", - "fift_examples": [], - "opcode": "D751", - "stack": "s - x s'" - }, - "bytecode": {"tlb": "#D751", "prefix": "D751", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDILE8", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Loads a little-endian signed 64-bit integer.", - "gas": "26", - "fift": "LDILE8", - "fift_examples": [], - "opcode": "D752", - "stack": "s - x s'" - }, - "bytecode": {"tlb": "#D752", "prefix": "D752", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDULE8", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Loads a little-endian unsigned 64-bit integer.", - "gas": "26", - "fift": "LDULE8", - "fift_examples": [], - "opcode": "D753", - "stack": "s - x s'" - }, - "bytecode": {"tlb": "#D753", "prefix": "D753", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDILE4", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Preloads a little-endian signed 32-bit integer.", - "gas": "26", - "fift": "PLDILE4", - "fift_examples": [], - "opcode": "D754", - "stack": "s - x" - }, - "bytecode": {"tlb": "#D754", "prefix": "D754", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDULE4", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Preloads a little-endian unsigned 32-bit integer.", - "gas": "26", - "fift": "PLDULE4", - "fift_examples": [], - "opcode": "D755", - "stack": "s - x" - }, - "bytecode": {"tlb": "#D755", "prefix": "D755", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDILE8", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Preloads a little-endian signed 64-bit integer.", - "gas": "26", - "fift": "PLDILE8", - "fift_examples": [], - "opcode": "D756", - "stack": "s - x" - }, - "bytecode": {"tlb": "#D756", "prefix": "D756", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDULE8", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Preloads a little-endian unsigned 64-bit integer.", - "gas": "26", - "fift": "PLDULE8", - "fift_examples": [], - "opcode": "D757", - "stack": "s - x" - }, - "bytecode": {"tlb": "#D757", "prefix": "D757", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDILE4Q", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Quietly loads a little-endian signed 32-bit integer.", - "gas": "26", - "fift": "LDILE4Q", - "fift_examples": [], - "opcode": "D758", - "stack": "s - x s' -1 or s 0" - }, - "bytecode": {"tlb": "#D758", "prefix": "D758", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDULE4Q", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Quietly loads a little-endian unsigned 32-bit integer.", - "gas": "26", - "fift": "LDULE4Q", - "fift_examples": [], - "opcode": "D759", - "stack": "s - x s' -1 or s 0" - }, - "bytecode": {"tlb": "#D759", "prefix": "D759", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDILE8Q", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Quietly loads a little-endian signed 64-bit integer.", - "gas": "26", - "fift": "LDILE8Q", - "fift_examples": [], - "opcode": "D75A", - "stack": "s - x s' -1 or s 0" - }, - "bytecode": {"tlb": "#D75A", "prefix": "D75A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDULE8Q", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Quietly loads a little-endian unsigned 64-bit integer.", - "gas": "26", - "fift": "LDULE8Q", - "fift_examples": [], - "opcode": "D75B", - "stack": "s - x s' -1 or s 0" - }, - "bytecode": {"tlb": "#D75B", "prefix": "D75B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDILE4Q", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Quietly preloads a little-endian signed 32-bit integer.", - "gas": "26", - "fift": "PLDILE4Q", - "fift_examples": [], - "opcode": "D75C", - "stack": "s - x -1 or 0" - }, - "bytecode": {"tlb": "#D75C", "prefix": "D75C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDULE4Q", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Quietly preloads a little-endian unsigned 32-bit integer.", - "gas": "26", - "fift": "PLDULE4Q", - "fift_examples": [], - "opcode": "D75D", - "stack": "s - x -1 or 0" - }, - "bytecode": {"tlb": "#D75D", "prefix": "D75D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDILE8Q", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Quietly preloads a little-endian signed 64-bit integer.", - "gas": "26", - "fift": "PLDILE8Q", - "fift_examples": [], - "opcode": "D75E", - "stack": "s - x -1 or 0" - }, - "bytecode": {"tlb": "#D75E", "prefix": "D75E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDULE8Q", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Quietly preloads a little-endian unsigned 64-bit integer.", - "gas": "26", - "fift": "PLDULE8Q", - "fift_examples": [], - "opcode": "D75F", - "stack": "s - x -1 or 0" - }, - "bytecode": {"tlb": "#D75F", "prefix": "D75F", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDZEROES", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns the count `n` of leading zero bits in `s`, and removes these bits from `s`.", - "gas": "26", - "fift": "LDZEROES", - "fift_examples": [], - "opcode": "D760", - "stack": "s - n s'" - }, - "bytecode": {"tlb": "#D760", "prefix": "D760", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "n", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDONES", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns the count `n` of leading one bits in `s`, and removes these bits from `s`.", - "gas": "26", - "fift": "LDONES", - "fift_examples": [], - "opcode": "D761", - "stack": "s - n s'" - }, - "bytecode": {"tlb": "#D761", "prefix": "D761", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "n", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDSAME", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns the count `n` of leading bits equal to `0 <= x <= 1` in `s`, and removes these bits from `s`.", - "gas": "26", - "fift": "LDSAME", - "fift_examples": [], - "opcode": "D762", - "stack": "s x - n s'" - }, - "bytecode": {"tlb": "#D762", "prefix": "D762", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "n", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDEPTH", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns the depth of _Slice_ `s`. If `s` has no references, then `x=0`; otherwise `x` is one plus the maximum of depths of cells referred to from `s`.", - "gas": "26", - "fift": "SDEPTH", - "fift_examples": [], - "opcode": "D764", - "stack": "s - x" - }, - "bytecode": {"tlb": "#D764", "prefix": "D764", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CDEPTH", - "since_version": 0, - "doc": { - "category": "cell_parse", - "description": "Returns the depth of _Cell_ `c`. If `c` has no references, then `x=0`; otherwise `x` is one plus the maximum of depths of cells referred to from `c`. If `c` is a _Null_ instead of a _Cell_, returns zero.", - "gas": "26", - "fift": "CDEPTH", - "fift_examples": [], - "opcode": "D765", - "stack": "c - x" - }, - "bytecode": {"tlb": "#D765", "prefix": "D765", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Cell"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CLEVEL", - "since_version": 6, - "doc": { - "category": "cell_parse", - "description": "Returns level of the cell.", - "gas": "26", - "fift": "CLEVEL", - "fift_examples": [], - "opcode": "D766", - "stack": "cell - level" - }, - "bytecode": {"tlb": "#D766", "prefix": "D766", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "cell", "value_types": ["Cell"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "level", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CLEVELMASK", - "since_version": 6, - "doc": { - "category": "cell_parse", - "description": "Returns level mask of the cell.", - "gas": "26", - "fift": "CLEVELMASK", - "fift_examples": [], - "opcode": "D767", - "stack": "cell - level_mask" - }, - "bytecode": {"tlb": "#D767", "prefix": "D767", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "cell", "value_types": ["Cell"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "simple", - "name": "level_mask", - "value_types": ["Integer"] - } - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CHASHI", - "since_version": 6, - "doc": { - "category": "cell_parse", - "description": "Returns `i`th hash of the cell.", - "gas": "26", - "fift": "[i] CHASHI", - "fift_examples": [], - "opcode": "D76A_", - "stack": "cell - hash" - }, - "bytecode": { - "tlb": "#D76A_ i:uint2", - "prefix": "D76A_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 2, - "min_value": 0, - "max_value": 3, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "cell", "value_types": ["Cell"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "hash", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CDEPTHI", - "since_version": 6, - "doc": { - "category": "cell_parse", - "description": "Returns `i`th depth of the cell.", - "gas": "26", - "fift": "[i] CDEPTHI", - "fift_examples": [], - "opcode": "D76E_", - "stack": "cell - depth" - }, - "bytecode": { - "tlb": "#D76E_ i:uint2", - "prefix": "D76E_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 2, - "min_value": 0, - "max_value": 3, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "cell", "value_types": ["Cell"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "depth", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CHASHIX", - "since_version": 6, - "doc": { - "category": "cell_parse", - "description": "Returns `i`th hash of the cell.", - "gas": "26", - "fift": "CHASHIX", - "fift_examples": [], - "opcode": "D770", - "stack": "cell i - hash" - }, - "bytecode": {"tlb": "#D770", "prefix": "D770", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "cell", "value_types": ["Cell"]}, - {"type": "simple", "name": "i", "value_types": ["Cell"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "simple", - "name": "hash", - "value_types": ["Integer"] - } - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CDEPTHIX", - "since_version": 6, - "doc": { - "category": "cell_parse", - "description": "Returns `i`th depth of the cell.", - "gas": "26", - "fift": "CDEPTHIX", - "fift_examples": [], - "opcode": "D771", - "stack": "cell i - depth" - }, - "bytecode": {"tlb": "#D771", "prefix": "D771", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "cell", "value_types": ["Cell"]}, - {"type": "simple", "name": "i", "value_types": ["Cell"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "simple", - "name": "depth", - "value_types": ["Integer"] - } - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "EXECUTE", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "_Calls_, or _executes_, continuation `c`.", - "gas": "18", - "fift": "EXECUTE\nCALLX", - "fift_examples": [], - "opcode": "D8", - "stack": "c - " - }, - "bytecode": {"tlb": "#D8", "prefix": "D8", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "JMPX", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "_Jumps_, or transfers control, to continuation `c`.\nThe remainder of the previous current continuation `cc` is discarded.", - "gas": "18", - "fift": "JMPX", - "fift_examples": [], - "opcode": "D9", - "stack": "c - " - }, - "bytecode": {"tlb": "#D9", "prefix": "D9", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": false - } - }, - { - "mnemonic": "CALLXARGS", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "_Calls_ continuation `c` with `p` parameters and expecting `r` return values\n`0 <= p <= 15`, `0 <= r <= 15`", - "gas": "26", - "fift": "[p] [r] CALLXARGS", - "fift_examples": [], - "opcode": "DApr", - "stack": "c - " - }, - "bytecode": { - "tlb": "#DA p:uint4 r:uint4", - "prefix": "DA", - "operands": [ - { - "name": "p", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - }, - { - "name": "r", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "args", - "length_var": "p", - "array_entry": [{"type": "simple", "name": "arg"}] - }, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "CALLXARGS_VAR", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "_Calls_ continuation `c` with `0 <= p <= 15` parameters, expecting an arbitrary number of return values.", - "gas": "26", - "fift": "[p] -1 CALLXARGS", - "fift_examples": [], - "opcode": "DB0p", - "stack": "c - " - }, - "bytecode": { - "tlb": "#DB0 p:uint4", - "prefix": "DB0", - "operands": [ - { - "name": "p", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "args", - "length_var": "p", - "array_entry": [{"type": "simple", "name": "arg"}] - }, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "JMPXARGS", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "_Jumps_ to continuation `c`, passing only the top `0 <= p <= 15` values from the current stack to it (the remainder of the current stack is discarded).", - "gas": "26", - "fift": "[p] JMPXARGS", - "fift_examples": [], - "opcode": "DB1p", - "stack": "c - " - }, - "bytecode": { - "tlb": "#DB1 p:uint4", - "prefix": "DB1", - "operands": [ - { - "name": "p", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "args", - "length_var": "p", - "array_entry": [{"type": "simple", "name": "arg"}] - }, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": false - } - }, - { - "mnemonic": "RETARGS", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "_Returns_ to `c0`, with `0 <= r <= 15` return values taken from the current stack.", - "gas": "26", - "fift": "[r] RETARGS", - "fift_examples": [], - "opcode": "DB2r", - "stack": "" - }, - "bytecode": { - "tlb": "#DB2 r:uint4", - "prefix": "DB2", - "operands": [ - { - "name": "r", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "args", - "length_var": "p", - "array_entry": [{"type": "simple", "name": "arg"}] - } - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "register", "index": 0}], - "nobranch": false - } - }, - { - "mnemonic": "RET", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "_Returns_ to the continuation at `c0`. The remainder of the current continuation `cc` is discarded.\nApproximately equivalent to `c0 PUSHCTR` `JMPX`.", - "gas": "26", - "fift": "RET\nRETTRUE", - "fift_examples": [], - "opcode": "DB30", - "stack": "" - }, - "bytecode": {"tlb": "#DB30", "prefix": "DB30", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "register", "index": 0}], - "nobranch": false - } - }, - { - "mnemonic": "RETALT", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "_Returns_ to the continuation at `c1`.\nApproximately equivalent to `c1 PUSHCTR` `JMPX`.", - "gas": "26", - "fift": "RETALT\nRETFALSE", - "fift_examples": [], - "opcode": "DB31", - "stack": "" - }, - "bytecode": {"tlb": "#DB31", "prefix": "DB31", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "register", "index": 1}], - "nobranch": false - } - }, - { - "mnemonic": "BRANCH", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "Performs `RETTRUE` if integer `f!=0`, or `RETFALSE` if `f=0`.", - "gas": "26", - "fift": "BRANCH\nRETBOOL", - "fift_examples": [], - "opcode": "DB32", - "stack": "f - " - }, - "bytecode": {"tlb": "#DB32", "prefix": "DB32", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "f", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - {"type": "register", "index": 0}, - {"type": "register", "index": 1} - ], - "nobranch": false - } - }, - { - "mnemonic": "CALLCC", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "_Call with current continuation_, transfers control to `c`, pushing the old value of `cc` into `c`'s stack (instead of discarding it or writing it into new `c0`).", - "gas": "26", - "fift": "CALLCC", - "fift_examples": [], - "opcode": "DB34", - "stack": "c - " - }, - "bytecode": {"tlb": "#DB34", "prefix": "DB34", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": false - } - }, - { - "mnemonic": "JMPXDATA", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "Similar to `CALLCC`, but the remainder of the current continuation (the old value of `cc`) is converted into a _Slice_ before pushing it into the stack of `c`.", - "gas": "26", - "fift": "JMPXDATA", - "fift_examples": [], - "opcode": "DB35", - "stack": "c - " - }, - "bytecode": {"tlb": "#DB35", "prefix": "DB35", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": false - } - }, - { - "mnemonic": "CALLCCARGS", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "Similar to `CALLXARGS`, but pushes the old value of `cc` (along with the top `0 <= p <= 15` values from the original stack) into the stack of newly-invoked continuation `c`, setting `cc.nargs` to `-1 <= r <= 14`.", - "gas": "34", - "fift": "[p] [r] CALLCCARGS", - "fift_examples": [], - "opcode": "DB36pr", - "stack": "c - " - }, - "bytecode": { - "tlb": "#DB36 p:uint4 r:uint4", - "prefix": "DB36", - "operands": [ - { - "name": "p", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - }, - { - "name": "r", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "optional_nargs"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "args", - "length_var": "p", - "array_entry": [{"type": "simple", "name": "arg"}] - }, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": false - } - }, - { - "mnemonic": "CALLXVARARGS", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "Similar to `CALLXARGS`, but takes `-1 <= p,r <= 254` from the stack. The next three operations also take `p` and `r` from the stack, both in the range `-1...254`.", - "gas": "26", - "fift": "CALLXVARARGS", - "fift_examples": [], - "opcode": "DB38", - "stack": "c p r - " - }, - "bytecode": {"tlb": "#DB38", "prefix": "DB38", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "args", - "length_var": "p", - "array_entry": [{"type": "simple", "name": "arg"}] - }, - {"type": "simple", "name": "c", "value_types": ["Continuation"]}, - {"type": "simple", "name": "p", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "RETVARARGS", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "Similar to `RETARGS`.", - "gas": "26", - "fift": "RETVARARGS", - "fift_examples": [], - "opcode": "DB39", - "stack": "p r - " - }, - "bytecode": {"tlb": "#DB39", "prefix": "DB39", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "args", - "length_var": "p", - "array_entry": [{"type": "simple", "name": "arg"}] - }, - {"type": "simple", "name": "p", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "JMPXVARARGS", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "Similar to `JMPXARGS`.", - "gas": "26", - "fift": "JMPXVARARGS", - "fift_examples": [], - "opcode": "DB3A", - "stack": "c p r - " - }, - "bytecode": {"tlb": "#DB3A", "prefix": "DB3A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "args", - "length_var": "p", - "array_entry": [{"type": "simple", "name": "arg"}] - }, - {"type": "simple", "name": "c", "value_types": ["Continuation"]}, - {"type": "simple", "name": "p", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": false - } - }, - { - "mnemonic": "CALLCCVARARGS", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "Similar to `CALLCCARGS`.", - "gas": "26", - "fift": "CALLCCVARARGS", - "fift_examples": [], - "opcode": "DB3B", - "stack": "c p r - " - }, - "bytecode": {"tlb": "#DB3B", "prefix": "DB3B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "args", - "length_var": "p", - "array_entry": [{"type": "simple", "name": "arg"}] - }, - {"type": "simple", "name": "c", "value_types": ["Continuation"]}, - {"type": "simple", "name": "p", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": false - } - }, - { - "mnemonic": "CALLREF", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "Equivalent to `PUSHREFCONT` `CALLX`.", - "gas": "126/51", - "fift": "[ref] CALLREF", - "fift_examples": [], - "opcode": "DB3C", - "stack": "" - }, - "bytecode": { - "tlb": "#DB3C c:^Cell", - "prefix": "DB3C", - "operands": [ - { - "name": "c", - "type": "ref", - "display_hints": [{"type": "continuation"}] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "JMPREF", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "Equivalent to `PUSHREFCONT` `JMPX`.", - "gas": "126/51", - "fift": "[ref] JMPREF", - "fift_examples": [], - "opcode": "DB3D", - "stack": "" - }, - "bytecode": { - "tlb": "#DB3D c:^Cell", - "prefix": "DB3D", - "operands": [ - { - "name": "c", - "type": "ref", - "display_hints": [{"type": "continuation"}] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": false - } - }, - { - "mnemonic": "JMPREFDATA", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "Equivalent to `PUSHREFCONT` `JMPXDATA`.", - "gas": "126/51", - "fift": "[ref] JMPREFDATA", - "fift_examples": [], - "opcode": "DB3E", - "stack": "" - }, - "bytecode": { - "tlb": "#DB3E c:^Cell", - "prefix": "DB3E", - "operands": [ - { - "name": "c", - "type": "ref", - "display_hints": [{"type": "continuation"}] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": false - } - }, - { - "mnemonic": "RETDATA", - "since_version": 0, - "doc": { - "category": "cont_basic", - "description": "Equivalent to `c0 PUSHCTR` `JMPXDATA`. In this way, the remainder of the current continuation is converted into a _Slice_ and returned to the caller.", - "gas": "26", - "fift": "RETDATA", - "fift_examples": [], - "opcode": "DB3F", - "stack": "" - }, - "bytecode": {"tlb": "#DB3F", "prefix": "DB3F", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "register", "index": 0}], - "nobranch": false - } - }, - { - "mnemonic": "RUNVM", - "since_version": 4, - "doc": { - "category": "cont_basic", - "description": "Runs child VM with code `code` and stack `x_1...x_n`. Returns the resulting stack `x'_1...x'_m` and exitcode. Other arguments and return values are enabled by flags.", - "gas": "", - "fift": "flags RUNVM", - "fift_examples": [], - "opcode": "DB4fff", - "stack": "x_1 ... x_n n code [r] [c4] [c7] [g_l] [g_m] - x'_1 ... x'_m exitcode [data'] [c4'] [c5] [g_c]" - }, - "bytecode": { - "tlb": "#DB4 flags:(## 12)", - "prefix": "DB4", - "operands": [ - { - "name": "flags", - "type": "uint", - "size": 12, - "min_value": 0, - "max_value": 4095, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RUNVMX", - "since_version": 4, - "doc": { - "category": "cont_basic", - "description": "Runs child VM with code `code` and stack `x_1...x_n`. Returns the resulting stack `x'_1...x'_m` and exitcode. Other arguments and return values are enabled by flags.", - "gas": "", - "fift": "RUNVMX", - "fift_examples": [], - "opcode": "DB50", - "stack": "x_1 ... x_n n code [r] [c4] [c7] [g_l] [g_m] flags - x'_1 ... x'_m exitcode [data'] [c4'] [c5] [g_c]" - }, - "bytecode": {"tlb": "#DB50", "prefix": "DB50", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "IFRET", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Performs a `RET`, but only if integer `f` is non-zero. If `f` is a `NaN`, throws an integer overflow exception.", - "gas": "18", - "fift": "IFRET\nIFNOT:", - "fift_examples": [], - "opcode": "DC", - "stack": "f - " - }, - "bytecode": {"tlb": "#DC", "prefix": "DC", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "f", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "register", "index": 0}], - "nobranch": true - } - }, - { - "mnemonic": "IFNOTRET", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Performs a `RET`, but only if integer `f` is zero.", - "gas": "18", - "fift": "IFNOTRET\nIF:", - "fift_examples": [], - "opcode": "DD", - "stack": "f - " - }, - "bytecode": {"tlb": "#DD", "prefix": "DD", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "f", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "register", "index": 0}], - "nobranch": true - } - }, - { - "mnemonic": "IF", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Performs `EXECUTE` for `c` (i.e., _executes_ `c`), but only if integer `f` is non-zero. Otherwise simply discards both values.", - "gas": "18", - "fift": "IF", - "fift_examples": [ - { - "fift": "IF:<{ code }> <{ code }>IF", - "description": "Equivalent to `<{ code }> CONT` `IF`." - } - ], - "opcode": "DE", - "stack": "f c - " - }, - "bytecode": {"tlb": "#DE", "prefix": "DE", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "f", "value_types": ["Integer"]}, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": true - } - }, - { - "mnemonic": "IFNOT", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Executes continuation `c`, but only if integer `f` is zero. Otherwise simply discards both values.", - "gas": "18", - "fift": "IFNOT", - "fift_examples": [ - { - "fift": "IFNOT:<{ code }> <{ code }>IFNOT", - "description": "Equivalent to `<{ code }> CONT` `IFNOT`." - } - ], - "opcode": "DF", - "stack": "f c - " - }, - "bytecode": {"tlb": "#DF", "prefix": "DF", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "f", "value_types": ["Integer"]}, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": true - } - }, - { - "mnemonic": "IFJMP", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Jumps to `c` (similarly to `JMPX`), but only if `f` is non-zero.", - "gas": "18", - "fift": "IFJMP", - "fift_examples": [ - { - "fift": "IFJMP:<{ code }>", - "description": "Equivalent to `<{ code }> CONT` `IFJMP`." - } - ], - "opcode": "E0", - "stack": "f c - " - }, - "bytecode": {"tlb": "#E0", "prefix": "E0", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "f", "value_types": ["Integer"]}, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": true - } - }, - { - "mnemonic": "IFNOTJMP", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Jumps to `c` (similarly to `JMPX`), but only if `f` is zero.", - "gas": "18", - "fift": "IFNOTJMP", - "fift_examples": [ - { - "fift": "IFNOTJMP:<{ code }>", - "description": "Equivalent to `<{ code }> CONT` `IFNOTJMP`." - } - ], - "opcode": "E1", - "stack": "f c - " - }, - "bytecode": {"tlb": "#E1", "prefix": "E1", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "f", "value_types": ["Integer"]}, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": true - } - }, - { - "mnemonic": "IFELSE", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "If integer `f` is non-zero, executes `c`, otherwise executes `c'`. Equivalent to `CONDSELCHK` `EXECUTE`.", - "gas": "18", - "fift": "IFELSE", - "fift_examples": [ - { - "fift": "IF:<{ code1 }>ELSE<{ code2 }>", - "description": "Equivalent to `<{ code1 }> CONT` `<{ code2 }> CONT` `IFELSE`." - } - ], - "opcode": "E2", - "stack": "f c c' - " - }, - "bytecode": {"tlb": "#E2", "prefix": "E2", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "f", "value_types": ["Integer"]}, - {"type": "simple", "name": "c", "value_types": ["Continuation"]}, - {"type": "simple", "name": "c2", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - }, - { - "type": "variable", - "var_name": "c2", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "IFREF", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Equivalent to `PUSHREFCONT` `IF`, with the optimization that the cell reference is not actually loaded into a _Slice_ and then converted into an ordinary _Continuation_ if `f=0`.\nGas consumption of this primitive depends on whether `f=0` and whether the reference was loaded before.\nSimilar remarks apply other primitives that accept a continuation as a reference.", - "gas": "26/126/51", - "fift": "[ref] IFREF", - "fift_examples": [], - "opcode": "E300", - "stack": "f - " - }, - "bytecode": { - "tlb": "#E300 c:^Cell", - "prefix": "E300", - "operands": [ - { - "name": "c", - "type": "ref", - "display_hints": [{"type": "continuation"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "f", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": true - } - }, - { - "mnemonic": "IFNOTREF", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Equivalent to `PUSHREFCONT` `IFNOT`.", - "gas": "26/126/51", - "fift": "[ref] IFNOTREF", - "fift_examples": [], - "opcode": "E301", - "stack": "f - " - }, - "bytecode": { - "tlb": "#E301 c:^Cell", - "prefix": "E301", - "operands": [ - { - "name": "c", - "type": "ref", - "display_hints": [{"type": "continuation"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "f", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": true - } - }, - { - "mnemonic": "IFJMPREF", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Equivalent to `PUSHREFCONT` `IFJMP`.", - "gas": "26/126/51", - "fift": "[ref] IFJMPREF", - "fift_examples": [], - "opcode": "E302", - "stack": "f - " - }, - "bytecode": { - "tlb": "#E302 c:^Cell", - "prefix": "E302", - "operands": [ - { - "name": "c", - "type": "ref", - "display_hints": [{"type": "continuation"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "f", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": true - } - }, - { - "mnemonic": "IFNOTJMPREF", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Equivalent to `PUSHREFCONT` `IFNOTJMP`.", - "gas": "26/126/51", - "fift": "[ref] IFNOTJMPREF", - "fift_examples": [], - "opcode": "E303", - "stack": "f - " - }, - "bytecode": { - "tlb": "#E303 c:^Cell", - "prefix": "E303", - "operands": [ - { - "name": "c", - "type": "ref", - "display_hints": [{"type": "continuation"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "f", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": true - } - }, - { - "mnemonic": "CONDSEL", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "If integer `f` is non-zero, returns `x`, otherwise returns `y`. Notice that no type checks are performed on `x` and `y`; as such, it is more like a conditional stack operation. Roughly equivalent to `ROT` `ISZERO` `INC` `ROLLX` `NIP`.", - "gas": "26", - "fift": "CONDSEL", - "fift_examples": [], - "opcode": "E304", - "stack": "f x y - x or y" - }, - "bytecode": {"tlb": "#E304", "prefix": "E304", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "f", "value_types": ["Integer"]}, - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "y"} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result"}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CONDSELCHK", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Same as `CONDSEL`, but first checks whether `x` and `y` have the same type.", - "gas": "26", - "fift": "CONDSELCHK", - "fift_examples": [], - "opcode": "E305", - "stack": "f x y - x or y" - }, - "bytecode": {"tlb": "#E305", "prefix": "E305", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "f", "value_types": ["Integer"]}, - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "y"} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result"}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "IFRETALT", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Performs `RETALT` if integer `f!=0`.", - "gas": "26", - "fift": "IFRETALT", - "fift_examples": [], - "opcode": "E308", - "stack": "f -" - }, - "bytecode": {"tlb": "#E308", "prefix": "E308", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "f", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "register", "index": 1}], - "nobranch": true - } - }, - { - "mnemonic": "IFNOTRETALT", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Performs `RETALT` if integer `f=0`.", - "gas": "26", - "fift": "IFNOTRETALT", - "fift_examples": [], - "opcode": "E309", - "stack": "f -" - }, - "bytecode": {"tlb": "#E309", "prefix": "E309", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "f", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "register", "index": 1}], - "nobranch": true - } - }, - { - "mnemonic": "IFREFELSE", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Equivalent to `PUSHREFCONT` `SWAP` `IFELSE`, with the optimization that the cell reference is not actually loaded into a _Slice_ and then converted into an ordinary _Continuation_ if `f=0`. Similar remarks apply to the next two primitives: cells are converted into continuations only when necessary.", - "gas": "26/126/51", - "fift": "[ref] IFREFELSE", - "fift_examples": [], - "opcode": "E30D", - "stack": "f c -" - }, - "bytecode": { - "tlb": "#E30D c:^Cell", - "prefix": "E30D", - "operands": [ - { - "name": "c", - "type": "ref", - "display_hints": [{"type": "continuation"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "f", "value_types": ["Integer"]}, - {"type": "simple", "name": "c2", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - }, - { - "type": "variable", - "var_name": "c2", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "IFELSEREF", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Equivalent to `PUSHREFCONT` `IFELSE`.", - "gas": "26/126/51", - "fift": "[ref] IFELSEREF", - "fift_examples": [], - "opcode": "E30E", - "stack": "f c -" - }, - "bytecode": { - "tlb": "#E30E c:^Cell", - "prefix": "E30E", - "operands": [ - { - "name": "c", - "type": "ref", - "display_hints": [{"type": "continuation"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "f", "value_types": ["Integer"]}, - {"type": "simple", "name": "c2", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - }, - { - "type": "variable", - "var_name": "c2", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "IFREFELSEREF", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Equivalent to `PUSHREFCONT` `PUSHREFCONT` `IFELSE`.", - "gas": "126/51", - "fift": "[ref] [ref] IFREFELSEREF", - "fift_examples": [], - "opcode": "E30F", - "stack": "f -" - }, - "bytecode": { - "tlb": "#E30F c1:^Cell c2:^Cell", - "prefix": "E30F", - "operands": [ - { - "name": "c1", - "type": "ref", - "display_hints": [{"type": "continuation"}] - }, - { - "name": "c2", - "type": "ref", - "display_hints": [{"type": "continuation"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "f", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c1", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - }, - { - "type": "variable", - "var_name": "c2", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "IFBITJMP", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Checks whether bit `0 <= n <= 31` is set in integer `x`, and if so, performs `JMPX` to continuation `c`. Value `x` is left in the stack.", - "gas": "26", - "fift": "[n] IFBITJMP", - "fift_examples": [], - "opcode": "E39_n", - "stack": "x c - x" - }, - "bytecode": { - "tlb": "#E39_ n:uint5", - "prefix": "E39_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 5, - "min_value": 0, - "max_value": 31, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": false - } - }, - { - "mnemonic": "IFNBITJMP", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Jumps to `c` if bit `0 <= n <= 31` is not set in integer `x`.", - "gas": "26", - "fift": "[n] IFNBITJMP", - "fift_examples": [], - "opcode": "E3B_n", - "stack": "x c - x" - }, - "bytecode": { - "tlb": "#E3B_ n:uint5", - "prefix": "E3B_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 5, - "min_value": 0, - "max_value": 31, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": false - } - }, - { - "mnemonic": "IFBITJMPREF", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Performs a `JMPREF` if bit `0 <= n <= 31` is set in integer `x`.", - "gas": "126/51", - "fift": "[ref] [n] IFBITJMPREF", - "fift_examples": [], - "opcode": "E3D_n", - "stack": "x - x" - }, - "bytecode": { - "tlb": "#E3D_ n:uint5 c:^Cell", - "prefix": "E3D_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 5, - "min_value": 0, - "max_value": 31, - "display_hints": [] - }, - { - "name": "c", - "type": "ref", - "display_hints": [{"type": "continuation"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": false - } - }, - { - "mnemonic": "IFNBITJMPREF", - "since_version": 0, - "doc": { - "category": "cont_conditional", - "description": "Performs a `JMPREF` if bit `0 <= n <= 31` is not set in integer `x`.", - "gas": "126/51", - "fift": "[ref] [n] IFNBITJMPREF", - "fift_examples": [], - "opcode": "E3F_n", - "stack": "x - x" - }, - "bytecode": { - "tlb": "#E3F_ n:uint5 c:^Cell", - "prefix": "E3F_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 5, - "min_value": 0, - "max_value": 31, - "display_hints": [] - }, - { - "name": "c", - "type": "ref", - "display_hints": [{"type": "continuation"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "c"}], - "nobranch": false - } - }, - { - "mnemonic": "REPEAT", - "since_version": 0, - "doc": { - "category": "cont_loops", - "description": "Executes continuation `c` `n` times, if integer `n` is non-negative. If `n>=2^31` or `n<-2^31`, generates a range check exception.\nNotice that a `RET` inside the code of `c` works as a `continue`, not as a `break`. One should use either alternative (experimental) loops or alternative `RETALT` (along with a `SETEXITALT` before the loop) to `break` out of a loop.", - "gas": "18", - "fift": "REPEAT", - "fift_examples": [ - { - "fift": "REPEAT:<{ code }> <{ code }>REPEAT", - "description": "Equivalent to `<{ code }> CONT` `REPEAT`." - } - ], - "opcode": "E4", - "stack": "n c - " - }, - "bytecode": {"tlb": "#E4", "prefix": "E4", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "n", "value_types": ["Integer"]}, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "special", - "name": "repeat", - "args": { - "count": "n", - "body": {"type": "variable", "var_name": "c"}, - "after": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": true - } - }, - { - "mnemonic": "REPEATEND", - "since_version": 0, - "doc": { - "category": "cont_loops", - "description": "Similar to `REPEAT`, but it is applied to the current continuation `cc`.", - "gas": "18", - "fift": "REPEATEND\nREPEAT:", - "fift_examples": [], - "opcode": "E5", - "stack": "n - " - }, - "bytecode": {"tlb": "#E5", "prefix": "E5", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "n", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "special", - "name": "repeat", - "args": { - "count": "n", - "body": {"type": "cc"}, - "after": {"type": "register", "index": 0} - } - } - ], - "nobranch": true - } - }, - { - "mnemonic": "UNTIL", - "since_version": 0, - "doc": { - "category": "cont_loops", - "description": "Executes continuation `c`, then pops an integer `x` from the resulting stack. If `x` is zero, performs another iteration of this loop. The actual implementation of this primitive involves an extraordinary continuation `ec_until` with its arguments set to the body of the loop (continuation `c`) and the original current continuation `cc`. This extraordinary continuation is then saved into the savelist of `c` as `c.c0` and the modified `c` is then executed. The other loop primitives are implemented similarly with the aid of suitable extraordinary continuations.", - "gas": "18", - "fift": "UNTIL", - "fift_examples": [ - { - "fift": "UNTIL:<{ code }> <{ code }>UNTIL", - "description": "Equivalent to `<{ code }> CONT` `UNTIL`." - } - ], - "opcode": "E6", - "stack": "c - " - }, - "bytecode": {"tlb": "#E6", "prefix": "E6", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "special", - "name": "until", - "args": { - "body": {"type": "variable", "var_name": "c"}, - "after": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "UNTILEND", - "since_version": 0, - "doc": { - "category": "cont_loops", - "description": "Similar to `UNTIL`, but executes the current continuation `cc` in a loop. When the loop exit condition is satisfied, performs a `RET`.", - "gas": "18", - "fift": "UNTILEND\nUNTIL:", - "fift_examples": [], - "opcode": "E7", - "stack": "-" - }, - "bytecode": {"tlb": "#E7", "prefix": "E7", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "cc", - "save": { - "c0": { - "type": "special", - "name": "until", - "args": { - "body": {"type": "cc"}, - "after": {"type": "register", "index": 0} - } - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "WHILE", - "since_version": 0, - "doc": { - "category": "cont_loops", - "description": "Executes `c'` and pops an integer `x` from the resulting stack. If `x` is zero, exists the loop and transfers control to the original `cc`. If `x` is non-zero, executes `c`, and then begins a new iteration.", - "gas": "18", - "fift": "WHILE", - "fift_examples": [ - { - "fift": "WHILE:<{ cond }>DO<{ code }>", - "description": "Equivalent to `<{ cond }> CONT` `<{ code }> CONT` `WHILE`." - } - ], - "opcode": "E8", - "stack": "c' c - " - }, - "bytecode": {"tlb": "#E8", "prefix": "E8", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c2", "value_types": ["Continuation"]}, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c2", - "save": { - "c0": { - "type": "special", - "name": "while", - "args": { - "cond": {"type": "variable", "var_name": "c2"}, - "body": {"type": "variable", "var_name": "c"}, - "after": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "WHILEEND", - "since_version": 0, - "doc": { - "category": "cont_loops", - "description": "Similar to `WHILE`, but uses the current continuation `cc` as the loop body.", - "gas": "18", - "fift": "WHILEEND", - "fift_examples": [], - "opcode": "E9", - "stack": "c' - " - }, - "bytecode": {"tlb": "#E9", "prefix": "E9", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c2", "value_types": ["Continuation"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c2", - "save": { - "c0": { - "type": "special", - "name": "while", - "args": { - "cond": {"type": "variable", "var_name": "c2"}, - "body": {"type": "cc"}, - "after": {"type": "register", "index": 0} - } - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "AGAIN", - "since_version": 0, - "doc": { - "category": "cont_loops", - "description": "Similar to `REPEAT`, but executes `c` infinitely many times. A `RET` only begins a new iteration of the infinite loop, which can be exited only by an exception, or a `RETALT` (or an explicit `JMPX`).", - "gas": "18", - "fift": "AGAIN", - "fift_examples": [ - { - "fift": "AGAIN:<{ code }> <{ code }>AGAIN", - "description": "Equivalent to `<{ code }> CONT` `AGAIN`." - } - ], - "opcode": "EA", - "stack": "c - " - }, - "bytecode": {"tlb": "#EA", "prefix": "EA", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "special", - "name": "again", - "args": {"body": {"type": "variable", "var_name": "c"}} - } - ], - "nobranch": false - } - }, - { - "mnemonic": "AGAINEND", - "since_version": 0, - "doc": { - "category": "cont_loops", - "description": "Similar to `AGAIN`, but performed with respect to the current continuation `cc`.", - "gas": "18", - "fift": "AGAINEND\nAGAIN:", - "fift_examples": [], - "opcode": "EB", - "stack": "-" - }, - "bytecode": {"tlb": "#EB", "prefix": "EB", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "special", - "name": "again", - "args": {"body": {"type": "cc"}} - } - ], - "nobranch": false - } - }, - { - "mnemonic": "REPEATBRK", - "since_version": 0, - "doc": { - "category": "cont_loops", - "description": "Similar to `REPEAT`, but also sets `c1` to the original `cc` after saving the old value of `c1` into the savelist of the original `cc`. In this way `RETALT` could be used to break out of the loop body.", - "gas": "26", - "fift": "REPEATBRK", - "fift_examples": [ - { - "fift": "REPEATBRK:<{ code }> <{ code }>REPEATBRK", - "description": "Equivalent to `<{ code }> CONT` `REPEATBRK`." - } - ], - "opcode": "E314", - "stack": "n c -" - }, - "bytecode": {"tlb": "#E314", "prefix": "E314", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "n", "value_types": ["Integer"]}, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "special", - "name": "repeat", - "args": { - "count": "n", - "body": { - "type": "variable", - "var_name": "c", - "save": { - "c1": { - "type": "cc", - "save": { - "c0": {"type": "register", "index": 0}, - "c1": {"type": "register", "index": 1} - } - } - } - }, - "after": { - "type": "cc", - "save": { - "c0": {"type": "register", "index": 0}, - "c1": {"type": "register", "index": 1} - } - } - } - } - ], - "nobranch": true - } - }, - { - "mnemonic": "REPEATENDBRK", - "since_version": 0, - "doc": { - "category": "cont_loops", - "description": "Similar to `REPEATEND`, but also sets `c1` to the original `c0` after saving the old value of `c1` into the savelist of the original `c0`. Equivalent to `SAMEALTSAVE` `REPEATEND`.", - "gas": "26", - "fift": "REPEATENDBRK", - "fift_examples": [], - "opcode": "E315", - "stack": "n -" - }, - "bytecode": {"tlb": "#E315", "prefix": "E315", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "n", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "special", - "name": "repeat", - "args": { - "count": "n", - "body": { - "type": "cc", - "save": {"c1": {"type": "register", "index": 0}} - }, - "after": {"type": "register", "index": 0} - } - } - ], - "nobranch": true - } - }, - { - "mnemonic": "UNTILBRK", - "since_version": 0, - "doc": { - "category": "cont_loops", - "description": "Similar to `UNTIL`, but also modifies `c1` in the same way as `REPEATBRK`.", - "gas": "26", - "fift": "UNTILBRK", - "fift_examples": [ - { - "fift": "UNTILBRK:<{ code }>", - "description": "Equivalent to `<{ code }> CONT` `UNTILBRK`." - } - ], - "opcode": "E316", - "stack": "c -" - }, - "bytecode": {"tlb": "#E316", "prefix": "E316", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "special", - "name": "until", - "args": { - "body": { - "type": "variable", - "var_name": "c", - "save": { - "c1": { - "type": "cc", - "save": { - "c0": {"type": "register", "index": 0}, - "c1": {"type": "register", "index": 1} - } - } - } - }, - "after": { - "type": "cc", - "save": { - "c0": {"type": "register", "index": 0}, - "c1": {"type": "register", "index": 1} - } - } - } - }, - "c1": { - "type": "cc", - "save": { - "c0": {"type": "register", "index": 0}, - "c1": {"type": "register", "index": 1} - } - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "UNTILENDBRK", - "since_version": 0, - "doc": { - "category": "cont_loops", - "description": "Equivalent to `SAMEALTSAVE` `UNTILEND`.", - "gas": "26", - "fift": "UNTILENDBRK\nUNTILBRK:", - "fift_examples": [], - "opcode": "E317", - "stack": "-" - }, - "bytecode": {"tlb": "#E317", "prefix": "E317", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "cc", - "save": { - "c0": { - "type": "special", - "name": "until", - "args": { - "body": { - "type": "cc", - "save": {"c1": {"type": "register", "index": 0}} - }, - "after": {"type": "register", "index": 0} - } - }, - "c1": {"type": "register", "index": 0} - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "WHILEBRK", - "since_version": 0, - "doc": { - "category": "cont_loops", - "description": "Similar to `WHILE`, but also modifies `c1` in the same way as `REPEATBRK`.", - "gas": "26", - "fift": "WHILEBRK", - "fift_examples": [ - { - "fift": "WHILEBRK:<{ cond }>DO<{ code }>", - "description": "Equivalent to `<{ cond }> CONT` `<{ code }> CONT` `WHILEBRK`." - } - ], - "opcode": "E318", - "stack": "c' c -" - }, - "bytecode": {"tlb": "#E318", "prefix": "E318", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c2", "value_types": ["Continuation"]}, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c2", - "save": { - "c0": { - "type": "special", - "name": "while", - "args": { - "cond": {"type": "variable", "var_name": "c2"}, - "body": {"type": "variable", "var_name": "c"}, - "after": { - "type": "cc", - "save": { - "c0": {"type": "register", "index": 0}, - "c1": {"type": "register", "index": 1} - } - } - } - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "WHILEENDBRK", - "since_version": 0, - "doc": { - "category": "cont_loops", - "description": "Equivalent to `SAMEALTSAVE` `WHILEEND`.", - "gas": "26", - "fift": "WHILEENDBRK", - "fift_examples": [], - "opcode": "E319", - "stack": "c -" - }, - "bytecode": {"tlb": "#E319", "prefix": "E319", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "AGAINBRK", - "since_version": 0, - "doc": { - "category": "cont_loops", - "description": "Similar to `AGAIN`, but also modifies `c1` in the same way as `REPEATBRK`.", - "gas": "26", - "fift": "AGAINBRK", - "fift_examples": [ - { - "fift": "AGAINBRK:<{ code }>", - "description": "Equivalent to `<{ code }> CONT` `AGAINBRK`." - } - ], - "opcode": "E31A", - "stack": "c -" - }, - "bytecode": {"tlb": "#E31A", "prefix": "E31A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "AGAINENDBRK", - "since_version": 0, - "doc": { - "category": "cont_loops", - "description": "Equivalent to `SAMEALTSAVE` `AGAINEND`.", - "gas": "26", - "fift": "AGAINENDBRK\nAGAINBRK:", - "fift_examples": [], - "opcode": "E31B", - "stack": "-" - }, - "bytecode": {"tlb": "#E31B", "prefix": "E31B", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETCONTARGS_N", - "since_version": 0, - "doc": { - "category": "cont_stack", - "description": "Pushes `0 <= r <= 15` values `x_1...x_r` into the stack of (a copy of) the continuation `c`, starting with `x_1`. When `n` is 15 (-1 in Fift notation), does nothing with `c.nargs`. For `0 <= n <= 14`, sets `c.nargs` to the final size of the stack of `c'` plus `n`. In other words, transforms `c` into a _closure_ or a _partially applied function_, with `0 <= n <= 14` arguments missing.", - "gas": "26+s''", - "fift": "[r] [n] SETCONTARGS", - "fift_examples": [], - "opcode": "ECrn", - "stack": "x_1 x_2...x_r c - c'" - }, - "bytecode": { - "tlb": "#EC r:uint4 n:uint4", - "prefix": "EC", - "operands": [ - { - "name": "r", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - }, - { - "name": "n", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "optional_nargs"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "args", - "length_var": "r", - "array_entry": [{"type": "simple", "name": "x"}] - }, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c2", "value_types": ["Continuation"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RETURNARGS", - "since_version": 0, - "doc": { - "category": "cont_stack", - "description": "Leaves only the top `0 <= p <= 15` values in the current stack (somewhat similarly to `ONLYTOPX`), with all the unused bottom values not discarded, but saved into continuation `c0` in the same way as `SETCONTARGS` does.", - "gas": "26+s''", - "fift": "[p] RETURNARGS", - "fift_examples": [], - "opcode": "ED0p", - "stack": "-" - }, - "bytecode": { - "tlb": "#ED0 p:uint4", - "prefix": "ED0", - "operands": [ - { - "name": "p", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RETURNVARARGS", - "since_version": 0, - "doc": { - "category": "cont_stack", - "description": "Similar to `RETURNARGS`, but with Integer `0 <= p <= 255` taken from the stack.", - "gas": "26+s''", - "fift": "RETURNVARARGS", - "fift_examples": [], - "opcode": "ED10", - "stack": "p -" - }, - "bytecode": {"tlb": "#ED10", "prefix": "ED10", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETCONTVARARGS", - "since_version": 0, - "doc": { - "category": "cont_stack", - "description": "Similar to `SETCONTARGS`, but with `0 <= r <= 255` and `-1 <= n <= 255` taken from the stack.", - "gas": "26+s''", - "fift": "SETCONTVARARGS", - "fift_examples": [], - "opcode": "ED11", - "stack": "x_1 x_2...x_r c r n - c'" - }, - "bytecode": {"tlb": "#ED11", "prefix": "ED11", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "args", - "length_var": "r", - "array_entry": [{"type": "simple", "name": "x"}] - }, - {"type": "simple", "name": "c", "value_types": ["Continuation"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c2", "value_types": ["Continuation"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETNUMVARARGS", - "since_version": 0, - "doc": { - "category": "cont_stack", - "description": "`-1 <= n <= 255`\nIf `n=-1`, this operation does nothing (`c'=c`).\nOtherwise its action is similar to `[n] SETNUMARGS`, but with `n` taken from the stack.", - "gas": "26", - "fift": "SETNUMVARARGS", - "fift_examples": [], - "opcode": "ED12", - "stack": "c n - c'" - }, - "bytecode": {"tlb": "#ED12", "prefix": "ED12", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Continuation"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c2", "value_types": ["Continuation"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLESS", - "since_version": 0, - "doc": { - "category": "cont_create", - "description": "Transforms a _Slice_ `s` into a simple ordinary continuation `c`, with `c.code=s` and an empty stack and savelist.", - "gas": "26", - "fift": "BLESS", - "fift_examples": [], - "opcode": "ED1E", - "stack": "s - c" - }, - "bytecode": {"tlb": "#ED1E", "prefix": "ED1E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLESSVARARGS", - "since_version": 0, - "doc": { - "category": "cont_create", - "description": "Equivalent to `ROT` `BLESS` `ROTREV` `SETCONTVARARGS`.", - "gas": "26+s''", - "fift": "BLESSVARARGS", - "fift_examples": [], - "opcode": "ED1F", - "stack": "x_1...x_r s r n - c" - }, - "bytecode": {"tlb": "#ED1F", "prefix": "ED1F", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "args", - "length_var": "r", - "array_entry": [{"type": "simple", "name": "x"}] - }, - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLESSARGS", - "since_version": 0, - "doc": { - "category": "cont_create", - "description": "`0 <= r <= 15`, `-1 <= n <= 14`\nEquivalent to `BLESS` `[r] [n] SETCONTARGS`.\nThe value of `n` is represented inside the instruction by the 4-bit integer `n mod 16`.", - "gas": "26", - "fift": "[r] [n] BLESSARGS", - "fift_examples": [], - "opcode": "EErn", - "stack": "x_1...x_r s - c" - }, - "bytecode": { - "tlb": "#EE r:uint4 n:uint4", - "prefix": "EE", - "operands": [ - { - "name": "r", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - }, - { - "name": "n", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "optional_nargs"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "args", - "length_var": "r", - "array_entry": [{"type": "simple", "name": "x"}] - }, - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHCTR", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Pushes the current value of control register `c(i)`. If the control register is not supported in the current codepage, or if it does not have a value, an exception is triggered.", - "gas": "26", - "fift": "c[i] PUSHCTR\nc[i] PUSH", - "fift_examples": [], - "opcode": "ED4i", - "stack": "- x" - }, - "bytecode": { - "tlb": "#ED4 i:uint4", - "prefix": "ED4", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "register"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [], - "registers": [{"type": "variable", "var_name": "i"}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "POPCTR", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Pops a value `x` from the stack and stores it into control register `c(i)`, if supported in the current codepage. Notice that if a control register accepts only values of a specific type, a type-checking exception may occur.", - "gas": "26", - "fift": "c[i] POPCTR\nc[i] POP", - "fift_examples": [], - "opcode": "ED5i", - "stack": "x - " - }, - "bytecode": { - "tlb": "#ED5 i:uint4", - "prefix": "ED5", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "register"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [] - }, - "outputs": { - "stack": [], - "registers": [{"type": "variable", "var_name": "i"}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETCONTCTR", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Stores `x` into the savelist of continuation `c` as `c(i)`, and returns the resulting continuation `c'`. Almost all operations with continuations may be expressed in terms of `SETCONTCTR`, `POPCTR`, and `PUSHCTR`.", - "gas": "26", - "fift": "c[i] SETCONT\nc[i] SETCONTCTR", - "fift_examples": [], - "opcode": "ED6i", - "stack": "x c - c'" - }, - "bytecode": { - "tlb": "#ED6 i:uint4", - "prefix": "ED6", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "register"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c2", "value_types": ["Continuation"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETRETCTR", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Equivalent to `c0 PUSHCTR` `c[i] SETCONTCTR` `c0 POPCTR`.", - "gas": "26", - "fift": "c[i] SETRETCTR", - "fift_examples": [], - "opcode": "ED7i", - "stack": "x - " - }, - "bytecode": { - "tlb": "#ED7 i:uint4", - "prefix": "ED7", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "register"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [{"type": "constant", "index": 0}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 0}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETALTCTR", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Equivalent to `c1 PUSHCTR` `c[i] SETCONTCTR` `c1 POPCTR`.", - "gas": "26", - "fift": "c[i] SETALTCTR", - "fift_examples": [], - "opcode": "ED8i", - "stack": "x - " - }, - "bytecode": { - "tlb": "#ED8 i:uint4", - "prefix": "ED8", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "register"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [{"type": "constant", "index": 1}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 1}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "POPSAVE", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Similar to `c[i] POPCTR`, but also saves the old value of `c[i]` into continuation `c0`.\nEquivalent (up to exceptions) to `c[i] SAVECTR` `c[i] POPCTR`.", - "gas": "26", - "fift": "c[i] POPSAVE\nc[i] POPCTRSAVE", - "fift_examples": [], - "opcode": "ED9i", - "stack": "x -" - }, - "bytecode": { - "tlb": "#ED9 i:uint4", - "prefix": "ED9", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "register"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [ - {"type": "variable", "var_name": "i"}, - {"type": "constant", "index": 0} - ] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 0}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SAVE", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Saves the current value of `c(i)` into the savelist of continuation `c0`. If an entry for `c[i]` is already present in the savelist of `c0`, nothing is done. Equivalent to `c[i] PUSHCTR` `c[i] SETRETCTR`.", - "gas": "26", - "fift": "c[i] SAVE\nc[i] SAVECTR", - "fift_examples": [], - "opcode": "EDAi", - "stack": "" - }, - "bytecode": { - "tlb": "#EDA i:uint4", - "prefix": "EDA", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "register"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [], - "registers": [ - {"type": "variable", "var_name": "i"}, - {"type": "constant", "index": 0} - ] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 0}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SAVEALT", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Similar to `c[i] SAVE`, but saves the current value of `c[i]` into the savelist of `c1`, not `c0`.", - "gas": "26", - "fift": "c[i] SAVEALT\nc[i] SAVEALTCTR", - "fift_examples": [], - "opcode": "EDBi", - "stack": "" - }, - "bytecode": { - "tlb": "#EDB i:uint4", - "prefix": "EDB", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "register"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [], - "registers": [ - {"type": "variable", "var_name": "i"}, - {"type": "constant", "index": 1} - ] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 1}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SAVEBOTH", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Equivalent to `c[i] SAVE` `c[i] SAVEALT`.", - "gas": "26", - "fift": "c[i] SAVEBOTH\nc[i] SAVEBOTHCTR", - "fift_examples": [], - "opcode": "EDCi", - "stack": "" - }, - "bytecode": { - "tlb": "#EDC i:uint4", - "prefix": "EDC", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [{"type": "register"}] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [], - "registers": [ - {"type": "variable", "var_name": "i"}, - {"type": "constant", "index": 0}, - {"type": "constant", "index": 1} - ] - }, - "outputs": { - "stack": [], - "registers": [ - {"type": "constant", "index": 0}, - {"type": "constant", "index": 1} - ] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PUSHCTRX", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Similar to `c[i] PUSHCTR`, but with `i`, `0 <= i <= 255`, taken from the stack.\nNotice that this primitive is one of the few ''exotic'' primitives, which are not polymorphic like stack manipulation primitives, and at the same time do not have well-defined types of parameters and return values, because the type of `x` depends on `i`.", - "gas": "26", - "fift": "PUSHCTRX", - "fift_examples": [], - "opcode": "EDE0", - "stack": "i - x" - }, - "bytecode": {"tlb": "#EDE0", "prefix": "EDE0", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "i", "value_types": ["Integer"]}], - "registers": [{"type": "variable", "var_name": "i"}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "POPCTRX", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Similar to `c[i] POPCTR`, but with `0 <= i <= 255` from the stack.", - "gas": "26", - "fift": "POPCTRX", - "fift_examples": [], - "opcode": "EDE1", - "stack": "x i - " - }, - "bytecode": {"tlb": "#EDE1", "prefix": "EDE1", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "i", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [], - "registers": [{"type": "variable", "var_name": "i"}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETCONTCTRX", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Similar to `c[i] SETCONTCTR`, but with `0 <= i <= 255` from the stack.", - "gas": "26", - "fift": "SETCONTCTRX", - "fift_examples": [], - "opcode": "EDE2", - "stack": "x c i - c'" - }, - "bytecode": {"tlb": "#EDE2", "prefix": "EDE2", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "c", "value_types": ["Continuation"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c2", "value_types": ["Continuation"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "COMPOS", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Computes the composition `compose0(c, c')`, which has the meaning of ''perform `c`, and, if successful, perform `c'`'' (if `c` is a boolean circuit) or simply ''perform `c`, then `c'`''. Equivalent to `SWAP` `c0 SETCONT`.", - "gas": "26", - "fift": "COMPOS\nBOOLAND", - "fift_examples": [], - "opcode": "EDF0", - "stack": "c c' - c''" - }, - "bytecode": {"tlb": "#EDF0", "prefix": "EDF0", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Continuation"]}, - {"type": "simple", "name": "c2", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c3", "value_types": ["Continuation"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "COMPOSALT", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Computes the alternative composition `compose1(c, c')`, which has the meaning of ''perform `c`, and, if not successful, perform `c'`'' (if `c` is a boolean circuit). Equivalent to `SWAP` `c1 SETCONT`.", - "gas": "26", - "fift": "COMPOSALT\nBOOLOR", - "fift_examples": [], - "opcode": "EDF1", - "stack": "c c' - c''" - }, - "bytecode": {"tlb": "#EDF1", "prefix": "EDF1", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Continuation"]}, - {"type": "simple", "name": "c2", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c3", "value_types": ["Continuation"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "COMPOSBOTH", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Computes composition `compose1(compose0(c, c'), c')`, which has the meaning of ''compute boolean circuit `c`, then compute `c'`, regardless of the result of `c`''.", - "gas": "26", - "fift": "COMPOSBOTH", - "fift_examples": [], - "opcode": "EDF2", - "stack": "c c' - c''" - }, - "bytecode": {"tlb": "#EDF2", "prefix": "EDF2", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Continuation"]}, - {"type": "simple", "name": "c2", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c3", "value_types": ["Continuation"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ATEXIT", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Sets `c0` to `compose0(c, c0)`. In other words, `c` will be executed before exiting current subroutine.", - "gas": "26", - "fift": "ATEXIT", - "fift_examples": [ - { - "fift": "ATEXIT:<{ code }> <{ code }>ATEXIT", - "description": "Equivalent to `<{ code }> CONT` `ATEXIT`." - } - ], - "opcode": "EDF3", - "stack": "c - " - }, - "bytecode": {"tlb": "#EDF3", "prefix": "EDF3", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [{"type": "constant", "index": 0}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 0}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ATEXITALT", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Sets `c1` to `compose1(c, c1)`. In other words, `c` will be executed before exiting current subroutine by its alternative return path.", - "gas": "26", - "fift": "ATEXITALT", - "fift_examples": [ - { - "fift": "ATEXITALT:<{ code }> <{ code }>ATEXITALT", - "description": "Equivalent to `<{ code }> CONT` `ATEXITALT`." - } - ], - "opcode": "EDF4", - "stack": "c - " - }, - "bytecode": {"tlb": "#EDF4", "prefix": "EDF4", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [{"type": "constant", "index": 1}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 1}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETEXITALT", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Sets `c1` to `compose1(compose0(c, c0), c1)`,\nIn this way, a subsequent `RETALT` will first execute `c`, then transfer control to the original `c0`. This can be used, for instance, to exit from nested loops.", - "gas": "26", - "fift": "SETEXITALT", - "fift_examples": [], - "opcode": "EDF5", - "stack": "c - " - }, - "bytecode": {"tlb": "#EDF5", "prefix": "EDF5", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [ - {"type": "constant", "index": 0}, - {"type": "constant", "index": 1} - ] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 1}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "THENRET", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Computes `compose0(c, c0)`.", - "gas": "26", - "fift": "THENRET", - "fift_examples": [], - "opcode": "EDF6", - "stack": "c - c'" - }, - "bytecode": {"tlb": "#EDF6", "prefix": "EDF6", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [{"type": "constant", "index": 0}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c2", "value_types": ["Continuation"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "THENRETALT", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Computes `compose0(c, c1)`", - "gas": "26", - "fift": "THENRETALT", - "fift_examples": [], - "opcode": "EDF7", - "stack": "c - c'" - }, - "bytecode": {"tlb": "#EDF7", "prefix": "EDF7", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [{"type": "constant", "index": 1}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c2", "value_types": ["Continuation"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "INVERT", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Interchanges `c0` and `c1`.", - "gas": "26", - "fift": "INVERT", - "fift_examples": [], - "opcode": "EDF8", - "stack": "-" - }, - "bytecode": {"tlb": "#EDF8", "prefix": "EDF8", "operands": []}, - "value_flow": { - "inputs": { - "stack": [], - "registers": [ - {"type": "constant", "index": 0}, - {"type": "constant", "index": 1} - ] - }, - "outputs": { - "stack": [], - "registers": [ - {"type": "constant", "index": 0}, - {"type": "constant", "index": 1} - ] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BOOLEVAL", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Performs `cc:=compose1(compose0(c, compose0(-1 PUSHINT, cc)), compose0(0 PUSHINT, cc))`. If `c` represents a boolean circuit, the net effect is to evaluate it and push either `-1` or `0` into the stack before continuing.", - "gas": "26", - "fift": "BOOLEVAL", - "fift_examples": [], - "opcode": "EDF9", - "stack": "c - ?" - }, - "bytecode": {"tlb": "#EDF9", "prefix": "EDF9", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Continuation"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "special", - "name": "pushint", - "args": { - "next": { - "type": "cc", - "save": { - "c0": {"type": "register", "index": 0}, - "c1": {"type": "register", "index": 1} - } - }, - "value": -1 - } - }, - "c1": { - "type": "special", - "name": "pushint", - "args": { - "next": { - "type": "cc", - "save": { - "c0": {"type": "register", "index": 0}, - "c1": {"type": "register", "index": 1} - } - }, - "value": 0 - } - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "SAMEALT", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Sets `c1` to `c0`. Equivalent to `c0 PUSHCTR` `c1 POPCTR`.", - "gas": "26", - "fift": "SAMEALT", - "fift_examples": [], - "opcode": "EDFA", - "stack": "-" - }, - "bytecode": {"tlb": "#EDFA", "prefix": "EDFA", "operands": []}, - "value_flow": { - "inputs": { - "stack": [], - "registers": [{"type": "constant", "index": 0}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 1}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SAMEALTSAVE", - "since_version": 0, - "doc": { - "category": "cont_registers", - "description": "Sets `c1` to `c0`, but first saves the old value of `c1` into the savelist of `c0`.\nEquivalent to `c1 SAVE` `SAMEALT`.", - "gas": "26", - "fift": "SAMEALTSAVE", - "fift_examples": [], - "opcode": "EDFB", - "stack": "-" - }, - "bytecode": {"tlb": "#EDFB", "prefix": "EDFB", "operands": []}, - "value_flow": { - "inputs": { - "stack": [], - "registers": [ - {"type": "constant", "index": 0}, - {"type": "constant", "index": 1} - ] - }, - "outputs": { - "stack": [], - "registers": [ - {"type": "constant", "index": 0}, - {"type": "constant", "index": 1} - ] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CALLDICT", - "since_version": 0, - "doc": { - "category": "cont_dict", - "description": "Calls the continuation in `c3`, pushing integer `0 <= nn <= 255` into its stack as an argument.\nApproximately equivalent to `[nn] PUSHINT` `c3 PUSHCTR` `EXECUTE`.", - "gas": "", - "fift": "[nn] CALL\n[nn] CALLDICT", - "fift_examples": [], - "opcode": "F0nn", - "stack": "- nn" - }, - "bytecode": { - "tlb": "#F0 n:uint8", - "prefix": "F0", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 255, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "n", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": { - "branches": [ - { - "type": "register", - "index": 3, - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "CALLDICT_LONG", - "since_version": 0, - "doc": { - "category": "cont_dict", - "description": "For `0 <= n < 2^14`, an encoding of `[n] CALL` for larger values of `n`.", - "gas": "", - "fift": "[n] CALL\n[n] CALLDICT", - "fift_examples": [], - "opcode": "F12_n", - "stack": "- n" - }, - "bytecode": { - "tlb": "#F12_ n:uint14", - "prefix": "F12_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 14, - "min_value": 0, - "max_value": 16383, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "n", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": { - "branches": [ - { - "type": "register", - "index": 3, - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "JMPDICT", - "since_version": 0, - "doc": { - "category": "cont_dict", - "description": "Jumps to the continuation in `c3`, pushing integer `0 <= n < 2^14` as its argument.\nApproximately equivalent to `n PUSHINT` `c3 PUSHCTR` `JMPX`.", - "gas": "", - "fift": "[n] JMP", - "fift_examples": [], - "opcode": "F16_n", - "stack": " - n" - }, - "bytecode": { - "tlb": "#F16_ n:uint14", - "prefix": "F16_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 14, - "min_value": 0, - "max_value": 16383, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "n", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": { - "branches": [{"type": "register", "index": 3}], - "nobranch": false - } - }, - { - "mnemonic": "PREPAREDICT", - "since_version": 0, - "doc": { - "category": "cont_dict", - "description": "Equivalent to `n PUSHINT` `c3 PUSHCTR`, for `0 <= n < 2^14`.\nIn this way, `[n] CALL` is approximately equivalent to `[n] PREPARE` `EXECUTE`, and `[n] JMP` is approximately equivalent to `[n] PREPARE` `JMPX`.\nOne might use, for instance, `CALLXARGS` or `CALLCC` instead of `EXECUTE` here.", - "gas": "", - "fift": "[n] PREPARE\n[n] PREPAREDICT", - "fift_examples": [], - "opcode": "F1A_n", - "stack": " - n c" - }, - "bytecode": { - "tlb": "#F1A_ n:uint14", - "prefix": "F1A_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 14, - "min_value": 0, - "max_value": 16383, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [], - "registers": [{"type": "constant", "index": 3}] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "n", "value_types": ["Integer"]}, - {"type": "simple", "name": "c", "value_types": ["Continuation"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "THROW_SHORT", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "Throws exception `0 <= n <= 63` with parameter zero.\nIn other words, it transfers control to the continuation in `c2`, pushing `0` and `n` into its stack, and discarding the old stack altogether.", - "gas": "76", - "fift": "[n] THROW", - "fift_examples": [], - "opcode": "F22_n", - "stack": " - 0 n" - }, - "bytecode": { - "tlb": "#F22_ n:uint6", - "prefix": "F22_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 6, - "min_value": 0, - "max_value": 63, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": false} - }, - { - "mnemonic": "THROWIF_SHORT", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "Throws exception `0 <= n <= 63` with parameter zero only if integer `f!=0`.", - "gas": "26/76", - "fift": "[n] THROWIF", - "fift_examples": [], - "opcode": "F26_n", - "stack": "f - " - }, - "bytecode": { - "tlb": "#F26_ n:uint6", - "prefix": "F26_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 6, - "min_value": 0, - "max_value": 63, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "f", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "THROWIFNOT_SHORT", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "Throws exception `0 <= n <= 63` with parameter zero only if integer `f=0`.", - "gas": "26/76", - "fift": "[n] THROWIFNOT", - "fift_examples": [], - "opcode": "F2A_n", - "stack": "f - " - }, - "bytecode": { - "tlb": "#F2A_ n:uint6", - "prefix": "F2A_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 6, - "min_value": 0, - "max_value": 63, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "f", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "THROW", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "For `0 <= n < 2^11`, an encoding of `[n] THROW` for larger values of `n`.", - "gas": "84", - "fift": "[n] THROW", - "fift_examples": [], - "opcode": "F2C4_n", - "stack": "- 0 nn" - }, - "bytecode": { - "tlb": "#F2C4_ n:uint11", - "prefix": "F2C4_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 11, - "min_value": 0, - "max_value": 2047, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": false} - }, - { - "mnemonic": "THROWARG", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "Throws exception `0 <= n < 2^11` with parameter `x`, by copying `x` and `n` into the stack of `c2` and transferring control to `c2`.", - "gas": "84", - "fift": "[n] THROWARG", - "fift_examples": [], - "opcode": "F2CC_n", - "stack": "x - x nn" - }, - "bytecode": { - "tlb": "#F2CC_ n:uint11", - "prefix": "F2CC_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 11, - "min_value": 0, - "max_value": 2047, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": false} - }, - { - "mnemonic": "THROWIF", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "For `0 <= n < 2^11`, an encoding of `[n] THROWIF` for larger values of `n`.", - "gas": "34/84", - "fift": "[n] THROWIF", - "fift_examples": [], - "opcode": "F2D4_n", - "stack": "f - " - }, - "bytecode": { - "tlb": "#F2D4_ n:uint11", - "prefix": "F2D4_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 11, - "min_value": 0, - "max_value": 2047, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "f", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "THROWARGIF", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "Throws exception `0 <= nn < 2^11` with parameter `x` only if integer `f!=0`.", - "gas": "34/84", - "fift": "[n] THROWARGIF", - "fift_examples": [], - "opcode": "F2DC_n", - "stack": "x f - " - }, - "bytecode": { - "tlb": "#F2DC_ n:uint11", - "prefix": "F2DC_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 11, - "min_value": 0, - "max_value": 2047, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "f", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "THROWIFNOT", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "For `0 <= n < 2^11`, an encoding of `[n] THROWIFNOT` for larger values of `n`.", - "gas": "34/84", - "fift": "[n] THROWIFNOT", - "fift_examples": [], - "opcode": "F2E4_n", - "stack": "f - " - }, - "bytecode": { - "tlb": "#F2E4_ n:uint11", - "prefix": "F2E4_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 11, - "min_value": 0, - "max_value": 2047, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "f", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "THROWARGIFNOT", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "Throws exception `0 <= n < 2^11` with parameter `x` only if integer `f=0`.", - "gas": "34/84", - "fift": "[n] THROWARGIFNOT", - "fift_examples": [], - "opcode": "F2EC_n", - "stack": "x f - " - }, - "bytecode": { - "tlb": "#F2EC_ n:uint11", - "prefix": "F2EC_", - "operands": [ - { - "name": "n", - "type": "uint", - "size": 11, - "min_value": 0, - "max_value": 2047, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "f", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "THROWANY", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "Throws exception `0 <= n < 2^16` with parameter zero.\nApproximately equivalent to `ZERO` `SWAP` `THROWARGANY`.", - "gas": "76", - "fift": "THROWANY", - "fift_examples": [], - "opcode": "F2F0", - "stack": "n - 0 n" - }, - "bytecode": {"tlb": "#F2F0", "prefix": "F2F0", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "n", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": false} - }, - { - "mnemonic": "THROWARGANY", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "Throws exception `0 <= n < 2^16` with parameter `x`, transferring control to the continuation in `c2`.\nApproximately equivalent to `c2 PUSHCTR` `2 JMPXARGS`.", - "gas": "76", - "fift": "THROWARGANY", - "fift_examples": [], - "opcode": "F2F1", - "stack": "x n - x n" - }, - "bytecode": {"tlb": "#F2F1", "prefix": "F2F1", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": false} - }, - { - "mnemonic": "THROWANYIF", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "Throws exception `0 <= n < 2^16` with parameter zero only if `f!=0`.", - "gas": "26/76", - "fift": "THROWANYIF", - "fift_examples": [], - "opcode": "F2F2", - "stack": "n f - " - }, - "bytecode": {"tlb": "#F2F2", "prefix": "F2F2", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "n", "value_types": ["Integer"]}, - {"type": "simple", "name": "f", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "THROWARGANYIF", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "Throws exception `0 <= n<2^16` with parameter `x` only if `f!=0`.", - "gas": "26/76", - "fift": "THROWARGANYIF", - "fift_examples": [], - "opcode": "F2F3", - "stack": "x n f - " - }, - "bytecode": {"tlb": "#F2F3", "prefix": "F2F3", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "n", "value_types": ["Integer"]}, - {"type": "simple", "name": "f", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "THROWANYIFNOT", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "Throws exception `0 <= n<2^16` with parameter zero only if `f=0`.", - "gas": "26/76", - "fift": "THROWANYIFNOT", - "fift_examples": [], - "opcode": "F2F4", - "stack": "n f - " - }, - "bytecode": {"tlb": "#F2F4", "prefix": "F2F4", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "n", "value_types": ["Integer"]}, - {"type": "simple", "name": "f", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "THROWARGANYIFNOT", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "Throws exception `0 <= n<2^16` with parameter `x` only if `f=0`.", - "gas": "26/76", - "fift": "THROWARGANYIFNOT", - "fift_examples": [], - "opcode": "F2F5", - "stack": "x n f - " - }, - "bytecode": {"tlb": "#F2F5", "prefix": "F2F5", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "n", "value_types": ["Integer"]}, - {"type": "simple", "name": "f", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "TRY", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "Sets `c2` to `c'`, first saving the old value of `c2` both into the savelist of `c'` and into the savelist of the current continuation, which is stored into `c.c0` and `c'.c0`. Then runs `c` similarly to `EXECUTE`. If `c` does not throw any exceptions, the original value of `c2` is automatically restored on return from `c`. If an exception occurs, the execution is transferred to `c'`, but the original value of `c2` is restored in the process, so that `c'` can re-throw the exception by `THROWANY` if it cannot handle it by itself.", - "gas": "26", - "fift": "TRY", - "fift_examples": [ - { - "fift": "TRY:<{ code1 }>CATCH<{ code2 }>", - "description": "Equivalent to `<{ code1 }> CONT` `<{ code2 }> CONT` `TRY`." - } - ], - "opcode": "F2FF", - "stack": "c c' - " - }, - "bytecode": {"tlb": "#F2FF", "prefix": "F2FF", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Continuation"]}, - {"type": "simple", "name": "c2", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "cc", - "save": { - "c0": {"type": "register", "index": 0}, - "c1": {"type": "register", "index": 1}, - "c2": {"type": "register", "index": 2} - } - }, - "c2": { - "type": "variable", - "var_name": "c2", - "save": { - "c0": { - "type": "cc", - "save": { - "c0": {"type": "register", "index": 0}, - "c1": {"type": "register", "index": 1}, - "c2": {"type": "register", "index": 2} - } - }, - "c2": {"type": "register", "index": 2} - } - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "TRYARGS", - "since_version": 0, - "doc": { - "category": "exceptions", - "description": "Similar to `TRY`, but with `[p] [r] CALLXARGS` internally used instead of `EXECUTE`.\nIn this way, all but the top `0 <= p <= 15` stack elements will be saved into current continuation's stack, and then restored upon return from either `c` or `c'`, with the top `0 <= r <= 15` values of the resulting stack of `c` or `c'` copied as return values.", - "gas": "26", - "fift": "[p] [r] TRYARGS", - "fift_examples": [], - "opcode": "F3pr", - "stack": "c c' - " - }, - "bytecode": { - "tlb": "#F3 p:uint4 r:uint4", - "prefix": "F3", - "operands": [ - { - "name": "p", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - }, - { - "name": "r", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "args", - "length_var": "r", - "array_entry": [{"type": "simple", "name": "arg"}] - }, - {"type": "simple", "name": "c", "value_types": ["Continuation"]}, - {"type": "simple", "name": "c2", "value_types": ["Continuation"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "c", - "save": { - "c0": { - "type": "cc", - "save": { - "c0": {"type": "register", "index": 0}, - "c1": {"type": "register", "index": 1}, - "c2": {"type": "register", "index": 2} - } - }, - "c2": { - "type": "variable", - "var_name": "c2", - "save": { - "c0": { - "type": "cc", - "save": { - "c0": {"type": "register", "index": 0}, - "c1": {"type": "register", "index": 1}, - "c2": {"type": "register", "index": 2} - } - }, - "c2": {"type": "register", "index": 2} - } - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "STDICT", - "since_version": 0, - "doc": { - "category": "dict_serial", - "description": "Stores dictionary `D` into _Builder_ `b`, returing the resulting _Builder_ `b'`.\nIn other words, if `D` is a cell, performs `STONE` and `STREF`; if `D` is _Null_, performs `NIP` and `STZERO`; otherwise throws a type checking exception.", - "gas": "26", - "fift": "STDICT\nSTOPTREF", - "fift_examples": [], - "opcode": "F400", - "stack": "D b - b'" - }, - "bytecode": {"tlb": "#F400", "prefix": "F400", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "b", "value_types": ["Builder"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SKIPDICT", - "since_version": 0, - "doc": { - "category": "dict_serial", - "description": "Equivalent to `LDDICT` `NIP`.", - "gas": "26", - "fift": "SKIPDICT\nSKIPOPTREF", - "fift_examples": [], - "opcode": "F401", - "stack": "s - s'" - }, - "bytecode": {"tlb": "#F401", "prefix": "F401", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDDICTS", - "since_version": 0, - "doc": { - "category": "dict_serial", - "description": "Loads (parses) a (_Slice_-represented) dictionary `s'` from _Slice_ `s`, and returns the remainder of `s` as `s''`.\nThis is a ''split function'' for all `HashmapE(n,X)` dictionary types.", - "gas": "26", - "fift": "LDDICTS", - "fift_examples": [], - "opcode": "F402", - "stack": "s - s' s''" - }, - "bytecode": {"tlb": "#F402", "prefix": "F402", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "s2", "value_types": ["Slice"]}, - {"type": "simple", "name": "s3", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDDICTS", - "since_version": 0, - "doc": { - "category": "dict_serial", - "description": "Preloads a (_Slice_-represented) dictionary `s'` from _Slice_ `s`.\nApproximately equivalent to `LDDICTS` `DROP`.", - "gas": "26", - "fift": "PLDDICTS", - "fift_examples": [], - "opcode": "F403", - "stack": "s - s'" - }, - "bytecode": {"tlb": "#F403", "prefix": "F403", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "s2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDDICT", - "since_version": 0, - "doc": { - "category": "dict_serial", - "description": "Loads (parses) a dictionary `D` from _Slice_ `s`, and returns the remainder of `s` as `s'`. May be applied to dictionaries or to values of arbitrary `(^Y)?` types.", - "gas": "26", - "fift": "LDDICT\nLDOPTREF", - "fift_examples": [], - "opcode": "F404", - "stack": "s - D s'" - }, - "bytecode": {"tlb": "#F404", "prefix": "F404", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDDICT", - "since_version": 0, - "doc": { - "category": "dict_serial", - "description": "Preloads a dictionary `D` from _Slice_ `s`.\nApproximately equivalent to `LDDICT` `DROP`.", - "gas": "26", - "fift": "PLDDICT\nPLDOPTREF", - "fift_examples": [], - "opcode": "F405", - "stack": "s - D" - }, - "bytecode": {"tlb": "#F405", "prefix": "F405", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDDICTQ", - "since_version": 0, - "doc": { - "category": "dict_serial", - "description": "A quiet version of `LDDICT`.", - "gas": "26", - "fift": "LDDICTQ", - "fift_examples": [], - "opcode": "F406", - "stack": "s - D s' -1 or s 0" - }, - "bytecode": {"tlb": "#F406", "prefix": "F406", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "s", - "value_types": ["Integer"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PLDDICTQ", - "since_version": 0, - "doc": { - "category": "dict_serial", - "description": "A quiet version of `PLDDICT`.", - "gas": "26", - "fift": "PLDDICTQ", - "fift_examples": [], - "opcode": "F407", - "stack": "s - D -1 or 0" - }, - "bytecode": {"tlb": "#F407", "prefix": "F407", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTGET", - "since_version": 0, - "doc": { - "category": "dict_get", - "description": "Looks up key `k` (represented by a _Slice_, the first `0 <= n <= 1023` data bits of which are used as a key) in dictionary `D` of type `HashmapE(n,X)` with `n`-bit keys.\nOn success, returns the value found as a _Slice_ `x`.", - "gas": "", - "fift": "DICTGET", - "fift_examples": [], - "opcode": "F40A", - "stack": "k D n - x -1 or 0" - }, - "bytecode": {"tlb": "#F40A", "prefix": "F40A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTGETREF", - "since_version": 0, - "doc": { - "category": "dict_get", - "description": "Similar to `DICTGET`, but with a `LDREF` `ENDS` applied to `x` on success.\nThis operation is useful for dictionaries of type `HashmapE(n,^Y)`.", - "gas": "", - "fift": "DICTGETREF", - "fift_examples": [], - "opcode": "F40B", - "stack": "k D n - c -1 or 0" - }, - "bytecode": {"tlb": "#F40B", "prefix": "F40B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "k", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIGET", - "since_version": 0, - "doc": { - "category": "dict_get", - "description": "Similar to `DICTGET`, but with a signed (big-endian) `n`-bit _Integer_ `i` as a key. If `i` does not fit into `n` bits, returns `0`. If `i` is a `NaN`, throws an integer overflow exception.", - "gas": "", - "fift": "DICTIGET", - "fift_examples": [], - "opcode": "F40C", - "stack": "i D n - x -1 or 0" - }, - "bytecode": {"tlb": "#F40C", "prefix": "F40C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Cell", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIGETREF", - "since_version": 0, - "doc": { - "category": "dict_get", - "description": "Combines `DICTIGET` with `DICTGETREF`: it uses signed `n`-bit _Integer_ `i` as a key and returns a _Cell_ instead of a _Slice_ on success.", - "gas": "", - "fift": "DICTIGETREF", - "fift_examples": [], - "opcode": "F40D", - "stack": "i D n - c -1 or 0" - }, - "bytecode": {"tlb": "#F40D", "prefix": "F40D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Cell", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUGET", - "since_version": 0, - "doc": { - "category": "dict_get", - "description": "Similar to `DICTIGET`, but with _unsigned_ (big-endian) `n`-bit _Integer_ `i` used as a key.", - "gas": "", - "fift": "DICTUGET", - "fift_examples": [], - "opcode": "F40E", - "stack": "i D n - x -1 or 0" - }, - "bytecode": {"tlb": "#F40E", "prefix": "F40E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Cell", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUGETREF", - "since_version": 0, - "doc": { - "category": "dict_get", - "description": "Similar to `DICTIGETREF`, but with an unsigned `n`-bit _Integer_ key `i`.", - "gas": "", - "fift": "DICTUGETREF", - "fift_examples": [], - "opcode": "F40F", - "stack": "i D n - c -1 or 0" - }, - "bytecode": {"tlb": "#F40F", "prefix": "F40F", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Cell", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTSET", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "Sets the value associated with `n`-bit key `k` (represented by a _Slice_ as in `DICTGET`) in dictionary `D` (also represented by a _Slice_) to value `x` (again a _Slice_), and returns the resulting dictionary as `D'`.", - "gas": "", - "fift": "DICTSET", - "fift_examples": [], - "opcode": "F412", - "stack": "x k D n - D'" - }, - "bytecode": {"tlb": "#F412", "prefix": "F412", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "D2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTSETREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "Similar to `DICTSET`, but with the value set to a reference to _Cell_ `c`.", - "gas": "", - "fift": "DICTSETREF", - "fift_examples": [], - "opcode": "F413", - "stack": "c k D n - D'" - }, - "bytecode": {"tlb": "#F413", "prefix": "F413", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "D2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTISET", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "Similar to `DICTSET`, but with the key represented by a (big-endian) signed `n`-bit integer `i`. If `i` does not fit into `n` bits, a range check exception is generated.", - "gas": "", - "fift": "DICTISET", - "fift_examples": [], - "opcode": "F414", - "stack": "x i D n - D'" - }, - "bytecode": {"tlb": "#F414", "prefix": "F414", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "D2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTISETREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "Similar to `DICTSETREF`, but with the key a signed `n`-bit integer as in `DICTISET`.", - "gas": "", - "fift": "DICTISETREF", - "fift_examples": [], - "opcode": "F415", - "stack": "c i D n - D'" - }, - "bytecode": {"tlb": "#F415", "prefix": "F415", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "D2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUSET", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "Similar to `DICTISET`, but with `i` an _unsigned_ `n`-bit integer.", - "gas": "", - "fift": "DICTUSET", - "fift_examples": [], - "opcode": "F416", - "stack": "x i D n - D'" - }, - "bytecode": {"tlb": "#F416", "prefix": "F416", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "D2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUSETREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "Similar to `DICTISETREF`, but with `i` unsigned.", - "gas": "", - "fift": "DICTUSETREF", - "fift_examples": [], - "opcode": "F417", - "stack": "c i D n - D'" - }, - "bytecode": {"tlb": "#F417", "prefix": "F417", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "D2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTSETGET", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "Combines `DICTSET` with `DICTGET`: it sets the value corresponding to key `k` to `x`, but also returns the old value `y` associated with the key in question, if present.", - "gas": "", - "fift": "DICTSETGET", - "fift_examples": [], - "opcode": "F41A", - "stack": "x k D n - D' y -1 or D' 0" - }, - "bytecode": {"tlb": "#F41A", "prefix": "F41A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTSETGETREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "Combines `DICTSETREF` with `DICTGETREF` similarly to `DICTSETGET`.", - "gas": "", - "fift": "DICTSETGETREF", - "fift_examples": [], - "opcode": "F41B", - "stack": "c k D n - D' c' -1 or D' 0" - }, - "bytecode": {"tlb": "#F41B", "prefix": "F41B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "c2", "value_types": ["Cell"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTISETGET", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTISETGET`, but with `i` a signed `n`-bit integer.", - "gas": "", - "fift": "DICTISETGET", - "fift_examples": [], - "opcode": "F41C", - "stack": "x i D n - D' y -1 or D' 0" - }, - "bytecode": {"tlb": "#F41C", "prefix": "F41C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTISETGETREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTISETGETREF`, but with `i` a signed `n`-bit integer.", - "gas": "", - "fift": "DICTISETGETREF", - "fift_examples": [], - "opcode": "F41D", - "stack": "c i D n - D' c' -1 or D' 0" - }, - "bytecode": {"tlb": "#F41D", "prefix": "F41D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "c2", "value_types": ["Cell"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUSETGET", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTISETGET`, but with `i` an unsigned `n`-bit integer.", - "gas": "", - "fift": "DICTUSETGET", - "fift_examples": [], - "opcode": "F41E", - "stack": "x i D n - D' y -1 or D' 0" - }, - "bytecode": {"tlb": "#F41E", "prefix": "F41E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUSETGETREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTISETGETREF`, but with `i` an unsigned `n`-bit integer.", - "gas": "", - "fift": "DICTUSETGETREF", - "fift_examples": [], - "opcode": "F41F", - "stack": "c i D n - D' c' -1 or D' 0" - }, - "bytecode": {"tlb": "#F41F", "prefix": "F41F", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "c2", "value_types": ["Cell"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTREPLACE", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "A _Replace_ operation, which is similar to `DICTSET`, but sets the value of key `k` in dictionary `D` to `x` only if the key `k` was already present in `D`.", - "gas": "", - "fift": "DICTREPLACE", - "fift_examples": [], - "opcode": "F422", - "stack": "x k D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F422", "prefix": "F422", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTREPLACEREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "A _Replace_ counterpart of `DICTSETREF`.", - "gas": "", - "fift": "DICTREPLACEREF", - "fift_examples": [], - "opcode": "F423", - "stack": "c k D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F423", "prefix": "F423", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIREPLACE", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTREPLACE`, but with `i` a signed `n`-bit integer.", - "gas": "", - "fift": "DICTIREPLACE", - "fift_examples": [], - "opcode": "F424", - "stack": "x i D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F424", "prefix": "F424", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIREPLACEREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTREPLACEREF`, but with `i` a signed `n`-bit integer.", - "gas": "", - "fift": "DICTIREPLACEREF", - "fift_examples": [], - "opcode": "F425", - "stack": "c i D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F425", "prefix": "F425", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUREPLACE", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTREPLACE`, but with `i` an unsigned `n`-bit integer.", - "gas": "", - "fift": "DICTUREPLACE", - "fift_examples": [], - "opcode": "F426", - "stack": "x i D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F426", "prefix": "F426", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUREPLACEREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTREPLACEREF`, but with `i` an unsigned `n`-bit integer.", - "gas": "", - "fift": "DICTUREPLACEREF", - "fift_examples": [], - "opcode": "F427", - "stack": "c i D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F427", "prefix": "F427", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTREPLACEGET", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "A _Replace_ counterpart of `DICTSETGET`: on success, also returns the old value associated with the key in question.", - "gas": "", - "fift": "DICTREPLACEGET", - "fift_examples": [], - "opcode": "F42A", - "stack": "x k D n - D' y -1 or D 0" - }, - "bytecode": {"tlb": "#F42A", "prefix": "F42A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTREPLACEGETREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "A _Replace_ counterpart of `DICTSETGETREF`.", - "gas": "", - "fift": "DICTREPLACEGETREF", - "fift_examples": [], - "opcode": "F42B", - "stack": "c k D n - D' c' -1 or D 0" - }, - "bytecode": {"tlb": "#F42B", "prefix": "F42B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "c2", "value_types": ["Cell"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIREPLACEGET", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTREPLACEGET`, but with `i` a signed `n`-bit integer.", - "gas": "", - "fift": "DICTIREPLACEGET", - "fift_examples": [], - "opcode": "F42C", - "stack": "x i D n - D' y -1 or D 0" - }, - "bytecode": {"tlb": "#F42C", "prefix": "F42C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIREPLACEGETREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTREPLACEGETREF`, but with `i` a signed `n`-bit integer.", - "gas": "", - "fift": "DICTIREPLACEGETREF", - "fift_examples": [], - "opcode": "F42D", - "stack": "c i D n - D' c' -1 or D 0" - }, - "bytecode": {"tlb": "#F42D", "prefix": "F42D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "c2", "value_types": ["Cell"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUREPLACEGET", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTREPLACEGET`, but with `i` an unsigned `n`-bit integer.", - "gas": "", - "fift": "DICTUREPLACEGET", - "fift_examples": [], - "opcode": "F42E", - "stack": "x i D n - D' y -1 or D 0" - }, - "bytecode": {"tlb": "#F42E", "prefix": "F42E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUREPLACEGETREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTREPLACEGETREF`, but with `i` an unsigned `n`-bit integer.", - "gas": "", - "fift": "DICTUREPLACEGETREF", - "fift_examples": [], - "opcode": "F42F", - "stack": "c i D n - D' c' -1 or D 0" - }, - "bytecode": {"tlb": "#F42F", "prefix": "F42F", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "c2", "value_types": ["Cell"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTADD", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "An _Add_ counterpart of `DICTSET`: sets the value associated with key `k` in dictionary `D` to `x`, but only if it is not already present in `D`.", - "gas": "", - "fift": "DICTADD", - "fift_examples": [], - "opcode": "F432", - "stack": "x k D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F432", "prefix": "F432", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTADDREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "An _Add_ counterpart of `DICTSETREF`.", - "gas": "", - "fift": "DICTADDREF", - "fift_examples": [], - "opcode": "F433", - "stack": "c k D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F433", "prefix": "F433", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIADD", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTADD`, but with `i` a signed `n`-bit integer.", - "gas": "", - "fift": "DICTIADD", - "fift_examples": [], - "opcode": "F434", - "stack": "x i D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F434", "prefix": "F434", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIADDREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTADDREF`, but with `i` a signed `n`-bit integer.", - "gas": "", - "fift": "DICTIADDREF", - "fift_examples": [], - "opcode": "F435", - "stack": "c i D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F435", "prefix": "F435", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUADD", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTADD`, but with `i` an unsigned `n`-bit integer.", - "gas": "", - "fift": "DICTUADD", - "fift_examples": [], - "opcode": "F436", - "stack": "x i D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F436", "prefix": "F436", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUADDREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTADDREF`, but with `i` an unsigned `n`-bit integer.", - "gas": "", - "fift": "DICTUADDREF", - "fift_examples": [], - "opcode": "F437", - "stack": "c i D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F437", "prefix": "F437", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTADDGET", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "An _Add_ counterpart of `DICTSETGET`: sets the value associated with key `k` in dictionary `D` to `x`, but only if key `k` is not already present in `D`. Otherwise, just returns the old value `y` without changing the dictionary.", - "gas": "", - "fift": "DICTADDGET", - "fift_examples": [], - "opcode": "F43A", - "stack": "x k D n - D' -1 or D y 0" - }, - "bytecode": {"tlb": "#F43A", "prefix": "F43A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]}, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTADDGETREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "An _Add_ counterpart of `DICTSETGETREF`.", - "gas": "", - "fift": "DICTADDGETREF", - "fift_examples": [], - "opcode": "F43B", - "stack": "c k D n - D' -1 or D c' 0" - }, - "bytecode": {"tlb": "#F43B", "prefix": "F43B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]}, - {"type": "simple", "name": "c2", "value_types": ["Cell"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIADDGET", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTADDGET`, but with `i` a signed `n`-bit integer.", - "gas": "", - "fift": "DICTIADDGET", - "fift_examples": [], - "opcode": "F43C", - "stack": "x i D n - D' -1 or D y 0" - }, - "bytecode": {"tlb": "#F43C", "prefix": "F43C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]}, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIADDGETREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTADDGETREF`, but with `i` a signed `n`-bit integer.", - "gas": "", - "fift": "DICTIADDGETREF", - "fift_examples": [], - "opcode": "F43D", - "stack": "c i D n - D' -1 or D c' 0" - }, - "bytecode": {"tlb": "#F43D", "prefix": "F43D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]}, - {"type": "simple", "name": "c2", "value_types": ["Cell"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUADDGET", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTADDGET`, but with `i` an unsigned `n`-bit integer.", - "gas": "", - "fift": "DICTUADDGET", - "fift_examples": [], - "opcode": "F43E", - "stack": "x i D n - D' -1 or D y 0" - }, - "bytecode": {"tlb": "#F43E", "prefix": "F43E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]}, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUADDGETREF", - "since_version": 0, - "doc": { - "category": "dict_set", - "description": "`DICTADDGETREF`, but with `i` an unsigned `n`-bit integer.", - "gas": "", - "fift": "DICTUADDGETREF", - "fift_examples": [], - "opcode": "F43F", - "stack": "c i D n - D' -1 or D c' 0" - }, - "bytecode": {"tlb": "#F43F", "prefix": "F43F", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]}, - {"type": "simple", "name": "c2", "value_types": ["Cell"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTSETB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTSETB", - "fift_examples": [], - "opcode": "F441", - "stack": "b k D n - D'" - }, - "bytecode": {"tlb": "#F441", "prefix": "F441", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "D2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTISETB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTISETB", - "fift_examples": [], - "opcode": "F442", - "stack": "b i D n - D'" - }, - "bytecode": {"tlb": "#F442", "prefix": "F442", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "D2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUSETB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTUSETB", - "fift_examples": [], - "opcode": "F443", - "stack": "b i D n - D'" - }, - "bytecode": {"tlb": "#F443", "prefix": "F443", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "D2", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTSETGETB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTSETGETB", - "fift_examples": [], - "opcode": "F445", - "stack": "b k D n - D' y -1 or D' 0" - }, - "bytecode": {"tlb": "#F445", "prefix": "F445", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTISETGETB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTISETGETB", - "fift_examples": [], - "opcode": "F446", - "stack": "b i D n - D' y -1 or D' 0" - }, - "bytecode": {"tlb": "#F446", "prefix": "F446", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUSETGETB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTUSETGETB", - "fift_examples": [], - "opcode": "F447", - "stack": "b i D n - D' y -1 or D' 0" - }, - "bytecode": {"tlb": "#F447", "prefix": "F447", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTREPLACEB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTREPLACEB", - "fift_examples": [], - "opcode": "F449", - "stack": "b k D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F449", "prefix": "F449", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIREPLACEB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTIREPLACEB", - "fift_examples": [], - "opcode": "F44A", - "stack": "b i D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F44A", "prefix": "F44A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUREPLACEB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTUREPLACEB", - "fift_examples": [], - "opcode": "F44B", - "stack": "b i D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F44B", "prefix": "F44B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTREPLACEGETB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTREPLACEGETB", - "fift_examples": [], - "opcode": "F44D", - "stack": "b k D n - D' y -1 or D 0" - }, - "bytecode": {"tlb": "#F44D", "prefix": "F44D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIREPLACEGETB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTIREPLACEGETB", - "fift_examples": [], - "opcode": "F44E", - "stack": "b i D n - D' y -1 or D 0" - }, - "bytecode": {"tlb": "#F44E", "prefix": "F44E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUREPLACEGETB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTUREPLACEGETB", - "fift_examples": [], - "opcode": "F44F", - "stack": "b i D n - D' y -1 or D 0" - }, - "bytecode": {"tlb": "#F44F", "prefix": "F44F", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTADDB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTADDB", - "fift_examples": [], - "opcode": "F451", - "stack": "b k D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F451", "prefix": "F451", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIADDB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTIADDB", - "fift_examples": [], - "opcode": "F452", - "stack": "b i D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F452", "prefix": "F452", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUADDB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTUADDB", - "fift_examples": [], - "opcode": "F453", - "stack": "b i D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F453", "prefix": "F453", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTADDGETB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTADDGETB", - "fift_examples": [], - "opcode": "F455", - "stack": "b k D n - D' -1 or D y 0" - }, - "bytecode": {"tlb": "#F455", "prefix": "F455", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]}, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIADDGETB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTIADDGETB", - "fift_examples": [], - "opcode": "F456", - "stack": "b i D n - D' -1 or D y 0" - }, - "bytecode": {"tlb": "#F456", "prefix": "F456", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]}, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUADDGETB", - "since_version": 0, - "doc": { - "category": "dict_set_builder", - "description": "", - "gas": "", - "fift": "DICTUADDGETB", - "fift_examples": [], - "opcode": "F457", - "stack": "b i D n - D' -1 or D y 0" - }, - "bytecode": {"tlb": "#F457", "prefix": "F457", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice"]}, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "D2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTDEL", - "since_version": 0, - "doc": { - "category": "dict_delete", - "description": "Deletes `n`-bit key, represented by a _Slice_ `k`, from dictionary `D`. If the key is present, returns the modified dictionary `D'` and the success flag `-1`. Otherwise, returns the original dictionary `D` and `0`.", - "gas": "", - "fift": "DICTDEL", - "fift_examples": [], - "opcode": "F459", - "stack": "k D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F459", "prefix": "F459", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIDEL", - "since_version": 0, - "doc": { - "category": "dict_delete", - "description": "A version of `DICTDEL` with the key represented by a signed `n`-bit _Integer_ `i`. If `i` does not fit into `n` bits, simply returns `D` `0` (''key not found, dictionary unmodified'').", - "gas": "", - "fift": "DICTIDEL", - "fift_examples": [], - "opcode": "F45A", - "stack": "i D n - D' ?" - }, - "bytecode": {"tlb": "#F45A", "prefix": "F45A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUDEL", - "since_version": 0, - "doc": { - "category": "dict_delete", - "description": "Similar to `DICTIDEL`, but with `i` an unsigned `n`-bit integer.", - "gas": "", - "fift": "DICTUDEL", - "fift_examples": [], - "opcode": "F45B", - "stack": "i D n - D' ?" - }, - "bytecode": {"tlb": "#F45B", "prefix": "F45B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTDELGET", - "since_version": 0, - "doc": { - "category": "dict_delete", - "description": "Deletes `n`-bit key, represented by a _Slice_ `k`, from dictionary `D`. If the key is present, returns the modified dictionary `D'`, the original value `x` associated with the key `k` (represented by a _Slice_), and the success flag `-1`. Otherwise, returns the original dictionary `D` and `0`.", - "gas": "", - "fift": "DICTDELGET", - "fift_examples": [], - "opcode": "F462", - "stack": "k D n - D' x -1 or D 0" - }, - "bytecode": {"tlb": "#F462", "prefix": "F462", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "x", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTDELGETREF", - "since_version": 0, - "doc": { - "category": "dict_delete", - "description": "Similar to `DICTDELGET`, but with `LDREF` `ENDS` applied to `x` on success, so that the value returned `c` is a _Cell_.", - "gas": "", - "fift": "DICTDELGETREF", - "fift_examples": [], - "opcode": "F463", - "stack": "k D n - D' c -1 or D 0" - }, - "bytecode": {"tlb": "#F463", "prefix": "F463", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "c", "value_types": ["Cell"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIDELGET", - "since_version": 0, - "doc": { - "category": "dict_delete", - "description": "`DICTDELGET`, but with `i` a signed `n`-bit integer.", - "gas": "", - "fift": "DICTIDELGET", - "fift_examples": [], - "opcode": "F464", - "stack": "i D n - D' x -1 or D 0" - }, - "bytecode": {"tlb": "#F464", "prefix": "F464", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "x", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIDELGETREF", - "since_version": 0, - "doc": { - "category": "dict_delete", - "description": "`DICTDELGETREF`, but with `i` a signed `n`-bit integer.", - "gas": "", - "fift": "DICTIDELGETREF", - "fift_examples": [], - "opcode": "F465", - "stack": "i D n - D' c -1 or D 0" - }, - "bytecode": {"tlb": "#F465", "prefix": "F465", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "c", "value_types": ["Cell"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUDELGET", - "since_version": 0, - "doc": { - "category": "dict_delete", - "description": "`DICTDELGET`, but with `i` an unsigned `n`-bit integer.", - "gas": "", - "fift": "DICTUDELGET", - "fift_examples": [], - "opcode": "F466", - "stack": "i D n - D' x -1 or D 0" - }, - "bytecode": {"tlb": "#F466", "prefix": "F466", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "x", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUDELGETREF", - "since_version": 0, - "doc": { - "category": "dict_delete", - "description": "`DICTDELGETREF`, but with `i` an unsigned `n`-bit integer.", - "gas": "", - "fift": "DICTUDELGETREF", - "fift_examples": [], - "opcode": "F467", - "stack": "i D n - D' c -1 or D 0" - }, - "bytecode": {"tlb": "#F467", "prefix": "F467", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "c", "value_types": ["Cell"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTGETOPTREF", - "since_version": 0, - "doc": { - "category": "dict_mayberef", - "description": "A variant of `DICTGETREF` that returns _Null_ instead of the value `c^?` if the key `k` is absent from dictionary `D`.", - "gas": "", - "fift": "DICTGETOPTREF", - "fift_examples": [], - "opcode": "F469", - "stack": "k D n - c^?" - }, - "bytecode": {"tlb": "#F469", "prefix": "F469", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Cell", "Null"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIGETOPTREF", - "since_version": 0, - "doc": { - "category": "dict_mayberef", - "description": "`DICTGETOPTREF`, but with `i` a signed `n`-bit integer. If the key `i` is out of range, also returns _Null_.", - "gas": "", - "fift": "DICTIGETOPTREF", - "fift_examples": [], - "opcode": "F46A", - "stack": "i D n - c^?" - }, - "bytecode": {"tlb": "#F46A", "prefix": "F46A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Cell", "Null"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUGETOPTREF", - "since_version": 0, - "doc": { - "category": "dict_mayberef", - "description": "`DICTGETOPTREF`, but with `i` an unsigned `n`-bit integer. If the key `i` is out of range, also returns _Null_.", - "gas": "", - "fift": "DICTUGETOPTREF", - "fift_examples": [], - "opcode": "F46B", - "stack": "i D n - c^?" - }, - "bytecode": {"tlb": "#F46B", "prefix": "F46B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Cell", "Null"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTSETGETOPTREF", - "since_version": 0, - "doc": { - "category": "dict_mayberef", - "description": "A variant of both `DICTGETOPTREF` and `DICTSETGETREF` that sets the value corresponding to key `k` in dictionary `D` to `c^?` (if `c^?` is _Null_, then the key is deleted instead), and returns the old value `~c^?` (if the key `k` was absent before, returns _Null_ instead).", - "gas": "", - "fift": "DICTSETGETOPTREF", - "fift_examples": [], - "opcode": "F46D", - "stack": "c^? k D n - D' ~c^?" - }, - "bytecode": {"tlb": "#F46D", "prefix": "F46D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell", "Null"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "c2", "value_types": ["Cell", "Null"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTISETGETOPTREF", - "since_version": 0, - "doc": { - "category": "dict_mayberef", - "description": "Similar to primitive `DICTSETGETOPTREF`, but using signed `n`-bit _Integer_ `i` as a key. If `i` does not fit into `n` bits, throws a range checking exception.", - "gas": "", - "fift": "DICTISETGETOPTREF", - "fift_examples": [], - "opcode": "F46E", - "stack": "c^? i D n - D' ~c^?" - }, - "bytecode": {"tlb": "#F46E", "prefix": "F46E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell", "Null"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "c2", "value_types": ["Cell", "Null"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUSETGETOPTREF", - "since_version": 0, - "doc": { - "category": "dict_mayberef", - "description": "Similar to primitive `DICTSETGETOPTREF`, but using unsigned `n`-bit _Integer_ `i` as a key.", - "gas": "", - "fift": "DICTUSETGETOPTREF", - "fift_examples": [], - "opcode": "F46F", - "stack": "c^? i D n - D' ~c^?" - }, - "bytecode": {"tlb": "#F46F", "prefix": "F46F", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell", "Null"]}, - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "c2", "value_types": ["Cell", "Null"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PFXDICTSET", - "since_version": 0, - "doc": { - "category": "dict_prefix", - "description": "", - "gas": "", - "fift": "PFXDICTSET", - "fift_examples": [], - "opcode": "F470", - "stack": "x k D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F470", "prefix": "F470", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PFXDICTREPLACE", - "since_version": 0, - "doc": { - "category": "dict_prefix", - "description": "", - "gas": "", - "fift": "PFXDICTREPLACE", - "fift_examples": [], - "opcode": "F471", - "stack": "x k D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F471", "prefix": "F471", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PFXDICTADD", - "since_version": 0, - "doc": { - "category": "dict_prefix", - "description": "", - "gas": "", - "fift": "PFXDICTADD", - "fift_examples": [], - "opcode": "F472", - "stack": "x k D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F472", "prefix": "F472", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PFXDICTDEL", - "since_version": 0, - "doc": { - "category": "dict_prefix", - "description": "", - "gas": "", - "fift": "PFXDICTDEL", - "fift_examples": [], - "opcode": "F473", - "stack": "k D n - D' -1 or D 0" - }, - "bytecode": {"tlb": "#F473", "prefix": "F473", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTGETNEXT", - "since_version": 0, - "doc": { - "category": "dict_next", - "description": "Computes the minimal key `k'` in dictionary `D` that is lexicographically greater than `k`, and returns `k'` (represented by a _Slice_) along with associated value `x'` (also represented by a _Slice_).", - "gas": "", - "fift": "DICTGETNEXT", - "fift_examples": [], - "opcode": "F474", - "stack": "k D n - x' k' -1 or 0" - }, - "bytecode": {"tlb": "#F474", "prefix": "F474", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "k2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTGETNEXTEQ", - "since_version": 0, - "doc": { - "category": "dict_next", - "description": "Similar to `DICTGETNEXT`, but computes the minimal key `k'` that is lexicographically greater than or equal to `k`.", - "gas": "", - "fift": "DICTGETNEXTEQ", - "fift_examples": [], - "opcode": "F475", - "stack": "k D n - x' k' -1 or 0" - }, - "bytecode": {"tlb": "#F475", "prefix": "F475", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "k2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTGETPREV", - "since_version": 0, - "doc": { - "category": "dict_next", - "description": "Similar to `DICTGETNEXT`, but computes the maximal key `k'` lexicographically smaller than `k`.", - "gas": "", - "fift": "DICTGETPREV", - "fift_examples": [], - "opcode": "F476", - "stack": "k D n - x' k' -1 or 0" - }, - "bytecode": {"tlb": "#F476", "prefix": "F476", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "k2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTGETPREVEQ", - "since_version": 0, - "doc": { - "category": "dict_next", - "description": "Similar to `DICTGETPREV`, but computes the maximal key `k'` lexicographically smaller than or equal to `k`.", - "gas": "", - "fift": "DICTGETPREVEQ", - "fift_examples": [], - "opcode": "F477", - "stack": "k D n - x' k' -1 or 0" - }, - "bytecode": {"tlb": "#F477", "prefix": "F477", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "k2", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIGETNEXT", - "since_version": 0, - "doc": { - "category": "dict_next", - "description": "Similar to `DICTGETNEXT`, but interprets all keys in dictionary `D` as big-endian signed `n`-bit integers, and computes the minimal key `i'` that is larger than _Integer_ `i` (which does not necessarily fit into `n` bits).", - "gas": "", - "fift": "DICTIGETNEXT", - "fift_examples": [], - "opcode": "F478", - "stack": "i D n - x' i' -1 or 0" - }, - "bytecode": {"tlb": "#F478", "prefix": "F478", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x2", - "value_types": ["Slice"] - }, - { - "type": "simple", - "name": "i2", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIGETNEXTEQ", - "since_version": 0, - "doc": { - "category": "dict_next", - "description": "Similar to `DICTGETNEXTEQ`, but interprets keys as signed `n`-bit integers.", - "gas": "", - "fift": "DICTIGETNEXTEQ", - "fift_examples": [], - "opcode": "F479", - "stack": "i D n - x' i' -1 or 0" - }, - "bytecode": {"tlb": "#F479", "prefix": "F479", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x2", - "value_types": ["Slice"] - }, - { - "type": "simple", - "name": "i2", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIGETPREV", - "since_version": 0, - "doc": { - "category": "dict_next", - "description": "Similar to `DICTGETPREV`, but interprets keys as signed `n`-bit integers.", - "gas": "", - "fift": "DICTIGETPREV", - "fift_examples": [], - "opcode": "F47A", - "stack": "i D n - x' i' -1 or 0" - }, - "bytecode": {"tlb": "#F47A", "prefix": "F47A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x2", - "value_types": ["Slice"] - }, - { - "type": "simple", - "name": "i2", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIGETPREVEQ", - "since_version": 0, - "doc": { - "category": "dict_next", - "description": "Similar to `DICTGETPREVEQ`, but interprets keys as signed `n`-bit integers.", - "gas": "", - "fift": "DICTIGETPREVEQ", - "fift_examples": [], - "opcode": "F47B", - "stack": "i D n - x' i' -1 or 0" - }, - "bytecode": {"tlb": "#F47B", "prefix": "F47B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x2", - "value_types": ["Slice"] - }, - { - "type": "simple", - "name": "i2", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUGETNEXT", - "since_version": 0, - "doc": { - "category": "dict_next", - "description": "Similar to `DICTGETNEXT`, but interprets all keys in dictionary `D` as big-endian unsigned `n`-bit integers, and computes the minimal key `i'` that is larger than _Integer_ `i` (which does not necessarily fit into `n` bits, and is not necessarily non-negative).", - "gas": "", - "fift": "DICTUGETNEXT", - "fift_examples": [], - "opcode": "F47C", - "stack": "i D n - x' i' -1 or 0" - }, - "bytecode": {"tlb": "#F47C", "prefix": "F47C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x2", - "value_types": ["Slice"] - }, - { - "type": "simple", - "name": "i2", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUGETNEXTEQ", - "since_version": 0, - "doc": { - "category": "dict_next", - "description": "Similar to `DICTGETNEXTEQ`, but interprets keys as unsigned `n`-bit integers.", - "gas": "", - "fift": "DICTUGETNEXTEQ", - "fift_examples": [], - "opcode": "F47D", - "stack": "i D n - x' i' -1 or 0" - }, - "bytecode": {"tlb": "#F47D", "prefix": "F47D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x2", - "value_types": ["Slice"] - }, - { - "type": "simple", - "name": "i2", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUGETPREV", - "since_version": 0, - "doc": { - "category": "dict_next", - "description": "Similar to `DICTGETPREV`, but interprets keys as unsigned `n`-bit integers.", - "gas": "", - "fift": "DICTUGETPREV", - "fift_examples": [], - "opcode": "F47E", - "stack": "i D n - x' i' -1 or 0" - }, - "bytecode": {"tlb": "#F47E", "prefix": "F47E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x2", - "value_types": ["Slice"] - }, - { - "type": "simple", - "name": "i2", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUGETPREVEQ", - "since_version": 0, - "doc": { - "category": "dict_next", - "description": "Similar to `DICTGETPREVEQ`, but interprets keys a unsigned `n`-bit integers.", - "gas": "", - "fift": "DICTUGETPREVEQ", - "fift_examples": [], - "opcode": "F47F", - "stack": "i D n - x' i' -1 or 0" - }, - "bytecode": {"tlb": "#F47F", "prefix": "F47F", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x2", - "value_types": ["Slice"] - }, - { - "type": "simple", - "name": "i2", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTMIN", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Computes the minimal key `k` (represented by a _Slice_ with `n` data bits) in dictionary `D`, and returns `k` along with the associated value `x`.", - "gas": "", - "fift": "DICTMIN", - "fift_examples": [], - "opcode": "F482", - "stack": "D n - x k -1 or 0" - }, - "bytecode": {"tlb": "#F482", "prefix": "F482", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTMINREF", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTMIN`, but returns the only reference in the value as a _Cell_ `c`.", - "gas": "", - "fift": "DICTMINREF", - "fift_examples": [], - "opcode": "F483", - "stack": "D n - c k -1 or 0" - }, - "bytecode": {"tlb": "#F483", "prefix": "F483", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIMIN", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTMIN`, but computes the minimal key `i` under the assumption that all keys are big-endian signed `n`-bit integers. Notice that the key and value returned may differ from those computed by `DICTMIN` and `DICTUMIN`.", - "gas": "", - "fift": "DICTIMIN", - "fift_examples": [], - "opcode": "F484", - "stack": "D n - x i -1 or 0" - }, - "bytecode": {"tlb": "#F484", "prefix": "F484", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIMINREF", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTIMIN`, but returns the only reference in the value.", - "gas": "", - "fift": "DICTIMINREF", - "fift_examples": [], - "opcode": "F485", - "stack": "D n - c i -1 or 0" - }, - "bytecode": {"tlb": "#F485", "prefix": "F485", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUMIN", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTMIN`, but returns the key as an unsigned `n`-bit _Integer_ `i`.", - "gas": "", - "fift": "DICTUMIN", - "fift_examples": [], - "opcode": "F486", - "stack": "D n - x i -1 or 0" - }, - "bytecode": {"tlb": "#F486", "prefix": "F486", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUMINREF", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTUMIN`, but returns the only reference in the value.", - "gas": "", - "fift": "DICTUMINREF", - "fift_examples": [], - "opcode": "F487", - "stack": "D n - c i -1 or 0" - }, - "bytecode": {"tlb": "#F487", "prefix": "F487", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTMAX", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Computes the maximal key `k` (represented by a _Slice_ with `n` data bits) in dictionary `D`, and returns `k` along with the associated value `x`.", - "gas": "", - "fift": "DICTMAX", - "fift_examples": [], - "opcode": "F48A", - "stack": "D n - x k -1 or 0" - }, - "bytecode": {"tlb": "#F48A", "prefix": "F48A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTMAXREF", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTMAX`, but returns the only reference in the value.", - "gas": "", - "fift": "DICTMAXREF", - "fift_examples": [], - "opcode": "F48B", - "stack": "D n - c k -1 or 0" - }, - "bytecode": {"tlb": "#F48B", "prefix": "F48B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIMAX", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTMAX`, but computes the maximal key `i` under the assumption that all keys are big-endian signed `n`-bit integers. Notice that the key and value returned may differ from those computed by `DICTMAX` and `DICTUMAX`.", - "gas": "", - "fift": "DICTIMAX", - "fift_examples": [], - "opcode": "F48C", - "stack": "D n - x i -1 or 0" - }, - "bytecode": {"tlb": "#F48C", "prefix": "F48C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIMAXREF", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTIMAX`, but returns the only reference in the value.", - "gas": "", - "fift": "DICTIMAXREF", - "fift_examples": [], - "opcode": "F48D", - "stack": "D n - c i -1 or 0" - }, - "bytecode": {"tlb": "#F48D", "prefix": "F48D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUMAX", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTMAX`, but returns the key as an unsigned `n`-bit _Integer_ `i`.", - "gas": "", - "fift": "DICTUMAX", - "fift_examples": [], - "opcode": "F48E", - "stack": "D n - x i -1 or 0" - }, - "bytecode": {"tlb": "#F48E", "prefix": "F48E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUMAXREF", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTUMAX`, but returns the only reference in the value.", - "gas": "", - "fift": "DICTUMAXREF", - "fift_examples": [], - "opcode": "F48F", - "stack": "D n - c i -1 or 0" - }, - "bytecode": {"tlb": "#F48F", "prefix": "F48F", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTREMMIN", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Computes the minimal key `k` (represented by a _Slice_ with `n` data bits) in dictionary `D`, removes `k` from the dictionary, and returns `k` along with the associated value `x` and the modified dictionary `D'`.", - "gas": "", - "fift": "DICTREMMIN", - "fift_examples": [], - "opcode": "F492", - "stack": "D n - D' x k -1 or D 0" - }, - "bytecode": {"tlb": "#F492", "prefix": "F492", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTREMMINREF", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTREMMIN`, but returns the only reference in the value as a _Cell_ `c`.", - "gas": "", - "fift": "DICTREMMINREF", - "fift_examples": [], - "opcode": "F493", - "stack": "D n - D' c k -1 or D 0" - }, - "bytecode": {"tlb": "#F493", "prefix": "F493", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIREMMIN", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTREMMIN`, but computes the minimal key `i` under the assumption that all keys are big-endian signed `n`-bit integers. Notice that the key and value returned may differ from those computed by `DICTREMMIN` and `DICTUREMMIN`.", - "gas": "", - "fift": "DICTIREMMIN", - "fift_examples": [], - "opcode": "F494", - "stack": "D n - D' x i -1 or D 0" - }, - "bytecode": {"tlb": "#F494", "prefix": "F494", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIREMMINREF", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTIREMMIN`, but returns the only reference in the value.", - "gas": "", - "fift": "DICTIREMMINREF", - "fift_examples": [], - "opcode": "F495", - "stack": "D n - D' c i -1 or D 0" - }, - "bytecode": {"tlb": "#F495", "prefix": "F495", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUREMMIN", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTREMMIN`, but returns the key as an unsigned `n`-bit _Integer_ `i`.", - "gas": "", - "fift": "DICTUREMMIN", - "fift_examples": [], - "opcode": "F496", - "stack": "D n - D' x i -1 or D 0" - }, - "bytecode": {"tlb": "#F496", "prefix": "F496", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUREMMINREF", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTUREMMIN`, but returns the only reference in the value.", - "gas": "", - "fift": "DICTUREMMINREF", - "fift_examples": [], - "opcode": "F497", - "stack": "D n - D' c i -1 or D 0" - }, - "bytecode": {"tlb": "#F497", "prefix": "F497", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTREMMAX", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Computes the maximal key `k` (represented by a _Slice_ with `n` data bits) in dictionary `D`, removes `k` from the dictionary, and returns `k` along with the associated value `x` and the modified dictionary `D'`.", - "gas": "", - "fift": "DICTREMMAX", - "fift_examples": [], - "opcode": "F49A", - "stack": "D n - D' x k -1 or D 0" - }, - "bytecode": {"tlb": "#F49A", "prefix": "F49A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTREMMAXREF", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTREMMAX`, but returns the only reference in the value as a _Cell_ `c`.", - "gas": "", - "fift": "DICTREMMAXREF", - "fift_examples": [], - "opcode": "F49B", - "stack": "D n - D' c k -1 or D 0" - }, - "bytecode": {"tlb": "#F49B", "prefix": "F49B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIREMMAX", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTREMMAX`, but computes the minimal key `i` under the assumption that all keys are big-endian signed `n`-bit integers. Notice that the key and value returned may differ from those computed by `DICTREMMAX` and `DICTUREMMAX`.", - "gas": "", - "fift": "DICTIREMMAX", - "fift_examples": [], - "opcode": "F49C", - "stack": "D n - D' x i -1 or D 0" - }, - "bytecode": {"tlb": "#F49C", "prefix": "F49C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIREMMAXREF", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTIREMMAX`, but returns the only reference in the value.", - "gas": "", - "fift": "DICTIREMMAXREF", - "fift_examples": [], - "opcode": "F49D", - "stack": "D n - D' c i -1 or D 0" - }, - "bytecode": {"tlb": "#F49D", "prefix": "F49D", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUREMMAX", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTREMMAX`, but returns the key as an unsigned `n`-bit _Integer_ `i`.", - "gas": "", - "fift": "DICTUREMMAX", - "fift_examples": [], - "opcode": "F49E", - "stack": "D n - D' x i -1 or D 0" - }, - "bytecode": {"tlb": "#F49E", "prefix": "F49E", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTUREMMAXREF", - "since_version": 0, - "doc": { - "category": "dict_min", - "description": "Similar to `DICTUREMMAX`, but returns the only reference in the value.", - "gas": "", - "fift": "DICTUREMMAXREF", - "fift_examples": [], - "opcode": "F49F", - "stack": "D n - D' c i -1 or D 0" - }, - "bytecode": {"tlb": "#F49F", "prefix": "F49F", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "D2", - "value_types": ["Slice", "Null"] - }, - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DICTIGETJMP", - "since_version": 0, - "doc": { - "category": "dict_special", - "description": "Similar to `DICTIGET`, but with `x` `BLESS`ed into a continuation with a subsequent `JMPX` to it on success. On failure, does nothing. This is useful for implementing `switch`/`case` constructions.", - "gas": "", - "fift": "DICTIGETJMP", - "fift_examples": [], - "opcode": "F4A0", - "stack": "i D n - " - }, - "bytecode": {"tlb": "#F4A0", "prefix": "F4A0", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "x"}], - "nobranch": false - } - }, - { - "mnemonic": "DICTUGETJMP", - "since_version": 0, - "doc": { - "category": "dict_special", - "description": "Similar to `DICTIGETJMP`, but performs `DICTUGET` instead of `DICTIGET`.", - "gas": "", - "fift": "DICTUGETJMP", - "fift_examples": [], - "opcode": "F4A1", - "stack": "i D n - " - }, - "bytecode": {"tlb": "#F4A1", "prefix": "F4A1", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "x"}], - "nobranch": false - } - }, - { - "mnemonic": "DICTIGETEXEC", - "since_version": 0, - "doc": { - "category": "dict_special", - "description": "Similar to `DICTIGETJMP`, but with `EXECUTE` instead of `JMPX`.", - "gas": "", - "fift": "DICTIGETEXEC", - "fift_examples": [], - "opcode": "F4A2", - "stack": "i D n - " - }, - "bytecode": {"tlb": "#F4A2", "prefix": "F4A2", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "x", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "DICTUGETEXEC", - "since_version": 0, - "doc": { - "category": "dict_special", - "description": "Similar to `DICTUGETJMP`, but with `EXECUTE` instead of `JMPX`.", - "gas": "", - "fift": "DICTUGETEXEC", - "fift_examples": [], - "opcode": "F4A3", - "stack": "i D n - " - }, - "bytecode": {"tlb": "#F4A3", "prefix": "F4A3", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "i", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "x", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "DICTPUSHCONST", - "since_version": 0, - "doc": { - "category": "dict_special", - "description": "Pushes a non-empty constant dictionary `D` (as a `Cell^?`) along with its key length `0 <= n <= 1023`, stored as a part of the instruction. The dictionary itself is created from the first of remaining references of the current continuation. In this way, the complete `DICTPUSHCONST` instruction can be obtained by first serializing `xF4A4_`, then the non-empty dictionary itself (one `1` bit and a cell reference), and then the unsigned 10-bit integer `n` (as if by a `STU 10` instruction). An empty dictionary can be pushed by a `NEWDICT` primitive instead.", - "gas": "34", - "fift": "[ref] [n] DICTPUSHCONST", - "fift_examples": [], - "opcode": "F4A6_n", - "stack": " - D n" - }, - "bytecode": { - "tlb": "#F4A6_ d:^Cell n:uint10", - "prefix": "F4A6_", - "operands": [ - { - "name": "d", - "type": "ref", - "display_hints": [{"type": "dictionary", "size_var": "n"}] - }, - { - "name": "n", - "type": "uint", - "size": 10, - "min_value": 0, - "max_value": 1023, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [ - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PFXDICTGETQ", - "since_version": 0, - "doc": { - "category": "dict_special", - "description": "Looks up the unique prefix of _Slice_ `s` present in the prefix code dictionary represented by `Cell^?` `D` and `0 <= n <= 1023`. If found, the prefix of `s` is returned as `s'`, and the corresponding value (also a _Slice_) as `x`. The remainder of `s` is returned as a _Slice_ `s''`. If no prefix of `s` is a key in prefix code dictionary `D`, returns the unchanged `s` and a zero flag to indicate failure.", - "gas": "", - "fift": "PFXDICTGETQ", - "fift_examples": [], - "opcode": "F4A8", - "stack": "s D n - s' x s'' -1 or s 0" - }, - "bytecode": {"tlb": "#F4A8", "prefix": "F4A8", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "s2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "s3", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PFXDICTGET", - "since_version": 0, - "doc": { - "category": "dict_special", - "description": "Similar to `PFXDICTGET`, but throws a cell deserialization failure exception on failure.", - "gas": "", - "fift": "PFXDICTGET", - "fift_examples": [], - "opcode": "F4A9", - "stack": "s D n - s' x s''" - }, - "bytecode": {"tlb": "#F4A9", "prefix": "F4A9", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "s2", "value_types": ["Slice"]}, - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "s3", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PFXDICTGETJMP", - "since_version": 0, - "doc": { - "category": "dict_special", - "description": "Similar to `PFXDICTGETQ`, but on success `BLESS`es the value `x` into a _Continuation_ and transfers control to it as if by a `JMPX`. On failure, returns `s` unchanged and continues execution.", - "gas": "", - "fift": "PFXDICTGETJMP", - "fift_examples": [], - "opcode": "F4AA", - "stack": "s D n - s' s'' or s" - }, - "bytecode": {"tlb": "#F4AA", "prefix": "F4AA", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "x"}], - "nobranch": false - } - }, - { - "mnemonic": "PFXDICTGETEXEC", - "since_version": 0, - "doc": { - "category": "dict_special", - "description": "Similar to `PFXDICTGETJMP`, but `EXEC`utes the continuation found instead of jumping to it. On failure, throws a cell deserialization exception.", - "gas": "", - "fift": "PFXDICTGETEXEC", - "fift_examples": [], - "opcode": "F4AB", - "stack": "s D n - s' s''" - }, - "bytecode": {"tlb": "#F4AB", "prefix": "F4AB", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "s2", "value_types": ["Slice"]}, - {"type": "simple", "name": "s3", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "x", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "PFXDICTCONSTGETJMP", - "since_version": 0, - "doc": { - "category": "dict_special", - "description": "Combines `[n] DICTPUSHCONST` for `0 <= n <= 1023` with `PFXDICTGETJMP`.", - "gas": "", - "fift": "[ref] [n] PFXDICTCONSTGETJMP\n[ref] [n] PFXDICTSWITCH", - "fift_examples": [], - "opcode": "F4AE_n", - "stack": "s - s' s'' or s" - }, - "bytecode": { - "tlb": "#F4AE_ d:^Cell n:uint10", - "prefix": "F4AE_", - "operands": [ - { - "name": "d", - "type": "ref", - "display_hints": [{"type": "dictionary", "size_var": "n"}] - }, - { - "name": "n", - "type": "uint", - "size": 10, - "min_value": 0, - "max_value": 1023, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "x"}], - "nobranch": false - } - }, - { - "mnemonic": "DICTIGETJMPZ", - "since_version": 0, - "doc": { - "category": "dict_special", - "description": "A variant of `DICTIGETJMP` that returns index `i` on failure.", - "gas": "", - "fift": "DICTIGETJMPZ", - "fift_examples": [], - "opcode": "F4BC", - "stack": "i D n - i or nothing" - }, - "bytecode": {"tlb": "#F4BC", "prefix": "F4BC", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "x"}], - "nobranch": false - } - }, - { - "mnemonic": "DICTUGETJMPZ", - "since_version": 0, - "doc": { - "category": "dict_special", - "description": "A variant of `DICTUGETJMP` that returns index `i` on failure.", - "gas": "", - "fift": "DICTUGETJMPZ", - "fift_examples": [], - "opcode": "F4BD", - "stack": "i D n - i or nothing" - }, - "bytecode": {"tlb": "#F4BD", "prefix": "F4BD", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": { - "branches": [{"type": "variable", "var_name": "x"}], - "nobranch": false - } - }, - { - "mnemonic": "DICTIGETEXECZ", - "since_version": 0, - "doc": { - "category": "dict_special", - "description": "A variant of `DICTIGETEXEC` that returns index `i` on failure.", - "gas": "", - "fift": "DICTIGETEXECZ", - "fift_examples": [], - "opcode": "F4BE", - "stack": "i D n - i or nothing" - }, - "bytecode": {"tlb": "#F4BE", "prefix": "F4BE", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "x", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "DICTUGETEXECZ", - "since_version": 0, - "doc": { - "category": "dict_special", - "description": "A variant of `DICTUGETEXEC` that returns index `i` on failure.", - "gas": "", - "fift": "DICTUGETEXECZ", - "fift_examples": [], - "opcode": "F4BF", - "stack": "i D n - i or nothing" - }, - "bytecode": {"tlb": "#F4BF", "prefix": "F4BF", "operands": []}, - "value_flow": { - "inputs": {"registers": []}, - "outputs": {"registers": []} - }, - "control_flow": { - "branches": [ - { - "type": "variable", - "var_name": "x", - "save": { - "c0": { - "type": "cc", - "save": {"c0": {"type": "register", "index": 0}} - } - } - } - ], - "nobranch": false - } - }, - { - "mnemonic": "SUBDICTGET", - "since_version": 0, - "doc": { - "category": "dict_sub", - "description": "Constructs a subdictionary consisting of all keys beginning with prefix `k` (represented by a _Slice_, the first `0 <= l <= n <= 1023` data bits of which are used as a key) of length `l` in dictionary `D` of type `HashmapE(n,X)` with `n`-bit keys. On success, returns the new subdictionary of the same type `HashmapE(n,X)` as a _Slice_ `D'`.", - "gas": "", - "fift": "SUBDICTGET", - "fift_examples": [], - "opcode": "F4B1", - "stack": "k l D n - D'" - }, - "bytecode": {"tlb": "#F4B1", "prefix": "F4B1", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "D2", "value_types": ["Slice", "Null"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SUBDICTIGET", - "since_version": 0, - "doc": { - "category": "dict_sub", - "description": "Variant of `SUBDICTGET` with the prefix represented by a signed big-endian `l`-bit _Integer_ `x`, where necessarily `l <= 257`.", - "gas": "", - "fift": "SUBDICTIGET", - "fift_examples": [], - "opcode": "F4B2", - "stack": "x l D n - D'" - }, - "bytecode": {"tlb": "#F4B2", "prefix": "F4B2", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "D2", "value_types": ["Slice", "Null"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SUBDICTUGET", - "since_version": 0, - "doc": { - "category": "dict_sub", - "description": "Variant of `SUBDICTGET` with the prefix represented by an unsigned big-endian `l`-bit _Integer_ `x`, where necessarily `l <= 256`.", - "gas": "", - "fift": "SUBDICTUGET", - "fift_examples": [], - "opcode": "F4B3", - "stack": "x l D n - D'" - }, - "bytecode": {"tlb": "#F4B3", "prefix": "F4B3", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "D2", "value_types": ["Slice", "Null"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SUBDICTRPGET", - "since_version": 0, - "doc": { - "category": "dict_sub", - "description": "Similar to `SUBDICTGET`, but removes the common prefix `k` from all keys of the new dictionary `D'`, which becomes of type `HashmapE(n-l,X)`.", - "gas": "", - "fift": "SUBDICTRPGET", - "fift_examples": [], - "opcode": "F4B5", - "stack": "k l D n - D'" - }, - "bytecode": {"tlb": "#F4B5", "prefix": "F4B5", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "k", "value_types": ["Slice"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "D2", "value_types": ["Slice", "Null"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SUBDICTIRPGET", - "since_version": 0, - "doc": { - "category": "dict_sub", - "description": "Variant of `SUBDICTRPGET` with the prefix represented by a signed big-endian `l`-bit _Integer_ `x`, where necessarily `l <= 257`.", - "gas": "", - "fift": "SUBDICTIRPGET", - "fift_examples": [], - "opcode": "F4B6", - "stack": "x l D n - D'" - }, - "bytecode": {"tlb": "#F4B6", "prefix": "F4B6", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "D2", "value_types": ["Slice", "Null"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SUBDICTURPGET", - "since_version": 0, - "doc": { - "category": "dict_sub", - "description": "Variant of `SUBDICTRPGET` with the prefix represented by an unsigned big-endian `l`-bit _Integer_ `x`, where necessarily `l <= 256`.", - "gas": "", - "fift": "SUBDICTURPGET", - "fift_examples": [], - "opcode": "F4B7", - "stack": "x l D n - D'" - }, - "bytecode": {"tlb": "#F4B7", "prefix": "F4B7", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "l", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Slice", "Null"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "D2", "value_types": ["Slice", "Null"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ACCEPT", - "since_version": 0, - "doc": { - "category": "app_gas", - "description": "Sets current gas limit `g_l` to its maximal allowed value `g_m`, and resets the gas credit `g_c` to zero, decreasing the value of `g_r` by `g_c` in the process.\nIn other words, the current smart contract agrees to buy some gas to finish the current transaction. This action is required to process external messages, which bring no value (hence no gas) with themselves.", - "gas": "26", - "fift": "ACCEPT", - "fift_examples": [], - "opcode": "F800", - "stack": "-" - }, - "bytecode": {"tlb": "#F800", "prefix": "F800", "operands": []}, - "value_flow": { - "inputs": { - "stack": [], - "registers": [{"type": "special", "name": "gas"}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "special", "name": "gas"}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETGASLIMIT", - "since_version": 0, - "doc": { - "category": "app_gas", - "description": "Sets current gas limit `g_l` to the minimum of `g` and `g_m`, and resets the gas credit `g_c` to zero. If the gas consumed so far (including the present instruction) exceeds the resulting value of `g_l`, an (unhandled) out of gas exception is thrown before setting new gas limits. Notice that `SETGASLIMIT` with an argument `g >= 2^63-1` is equivalent to `ACCEPT`.", - "gas": "26", - "fift": "SETGASLIMIT", - "fift_examples": [], - "opcode": "F801", - "stack": "g - " - }, - "bytecode": {"tlb": "#F801", "prefix": "F801", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "g", "value_types": ["Integer"]}], - "registers": [{"type": "special", "name": "gas"}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "special", "name": "gas"}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "GASCONSUMED", - "since_version": 4, - "doc": { - "category": "app_gas", - "description": "Returns gas consumed by VM so far (including this instruction).", - "gas": "26", - "fift": "GASCONSUMED", - "fift_examples": [], - "opcode": "F807", - "stack": "- g_c" - }, - "bytecode": {"tlb": "#F807", "prefix": "F807", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "g_c", "value_types": ["Integer"]}], - "registers": [{"type": "special", "name": "gas"}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "COMMIT", - "since_version": 0, - "doc": { - "category": "app_gas", - "description": "Commits the current state of registers `c4` (''persistent data'') and `c5` (''actions'') so that the current execution is considered ''successful'' with the saved values even if an exception is thrown later.", - "gas": "26", - "fift": "COMMIT", - "fift_examples": [], - "opcode": "F80F", - "stack": "-" - }, - "bytecode": {"tlb": "#F80F", "prefix": "F80F", "operands": []}, - "value_flow": { - "inputs": { - "stack": [], - "registers": [ - {"type": "constant", "index": 4}, - {"type": "constant", "index": 5} - ] - }, - "outputs": { - "stack": [], - "registers": [{"type": "special", "name": "cstate"}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RANDU256", - "since_version": 0, - "doc": { - "category": "app_rnd", - "description": "Generates a new pseudo-random unsigned 256-bit _Integer_ `x`. The algorithm is as follows: if `r` is the old value of the random seed, considered as a 32-byte array (by constructing the big-endian representation of an unsigned 256-bit integer), then its `sha512(r)` is computed; the first 32 bytes of this hash are stored as the new value `r'` of the random seed, and the remaining 32 bytes are returned as the next random value `x`.", - "gas": "26+|c7|+|c1_1|", - "fift": "RANDU256", - "fift_examples": [], - "opcode": "F810", - "stack": "- x" - }, - "bytecode": {"tlb": "#F810", "prefix": "F810", "operands": []}, - "value_flow": { - "inputs": { - "stack": [], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [{"type": "constant", "index": 7}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RAND", - "since_version": 0, - "doc": { - "category": "app_rnd", - "description": "Generates a new pseudo-random integer `z` in the range `0...y-1` (or `y...-1`, if `y<0`). More precisely, an unsigned random value `x` is generated as in `RAND256U`; then `z:=floor(x*y/2^256)` is computed.\nEquivalent to `RANDU256` `256 MULRSHIFT`.", - "gas": "26+|c7|+|c1_1|", - "fift": "RAND", - "fift_examples": [], - "opcode": "F811", - "stack": "y - z" - }, - "bytecode": {"tlb": "#F811", "prefix": "F811", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "y", "value_types": ["Integer"]}], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "z", "value_types": ["Integer"]}], - "registers": [{"type": "constant", "index": 7}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETRAND", - "since_version": 0, - "doc": { - "category": "app_rnd", - "description": "Sets the random seed to unsigned 256-bit _Integer_ `x`.", - "gas": "26+|c7|+|c1_1|", - "fift": "SETRAND", - "fift_examples": [], - "opcode": "F814", - "stack": "x - " - }, - "bytecode": {"tlb": "#F814", "prefix": "F814", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 7}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ADDRAND", - "since_version": 0, - "doc": { - "category": "app_rnd", - "description": "Mixes unsigned 256-bit _Integer_ `x` into the random seed `r` by setting the random seed to `Sha` of the concatenation of two 32-byte strings: the first with the big-endian representation of the old seed `r`, and the second with the big-endian representation of `x`.", - "gas": "26", - "fift": "ADDRAND\nRANDOMIZE", - "fift_examples": [], - "opcode": "F815", - "stack": "x - " - }, - "bytecode": {"tlb": "#F815", "prefix": "F815", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 7}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "GETPARAM", - "since_version": 0, - "doc": { - "category": "app_config", - "description": "Returns the `i`-th parameter from the _Tuple_ provided at `c7` for `0 <= i <= 15`. Equivalent to `c7 PUSHCTR` `FIRST` `[i] INDEX`.\nIf one of these internal operations fails, throws an appropriate type checking or range checking exception.", - "gas": "26", - "fift": "[i] GETPARAM", - "fift_examples": [], - "opcode": "F82i", - "stack": " - x" - }, - "bytecode": { - "tlb": "#F82 i:uint4", - "prefix": "F82", - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CONFIGDICT", - "since_version": 0, - "doc": { - "category": "app_config", - "description": "Returns the global configuration dictionary along with its key length (32).\nEquivalent to `CONFIGROOT` `32 PUSHINT`.", - "gas": "26", - "fift": "CONFIGDICT", - "fift_examples": [], - "opcode": "F830", - "stack": " - D 32" - }, - "bytecode": {"tlb": "#F830", "prefix": "F830", "operands": []}, - "value_flow": { - "inputs": { - "stack": [], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice", "Null"]}, - {"type": "const", "value": 32, "value_type": "Integer"} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CONFIGPARAM", - "since_version": 0, - "doc": { - "category": "app_config", - "description": "Returns the value of the global configuration parameter with integer index `i` as a _Cell_ `c`, and a flag to indicate success.\nEquivalent to `CONFIGDICT` `DICTIGETREF`.", - "gas": "", - "fift": "CONFIGPARAM", - "fift_examples": [], - "opcode": "F832", - "stack": "i - c -1 or 0" - }, - "bytecode": {"tlb": "#F832", "prefix": "F832", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "i", "value_types": ["Integer"]}], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CONFIGOPTPARAM", - "since_version": 0, - "doc": { - "category": "app_config", - "description": "Returns the value of the global configuration parameter with integer index `i` as a _Maybe Cell_ `c^?`.\nEquivalent to `CONFIGDICT` `DICTIGETOPTREF`.", - "gas": "", - "fift": "CONFIGOPTPARAM", - "fift_examples": [], - "opcode": "F833", - "stack": "i - c^?" - }, - "bytecode": {"tlb": "#F833", "prefix": "F833", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "i", "value_types": ["Integer"]}], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Cell", "Null"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PREVMCBLOCKS", - "since_version": 4, - "doc": { - "category": "app_config", - "description": "Retrives `last_mc_blocks` part of PrevBlocksInfo from c7 (parameter 13).", - "gas": "", - "fift": "PREVMCBLOCKS", - "fift_examples": [], - "opcode": "F83400", - "stack": "- t" - }, - "bytecode": {"tlb": "#F83400", "prefix": "F83400", "operands": []}, - "value_flow": { - "inputs": { - "stack": [], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "t", "value_types": ["Tuple"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PREVKEYBLOCK", - "since_version": 4, - "doc": { - "category": "app_config", - "description": "Retrives `prev_key_block` part of PrevBlocksInfo from c7 (parameter 13).", - "gas": "", - "fift": "PREVKEYBLOCK", - "fift_examples": [], - "opcode": "F83401", - "stack": "- t" - }, - "bytecode": {"tlb": "#F83401", "prefix": "F83401", "operands": []}, - "value_flow": { - "inputs": { - "stack": [], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "t", "value_types": ["Tuple"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "GLOBALID", - "since_version": 4, - "doc": { - "category": "app_config", - "description": "Retrieves `global_id` from 19 network config.", - "gas": "", - "fift": "GLOBALID", - "fift_examples": [], - "opcode": "F835", - "stack": "- i" - }, - "bytecode": {"tlb": "#F835", "prefix": "F835", "operands": []}, - "value_flow": { - "inputs": { - "stack": [], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "i", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "GETGASFEE", - "since_version": 6, - "doc": { - "category": "app_config", - "description": "Calculates gas fee", - "gas": "", - "fift": "GETGASFEE", - "fift_examples": [], - "opcode": "F836", - "stack": "gas_used is_mc - price" - }, - "bytecode": {"tlb": "#F836", "prefix": "F836", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "simple", - "name": "gas_used", - "value_types": ["Integer"] - }, - {"type": "simple", "name": "is_mc", "value_types": ["Integer"]} - ], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "price", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "GETSTORAGEFEE", - "since_version": 6, - "doc": { - "category": "app_config", - "description": "Calculates storage fees (only current StoragePrices entry is used).", - "gas": "", - "fift": "GETSTORAGEFEE", - "fift_examples": [], - "opcode": "F837", - "stack": "cells bits seconds is_mc - price" - }, - "bytecode": {"tlb": "#F837", "prefix": "F837", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "cells", "value_types": ["Integer"]}, - {"type": "simple", "name": "bits", "value_types": ["Integer"]}, - {"type": "simple", "name": "seconds", "value_types": ["Integer"]}, - {"type": "simple", "name": "is_mc", "value_types": ["Integer"]} - ], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "price", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "GETFORWARDFEE", - "since_version": 6, - "doc": { - "category": "app_config", - "description": "Calculates forward fee.", - "gas": "", - "fift": "GETFORWARDFEE", - "fift_examples": [], - "opcode": "F838", - "stack": "cells bits is_mc - price" - }, - "bytecode": {"tlb": "#F838", "prefix": "F838", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "cells", "value_types": ["Integer"]}, - {"type": "simple", "name": "bits", "value_types": ["Integer"]}, - {"type": "simple", "name": "is_mc", "value_types": ["Integer"]} - ], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "price", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "GETPRECOMPILEDGAS", - "since_version": 6, - "doc": { - "category": "app_config", - "description": "Returns gas usage for the current contract if it is precompiled, `null` otherwise.", - "gas": "", - "fift": "GETPRECOMPILEDGAS", - "fift_examples": [], - "opcode": "F839", - "stack": "- x" - }, - "bytecode": {"tlb": "#F839", "prefix": "F839", "operands": []}, - "value_flow": { - "inputs": { - "stack": [], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "GETORIGINALFWDFEE", - "since_version": 6, - "doc": { - "category": "app_config", - "description": "Calculate `fwd_fee * 2^16 / first_frac`. Can be used to get the original `fwd_fee` of the message.", - "gas": "", - "fift": "GETORIGINALFWDFEE", - "fift_examples": [], - "opcode": "F83A", - "stack": "fwd_fee is_mc - orig_fwd_fee" - }, - "bytecode": {"tlb": "#F83A", "prefix": "F83A", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "fwd_fee", "value_types": ["Integer"]}, - {"type": "simple", "name": "is_mc", "value_types": ["Integer"]} - ], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [ - { - "type": "simple", - "name": "orig_fwd_fee", - "value_types": ["Integer"] - } - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "GETGASFEESIMPLE", - "since_version": 6, - "doc": { - "category": "app_config", - "description": "Same as `GETGASFEE`, but without flat price (just `(gas_used * price) / 2^16)`.", - "gas": "", - "fift": "GETGASFEESIMPLE", - "fift_examples": [], - "opcode": "F83B", - "stack": "gas_used is_mc - price" - }, - "bytecode": {"tlb": "#F83B", "prefix": "F83B", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "simple", - "name": "gas_used", - "value_types": ["Integer"] - }, - {"type": "simple", "name": "is_mc", "value_types": ["Integer"]} - ], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "price", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "GETFORWARDFEESIMPLE", - "since_version": 6, - "doc": { - "category": "app_config", - "description": "Same as `GETFORWARDFEE`, but without lump price (just (`bits*bit_price + cells*cell_price) / 2^16`).", - "gas": "", - "fift": "GETFORWARDFEESIMPLE", - "fift_examples": [], - "opcode": "F83C", - "stack": "cells bits is_mc - price" - }, - "bytecode": {"tlb": "#F83C", "prefix": "F83C", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "cells", "value_types": ["Integer"]}, - {"type": "simple", "name": "bits", "value_types": ["Integer"]}, - {"type": "simple", "name": "is_mc", "value_types": ["Integer"]} - ], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "price", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "GETGLOBVAR", - "since_version": 0, - "doc": { - "category": "app_global", - "description": "Returns the `k`-th global variable for `0 <= k < 255`.\nEquivalent to `c7 PUSHCTR` `SWAP` `INDEXVARQ`.", - "gas": "26", - "fift": "GETGLOBVAR", - "fift_examples": [], - "opcode": "F840", - "stack": "k - x" - }, - "bytecode": {"tlb": "#F840", "prefix": "F840", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "k", "value_types": ["Integer"]}], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "GETGLOB", - "since_version": 0, - "doc": { - "category": "app_global", - "description": "Returns the `k`-th global variable for `1 <= k <= 31`.\nEquivalent to `c7 PUSHCTR` `[k] INDEXQ`.", - "gas": "26", - "fift": "[k] GETGLOB", - "fift_examples": [], - "opcode": "F85_k", - "stack": " - x" - }, - "bytecode": { - "tlb": "#F85_ k:(## 5) {1 <= k}", - "prefix": "F85_", - "operands_range_check": {"length": 5, "from": 1, "to": 31}, - "operands": [ - { - "name": "k", - "type": "uint", - "size": 5, - "min_value": 1, - "max_value": 31, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETGLOBVAR", - "since_version": 0, - "doc": { - "category": "app_global", - "description": "Assigns `x` to the `k`-th global variable for `0 <= k < 255`.\nEquivalent to `c7 PUSHCTR` `ROTREV` `SETINDEXVARQ` `c7 POPCTR`.", - "gas": "26+|c7'|", - "fift": "SETGLOBVAR", - "fift_examples": [], - "opcode": "F860", - "stack": "x k - " - }, - "bytecode": {"tlb": "#F860", "prefix": "F860", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x"}, - {"type": "simple", "name": "k", "value_types": ["Integer"]} - ], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 7}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETGLOB", - "since_version": 0, - "doc": { - "category": "app_global", - "description": "Assigns `x` to the `k`-th global variable for `1 <= k <= 31`.\nEquivalent to `c7 PUSHCTR` `SWAP` `k SETINDEXQ` `c7 POPCTR`.", - "gas": "26+|c7'|", - "fift": "[k] SETGLOB", - "fift_examples": [], - "opcode": "F87_k", - "stack": "x - " - }, - "bytecode": { - "tlb": "#F87_ k:(## 5) {1 <= k}", - "prefix": "F87_", - "operands_range_check": {"length": 5, "from": 1, "to": 31}, - "operands": [ - { - "name": "k", - "type": "uint", - "size": 5, - "min_value": 1, - "max_value": 31, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x"}], - "registers": [{"type": "constant", "index": 7}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 7}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHCU", - "since_version": 0, - "doc": { - "category": "app_crypto", - "description": "Computes the representation hash of a _Cell_ `c` and returns it as a 256-bit unsigned integer `x`. Useful for signing and checking signatures of arbitrary entities represented by a tree of cells.", - "gas": "26", - "fift": "HASHCU", - "fift_examples": [], - "opcode": "F900", - "stack": "c - x" - }, - "bytecode": {"tlb": "#F900", "prefix": "F900", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Cell"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHSU", - "since_version": 0, - "doc": { - "category": "app_crypto", - "description": "Computes the hash of a _Slice_ `s` and returns it as a 256-bit unsigned integer `x`. The result is the same as if an ordinary cell containing only data and references from `s` had been created and its hash computed by `HASHCU`.", - "gas": "526", - "fift": "HASHSU", - "fift_examples": [], - "opcode": "F901", - "stack": "s - x" - }, - "bytecode": {"tlb": "#F901", "prefix": "F901", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SHA256U", - "since_version": 0, - "doc": { - "category": "app_crypto", - "description": "Computes `Sha` of the data bits of _Slice_ `s`. If the bit length of `s` is not divisible by eight, throws a cell underflow exception. The hash value is returned as a 256-bit unsigned integer `x`.", - "gas": "26", - "fift": "SHA256U", - "fift_examples": [], - "opcode": "F902", - "stack": "s - x" - }, - "bytecode": {"tlb": "#F902", "prefix": "F902", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXT_SHA256", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates and returns hash of the concatenation of slices (or builders) `s_1...s_n`.", - "gas": "1/33 gas per byte", - "fift": "HASHEXT_SHA256", - "fift_examples": [], - "opcode": "F90400", - "stack": "s_1 ... s_n n - h" - }, - "bytecode": {"tlb": "#F90400", "prefix": "F90400", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "h", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXT_SHA512", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates and returns hash of the concatenation of slices (or builders) `s_1...s_n`.", - "gas": "1/16 gas per byte", - "fift": "HASHEXT_SHA512", - "fift_examples": [], - "opcode": "F90401", - "stack": "s_1 ... s_n n - h1 h2" - }, - "bytecode": {"tlb": "#F90401", "prefix": "F90401", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "h1", "value_types": ["Integer"]}, - {"type": "simple", "name": "h2", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXT_BLAKE2B", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates and returns hash of the concatenation of slices (or builders) `s_1...s_n`.", - "gas": "1/19 gas per byte", - "fift": "HASHEXT_BLAKE2B", - "fift_examples": [], - "opcode": "F90402", - "stack": "s_1 ... s_n n - h1 h2" - }, - "bytecode": {"tlb": "#F90402", "prefix": "F90402", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "h1", "value_types": ["Integer"]}, - {"type": "simple", "name": "h2", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXT_KECCAK256", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates and returns hash of the concatenation of slices (or builders) `s_1...s_n`.", - "gas": "1/11 gas per byte", - "fift": "HASHEXT_KECCAK256", - "fift_examples": [], - "opcode": "F90403", - "stack": "s_1 ... s_n n - h" - }, - "bytecode": {"tlb": "#F90403", "prefix": "F90403", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "h", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXT_KECCAK512", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates and returns hash of the concatenation of slices (or builders) `s_1...s_n`.", - "gas": "1/19 gas per byte", - "fift": "HASHEXT_KECCAK512", - "fift_examples": [], - "opcode": "F90404", - "stack": "s_1 ... s_n n - h1 h2" - }, - "bytecode": {"tlb": "#F90404", "prefix": "F90404", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "h1", "value_types": ["Integer"]}, - {"type": "simple", "name": "h2", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXTR_SHA256", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates and returns hash of the concatenation of slices (or builders) `s_1...s_n`.", - "gas": "1/33 gas per byte", - "fift": "HASHEXTR_SHA256", - "fift_examples": [], - "opcode": "F90500", - "stack": "s_n ... s_1 n - h" - }, - "bytecode": {"tlb": "#F90500", "prefix": "F90500", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "h", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXTR_SHA512", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates and returns hash of the concatenation of slices (or builders) `s_1...s_n`.", - "gas": "1/16 gas per byte", - "fift": "HASHEXTR_SHA512", - "fift_examples": [], - "opcode": "F90501", - "stack": "s_n ... s_1 n - h1 h2" - }, - "bytecode": {"tlb": "#F90501", "prefix": "F90501", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "h1", "value_types": ["Integer"]}, - {"type": "simple", "name": "h2", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXTR_BLAKE2B", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates and returns hash of the concatenation of slices (or builders) `s_1...s_n`.", - "gas": "1/19 gas per byte", - "fift": "HASHEXTR_BLAKE2B", - "fift_examples": [], - "opcode": "F90502", - "stack": "s_n ... s_1 n - h1 h2" - }, - "bytecode": {"tlb": "#F90502", "prefix": "F90502", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "h1", "value_types": ["Integer"]}, - {"type": "simple", "name": "h2", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXTR_KECCAK256", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates and returns hash of the concatenation of slices (or builders) `s_1...s_n`.", - "gas": "1/11 gas per byte", - "fift": "HASHEXTR_KECCAK256", - "fift_examples": [], - "opcode": "F90503", - "stack": "s_n ... s_1 n - h" - }, - "bytecode": {"tlb": "#F90503", "prefix": "F90503", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "h", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXTR_KECCAK512", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates and returns hash of the concatenation of slices (or builders) `s_1...s_n`.", - "gas": "1/19 gas per byte", - "fift": "HASHEXTR_KECCAK512", - "fift_examples": [], - "opcode": "F90504", - "stack": "s_n ... s_1 n - h1 h2" - }, - "bytecode": {"tlb": "#F90504", "prefix": "F90504", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "h1", "value_types": ["Integer"]}, - {"type": "simple", "name": "h2", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXTA_SHA256", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates hash of the concatenation of slices (or builders) `s_1...s_n`. Appends the resulting hash to a builder `b`.", - "gas": "1/33 gas per byte", - "fift": "HASHEXTA_SHA256", - "fift_examples": [], - "opcode": "F90600", - "stack": "b s_1 ... s_n n - b'" - }, - "bytecode": {"tlb": "#F90600", "prefix": "F90600", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXTA_SHA512", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates hash of the concatenation of slices (or builders) `s_1...s_n`. Appends the resulting hash to a builder `b`.", - "gas": "1/16 gas per byte", - "fift": "HASHEXTA_SHA512", - "fift_examples": [], - "opcode": "F90601", - "stack": "b s_1 ... s_n n - b'" - }, - "bytecode": {"tlb": "#F90601", "prefix": "F90601", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXTA_BLAKE2B", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates hash of the concatenation of slices (or builders) `s_1...s_n`. Appends the resulting hash to a builder `b`.", - "gas": "1/19 gas per byte", - "fift": "HASHEXTA_BLAKE2B", - "fift_examples": [], - "opcode": "F90602", - "stack": "b s_1 ... s_n n - b'" - }, - "bytecode": {"tlb": "#F90602", "prefix": "F90602", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXTA_KECCAK256", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates hash of the concatenation of slices (or builders) `s_1...s_n`. Appends the resulting hash to a builder `b`.", - "gas": "1/11 gas per byte", - "fift": "HASHEXTA_KECCAK256", - "fift_examples": [], - "opcode": "F90603", - "stack": "b s_1 ... s_n n - b'" - }, - "bytecode": {"tlb": "#F90603", "prefix": "F90603", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXTA_KECCAK512", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates hash of the concatenation of slices (or builders) `s_1...s_n`. Appends the resulting hash to a builder `b`.", - "gas": "1/6 gas per byte", - "fift": "HASHEXTA_KECCAK512", - "fift_examples": [], - "opcode": "F90604", - "stack": "b s_1 ... s_n n - b'" - }, - "bytecode": {"tlb": "#F90604", "prefix": "F90604", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXTAR_SHA256", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates hash of the concatenation of slices (or builders) `s_1...s_n`. Appends the resulting hash to a builder `b`.", - "gas": "1/33 gas per byte", - "fift": "HASHEXTAR_SHA256", - "fift_examples": [], - "opcode": "F90700", - "stack": "b s_1 ... s_n n - b'" - }, - "bytecode": {"tlb": "#F90700", "prefix": "F90700", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXTAR_SHA512", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates hash of the concatenation of slices (or builders) `s_1...s_n`. Appends the resulting hash to a builder `b`.", - "gas": "1/16 gas per byte", - "fift": "HASHEXTAR_SHA512", - "fift_examples": [], - "opcode": "F90701", - "stack": "b s_n ... s_1 n - b'" - }, - "bytecode": {"tlb": "#F90701", "prefix": "F90701", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXTAR_BLAKE2B", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates hash of the concatenation of slices (or builders) `s_1...s_n`. Appends the resulting hash to a builder `b`.", - "gas": "1/19 gas per byte", - "fift": "HASHEXTAR_BLAKE2B", - "fift_examples": [], - "opcode": "F90702", - "stack": "b s_n ... s_1 n - b'" - }, - "bytecode": {"tlb": "#F90702", "prefix": "F90702", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXTAR_KECCAK256", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates hash of the concatenation of slices (or builders) `s_1...s_n`. Appends the resulting hash to a builder `b`.", - "gas": "1/11 gas per byte", - "fift": "HASHEXTAR_KECCAK256", - "fift_examples": [], - "opcode": "F90703", - "stack": "b s_n ... s_1 n - b'" - }, - "bytecode": {"tlb": "#F90703", "prefix": "F90703", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "HASHEXTAR_KECCAK512", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates hash of the concatenation of slices (or builders) `s_1...s_n`. Appends the resulting hash to a builder `b`.", - "gas": "1/6 gas per byte", - "fift": "HASHEXTAR_KECCAK512", - "fift_examples": [], - "opcode": "F90704", - "stack": "b s_n ... s_1 n - b'" - }, - "bytecode": {"tlb": "#F90704", "prefix": "F90704", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - { - "type": "array", - "name": "input_parts", - "length_var": "n", - "array_entry": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice", "Builder"] - } - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CHKSIGNU", - "since_version": 0, - "doc": { - "category": "app_crypto", - "description": "Checks the Ed25519-signature `s` of a hash `h` (a 256-bit unsigned integer, usually computed as the hash of some data) using public key `k` (also represented by a 256-bit unsigned integer).\nThe signature `s` must be a _Slice_ containing at least 512 data bits; only the first 512 bits are used. The result is `-1` if the signature is valid, `0` otherwise.\nNotice that `CHKSIGNU` is equivalent to `ROT` `NEWC` `256 STU` `ENDC` `ROTREV` `CHKSIGNS`, i.e., to `CHKSIGNS` with the first argument `d` set to 256-bit _Slice_ containing `h`. Therefore, if `h` is computed as the hash of some data, these data are hashed _twice_, the second hashing occurring inside `CHKSIGNS`.", - "gas": "26", - "fift": "CHKSIGNU", - "fift_examples": [], - "opcode": "F910", - "stack": "h s k - ?" - }, - "bytecode": {"tlb": "#F910", "prefix": "F910", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "h", "value_types": ["Integer"]}, - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CHKSIGNS", - "since_version": 0, - "doc": { - "category": "app_crypto", - "description": "Checks whether `s` is a valid Ed25519-signature of the data portion of _Slice_ `d` using public key `k`, similarly to `CHKSIGNU`. If the bit length of _Slice_ `d` is not divisible by eight, throws a cell underflow exception. The verification of Ed25519 signatures is the standard one, with `Sha` used to reduce `d` to the 256-bit number that is actually signed.", - "gas": "26", - "fift": "CHKSIGNS", - "fift_examples": [], - "opcode": "F911", - "stack": "d s k - ?" - }, - "bytecode": {"tlb": "#F911", "prefix": "F911", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "d", "value_types": ["Slice"]}, - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "ECRECOVER", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Recovers public key from signature, identical to Bitcoin/Ethereum operations. Takes 32-byte hash as uint256 `hash`; 65-byte signature as uint8 `v` and uint256 `r`, `s`. Returns `0` on failure, public key and `-1` on success. 65-byte public key is returned as uint8 `h`, uint256 `x1`, `x2`.", - "gas": "1526", - "fift": "ECRECOVER", - "fift_examples": [], - "opcode": "F912", - "stack": "hash v r s - 0 or h x1 x2 -1" - }, - "bytecode": {"tlb": "#F912", "prefix": "F912", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "hash", "value_types": ["Integer"]}, - {"type": "simple", "name": "v", "value_types": ["Integer"]}, - {"type": "simple", "name": "r", "value_types": ["Integer"]}, - {"type": "simple", "name": "s", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "h", - "value_types": ["Integer"] - }, - { - "type": "simple", - "name": "x1", - "value_types": ["Integer"] - }, - { - "type": "simple", - "name": "x2", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "P256_CHKSIGNU", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Checks seck256r1-signature `sig` of a number `h` (a 256-bit unsigned integer, usually computed as the hash of some data) and public key `k`. Returns -1 on success, 0 on failure. Public key is a 33-byte slice (encoded according to Sec. 2.3.4 point 2 of [SECG SEC 1](https://www.secg.org/sec1-v2.pdf)). Signature `sig` is a 64-byte slice (two 256-bit unsigned integers `r` and `s`).", - "gas": "3526", - "fift": "P256_CHKSIGNU", - "fift_examples": [], - "opcode": "F914", - "stack": "h sig k - ?" - }, - "bytecode": {"tlb": "#F914", "prefix": "F914", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "d", "value_types": ["Slice"]}, - {"type": "simple", "name": "sig", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "P256_CHKSIGNS", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Checks seck256r1-signature `sig` of data portion of slice `d` and public key `k`. Returns -1 on success, 0 on failure. Public key is a 33-byte slice (encoded according to Sec. 2.3.4 point 2 of [SECG SEC 1](https://www.secg.org/sec1-v2.pdf)). Signature `sig` is a 64-byte slice (two 256-bit unsigned integers `r` and `s`).", - "gas": "3526", - "fift": "P256_CHKSIGNS", - "fift_examples": [], - "opcode": "F915", - "stack": "d sig k - ?" - }, - "bytecode": {"tlb": "#F915", "prefix": "F915", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "d", "value_types": ["Slice"]}, - {"type": "simple", "name": "sig", "value_types": ["Slice"]}, - {"type": "simple", "name": "k", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RIST255_FROMHASH", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Deterministically generates a valid point `x` from a 512-bit hash (given as two 256-bit integers).", - "gas": "626", - "fift": "RIST255_FROMHASH", - "fift_examples": [], - "opcode": "F920", - "stack": "h1 h2 - x" - }, - "bytecode": {"tlb": "#F920", "prefix": "F920", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "h1", "value_types": ["Integer"]}, - {"type": "simple", "name": "h2", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RIST255_VALIDATE", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Checks that integer `x` is a valid representation of some curve point. Throws range_chk on error.", - "gas": "226", - "fift": "RIST255_VALIDATE", - "fift_examples": [], - "opcode": "F921", - "stack": "x -" - }, - "bytecode": {"tlb": "#F921", "prefix": "F921", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RIST255_ADD", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Addition of two points on a curve.", - "gas": "626", - "fift": "RIST255_ADD", - "fift_examples": [], - "opcode": "F922", - "stack": "x y - x+y" - }, - "bytecode": {"tlb": "#F922", "prefix": "F922", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RIST255_SUB", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Subtraction of two points on curve.", - "gas": "626", - "fift": "RIST255_SUB", - "fift_examples": [], - "opcode": "F923", - "stack": "x y - x-y" - }, - "bytecode": {"tlb": "#F923", "prefix": "F923", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RIST255_MUL", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Multiplies point `x` by a scalar `n`. Any `n` is valid, including negative.", - "gas": "2026", - "fift": "RIST255_MUL", - "fift_examples": [], - "opcode": "F924", - "stack": "x n - x*n" - }, - "bytecode": {"tlb": "#F924", "prefix": "F924", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RIST255_MULBASE", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Multiplies the generator point `g` by a scalar `n`. Any `n` is valid, including negative.", - "gas": "776", - "fift": "RIST255_MULBASE", - "fift_examples": [], - "opcode": "F925", - "stack": "n - g*n" - }, - "bytecode": {"tlb": "#F925", "prefix": "F925", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "n", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RIST255_PUSHL", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Pushes integer l=2^252+27742317777372353535851937790883648493, which is the order of the group.", - "gas": "26", - "fift": "RIST255_PUSHL", - "fift_examples": [], - "opcode": "F926", - "stack": "- l" - }, - "bytecode": {"tlb": "#F926", "prefix": "F926", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RIST255_QVALIDATE", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Checks that integer `x` is a valid representation of some curve point. Returns -1 on success and 0 on failure.", - "gas": "234", - "fift": "RIST255_QVALIDATE", - "fift_examples": [], - "opcode": "B7F921", - "stack": "x - 0 or -1" - }, - "bytecode": {"tlb": "#B7F921", "prefix": "B7F921", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RIST255_QADD", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Addition of two points on a curve. Returns -1 on success and 0 on failure.", - "gas": "634", - "fift": "RIST255_QADD", - "fift_examples": [], - "opcode": "B7F922", - "stack": "x y - 0 or x+y -1" - }, - "bytecode": {"tlb": "#B7F922", "prefix": "B7F922", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "result", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RIST255_QSUB", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Subtraction of two points on curve. Returns -1 on success and 0 on failure.", - "gas": "634", - "fift": "RIST255_QSUB", - "fift_examples": [], - "opcode": "B7F923", - "stack": "x y - 0 or x-y -1" - }, - "bytecode": {"tlb": "#B7F923", "prefix": "B7F923", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "result", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RIST255_QMUL", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Multiplies point `x` by a scalar `n`. Any `n` is valid, including negative. Returns -1 on success and 0 on failure.", - "gas": "2034", - "fift": "RIST255_QMUL", - "fift_examples": [], - "opcode": "B7F924", - "stack": "x n - 0 or x*n -1" - }, - "bytecode": {"tlb": "#B7F924", "prefix": "B7F924", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "result", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RIST255_QMULBASE", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Multiplies the generator point `g` by a scalar `n`. Any `n` is valid, including negative.", - "gas": "784", - "fift": "RIST255_QMULBASE", - "fift_examples": [], - "opcode": "B7F925", - "stack": "n - 0 or g*n -1" - }, - "bytecode": {"tlb": "#B7F925", "prefix": "B7F925", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "n", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "result", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_VERIFY", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Checks BLS signature, return true on success, false otherwise.", - "gas": "61034", - "fift": "BLS_VERIFY", - "fift_examples": [], - "opcode": "F93000", - "stack": "pk msg sgn - bool" - }, - "bytecode": {"tlb": "#F93000", "prefix": "F93000", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "pk", "value_types": ["Slice"]}, - {"type": "simple", "name": "msg", "value_types": ["Slice"]}, - {"type": "simple", "name": "sgn", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_AGGREGATE", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Aggregates signatures. `n>0`. Throw exception if `n=0` or if some `sig_i` is not a valid signature.", - "gas": "n*4350-2616", - "fift": "BLS_AGGREGATE", - "fift_examples": [], - "opcode": "F93001", - "stack": "sig_1 ... sig_n n - sig" - }, - "bytecode": {"tlb": "#F93001", "prefix": "F93001", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "signatures", - "length_var": "n", - "array_entry": [ - {"type": "simple", "name": "sig", "value_types": ["Slice"]} - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_FASTAGGREGATEVERIFY", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Checks aggregated BLS signature for keys `pk_1...pk_n` and message `msg`. Return true on success, false otherwise. Return false if `n=0`.", - "gas": "58034+n*3000", - "fift": "BLS_FASTAGGREGATEVERIFY", - "fift_examples": [], - "opcode": "F93002", - "stack": "pk_1 ... pk_n n msg sig - bool" - }, - "bytecode": {"tlb": "#F93002", "prefix": "F93002", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "public_keys", - "length_var": "n", - "array_entry": [ - {"type": "simple", "name": "pk", "value_types": ["Slice"]} - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]}, - {"type": "simple", "name": "msg", "value_types": ["Slice"]}, - {"type": "simple", "name": "sig", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_AGGREGATEVERIFY", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Checks aggregated BLS signature for key-message pairs `pk_1 msg_1...pk_n msg_n`. Return true on success, false otherwise. Return false if `n=0`.", - "gas": "38534+n*22500", - "fift": "BLS_AGGREGATEVERIFY", - "fift_examples": [], - "opcode": "F93003", - "stack": "pk_1 msg_1 ... pk_n msg_n n sgn - bool" - }, - "bytecode": {"tlb": "#F93003", "prefix": "F93003", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "key_message_pairs", - "length_var": "n", - "array_entry": [ - {"type": "simple", "name": "pk", "value_types": ["Slice"]}, - {"type": "simple", "name": "msg", "value_types": ["Slice"]} - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]}, - {"type": "simple", "name": "sgn", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_G1_ADD", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Addition on G1.", - "gas": "3934", - "fift": "BLS_G1_ADD", - "fift_examples": [], - "opcode": "F93010", - "stack": "x y - x+y" - }, - "bytecode": {"tlb": "#F93010", "prefix": "F93010", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_G1_SUB", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Subtraction on G1.", - "gas": "3934", - "fift": "BLS_G1_SUB", - "fift_examples": [], - "opcode": "F93011", - "stack": "x y - x-y" - }, - "bytecode": {"tlb": "#F93011", "prefix": "F93011", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_G1_NEG", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Negation on G1.", - "gas": "784", - "fift": "BLS_G1_NEG", - "fift_examples": [], - "opcode": "F93012", - "stack": "x - -x" - }, - "bytecode": {"tlb": "#F93012", "prefix": "F93012", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_G1_MUL", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Multiplies G1 point `x` by scalar `s`. Any `s` is valid, including negative.", - "gas": "5234", - "fift": "BLS_G1_MUL", - "fift_examples": [], - "opcode": "F93013", - "stack": "x s - x*s" - }, - "bytecode": {"tlb": "#F93013", "prefix": "F93013", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "s", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_G1_MULTIEXP", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates `x_1*s_1+...+x_n*s_n` for G1 points `x_i` and scalars `s_i`. Returns zero point if `n=0`. Any `s_i` is valid, including negative.", - "gas": "11409+n*630+n/floor(max(log2(n),4))*8820", - "fift": "BLS_G1_MULTIEXP", - "fift_examples": [], - "opcode": "F93014", - "stack": "x_1 s_1 ... x_n s_n n - x_1*s_1+...+x_n*s_n" - }, - "bytecode": {"tlb": "#F93014", "prefix": "F93014", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "components", - "length_var": "n", - "array_entry": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "s", "value_types": ["Integer"]} - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_G1_ZERO", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Pushes zero point in G1.", - "gas": "34", - "fift": "BLS_G1_ZERO", - "fift_examples": [], - "opcode": "F93015", - "stack": "- zero" - }, - "bytecode": {"tlb": "#F93015", "prefix": "F93015", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "zero", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_MAP_TO_G1", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Converts FP element `f` to a G1 point.", - "gas": "2384", - "fift": "BLS_MAP_TO_G1", - "fift_examples": [], - "opcode": "F93016", - "stack": "f - x" - }, - "bytecode": {"tlb": "#F93016", "prefix": "F93016", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "f", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_G1_INGROUP", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Checks that slice `x` represents a valid element of G1.", - "gas": "2984", - "fift": "BLS_G1_INGROUP", - "fift_examples": [], - "opcode": "F93017", - "stack": "x - bool" - }, - "bytecode": {"tlb": "#F93017", "prefix": "F93017", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_G1_ISZERO", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Checks that G1 point `x` is equal to zero.", - "gas": "34", - "fift": "BLS_G1_ISZERO", - "fift_examples": [], - "opcode": "F93018", - "stack": "x - bool" - }, - "bytecode": {"tlb": "#F93018", "prefix": "F93018", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_G2_ADD", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Addition on G2.", - "gas": "6134", - "fift": "BLS_G2_ADD", - "fift_examples": [], - "opcode": "F93020", - "stack": "x y - x+y" - }, - "bytecode": {"tlb": "#F93020", "prefix": "F93020", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_G2_SUB", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Subtraction on G2.", - "gas": "6134", - "fift": "BLS_G2_SUB", - "fift_examples": [], - "opcode": "F93021", - "stack": "x y - x-y" - }, - "bytecode": {"tlb": "#F93021", "prefix": "F93021", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_G2_NEG", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Negation on G2.", - "gas": "1584", - "fift": "BLS_G2_NEG", - "fift_examples": [], - "opcode": "F93022", - "stack": "x - -x" - }, - "bytecode": {"tlb": "#F93022", "prefix": "F93022", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_G2_MUL", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Multiplies G2 point `x` by scalar `s`. Any `s` is valid, including negative.", - "gas": "10584", - "fift": "BLS_G2_MUL", - "fift_examples": [], - "opcode": "F93023", - "stack": "x s - x*s" - }, - "bytecode": {"tlb": "#F93023", "prefix": "F93023", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "s", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_G2_MULTIEXP", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Calculates `x_1*s_1+...+x_n*s_n` for G2 points `x_i` and scalars `s_i`. Returns zero point if `n=0`. Any `s_i` is valid, including negative.", - "gas": "30422+n*1280+n/floor(max(log2(n),4))*22840", - "fift": "BLS_G2_MULTIEXP", - "fift_examples": [], - "opcode": "F93024", - "stack": "x_1 s_1 ... x_n s_n n - x_1*s_1+...+x_n*s_n" - }, - "bytecode": {"tlb": "#F93024", "prefix": "F93024", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "components", - "length_var": "n", - "array_entry": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "s", "value_types": ["Integer"]} - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_G2_ZERO", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Pushes zero point in G2.", - "gas": "34", - "fift": "BLS_G2_ZERO", - "fift_examples": [], - "opcode": "F93025", - "stack": "- zero" - }, - "bytecode": {"tlb": "#F93025", "prefix": "F93025", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "zero", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_MAP_TO_G2", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Converts FP2 element `f` to a G2 point.", - "gas": "7984", - "fift": "BLS_MAP_TO_G2", - "fift_examples": [], - "opcode": "F93026", - "stack": "f - x" - }, - "bytecode": {"tlb": "#F93026", "prefix": "F93026", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "f", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Slice"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_G2_INGROUP", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Checks that slice `x` represents a valid element of G2.", - "gas": "4284", - "fift": "BLS_G2_INGROUP", - "fift_examples": [], - "opcode": "F93027", - "stack": "x - bool" - }, - "bytecode": {"tlb": "#F93027", "prefix": "F93027", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_G2_ISZERO", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Checks that G2 point `x` is equal to zero.", - "gas": "34", - "fift": "BLS_G2_ISZERO", - "fift_examples": [], - "opcode": "F93028", - "stack": "x - bool" - }, - "bytecode": {"tlb": "#F93028", "prefix": "F93028", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "x", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_PAIRING", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Given G1 points `x_i` and G2 points `y_i`, calculates and multiply pairings of `x_i,y_i`. Returns true if the result is the multiplicative identity in FP12, false otherwise. Returns false if `n=0`.", - "gas": "20034+n*11800", - "fift": "BLS_PAIRING", - "fift_examples": [], - "opcode": "F93030", - "stack": "x_1 y_1 ... x_n y_n n - bool" - }, - "bytecode": {"tlb": "#F93030", "prefix": "F93030", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - { - "type": "array", - "name": "components", - "length_var": "n", - "array_entry": [ - {"type": "simple", "name": "x", "value_types": ["Slice"]}, - {"type": "simple", "name": "y", "value_types": ["Slice"]} - ] - }, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "BLS_PUSHR", - "since_version": 4, - "doc": { - "category": "app_crypto", - "description": "Pushes the order of G1 and G2 (approx. `2^255`).", - "gas": "34", - "fift": "BLS_PUSHR", - "fift_examples": [], - "opcode": "F93031", - "stack": "- r" - }, - "bytecode": {"tlb": "#F93031", "prefix": "F93031", "operands": []}, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": { - "stack": [{"type": "simple", "name": "result", "value_types": ["Integer"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CDATASIZEQ", - "since_version": 0, - "doc": { - "category": "app_misc", - "description": "Recursively computes the count of distinct cells `x`, data bits `y`, and cell references `z` in the dag rooted at _Cell_ `c`, effectively returning the total storage used by this dag taking into account the identification of equal cells. The values of `x`, `y`, and `z` are computed by a depth-first traversal of this dag, with a hash table of visited cell hashes used to prevent visits of already-visited cells. The total count of visited cells `x` cannot exceed non-negative _Integer_ `n`; otherwise the computation is aborted before visiting the `(n+1)`-st cell and a zero is returned to indicate failure. If `c` is _Null_, returns `x=y=z=0`.", - "gas": "", - "fift": "CDATASIZEQ", - "fift_examples": [], - "opcode": "F940", - "stack": "c n - x y z -1 or 0" - }, - "bytecode": {"tlb": "#F940", "prefix": "F940", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - { - "type": "simple", - "name": "y", - "value_types": ["Integer"] - }, - { - "type": "simple", - "name": "z", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CDATASIZE", - "since_version": 0, - "doc": { - "category": "app_misc", - "description": "A non-quiet version of `CDATASIZEQ` that throws a cell overflow exception (8) on failure.", - "gas": "", - "fift": "CDATASIZE", - "fift_examples": [], - "opcode": "F941", - "stack": "c n - x y z" - }, - "bytecode": {"tlb": "#F941", "prefix": "F941", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDATASIZEQ", - "since_version": 0, - "doc": { - "category": "app_misc", - "description": "Similar to `CDATASIZEQ`, but accepting a _Slice_ `s` instead of a _Cell_. The returned value of `x` does not take into account the cell that contains the slice `s` itself; however, the data bits and the cell references of `s` are accounted for in `y` and `z`.", - "gas": "", - "fift": "SDATASIZEQ", - "fift_examples": [], - "opcode": "F942", - "stack": "s n - x y z -1 or 0" - }, - "bytecode": {"tlb": "#F942", "prefix": "F942", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - { - "type": "simple", - "name": "y", - "value_types": ["Integer"] - }, - { - "type": "simple", - "name": "z", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SDATASIZE", - "since_version": 0, - "doc": { - "category": "app_misc", - "description": "A non-quiet version of `SDATASIZEQ` that throws a cell overflow exception (8) on failure.", - "gas": "", - "fift": "SDATASIZE", - "fift_examples": [], - "opcode": "F943", - "stack": "s n - x y z" - }, - "bytecode": {"tlb": "#F943", "prefix": "F943", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]}, - {"type": "simple", "name": "n", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]}, - {"type": "simple", "name": "z", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDGRAMS", - "since_version": 0, - "doc": { - "category": "app_currency", - "description": "Loads (deserializes) a `Gram` or `VarUInteger 16` amount from _Slice_ `s`, and returns the amount as _Integer_ `x` along with the remainder `s'` of `s`. The expected serialization of `x` consists of a 4-bit unsigned big-endian integer `l`, followed by an `8l`-bit unsigned big-endian representation of `x`.\nThe net effect is approximately equivalent to `4 LDU` `SWAP` `3 LSHIFT#` `LDUX`.", - "gas": "26", - "fift": "LDGRAMS\nLDVARUINT16", - "fift_examples": [], - "opcode": "FA00", - "stack": "s - x s'" - }, - "bytecode": {"tlb": "#FA00", "prefix": "FA00", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDVARINT16", - "since_version": 0, - "doc": { - "category": "app_currency", - "description": "Similar to `LDVARUINT16`, but loads a _signed_ _Integer_ `x`.\nApproximately equivalent to `4 LDU` `SWAP` `3 LSHIFT#` `LDIX`.", - "gas": "26", - "fift": "LDVARINT16", - "fift_examples": [], - "opcode": "FA01", - "stack": "s - x s'" - }, - "bytecode": {"tlb": "#FA01", "prefix": "FA01", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STGRAMS", - "since_version": 0, - "doc": { - "category": "app_currency", - "description": "Stores (serializes) an _Integer_ `x` in the range `0...2^120-1` into _Builder_ `b`, and returns the resulting _Builder_ `b'`. The serialization of `x` consists of a 4-bit unsigned big-endian integer `l`, which is the smallest integer `l>=0`, such that `x<2^(8l)`, followed by an `8l`-bit unsigned big-endian representation of `x`. If `x` does not belong to the supported range, a range check exception is thrown.", - "gas": "26", - "fift": "STGRAMS\nSTVARUINT16", - "fift_examples": [], - "opcode": "FA02", - "stack": "b x - b'" - }, - "bytecode": {"tlb": "#FA02", "prefix": "FA02", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STVARINT16", - "since_version": 0, - "doc": { - "category": "app_currency", - "description": "Similar to `STVARUINT16`, but serializes a _signed_ _Integer_ `x` in the range `-2^119...2^119-1`.", - "gas": "26", - "fift": "STVARINT16", - "fift_examples": [], - "opcode": "FA03", - "stack": "b x - b'" - }, - "bytecode": {"tlb": "#FA03", "prefix": "FA03", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDVARUINT32", - "since_version": 0, - "doc": { - "category": "app_currency", - "description": "Loads (deserializes) a `VarUInteger 32` amount from _Slice_ `s`, and returns the amount as _Integer_ `x` along with the remainder `s'` of `s`. The expected serialization of `x` consists of a 5-bit unsigned big-endian integer `l`, followed by an `8l`-bit unsigned big-endian representation of `x`.\nThe net effect is approximately equivalent to `4 LDU` `SWAP` `3 LSHIFT#` `LDUX`.", - "gas": "26", - "fift": "LDVARUINT32", - "fift_examples": [], - "opcode": "FA04", - "stack": "s - x s'" - }, - "bytecode": {"tlb": "#FA04", "prefix": "FA04", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDVARINT32", - "since_version": 0, - "doc": { - "category": "app_currency", - "description": "Similar to `LDVARUINT32`, but loads a _signed_ _Integer_ `x`.\nApproximately equivalent to `5 LDU` `SWAP` `3 LSHIFT#` `LDIX`.", - "gas": "26", - "fift": "LDVARINT32", - "fift_examples": [], - "opcode": "FA05", - "stack": "s - x s'" - }, - "bytecode": {"tlb": "#FA05", "prefix": "FA05", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STVARUINT32", - "since_version": 0, - "doc": { - "category": "app_currency", - "description": "Stores (serializes) an _Integer_ `x` in the range `0...2^248-1` into _Builder_ `b`, and returns the resulting _Builder_ `b'`. The serialization of `x` consists of a 5-bit unsigned big-endian integer `l`, which is the smallest integer `l>=0`, such that `x<2^(8l)`, followed by an `8l`-bit unsigned big-endian representation of `x`. If `x` does not belong to the supported range, a range check exception is thrown.", - "gas": "26", - "fift": "STVARUINT32", - "fift_examples": [], - "opcode": "FA06", - "stack": "b x - b'" - }, - "bytecode": {"tlb": "#FA06", "prefix": "FA06", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "STVARINT32", - "since_version": 0, - "doc": { - "category": "app_currency", - "description": "Similar to `STVARUINT32`, but serializes a _signed_ _Integer_ `x` in the range `-2^247...2^247-1`.", - "gas": "26", - "fift": "STVARINT32", - "fift_examples": [], - "opcode": "FA07", - "stack": "b x - b'" - }, - "bytecode": {"tlb": "#FA07", "prefix": "FA07", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "b", "value_types": ["Builder"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "b2", "value_types": ["Builder"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDMSGADDR", - "since_version": 0, - "doc": { - "category": "app_addr", - "description": "Loads from _Slice_ `s` the only prefix that is a valid `MsgAddress`, and returns both this prefix `s'` and the remainder `s''` of `s` as slices.", - "gas": "26", - "fift": "LDMSGADDR", - "fift_examples": [], - "opcode": "FA40", - "stack": "s - s' s''" - }, - "bytecode": {"tlb": "#FA40", "prefix": "FA40", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "s2", "value_types": ["Slice"]}, - {"type": "simple", "name": "s3", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "LDMSGADDRQ", - "since_version": 0, - "doc": { - "category": "app_addr", - "description": "A quiet version of `LDMSGADDR`: on success, pushes an extra `-1`; on failure, pushes the original `s` and a zero.", - "gas": "26", - "fift": "LDMSGADDRQ", - "fift_examples": [], - "opcode": "FA41", - "stack": "s - s' s'' -1 or s 0" - }, - "bytecode": {"tlb": "#FA41", "prefix": "FA41", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - {"type": "simple", "name": "s", "value_types": ["Slice"]} - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "s2", - "value_types": ["Slice"] - }, - {"type": "simple", "name": "s3", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PARSEMSGADDR", - "since_version": 0, - "doc": { - "category": "app_addr", - "description": "Decomposes _Slice_ `s` containing a valid `MsgAddress` into a _Tuple_ `t` with separate fields of this `MsgAddress`. If `s` is not a valid `MsgAddress`, a cell deserialization exception is thrown.", - "gas": "26", - "fift": "PARSEMSGADDR", - "fift_examples": [], - "opcode": "FA42", - "stack": "s - t" - }, - "bytecode": {"tlb": "#FA42", "prefix": "FA42", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [{"type": "simple", "name": "t", "value_types": ["Tuple"]}], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "PARSEMSGADDRQ", - "since_version": 0, - "doc": { - "category": "app_addr", - "description": "A quiet version of `PARSEMSGADDR`: returns a zero on error instead of throwing an exception.", - "gas": "26", - "fift": "PARSEMSGADDRQ", - "fift_examples": [], - "opcode": "FA43", - "stack": "s - t -1 or 0" - }, - "bytecode": {"tlb": "#FA43", "prefix": "FA43", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - {"type": "simple", "name": "t", "value_types": ["Tuple"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "REWRITESTDADDR", - "since_version": 0, - "doc": { - "category": "app_addr", - "description": "Parses _Slice_ `s` containing a valid `MsgAddressInt` (usually a `msg_addr_std`), applies rewriting from the `anycast` (if present) to the same-length prefix of the address, and returns both the workchain `x` and the 256-bit address `y` as integers. If the address is not 256-bit, or if `s` is not a valid serialization of `MsgAddressInt`, throws a cell deserialization exception.", - "gas": "26", - "fift": "REWRITESTDADDR", - "fift_examples": [], - "opcode": "FA44", - "stack": "s - x y" - }, - "bytecode": {"tlb": "#FA44", "prefix": "FA44", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "REWRITESTDADDRQ", - "since_version": 0, - "doc": { - "category": "app_addr", - "description": "A quiet version of primitive `REWRITESTDADDR`.", - "gas": "26", - "fift": "REWRITESTDADDRQ", - "fift_examples": [], - "opcode": "FA45", - "stack": "s - x y -1 or 0" - }, - "bytecode": {"tlb": "#FA45", "prefix": "FA45", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - { - "type": "simple", - "name": "y", - "value_types": ["Integer"] - } - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "REWRITEVARADDR", - "since_version": 0, - "doc": { - "category": "app_addr", - "description": "A variant of `REWRITESTDADDR` that returns the (rewritten) address as a _Slice_ `s`, even if it is not exactly 256 bit long (represented by a `msg_addr_var`).", - "gas": "26", - "fift": "REWRITEVARADDR", - "fift_examples": [], - "opcode": "FA46", - "stack": "s - x s'" - }, - "bytecode": {"tlb": "#FA46", "prefix": "FA46", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "s2", "value_types": ["Slice"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "REWRITEVARADDRQ", - "since_version": 0, - "doc": { - "category": "app_addr", - "description": "A quiet version of primitive `REWRITEVARADDR`.", - "gas": "26", - "fift": "REWRITEVARADDRQ", - "fift_examples": [], - "opcode": "FA47", - "stack": "s - x s' -1 or 0" - }, - "bytecode": {"tlb": "#FA47", "prefix": "FA47", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "s", "value_types": ["Slice"]}], - "registers": [] - }, - "outputs": { - "stack": [ - { - "type": "conditional", - "name": "status", - "match": [ - {"value": 0, "stack": []}, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - {"type": "simple", "name": "s'", "value_types": ["Slice"]} - ] - } - ] - }, - {"type": "simple", "name": "status", "value_types": ["Integer"]} - ], - "registers": [] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SENDRAWMSG", - "since_version": 0, - "doc": { - "category": "app_actions", - "description": "Sends a raw message contained in _Cell `c`_, which should contain a correctly serialized object `Message X`, with the only exception that the source address is allowed to have dummy value `addr_none` (to be automatically replaced with the current smart-contract address), and `ihr_fee`, `fwd_fee`, `created_lt` and `created_at` fields can have arbitrary values (to be rewritten with correct values during the action phase of the current transaction). Integer parameter `x` contains the flags. Currently `x=0` is used for ordinary messages; `x=128` is used for messages that are to carry all the remaining balance of the current smart contract (instead of the value originally indicated in the message); `x=64` is used for messages that carry all the remaining value of the inbound message in addition to the value initially indicated in the new message (if bit 0 is not set, the gas fees are deducted from this amount); `x'=x+1` means that the sender wants to pay transfer fees separately; `x'=x+2` means that any errors arising while processing this message during the action phase should be ignored. Finally, `x'=x+32` means that the current account must be destroyed if its resulting balance is zero. This flag is usually employed together with `+128`.", - "gas": "526", - "fift": "SENDRAWMSG", - "fift_examples": [], - "opcode": "FB00", - "stack": "c x - " - }, - "bytecode": {"tlb": "#FB00", "prefix": "FB00", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [{"type": "constant", "index": 5}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 5}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RAWRESERVE", - "since_version": 0, - "doc": { - "category": "app_actions", - "description": "Creates an output action which would reserve exactly `x` nanograms (if `y=0`), at most `x` nanograms (if `y=2`), or all but `x` nanograms (if `y=1` or `y=3`), from the remaining balance of the account. It is roughly equivalent to creating an outbound message carrying `x` nanograms (or `b-x` nanograms, where `b` is the remaining balance) to oneself, so that the subsequent output actions would not be able to spend more money than the remainder. Bit `+2` in `y` means that the external action does not fail if the specified amount cannot be reserved; instead, all remaining balance is reserved. Bit `+8` in `y` means `x:=-x` before performing any further actions. Bit `+4` in `y` means that `x` is increased by the original balance of the current account (before the compute phase), including all extra currencies, before performing any other checks and actions. Currently `x` must be a non-negative integer, and `y` must be in the range `0...15`.", - "gas": "526", - "fift": "RAWRESERVE", - "fift_examples": [], - "opcode": "FB02", - "stack": "x y - " - }, - "bytecode": {"tlb": "#FB02", "prefix": "FB02", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [{"type": "constant", "index": 5}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 5}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "RAWRESERVEX", - "since_version": 0, - "doc": { - "category": "app_actions", - "description": "Similar to `RAWRESERVE`, but also accepts a dictionary `D` (represented by a _Cell_ or _Null_) with extra currencies. In this way currencies other than Grams can be reserved.", - "gas": "526", - "fift": "RAWRESERVEX", - "fift_examples": [], - "opcode": "FB03", - "stack": "x D y - " - }, - "bytecode": {"tlb": "#FB03", "prefix": "FB03", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "x", "value_types": ["Integer"]}, - {"type": "simple", "name": "D", "value_types": ["Cell", "Null"]}, - {"type": "simple", "name": "y", "value_types": ["Integer"]} - ], - "registers": [{"type": "constant", "index": 5}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 5}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETCODE", - "since_version": 0, - "doc": { - "category": "app_actions", - "description": "Creates an output action that would change this smart contract code to that given by _Cell_ `c`. Notice that this change will take effect only after the successful termination of the current run of the smart contract.", - "gas": "526", - "fift": "SETCODE", - "fift_examples": [], - "opcode": "FB04", - "stack": "c - " - }, - "bytecode": {"tlb": "#FB04", "prefix": "FB04", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Cell"]}], - "registers": [{"type": "constant", "index": 5}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 5}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETLIBCODE", - "since_version": 0, - "doc": { - "category": "app_actions", - "description": "Creates an output action that would modify the collection of this smart contract libraries by adding or removing library with code given in _Cell_ `c`. If `x=0`, the library is actually removed if it was previously present in the collection (if not, this action does nothing). If `x=1`, the library is added as a private library, and if `x=2`, the library is added as a public library (and becomes available to all smart contracts if the current smart contract resides in the masterchain); if the library was present in the collection before, its public/private status is changed according to `x`. Values of `x` other than `0...2` are invalid.", - "gas": "526", - "fift": "SETLIBCODE", - "fift_examples": [], - "opcode": "FB06", - "stack": "c x - " - }, - "bytecode": {"tlb": "#FB06", "prefix": "FB06", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [{"type": "constant", "index": 5}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 5}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "CHANGELIB", - "since_version": 0, - "doc": { - "category": "app_actions", - "description": "Creates an output action similarly to `SETLIBCODE`, but instead of the library code accepts its hash as an unsigned 256-bit integer `h`. If `x!=0` and the library with hash `h` is absent from the library collection of this smart contract, this output action will fail.", - "gas": "526", - "fift": "CHANGELIB", - "fift_examples": [], - "opcode": "FB07", - "stack": "h x - " - }, - "bytecode": {"tlb": "#FB07", "prefix": "FB07", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "h", "value_types": ["Integer"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [{"type": "constant", "index": 5}] - }, - "outputs": { - "stack": [], - "registers": [{"type": "constant", "index": 5}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SENDMSG", - "since_version": 4, - "doc": { - "category": "app_actions", - "description": "Creates an output action and returns a fee for creating a message. Mode has the same effect as in the case of `SENDRAWMSG`. Additionally `+1024` means - do not create an action, only estimate fee. Other modes affect the fee calculation as follows: `+64` substitutes the entire balance of the incoming message as an outcoming value (slightly inaccurate, gas expenses that cannot be estimated before the computation is completed are not taken into account), `+128` substitutes the value of the entire balance of the contract before the start of the computation phase (slightly inaccurate, since gas expenses that cannot be estimated before the completion of the computation phase are not taken into account).", - "gas": "526", - "fift": "SENDMSG", - "fift_examples": [], - "opcode": "FB08", - "stack": "c x - fee" - }, - "bytecode": {"tlb": "#FB08", "prefix": "FB08", "operands": []}, - "value_flow": { - "inputs": { - "stack": [ - {"type": "simple", "name": "c", "value_types": ["Cell"]}, - {"type": "simple", "name": "x", "value_types": ["Integer"]} - ], - "registers": [{"type": "constant", "index": 5}] - }, - "outputs": { - "stack": [{"type": "simple", "name": "fee", "value_types": ["Integer"]}], - "registers": [{"type": "constant", "index": 5}] - } - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DEBUG", - "since_version": 0, - "doc": { - "category": "debug", - "description": "", - "gas": "26", - "fift": "{i*16+j} DEBUG", - "fift_examples": [], - "opcode": "FEij", - "stack": "-" - }, - "bytecode": { - "tlb": "#FE i:(#<= 14) j:(## 4)", - "prefix": "FE", - "operands_range_check": {"length": 4, "from": 0, "to": 14}, - "operands": [ - { - "name": "i", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 14, - "display_hints": [] - }, - { - "name": "j", - "type": "uint", - "size": 4, - "min_value": 0, - "max_value": 15, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "DEBUGSTR", - "since_version": 0, - "doc": { - "category": "debug", - "description": "`0 <= n < 16`. Length of `ssss` is `n+1` bytes.\n`{string}` is a [string literal](https://github.com/Piterden/TON-docs/blob/master/Fift.%20A%20Brief%20Introduction.md#user-content-29-string-literals).\n`DEBUGSTR`: `ssss` is the given string.\n`DEBUGSTRI`: `ssss` is one-byte integer `0 <= x <= 255` followed by the given string.", - "gas": "26", - "fift": "{string} DEBUGSTR\n{string} {x} DEBUGSTRI", - "fift_examples": [], - "opcode": "FEFnssss", - "stack": "-" - }, - "bytecode": { - "tlb": "#FEF n:(## 4) ssss:((n * 8 + 8) * Bit)", - "prefix": "FEF", - "operands": [ - { - "name": "s", - "type": "subslice", - "bits_length_var_size": 4, - "bits_padding": 8, - "completion_tag": false, - "max_bits": 128, - "min_bits": 8, - "max_refs": 0, - "min_refs": 0, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETCP", - "since_version": 0, - "doc": { - "category": "codepage", - "description": "Selects TVM codepage `0 <= nn < 240`. If the codepage is not supported, throws an invalid opcode exception.", - "gas": "26", - "fift": "[nn] SETCP", - "fift_examples": [], - "opcode": "FFnn", - "stack": "-" - }, - "bytecode": { - "tlb": "#FF nn:(#<= 239)", - "prefix": "FF", - "operands_range_check": {"length": 8, "from": 0, "to": 239}, - "operands": [ - { - "name": "n", - "type": "uint", - "size": 8, - "min_value": 0, - "max_value": 239, - "display_hints": [] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETCP_SPECIAL", - "since_version": 0, - "doc": { - "category": "codepage", - "description": "Selects TVM codepage `z-16` for `1 <= z <= 15`. Negative codepages `-13...-1` are reserved for restricted versions of TVM needed to validate runs of TVM in other codepages. Negative codepage `-14` is reserved for experimental codepages, not necessarily compatible between different TVM implementations, and should be disabled in the production versions of TVM.", - "gas": "26", - "fift": "[z-16] SETCP", - "fift_examples": [], - "opcode": "FFFz", - "stack": "-" - }, - "bytecode": { - "tlb": "#FFF z:(## 4) {1 <= z}", - "prefix": "FFF", - "operands_range_check": {"length": 4, "from": 1, "to": 15}, - "operands": [ - { - "name": "z", - "type": "uint", - "size": 4, - "min_value": 1, - "max_value": 15, - "display_hints": [{"type": "add", "value": -16}] - } - ] - }, - "value_flow": { - "inputs": {"stack": [], "registers": []}, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - }, - { - "mnemonic": "SETCPX", - "since_version": 0, - "doc": { - "category": "codepage", - "description": "Selects codepage `c` with `-2^15 <= c < 2^15` passed in the top of the stack.", - "gas": "26", - "fift": "SETCPX", - "fift_examples": [], - "opcode": "FFF0", - "stack": "c - " - }, - "bytecode": {"tlb": "#FFF0", "prefix": "FFF0", "operands": []}, - "value_flow": { - "inputs": { - "stack": [{"type": "simple", "name": "c", "value_types": ["Integer"]}], - "registers": [] - }, - "outputs": {"stack": [], "registers": []} - }, - "control_flow": {"branches": [], "nobranch": true} - } - ], - "aliases": [ - { - "mnemonic": "SWAP", - "alias_of": "XCHG_0I", - "doc_fift": "SWAP", - "doc_stack": "x y - y x", - "description": "Same as `s1 XCHG0`.", - "operands": {"i": 1} - }, - { - "mnemonic": "DUP", - "alias_of": "PUSH", - "doc_fift": "DUP", - "doc_stack": "x - x x", - "description": "Same as `s0 PUSH`.", - "operands": {"i": 0} - }, - { - "mnemonic": "OVER", - "alias_of": "PUSH", - "doc_fift": "OVER", - "doc_stack": "x y - x y x", - "description": "Same as `s1 PUSH`.", - "operands": {"i": 1} - }, - { - "mnemonic": "DROP", - "alias_of": "POP", - "doc_fift": "DROP", - "doc_stack": "x -", - "description": "Same as `s0 POP`, discards the top-of-stack value.", - "operands": {"i": 0} - }, - { - "mnemonic": "NIP", - "alias_of": "POP", - "doc_fift": "NIP", - "doc_stack": "x y - y", - "description": "Same as `s1 POP`.", - "operands": {"i": 1} - }, - { - "mnemonic": "ROT2", - "alias_of": "BLKSWAP", - "doc_fift": "ROT2\n2ROT", - "doc_stack": "a b c d e f - c d e f a b", - "description": "Rotates the three topmost pairs of stack entries.", - "operands": {"i": 1, "j": 3} - }, - { - "mnemonic": "ROLL", - "alias_of": "BLKSWAP", - "doc_fift": "[i+1] ROLL", - "doc_stack": "", - "description": "Rotates the top `i+1` stack entries.\nEquivalent to `1 [i+1] BLKSWAP`.", - "operands": {"i": 0} - }, - { - "mnemonic": "ROLLREV", - "alias_of": "BLKSWAP", - "doc_fift": "[i+1] -ROLL\n[i+1] ROLLREV", - "doc_stack": "", - "description": "Rotates the top `i+1` stack entries in the other direction.\nEquivalent to `[i+1] 1 BLKSWAP`.", - "operands": {"j": 0} - }, - { - "mnemonic": "NIL", - "alias_of": "TUPLE", - "doc_fift": "NIL", - "doc_stack": "- t", - "description": "Pushes the only _Tuple_ `t=()` of length zero.", - "operands": {"n": 0} - }, - { - "mnemonic": "SINGLE", - "alias_of": "TUPLE", - "doc_fift": "SINGLE", - "doc_stack": "x - t", - "description": "Creates a singleton `t:=(x)`, i.e., a _Tuple_ of length one.", - "operands": {"n": 1} - }, - { - "mnemonic": "PAIR", - "alias_of": "TUPLE", - "doc_fift": "PAIR\nCONS", - "doc_stack": "x y - t", - "description": "Creates pair `t:=(x,y)`.", - "operands": {"n": 2} - }, - { - "mnemonic": "TRIPLE", - "alias_of": "TUPLE", - "doc_fift": "TRIPLE", - "doc_stack": "x y z - t", - "description": "Creates triple `t:=(x,y,z)`.", - "operands": {"n": 3} - }, - { - "mnemonic": "FIRST", - "alias_of": "INDEX", - "doc_fift": "FIRST\nCAR", - "doc_stack": "t - x", - "description": "Returns the first element of a _Tuple_.", - "operands": {"k": 0} - }, - { - "mnemonic": "SECOND", - "alias_of": "INDEX", - "doc_fift": "SECOND\nCDR", - "doc_stack": "t - y", - "description": "Returns the second element of a _Tuple_.", - "operands": {"k": 1} - }, - { - "mnemonic": "THIRD", - "alias_of": "INDEX", - "doc_fift": "THIRD", - "doc_stack": "t - z", - "description": "Returns the third element of a _Tuple_.", - "operands": {"k": 2} - }, - { - "mnemonic": "UNSINGLE", - "alias_of": "UNTUPLE", - "doc_fift": "UNSINGLE", - "doc_stack": "t - x", - "description": "Unpacks a singleton `t=(x)`.", - "operands": {"n": 1} - }, - { - "mnemonic": "UNPAIR", - "alias_of": "UNTUPLE", - "doc_fift": "UNPAIR\nUNCONS", - "doc_stack": "t - x y", - "description": "Unpacks a pair `t=(x,y)`.", - "operands": {"n": 2} - }, - { - "mnemonic": "UNTRIPLE", - "alias_of": "UNTUPLE", - "doc_fift": "UNTRIPLE", - "doc_stack": "t - x y z", - "description": "Unpacks a triple `t=(x,y,z)`.", - "operands": {"n": 3} - }, - { - "mnemonic": "CHKTUPLE", - "alias_of": "UNPACKFIRST", - "doc_fift": "CHKTUPLE", - "doc_stack": "t -", - "description": "Checks whether `t` is a _Tuple_. If not, throws a type check exception.", - "operands": {"k": 0} - }, - { - "mnemonic": "SETFIRST", - "alias_of": "SETINDEX", - "doc_fift": "SETFIRST", - "doc_stack": "t x - t'", - "description": "Sets the first component of _Tuple_ `t` to `x` and returns the resulting _Tuple_ `t'`.", - "operands": {"k": 0} - }, - { - "mnemonic": "SETSECOND", - "alias_of": "SETINDEX", - "doc_fift": "SETSECOND", - "doc_stack": "t x - t'", - "description": "Sets the second component of _Tuple_ `t` to `x` and returns the resulting _Tuple_ `t'`.", - "operands": {"k": 1} - }, - { - "mnemonic": "SETTHIRD", - "alias_of": "SETINDEX", - "doc_fift": "SETTHIRD", - "doc_stack": "t x - t'", - "description": "Sets the third component of _Tuple_ `t` to `x` and returns the resulting _Tuple_ `t'`.", - "operands": {"k": 2} - }, - { - "mnemonic": "FIRSTQ", - "alias_of": "INDEXQ", - "doc_fift": "FIRSTQ\nCARQ", - "doc_stack": "t - x", - "description": "Returns the first element of a _Tuple_.", - "operands": {"k": 0} - }, - { - "mnemonic": "SECONDQ", - "alias_of": "INDEXQ", - "doc_fift": "SECONDQ\nCDRQ", - "doc_stack": "t - y", - "description": "Returns the second element of a _Tuple_.", - "operands": {"k": 1} - }, - { - "mnemonic": "THIRDQ", - "alias_of": "INDEXQ", - "doc_fift": "THIRDQ", - "doc_stack": "t - z", - "description": "Returns the third element of a _Tuple_.", - "operands": {"k": 2} - }, - { - "mnemonic": "SETFIRSTQ", - "alias_of": "SETINDEXQ", - "doc_fift": "SETFIRSTQ", - "doc_stack": "t x - t'", - "description": "Sets the first component of _Tuple_ `t` to `x` and returns the resulting _Tuple_ `t'`.", - "operands": {"k": 0} - }, - { - "mnemonic": "SETSECONDQ", - "alias_of": "SETINDEXQ", - "doc_fift": "SETSECONDQ", - "doc_stack": "t x - t'", - "description": "Sets the second component of _Tuple_ `t` to `x` and returns the resulting _Tuple_ `t'`.", - "operands": {"k": 1} - }, - { - "mnemonic": "SETTHIRDQ", - "alias_of": "SETINDEXQ", - "doc_fift": "SETTHIRDQ", - "doc_stack": "t x - t'", - "description": "Sets the third component of _Tuple_ `t` to `x` and returns the resulting _Tuple_ `t'`.", - "operands": {"k": 2} - }, - { - "mnemonic": "CADR", - "alias_of": "INDEX2", - "doc_fift": "CADR", - "doc_stack": "t - x", - "description": "Recovers `x=(t_2)_1`.", - "operands": {"i": 1, "j": 0} - }, - { - "mnemonic": "CDDR", - "alias_of": "INDEX2", - "doc_fift": "CDDR", - "doc_stack": "t - x", - "description": "Recovers `x=(t_2)_2`.", - "operands": {"i": 1, "j": 1} - }, - { - "mnemonic": "CADDR", - "alias_of": "INDEX3", - "doc_fift": "CADDR", - "doc_stack": "t - x", - "description": "Recovers `x=t_2_2_1`.", - "operands": {"i": 1, "j": 1, "k": 0} - }, - { - "mnemonic": "CDDDR", - "alias_of": "INDEX3", - "doc_fift": "CDDDR", - "doc_stack": "t - x", - "description": "Recovers `x=t_2_2_2`.", - "operands": {"i": 1, "j": 1, "k": 1} - }, - { - "mnemonic": "ZERO", - "alias_of": "PUSHINT_4", - "doc_fift": "ZERO\nFALSE", - "doc_stack": "- 0", - "description": "", - "operands": {"i": 0} - }, - { - "mnemonic": "ONE", - "alias_of": "PUSHINT_4", - "doc_fift": "ONE", - "doc_stack": "- 1", - "description": "", - "operands": {"i": 1} - }, - { - "mnemonic": "TWO", - "alias_of": "PUSHINT_4", - "doc_fift": "TWO", - "doc_stack": "- 2", - "description": "", - "operands": {"i": 2} - }, - { - "mnemonic": "TEN", - "alias_of": "PUSHINT_4", - "doc_fift": "TEN", - "doc_stack": "- 10", - "description": "", - "operands": {"i": 10} - }, - { - "mnemonic": "TRUE", - "alias_of": "PUSHINT_4", - "doc_fift": "TRUE", - "doc_stack": "- -1", - "description": "", - "operands": {"i": 15} - }, - { - "mnemonic": "CHKBOOL", - "alias_of": "FITS", - "doc_fift": "CHKBOOL", - "doc_stack": "x - x", - "description": "Checks whether `x` is a ''boolean value'' (i.e., either 0 or -1).", - "operands": {"c": 0} - }, - { - "mnemonic": "CHKBIT", - "alias_of": "UFITS", - "doc_fift": "CHKBIT", - "doc_stack": "x - x", - "description": "Checks whether `x` is a binary digit (i.e., zero or one).", - "operands": {"c": 0} - }, - { - "mnemonic": "ISZERO", - "alias_of": "EQINT", - "doc_fift": "ISZERO", - "doc_stack": "x - x=0", - "description": "Checks whether an integer is zero. Corresponds to Forth's `0=`.", - "operands": {"y": 0} - }, - { - "mnemonic": "ISNEG", - "alias_of": "LESSINT", - "doc_fift": "ISNEG", - "doc_stack": "x - x<0", - "description": "Checks whether an integer is negative. Corresponds to Forth's `0<`.", - "operands": {"y": 0} - }, - { - "mnemonic": "ISNPOS", - "alias_of": "LESSINT", - "doc_fift": "ISNPOS", - "doc_stack": "x - x<=0", - "description": "Checks whether an integer is non-positive.", - "operands": {"y": 1} - }, - { - "mnemonic": "ISPOS", - "alias_of": "GTINT", - "doc_fift": "ISPOS", - "doc_stack": "x - x>0", - "description": "Checks whether an integer is positive. Corresponds to Forth's `0>`.", - "operands": {"y": 0} - }, - { - "mnemonic": "ISNNEG", - "alias_of": "GTINT", - "doc_fift": "ISNNEG", - "doc_stack": "x - x >=0", - "description": "Checks whether an integer is non-negative.", - "operands": {"y": -1} - }, - { - "mnemonic": "STZERO", - "alias_of": "STSLICECONST", - "doc_fift": "STZERO", - "doc_stack": "b - b'", - "description": "Stores one binary zero.", - "operands": {"x": 0, "y": 0, "sss": "0"} - }, - { - "mnemonic": "STONE", - "alias_of": "STSLICECONST", - "doc_fift": "STONE", - "doc_stack": "b - b'", - "description": "Stores one binary one.", - "operands": {"x": 0, "y": 0, "sss": "1"} - }, - { - "mnemonic": "PLDREF", - "alias_of": "PLDREFIDX", - "doc_fift": "PLDREF", - "doc_stack": "s - c", - "description": "Preloads the first cell reference of a _Slice_.", - "operands": {"n": 0} - }, - { - "mnemonic": "SETNUMARGS", - "alias_of": "SETCONTARGS_N", - "doc_fift": "[n] SETNUMARGS", - "doc_stack": "c - c'", - "description": "Sets `c.nargs` to `n` plus the current depth of `c`'s stack, where `0 <= n <= 14`. If `c.nargs` is already set to a non-negative value, does nothing.", - "operands": {"r": 0} - }, - { - "mnemonic": "SETCONTARGS", - "alias_of": "SETCONTARGS_N", - "doc_fift": "[r] -1 SETCONTARGS", - "doc_stack": "x_1 x_2...x_r c - c'", - "description": "Pushes `0 <= r <= 15` values `x_1...x_r` into the stack of (a copy of) the continuation `c`, starting with `x_1`. If the final depth of `c`'s stack turns out to be greater than `c.nargs`, a stack overflow exception is generated.", - "operands": {"n": -1} - }, - { - "mnemonic": "BLESSNUMARGS", - "alias_of": "BLESSARGS", - "doc_fift": "[n] BLESSNUMARGS", - "doc_stack": "s - c", - "description": "Also transforms a _Slice_ `s` into a _Continuation_ `c`, but sets `c.nargs` to `0 <= n <= 14`.", - "operands": {"r": 0} - }, - { - "mnemonic": "PUSHROOT", - "alias_of": "PUSHCTR", - "doc_fift": "c4 PUSHCTR\nc4 PUSH", - "doc_stack": "- x", - "description": "Pushes the ''global data root'' cell reference, thus enabling access to persistent smart-contract data.", - "operands": {"i": 4} - }, - { - "mnemonic": "POPROOT", - "alias_of": "POPCTR", - "doc_fift": "c4 POPCTR\nc4 POP", - "doc_stack": "x -", - "description": "Sets the ''global data root'' cell reference, thus allowing modification of persistent smart-contract data.", - "operands": {"i": 4} - }, - { - "mnemonic": "NEWDICT", - "alias_of": "NULL", - "doc_fift": "NEWDICT", - "doc_stack": " - D", - "description": "Returns a new empty dictionary.\nIt is an alternative mnemonics for `PUSHNULL`.", - "operands": {} - }, - { - "mnemonic": "DICTEMPTY", - "alias_of": "ISNULL", - "doc_fift": "DICTEMPTY", - "doc_stack": "D - ?", - "description": "Checks whether dictionary `D` is empty, and returns `-1` or `0` accordingly.\nIt is an alternative mnemonics for `ISNULL`.", - "operands": {} - }, - { - "mnemonic": "STDICTS", - "alias_of": "STSLICE", - "doc_fift": "STDICTS\n", - "doc_stack": "s b - b'", - "description": "Stores a _Slice_-represented dictionary `s` into _Builder_ `b`.\nIt is actually a synonym for `STSLICE`.", - "operands": {} - }, - { - "mnemonic": "NOW", - "alias_of": "GETPARAM", - "doc_fift": "NOW", - "doc_stack": " - x", - "description": "Returns the current Unix time as an _Integer_. If it is impossible to recover the requested value starting from `c7`, throws a type checking or range checking exception as appropriate.\nEquivalent to `3 GETPARAM`.", - "operands": {"i": 3} - }, - { - "mnemonic": "BLOCKLT", - "alias_of": "GETPARAM", - "doc_fift": "BLOCKLT", - "doc_stack": " - x", - "description": "Returns the starting logical time of the current block.\nEquivalent to `4 GETPARAM`.", - "operands": {"i": 4} - }, - { - "mnemonic": "LTIME", - "alias_of": "GETPARAM", - "doc_fift": "LTIME", - "doc_stack": " - x", - "description": "Returns the logical time of the current transaction.\nEquivalent to `5 GETPARAM`.", - "operands": {"i": 5} - }, - { - "mnemonic": "RANDSEED", - "alias_of": "GETPARAM", - "doc_fift": "RANDSEED", - "doc_stack": " - x", - "description": "Returns the current random seed as an unsigned 256-bit _Integer_.\nEquivalent to `6 GETPARAM`.", - "operands": {"i": 6} - }, - { - "mnemonic": "BALANCE", - "alias_of": "GETPARAM", - "doc_fift": "BALANCE", - "doc_stack": " - t", - "description": "Returns the remaining balance of the smart contract as a _Tuple_ consisting of an _Integer_ (the remaining Gram balance in nanograms) and a _Maybe Cell_ (a dictionary with 32-bit keys representing the balance of ''extra currencies'').\nEquivalent to `7 GETPARAM`.\nNote that `RAW` primitives such as `SENDRAWMSG` do not update this field.", - "operands": {"i": 7} - }, - { - "mnemonic": "MYADDR", - "alias_of": "GETPARAM", - "doc_fift": "MYADDR", - "doc_stack": " - s", - "description": "Returns the internal address of the current smart contract as a _Slice_ with a `MsgAddressInt`. If necessary, it can be parsed further using primitives such as `PARSEMSGADDR` or `REWRITESTDADDR`.\nEquivalent to `8 GETPARAM`.", - "operands": {"i": 8} - }, - { - "mnemonic": "CONFIGROOT", - "alias_of": "GETPARAM", - "doc_fift": "CONFIGROOT", - "doc_stack": " - D", - "description": "Returns the _Maybe Cell_ `D` with the current global configuration dictionary. Equivalent to `9 GETPARAM `.", - "operands": {"i": 9} - }, - { - "mnemonic": "MYCODE", - "alias_of": "GETPARAM", - "doc_fift": "MYCODE", - "doc_stack": " - c", - "description": "Retrieves code of smart-contract from c7. Equivalent to `10 GETPARAM `.", - "operands": {"i": 10} - }, - { - "mnemonic": "INCOMINGVALUE", - "alias_of": "GETPARAM", - "doc_fift": "INCOMINGVALUE", - "doc_stack": " - t", - "description": "Retrieves value of incoming message from c7. Equivalent to `11 GETPARAM `.", - "operands": {"i": 11} - }, - { - "mnemonic": "STORAGEFEES", - "alias_of": "GETPARAM", - "doc_fift": "STORAGEFEES", - "doc_stack": " - i", - "description": "Retrieves value of storage phase fees from c7. Equivalent to `12 GETPARAM `.", - "operands": {"i": 12} - }, - { - "mnemonic": "PREVBLOCKSINFOTUPLE", - "alias_of": "GETPARAM", - "doc_fift": "PREVBLOCKSINFOTUPLE", - "doc_stack": " - t", - "description": "Retrives PrevBlocksInfo: `[last_mc_blocks, prev_key_block]` from c7. Equivalent to `13 GETPARAM `.", - "operands": {"i": 13} - }, - { - "mnemonic": "DUMPSTK", - "alias_of": "DEBUG", - "doc_fift": "DUMPSTK", - "doc_stack": "-", - "description": "Dumps the stack (at most the top 255 values) and shows the total stack depth. Does nothing on production versions of TVM.", - "operands": {"i": 0, "j": 0} - }, - { - "mnemonic": "STRDUMP", - "alias_of": "DEBUG", - "doc_fift": "STRDUMP", - "doc_stack": "-", - "description": "Dumps slice with length divisible by 8 from top of stack as a string. Does nothing on production versions of TVM.", - "operands": {"i": 0, "j": 0} - }, - { - "mnemonic": "DUMP", - "alias_of": "DEBUG", - "doc_fift": "s[j] DUMP", - "doc_stack": "-", - "description": "Dumps slice with length divisible by 8 from top of stack as a string. Does nothing on production versions of TVM.", - "operands": {"i": 2} - }, - { - "mnemonic": "SETCP0", - "alias_of": "SETCP", - "doc_fift": "SETCP0", - "doc_stack": "-", - "description": "Selects TVM (test) codepage zero as described in this document.", - "operands": {"n": 0} - } - ] -} diff --git a/server/src/languages/fift/asm/gas.ts b/server/src/languages/fift/asm/gas.ts index f4b3a469..2edb1ed6 100644 --- a/server/src/languages/fift/asm/gas.ts +++ b/server/src/languages/fift/asm/gas.ts @@ -1,14 +1,13 @@ // SPDX-License-Identifier: MIT // Copyright © 2025 TON Studio -import {getStackPresentation} from "./types" export function instructionPresentation( gas: string | undefined, - stack: string | undefined, + stack: string, format: string, ): string { if (!gas || gas === "") { return ": no data" } - return format.replace("{gas}", gas).replace("{stack}", getStackPresentation(stack)) + return format.replace("{gas}", gas).replace("{stack}", stack) } diff --git a/server/src/languages/fift/asm/schema.json b/server/src/languages/fift/asm/schema.json index 99e32a5c..7994547e 100644 --- a/server/src/languages/fift/asm/schema.json +++ b/server/src/languages/fift/asm/schema.json @@ -1,482 +1,816 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", - "additionalProperties": false, "definitions": { - "alias": { + "FiftArgument": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + } + ], + "description": "Argument for a Fift instruction" + }, + "GasConsumptionEntry": { "type": "object", - "additionalProperties": false, + "description": "Represents gas consumption for an instruction with value and description", + "properties": { + "value": { + "type": "number", + "description": "The gas consumption value" + }, + "description": { + "type": "string", + "description": "Description of the gas consumption" + }, + "formula": { + "type": "string", + "description": "Optional formula for dynamic gas calculation" + } + }, + "required": ["value", "description"], + "additionalProperties": false + }, + "ImplementationInfo": { + "type": "object", + "description": "Information about the C++ implementation of the instruction in TON repository", + "properties": { + "commit_hash": { + "type": "string", + "description": "Git commit hash of the TON repository" + }, + "file_path": { + "type": "string", + "description": "Path to the C++ file containing the implementation" + }, + "line_number": { + "type": "number", + "description": "Line number where the function is defined" + }, + "function_name": { + "type": "string", + "description": "Name of the C++ function implementing this instruction" + } + }, + "required": ["commit_hash", "file_path", "line_number", "function_name"], + "additionalProperties": false + }, + "DocsLink": { + "type": "object", + "description": "Represents a link to documentation with name and URL", + "properties": { + "name": { + "type": "string", + "description": "Display name for the documentation link" + }, + "url": { + "type": "string", + "description": "URL to the documentation" + } + }, + "required": ["name", "url"], + "additionalProperties": false + }, + "FiftInstruction": { + "type": "object", + "description": "Represents a Fift instruction with its actual TVM instruction name and arguments", "properties": { - "mnemonic": { + "name": { "type": "string", - "title": "Alias name", - "examples": ["ROT2", "ONE"] + "description": "The unique name of the Fift instruction" + }, + "actual_name": { + "type": "string", + "description": "The actual TVM instruction name" + }, + "arguments": { + "type": "array", + "description": "List of arguments for the instruction", + "items": { + "$ref": "#/definitions/FiftArgument" + } }, - "alias_of": { + "description": { "type": "string", - "title": "Mnemonic of aliased instruction", - "examples": ["BLKSWAP", "INDEX"] + "description": "Optional description of what the instruction does" + } + }, + "required": ["name", "actual_name"], + "additionalProperties": false + }, + "Instruction": { + "type": "object", + "description": "Represents a TVM instruction with its properties, layout, effects and signature", + "properties": { + "name": { + "type": "string", + "description": "The unique name of the instruction" }, - "doc_fift": { + "category": { "type": "string", - "title": "Fift usage doc", - "description": "Free-form fift usage description." + "description": "Main category of the instruction (e.g. stack_basic, cont_loops, dict_get)" }, - "doc_stack": { + "sub_category": { "type": "string", - "title": "Stack usage description", - "description": "Free-form description of stack inputs and outputs. Usually the form is `[inputs] - [outputs]` where `[inputs]` are consumed stack values and `outputs` are produced stack values (top of stack is the last value).", - "markdownDescription": "Free-form description of stack inputs and outputs. Usually the form is `[inputs] - [outputs]` where `[inputs]` are consumed stack values and `outputs` are produced stack values (top of stack is the last value)." + "description": "Sub-category for more specific grouping of instructions" }, "description": { + "$ref": "#/definitions/Description" + }, + "layout": { + "$ref": "#/definitions/Layout" + }, + "effects": { + "type": "array", + "description": "List of side effects that this instruction may have", + "items": { + "type": "string", + "description": "Description of a single side effect" + } + }, + "signature": { + "$ref": "#/definitions/InstructionSignature" + }, + "control_flow": { + "$ref": "#/definitions/ControlFlow" + }, + "implementation": { + "$ref": "#/definitions/ImplementationInfo" + } + }, + "required": ["name", "category", "sub_category", "description", "layout"], + "additionalProperties": false + }, + "Description": { + "type": "object", + "description": "Detailed description of an instruction including documentation, examples and related information", + "properties": { + "short": { "type": "string", - "title": "Alias description", - "description": "Free-form markdown description of alias." + "description": "Brief one-line description of the instruction" + }, + "long": { + "type": "string", + "description": "Detailed description of the instruction's functionality" }, "operands": { - "type": "object", - "title": "Fixed operands of alias", - "description": "Values of original instruction operands which are fixed in this alias. Currently it can be integer or slice without references which is represented by string of '0' and '1's. Type should be inferred from original instruction operand loaders.", - "markdownDescription": "Values of original instruction operands which are fixed in this alias. Currently it can be integer or slice without references which is represented by string of '0' and '1's. Type should be inferred from original instruction operand loaders.", - "examples": [ - { - "i": 1, - "j": 3 - } - ] + "type": "array", + "description": "List of operand names", + "items": { + "type": "string", + "description": "Name of a single operand" + } + }, + "tags": { + "type": "array", + "description": "List of tags for categorizing and searching instructions", + "items": { + "type": "string", + "description": "Single tag for the instruction" + } + }, + "exit_codes": { + "type": "array", + "description": "List of possible exit codes and their conditions", + "items": { + "$ref": "#/definitions/ExitCode" + } + }, + "other_implementations": { + "type": "array", + "description": "List of alternative implementations of this instruction", + "items": { + "$ref": "#/definitions/OtherImplementation" + } + }, + "related_instructions": { + "type": "array", + "description": "List of instructions that are related or similar to this one", + "items": { + "type": "string", + "description": "Name of a related instruction" + } + }, + "examples": { + "type": "array", + "description": "List of examples showing how to use this instruction", + "items": { + "$ref": "#/definitions/Example" + } + }, + "gas": { + "type": "array", + "description": "List of gas consumption entries for this instruction", + "items": { + "$ref": "#/definitions/GasConsumptionEntry" + } + }, + "docs_links": { + "type": "array", + "description": "List of documentation links related to this instruction", + "items": { + "$ref": "#/definitions/DocsLink" + } } }, - "required": ["mnemonic", "alias_of", "operands"] + "required": ["short", "long", "operands"], + "additionalProperties": false }, - "values": { + "ExitCode": { "type": "object", - "additionalProperties": false, - "required": ["registers"], + "description": "Represents an instruction exit code and its condition", "properties": { - "stack": { - "$ref": "#/definitions/stack" + "errno": { + "type": "string", + "description": "Exit code number" }, - "registers": { + "condition": { + "type": "string", + "description": "Condition that triggers this exit code" + } + }, + "required": ["errno", "condition"], + "additionalProperties": false + }, + "OtherImplementation": { + "type": "object", + "description": "Alternative implementation of an instruction using other instructions", + "properties": { + "exact": { + "type": "boolean", + "description": "Whether this implementation exactly matches the original instruction's behavior" + }, + "instructions": { "type": "array", - "title": "Register values", + "description": "List of instructions that implement the same functionality", "items": { - "$ref": "#/definitions/register_flow" - }, - "additionalItems": false + "type": "string", + "description": "Name of an instruction" + } } - } + }, + "required": ["exact", "instructions"], + "additionalProperties": false }, - "register_flow": { - "title": "Register", - "description": "Represents read/write access to a register", - "oneOf": [ - { - "type": "object", - "additionalProperties": false, - "required": ["type", "index"], - "properties": { - "type": {"const": "constant"}, - "index": {"type": "number"} + "Example": { + "type": "object", + "description": "Example of instruction usage with stack state and execution result", + "properties": { + "instructions": { + "type": "array", + "description": "List of instructions in this example", + "items": { + "$ref": "#/definitions/ExampleInstruction" } }, - { - "type": "object", - "additionalProperties": false, - "required": ["type", "var_name"], - "properties": { - "type": {"const": "variable"}, - "var_name": {"$ref": "#/definitions/var_name"} + "stack": { + "$ref": "#/definitions/ExampleStack" + }, + "exit_code": { + "type": "number", + "description": "Exit code of the example execution" + } + }, + "required": ["instructions", "stack"], + "additionalProperties": false + }, + "ExampleInstruction": { + "type": "object", + "description": "Single instruction in an example with optional comment and main flag", + "properties": { + "instruction": { + "type": "string", + "description": "Instruction text or mnemonic" + }, + "comment": { + "type": "string", + "description": "Optional comment explaining the instruction" + }, + "is_main": { + "type": "boolean", + "description": "Whether this is the main instruction being demonstrated" + } + }, + "required": ["instruction"], + "additionalProperties": false + }, + "ExampleStack": { + "type": "object", + "description": "Stack state before and after instruction execution", + "properties": { + "input": { + "type": "array", + "description": "Stack state before instruction execution", + "items": { + "type": "string", + "description": "Stack value representation" } }, - { - "type": "object", - "additionalProperties": false, - "required": ["type", "name"], - "properties": { - "type": {"const": "special"}, - "name": {"enum": ["gas", "cstate"]} + "output": { + "type": "array", + "description": "Stack state after instruction execution", + "items": { + "type": "string", + "description": "Stack value representation" } } - ] - }, - "stack": { - "type": "array", - "title": "Stack values", - "description": "Stack constraints. Top of stack is the last value.", - "items": { - "$ref": "#/definitions/stack_entry" }, - "additionalItems": false + "required": ["input", "output"], + "additionalProperties": false }, - "stack_entry": { - "title": "Stack entry", - "description": "Representation of stack entry or group of stack entries", - "examples": [ - { - "type": "simple", - "name": "i", - "value_types": ["Integer"] + "Layout": { + "type": "object", + "description": "Information about instruction's bytecode layout and execution", + "properties": { + "min": { + "type": "number", + "description": "Minimum value for instruction operand range" }, - { - "type": "conditional", - "name": "status", - "match": [ - { - "value": 0, - "stack": [ - { - "type": "simple", - "name": "s", - "value_types": ["Slice"] - } - ] - }, - { - "value": -1, - "stack": [ - { - "type": "simple", - "name": "x", - "value_types": ["Integer"] - }, - { - "type": "simple", - "name": "s2", - "value_types": ["Slice"] - } - ] - } - ] + "max": { + "type": "number", + "description": "Maximum value for instruction operand range" }, - { - "type": "simple", - "name": "D", - "value_types": ["Slice", "Null"] + "checkLen": { + "type": "number" + }, + "skipLen": { + "type": "number" + }, + "args": { + "$ref": "#/definitions/Args" + }, + "exec": { + "type": "string" + }, + "kind": { + "type": "string", + "description": "Type of instruction layout format", + "enum": ["ext", "ext-range", "fixed", "fixed-range", "simple"] + }, + "prefix": { + "type": "number", + "description": "Numeric value of instruction prefix" + }, + "prefix_str": { + "type": "string", + "description": "String representation of instruction prefix in hex" + }, + "tlb": { + "type": "string", + "description": "TLB schema of the instruction" + }, + "version": { + "type": "number" } + }, + "required": [ + "min", + "max", + "checkLen", + "skipLen", + "args", + "exec", + "kind", + "prefix", + "prefix_str", + "tlb" ], - "oneOf": [ + "additionalProperties": false + }, + "Args": { + "type": "object", + "description": "Arguments structure for instruction operands", + "properties": { + "$": { + "type": "string", + "description": "Type of arguments structure", + "enum": ["dictpush", "simpleArgs", "xchgArgs"] + }, + "children": { + "type": "array", + "description": "List of child argument structures", + "items": { + "$ref": "#/definitions/Child" + } + }, + "range": { + "$ref": "#/definitions/ArgRange" + } + }, + "required": ["$"], + "additionalProperties": false + }, + "Child": { + "type": "object", + "description": "Child argument structure with its properties", + "properties": { + "$": { + "type": "string", + "description": "Type identifier for the child argument" + }, + "len": { + "type": "number", + "description": "Length of the argument in bits" + }, + "range": { + "$ref": "#/definitions/ArgRange" + }, + "delta": { + "type": "number" + }, + "arg": { + "$ref": "#/definitions/Arg" + }, + "refs": { + "$ref": "#/definitions/Refs" + }, + "bits": { + "$ref": "#/definitions/Arg" + }, + "pad": { + "type": "number" + } + }, + "required": ["$"], + "additionalProperties": false + }, + "ArgRange": { + "type": "object", + "properties": { + "min": { + "type": "string" + }, + "max": { + "type": "string" + } + }, + "required": ["min", "max"], + "additionalProperties": false + }, + "Arg": { + "type": "object", + "properties": { + "$": { + "type": "string", + "enum": ["stack", "uint"] + }, + "len": { + "type": "number", + "description": "Length of the argument in bits" + }, + "range": { + "$ref": "#/definitions/ArgRange" + } + }, + "required": ["$", "len", "range"], + "additionalProperties": false + }, + "Refs": { + "type": "object", + "properties": { + "$": { + "type": "string" + }, + "count": { + "type": "number" + }, + "delta": { + "type": "number" + }, + "arg": { + "$ref": "#/definitions/Arg" + }, + "len": { + "type": "number" + }, + "range": { + "$ref": "#/definitions/ArgRange" + } + }, + "required": ["$"], + "additionalProperties": false + }, + "InstructionSignature": { + "type": "object", + "properties": { + "stack_string": { + "type": "string" + }, + "inputs": { + "$ref": "#/definitions/InstructionInputs" + }, + "outputs": { + "$ref": "#/definitions/InstructionOutputs" + } + }, + "additionalProperties": false, + "description": "Information related to usage of stack and registers by instruction. If omitted, exact signature is not available." + }, + "InstructionInputs": { + "type": "object", + "properties": { + "stack": { + "$ref": "#/definitions/StackValues" + }, + "registers": { + "$ref": "#/definitions/RegisterValues" + } + }, + "required": [], + "additionalProperties": false, + "description": "Incoming values constraints." + }, + "StackValues": { + "type": "array", + "items": { + "$ref": "#/definitions/StackEntry" + }, + "description": "Stack constraints. Top of stack is the last value." + }, + "StackEntry": { + "anyOf": [ { "type": "object", - "required": ["type", "name"], "properties": { "type": { + "type": "string", "const": "simple" }, - "name": {"$ref": "#/definitions/var_name"}, + "name": { + "$ref": "#/definitions/VariableName" + }, + "range": { + "$ref": "#/definitions/Range", + "description": "Optional range constraint for the value, specifying minimum and maximum allowed values" + }, + "presentation": { + "type": "string" + }, "value_types": { - "title": "Possible value types", + "$ref": "#/definitions/PossibleValueTypes" + }, + "mutations": { "type": "array", "items": { - "enum": [ - "Integer", - "Cell", - "Builder", - "Slice", - "Tuple", - "Continuation", - "Null" - ] + "$ref": "#/definitions/Mutation" } } }, + "required": ["type", "name"], "additionalProperties": false }, { "type": "object", - "additionalProperties": false, - "required": ["type", "value_type", "value"], "properties": { "type": { + "type": "string", "const": "const" }, "value_type": { - "title": "Constant type", - "type": "string", - "enum": ["Integer", "Null"] + "$ref": "#/definitions/ConstantType" }, "value": { - "title": "Constant value", - "type": ["number", "null"] + "$ref": "#/definitions/ConstantValue" } - } + }, + "required": ["type", "value_type", "value"], + "additionalProperties": false }, { "type": "object", - "additionalProperties": false, - "required": ["type", "name", "match"], "properties": { "type": { + "type": "string", "const": "conditional" }, - "name": {"$ref": "#/definitions/var_name", "title": "Variable to match"}, + "name": { + "$ref": "#/definitions/VariableName1" + }, "match": { "type": "array", - "additionalItems": false, "items": { - "type": "object", - "title": "Match arm", - "description": "", - "additionalProperties": false, - "required": ["value", "stack"], - "properties": { - "value": { - "type": "integer", - "title": "Arm value", - "description": "" - }, - "stack": { - "$ref": "#/definitions/stack" - } - } + "$ref": "#/definitions/MatchArm" } }, "else": { - "$ref": "#/definitions/stack" + "$ref": "#/definitions/StackValues" } - } + }, + "required": ["type", "name", "match"], + "additionalProperties": false }, { "type": "object", - "additionalProperties": false, - "required": ["type", "name", "length_var", "array_entry"], "properties": { "type": { + "type": "string", "const": "array" }, - "name": {"$ref": "#/definitions/var_name"}, + "name": { + "$ref": "#/definitions/VariableName" + }, "length_var": { - "title": "Variable which contains array length", - "$ref": "#/definitions/var_name" + "$ref": "#/definitions/VariableName2" }, "array_entry": { - "allOf": [{"$ref": "#/definitions/stack"}], - "title": "Array single entry definition", - "description": "Array is a structure like `x1 y1 z1 x2 y2 z2 ... x_n y_n z_n n` which contains `n` entries of `x_i y_i z_i`. This property defines the structure of a single entry." + "$ref": "#/definitions/ArraySingleEntryDefinition" } - } + }, + "required": ["type", "name", "length_var", "array_entry"], + "additionalProperties": false } - ] + ], + "description": "Representation of stack entry or group of stack entries" }, - "var_name": { + "VariableName": { "type": "string", - "title": "Variable name", - "description": "Allowed chars are `a-zA-Z0-9_`, must not begin with digit or underscore and must not end with underscore.", - "markdownDescription": "Allowed chars are `a-zA-Z0-9_`, must not begin with digit or underscore and must not end with underscore." + "description": "Allowed chars are `a-zA-Z0-9_`, must not begin with digit or underscore and must not end with underscore." }, - "display_hint": { - "title": "Display Hint", - "description": "Hint for converting operands between raw values and Asm.fif display format", - "oneOf": [ - { - "type": "object", - "additionalProperties": false, - "required": ["type"], - "properties": { - "type": {"const": "continuation"} - } - }, - { - "type": "object", - "additionalProperties": false, - "required": ["type", "size_var"], - "properties": { - "type": {"const": "dictionary"}, - "size_var": {"$ref": "#/definitions/var_name"} - } - }, - { - "type": "object", - "additionalProperties": false, - "required": ["type", "value"], - "properties": { - "type": {"const": "add"}, - "value": {"type": "number"} - } - }, - { - "type": "object", - "additionalProperties": false, - "required": ["type"], - "properties": { - "type": {"const": "stack"} - } + "PossibleValueTypes": { + "type": "array", + "items": { + "type": "string", + "enum": [ + "Int", + "Bool", + "Cell", + "Builder", + "Slice", + "Tuple", + "Continuation", + "Null", + "Any" + ] + } + }, + "Range": { + "type": "object", + "description": "Represents a numeric range with minimum and maximum values", + "properties": { + "min": { + "type": "number", + "description": "Minimum allowed value (inclusive)" }, - { + "max": { + "type": "number", + "description": "Maximum allowed value (inclusive)" + } + }, + "required": ["min", "max"], + "additionalProperties": false + }, + "Mutation": { + "type": "object", + "properties": { + "length": { "type": "object", - "additionalProperties": false, - "required": ["type"], "properties": { - "type": {"const": "register"} - } - }, + "amount_arg": { + "type": "number" + }, + "stack_amount_arg": { + "type": "number" + } + }, + "additionalProperties": false + } + }, + "required": ["length"], + "additionalProperties": false + }, + "ConstantType": { + "type": "string", + "enum": ["Int", "Null"] + }, + "ConstantValue": { + "anyOf": [ { - "type": "object", - "additionalProperties": false, - "required": ["type"], - "properties": { - "type": {"const": "pushint4"} - } + "type": "number" }, { - "type": "object", - "additionalProperties": false, - "required": ["type"], - "properties": { - "type": {"const": "optional_nargs"} - } + "type": "string" }, { - "type": "object", - "additionalProperties": false, - "required": ["type"], - "properties": { - "type": {"const": "plduz"} - } + "type": "null" } ] }, - "display_hints": { + "VariableName1": { + "type": "string", + "description": "Allowed chars are `a-zA-Z0-9_`, must not begin with digit or underscore and must not end with underscore." + }, + "MatchArm": { + "type": "object", + "properties": { + "value": { + "$ref": "#/definitions/ArmValue" + }, + "stack": { + "$ref": "#/definitions/StackValues" + } + }, + "required": ["value", "stack"], + "additionalProperties": false + }, + "ArmValue": { + "type": "number" + }, + "VariableName2": { + "type": "string", + "description": "Allowed chars are `a-zA-Z0-9_`, must not begin with digit or underscore and must not end with underscore." + }, + "ArraySingleEntryDefinition": { + "$ref": "#/definitions/StackValues", + "description": "Array is a structure like `x1 y1 z1 x2 y2 z2 ... x_n y_n z_n n` which contains `n` entries of `x_i y_i z_i`. This property defines the structure of a single entry." + }, + "RegisterValues": { "type": "array", - "additionalItems": false, - "title": "Display Hints", - "description": "Set of hints to convert between Asm.fif representation and raw bytecode", - "items": {"$ref": "#/definitions/display_hint"} - }, - "operand": { - "title": "Operand", - "description": "Static instruction parameter serialized to bytecode.", - "oneOf": [ + "items": { + "$ref": "#/definitions/Register" + } + }, + "Register": { + "anyOf": [ { "type": "object", - "additionalProperties": false, - "required": ["name", "type", "display_hints", "size", "max_value", "min_value"], "properties": { - "name": {"$ref": "#/definitions/var_name"}, - "type": {"const": "uint"}, - "display_hints": {"$ref": "#/definitions/display_hints"}, - "size": { - "type": "number", - "title": "Integer size, bits" - }, - "max_value": { - "type": "number", - "title": "Maximum integer value" - }, - "min_value": { - "type": "number", - "title": "Minimum integer value" + "type": { + "type": "string", + "const": "constant" + }, + "index": { + "type": "number" } - } + }, + "required": ["type", "index"], + "additionalProperties": false }, { "type": "object", - "additionalProperties": false, - "required": ["name", "type", "display_hints", "size", "max_value", "min_value"], "properties": { - "name": {"$ref": "#/definitions/var_name"}, - "type": {"const": "int"}, - "display_hints": {"$ref": "#/definitions/display_hints"}, - "size": { - "type": "number", - "title": "Integer size, bits" - }, - "max_value": { - "type": "number", - "title": "Maximum integer value" - }, - "min_value": { - "type": "number", - "title": "Minimum integer value" + "type": { + "type": "string", + "const": "variable" + }, + "var_name": { + "$ref": "#/definitions/VariableName" } - } - }, - { - "type": "object", - "additionalProperties": false, - "required": ["name", "type"], - "properties": { - "name": {"$ref": "#/definitions/var_name"}, - "type": {"const": "pushint_long"} - } - }, - { - "type": "object", - "additionalProperties": false, - "required": ["name", "type", "display_hints"], - "properties": { - "name": {"$ref": "#/definitions/var_name"}, - "type": {"const": "ref"}, - "display_hints": {"$ref": "#/definitions/display_hints"} - } + }, + "required": ["type", "var_name"], + "additionalProperties": false }, { "type": "object", - "additionalProperties": false, - "required": [ - "name", - "type", - "display_hints", - "bits_length_var_size", - "bits_padding", - "completion_tag", - "max_bits", - "min_bits", - "max_refs", - "min_refs" - ], "properties": { - "name": {"$ref": "#/definitions/var_name"}, - "type": {"const": "subslice"}, - "display_hints": {"$ref": "#/definitions/display_hints"}, - "bits_length_var_size": { - "type": "number", - "title": "Size of bit length operand" - }, - "bits_padding": { - "type": "number", - "title": "Constant integer value to add to length of bitstring to load." - }, - "refs_length_var_size": { - "type": "number", - "title": "Size of ref count operand", - "description": "Optional, no refs in this operand in case of absence." - }, - "refs_add": { - "type": "number", - "title": "Constant integer value to add to ref count", - "default": 0 - }, - "completion_tag": { - "type": "boolean", - "title": "Completion tag flag", - "description": "Determines completion tag presense: trailing `'1' + '0' * x` in bitstring", - "markdownDescription": "Determines completion tag presense: trailing `'1' + '0' * x` in bitstring" - }, - "max_bits": { - "type": "number", - "title": "Max bit size", - "description": "Hint for maximum bits available to store for this operand" - }, - "min_bits": { - "type": "number", - "title": "Min bit size", - "description": "Hint for minimum bits available to store for this operand" - }, - "max_refs": { - "type": "number", - "title": "Max ref size", - "description": "Hint for maximum refs available to store for this operand" - }, - "min_refs": { - "type": "number", - "title": "Min ref size", - "description": "Hint for minimum refs available to store for this operand" + "type": { + "type": "string", + "const": "special" + }, + "name": { + "type": "string", + "enum": ["gas", "cstate", "r"] } + }, + "required": ["type", "name"], + "additionalProperties": false + } + ], + "description": "Represents read/write access to a register" + }, + "InstructionOutputs": { + "type": "object", + "properties": { + "stack": { + "$ref": "#/definitions/StackValues" + }, + "registers": { + "$ref": "#/definitions/RegisterValues" + } + }, + "required": [], + "additionalProperties": false, + "description": "Outgoing values constraints." + }, + "ControlFlow": { + "type": "object", + "title": "Control flow of instruction", + "description": "Information related to current cc modification by instruction", + "additionalProperties": false, + "required": ["branches"], + "properties": { + "branches": { + "type": "array", + "title": "Possible branches of an instruction", + "description": "Array of current continuation possible values after current instruction execution", + "items": { + "$ref": "#/definitions/Continuation" } } - ] + } }, - "continuation": { + "Continuation": { "title": "Continuation", "description": "Description of a continuation with static savelist", "oneOf": [ @@ -485,8 +819,12 @@ "additionalProperties": false, "required": ["type"], "properties": { - "type": {"const": "cc"}, - "save": {"$ref": "#/definitions/savelist"} + "type": { + "const": "cc" + }, + "save": { + "$ref": "#/definitions/savelist" + } } }, { @@ -494,12 +832,16 @@ "additionalProperties": false, "required": ["type", "var_name"], "properties": { - "type": {"const": "variable"}, + "type": { + "const": "variable" + }, "var_name": { - "$ref": "#/definitions/var_name", + "$ref": "#/definitions/VariableName", "title": "Continuation variable name" }, - "save": {"$ref": "#/definitions/savelist"} + "save": { + "$ref": "#/definitions/savelist" + } } }, { @@ -507,9 +849,16 @@ "additionalProperties": false, "required": ["type", "index"], "properties": { - "type": {"const": "register"}, - "index": {"type": "integer", "title": "Register number (0-3)"}, - "save": {"$ref": "#/definitions/savelist"} + "type": { + "const": "register" + }, + "index": { + "type": "integer", + "title": "Register number (0-3)" + }, + "save": { + "$ref": "#/definitions/savelist" + } } }, { @@ -517,15 +866,23 @@ "additionalProperties": false, "required": ["type", "name", "args"], "properties": { - "type": {"const": "special"}, - "name": {"const": "until"}, + "type": { + "const": "special" + }, + "name": { + "const": "until" + }, "args": { "type": "object", "required": ["body", "after"], "additionalProperties": false, "properties": { - "body": {"$ref": "#/definitions/continuation"}, - "after": {"$ref": "#/definitions/continuation"} + "body": { + "$ref": "#/definitions/Continuation" + }, + "after": { + "$ref": "#/definitions/Continuation" + } } } } @@ -535,16 +892,26 @@ "additionalProperties": false, "required": ["type", "name", "args"], "properties": { - "type": {"const": "special"}, - "name": {"const": "while"}, + "type": { + "const": "special" + }, + "name": { + "const": "while" + }, "args": { "type": "object", "required": ["cond", "body", "after"], "additionalProperties": false, "properties": { - "cond": {"$ref": "#/definitions/continuation"}, - "body": {"$ref": "#/definitions/continuation"}, - "after": {"$ref": "#/definitions/continuation"} + "cond": { + "$ref": "#/definitions/Continuation" + }, + "body": { + "$ref": "#/definitions/Continuation" + }, + "after": { + "$ref": "#/definitions/Continuation" + } } } } @@ -554,14 +921,20 @@ "additionalProperties": false, "required": ["type", "name", "args"], "properties": { - "type": {"const": "special"}, - "name": {"const": "again"}, + "type": { + "const": "special" + }, + "name": { + "const": "again" + }, "args": { "type": "object", "required": ["body"], "additionalProperties": false, "properties": { - "body": {"$ref": "#/definitions/continuation"} + "body": { + "$ref": "#/definitions/Continuation" + } } } } @@ -571,19 +944,27 @@ "additionalProperties": false, "required": ["type", "name", "args"], "properties": { - "type": {"const": "special"}, - "name": {"const": "repeat"}, + "type": { + "const": "special" + }, + "name": { + "const": "repeat" + }, "args": { "type": "object", "required": ["count", "body", "after"], "additionalProperties": false, "properties": { "count": { - "$ref": "#/definitions/var_name", + "$ref": "#/definitions/VariableName", "title": "Variable name" }, - "body": {"$ref": "#/definitions/continuation"}, - "after": {"$ref": "#/definitions/continuation"} + "body": { + "$ref": "#/definitions/Continuation" + }, + "after": { + "$ref": "#/definitions/Continuation" + } } } } @@ -593,15 +974,24 @@ "additionalProperties": false, "required": ["type", "name", "args"], "properties": { - "type": {"const": "special"}, - "name": {"const": "pushint"}, + "type": { + "const": "special" + }, + "name": { + "const": "pushint" + }, "args": { "type": "object", "required": ["next", "value"], "additionalProperties": false, "properties": { - "value": {"type": "integer", "title": "Integer to push to stack"}, - "next": {"$ref": "#/definitions/continuation"} + "value": { + "type": "integer", + "title": "Integer to push to stack" + }, + "next": { + "$ref": "#/definitions/Continuation" + } } } } @@ -614,234 +1004,41 @@ "type": "object", "additionalProperties": false, "properties": { - "c0": {"$ref": "#/definitions/continuation"}, - "c1": {"$ref": "#/definitions/continuation"}, - "c2": {"$ref": "#/definitions/continuation"}, - "c3": {"$ref": "#/definitions/continuation"} - } - }, - "instruction": { - "type": "object", - "additionalProperties": false, - "properties": { - "mnemonic": { - "type": "string", - "title": "Instruction name", - "description": "How instruction is named in [original TVM implementation](https://github.com/ton-blockchain/ton/blob/master/crypto/vm). Not necessarily unique (currently only DEBUG is not unique).", - "markdownDescription": "How instruction is named in [original TVM implementation](https://github.com/ton-blockchain/ton/blob/master/crypto/vm). Not necessarily unique (currently only DEBUG is not unique).", - "examples": ["XCHG_0I", "PLDULE4"] - }, - "since_version": { - "type": "number", - "title": "Since global version", - "description": "Global version (ConfigParam 8) which enables this instruction. Version 9999 means that instruction has no global version and currently unavailable in mainnet." - }, - "doc": { - "type": "object", - "title": "Documentation", - "description": "Free-form human-friendly information which should be used for documentation purposes only.", - "additionalProperties": false, - "properties": { - "opcode": { - "type": "string", - "title": "Opcode format documentation", - "description": "Free-form bytecode format description.", - "examples": ["F2FF", "F3pr", "FEFnssss"] - }, - "stack": { - "type": "string", - "title": "Stack usage description", - "description": "Free-form description of stack inputs and outputs. Usually the form is `[inputs] - [outputs]` where `[inputs]` are consumed stack values and `outputs` are produced stack values (top of stack is the last value).", - "markdownDescription": "Free-form description of stack inputs and outputs. Usually the form is `[inputs] - [outputs]` where `[inputs]` are consumed stack values and `outputs` are produced stack values (top of stack is the last value)." - }, - "category": { - "type": "string", - "title": "Category of instruction", - "examples": ["cont_loops", "stack_basic", "dict_get"] - }, - "description": { - "type": "string", - "title": "Instruction description", - "description": "Free-form markdown description of instruction.", - "examples": [ - "Interchanges `s[i]` with `s[j]`, `1 <= i < j <= 15`.", - "Throws exception `0 <= n < 2^16` with parameter zero.\nApproximately equivalent to `ZERO` `SWAP` `THROWARGANY`." - ] - }, - "gas": { - "type": "string", - "title": "Gas usage info", - "description": "Free-form description of gas amount used by instruction.", - "examples": ["76", "26/76"] - }, - "fift": { - "type": "string", - "title": "Fift usage doc", - "description": "Free-form fift usage description.", - "examples": ["THROWARGANYIFNOT", "TRY"] - }, - "fift_examples": { - "type": "array", - "items": { - "type": "object", - "additionalProperties": false, - "required": ["fift", "description"], - "properties": { - "fift": { - "type": "string", - "title": "Fift snippet", - "examples": ["TRY:<{ code1 }>CATCH<{ code2 }>"] - }, - "description": { - "type": "string", - "title": "Example description", - "examples": [ - "Equivalent to `<{ code1 }> CONT` `<{ code2 }> CONT` `TRY`." - ] - } - } - } - } - }, - "required": ["category", "description", "gas", "fift", "fift_examples"] + "c0": { + "$ref": "#/definitions/Continuation" }, - "bytecode": { - "type": "object", - "title": "Bytecode Format", - "description": "Information related to bytecode format of an instruction. Assuming that each instruction has format `prefix || operand_1 || operand_2 || ...` (also some operands may be refs, not bitstring part).", - "markdownDescription": "Information related to bytecode format of an instruction. Assuming that each instruction has format `prefix || operand_1 || operand_2 || ...` (also some operands may be refs, not bitstring part).", - "additionalProperties": false, - "properties": { - "tlb": { - "type": "string", - "title": "TL-b schema", - "description": "TL-b bytecode format description.", - "examples": [ - "#FEF n:(## 4) ssss:((n * 8 + 8) * Bit)", - "#6FB i:uint2 j:uint2" - ] - }, - "prefix": { - "type": "string", - "title": "Instruction prefix", - "description": "Prefix to determine next instruction to parse. It is a hex bitstring as in TL-b (suffixed with `_` if bit length is not divisible by 4, trailing `'1' + '0' * x` must be removed).", - "markdownDescription": "Prefix to determine next instruction to parse. It is a hex bitstring as in TL-b (suffixed with `_` if bit length is not divisible by 4, trailing `'1' + '0' * x` must be removed).", - "examples": ["6FA7", "6FE_"] - }, - "operands_range_check": { - "type": "object", - "title": "Operands range check", - "description": "In TVM, it is possible for instructions to have overlapping prefixes, so to determine actual instruction it is required to read next `length` bits after prefix as uint `i` and check `from <= i <= to`. Optional, there is no operands check in case of absence.", - "markdownDescription": "In TVM, it is possible for instructions to have overlapping prefixes, so to determine actual instruction it is required to read next `length` bits after prefix as uint `i` and check `from <= i <= to`. Optional, there is no operands check in case of absence.", - "additionalProperties": false, - "properties": { - "length": { - "type": "integer" - }, - "from": { - "type": "integer" - }, - "to": { - "type": "integer" - } - }, - "required": ["length", "from", "to"], - "examples": [ - { - "length": 4, - "from": 1, - "to": 15 - }, - { - "length": 5, - "from": 0, - "to": 30 - } - ] - }, - "operands": { - "type": "array", - "title": "Instruction operands", - "description": "Describes how to parse operands. Order of objects in this array represents the actual order of operands in instruction.", - "default": [], - "additionalItems": false, - "items": {"$ref": "#/definitions/operand"} - } - }, - "required": ["prefix", "tlb", "operands"] + "c1": { + "$ref": "#/definitions/Continuation" }, - "value_flow": { - "type": "object", - "title": "Value flow of instruction", - "description": "Information related to usage of stack and registers by instruction.", - "additionalProperties": false, - "required": ["inputs", "outputs"], - "properties": { - "inputs": { - "$ref": "#/definitions/values", - "title": "Instruction inputs", - "description": "Incoming values constraints." - }, - "outputs": { - "$ref": "#/definitions/values", - "title": "Instruction outputs", - "description": "Outgoing values constraints." - } - } + "c2": { + "$ref": "#/definitions/Continuation" }, - "control_flow": { - "type": "object", - "title": "Control flow of instruction", - "description": "Information related to current cc modification by instruction", - "additionalProperties": false, - "required": ["branches", "nobranch"], - "properties": { - "branches": { - "type": "array", - "title": "Possible branches of an instruction", - "description": "Array of current continuation possible values after current instruction execution", - "items": {"$ref": "#/definitions/continuation"}, - "additionalItems": false - }, - "nobranch": { - "type": "boolean", - "title": "No branch possibility", - "description": "Can this instruction not perform any of specified branches in certain cases (do not modify cc)?" - } - } + "c3": { + "$ref": "#/definitions/Continuation" } - }, - "required": [ - "mnemonic", - "doc", - "bytecode", - "value_flow", - "control_flow", - "since_version" - ] + } } }, "properties": { "$schema": { "type": "string" }, + "version": { + "type": "string" + }, "instructions": { - "name": "Instructions", - "description": "Instruction list.", "type": "array", - "additionalItems": false, "items": { - "$ref": "#/definitions/instruction" + "$ref": "#/definitions/Instruction" } }, - "aliases": { + "fift_instructions": { "type": "array", - "title": "Aliases", - "description": "Aliases list.", "items": { - "$ref": "#/definitions/alias" + "$ref": "#/definitions/FiftInstruction" } } }, - "required": ["instructions", "aliases"] + "additionalProperties": false, + "required": ["$schema", "version", "instructions", "fift_instructions"] } diff --git a/server/src/languages/fift/asm/specification-schema.ts b/server/src/languages/fift/asm/specification-schema.ts new file mode 100644 index 00000000..ef409406 --- /dev/null +++ b/server/src/languages/fift/asm/specification-schema.ts @@ -0,0 +1,142 @@ +import type {InstructionSignature, Continuation} from "./stack-signatures-schema" + +export interface Specification { + readonly $schema: string + readonly version: string + readonly instructions: readonly Instruction[] + readonly fift_instructions: readonly FiftInstruction[] +} + +export type FiftArgument = number | string + +export interface FiftInstruction { + readonly name: string + readonly actual_name: string + readonly arguments: readonly FiftArgument[] + readonly description?: string +} + +export interface ImplementationInfo { + readonly commit_hash: string + readonly file_path: string + readonly line_number: number + readonly function_name: string +} + +export interface Instruction { + readonly name: string + readonly category: string + readonly sub_category: string + readonly description: Description + readonly layout: Layout + readonly effects?: readonly string[] + readonly signature?: InstructionSignature + readonly control_flow?: ControlFlowOfInstruction + readonly implementation?: ImplementationInfo +} + +export interface ExitCode { + readonly errno: string + readonly condition: string +} + +export interface OtherImplementation { + readonly exact: boolean + readonly instructions: readonly string[] +} + +export interface ExampleInstruction { + readonly instruction: string + readonly comment?: string + readonly is_main?: boolean +} + +export interface ExampleStack { + readonly input: readonly string[] + readonly output: readonly string[] +} + +export interface Example { + readonly instructions: readonly ExampleInstruction[] + readonly stack: ExampleStack + readonly exit_code?: number +} + +export interface GasConsumptionEntry { + readonly value: number + readonly description: string + readonly formula?: string +} + +export interface DocsLink { + readonly name: string + readonly url: string +} + +export interface Description { + readonly short: string + readonly long: string + readonly tags: readonly string[] + readonly operands: readonly string[] + readonly exit_codes?: readonly ExitCode[] + readonly other_implementations?: readonly OtherImplementation[] + readonly related_instructions?: readonly string[] + readonly examples?: readonly Example[] + readonly gas?: readonly GasConsumptionEntry[] + readonly docs_links?: readonly DocsLink[] +} + +export interface Layout { + readonly min: number + readonly max: number + readonly checkLen: number + readonly skipLen: number + readonly args: Args + readonly exec: string + readonly kind: "ext" | "ext-range" | "fixed" | "fixed-range" | "simple" + readonly prefix: number + readonly prefix_str: string + readonly tlb: string + readonly version?: number +} + +export interface Args { + readonly $: "dictpush" | "simpleArgs" | "xchgArgs" + readonly children?: readonly Child[] + readonly range?: ArgRange +} + +export interface Child { + readonly $: string + readonly len?: number + readonly range?: ArgRange + readonly delta?: number + readonly arg?: Arg + readonly refs?: Refs + readonly bits?: Arg + readonly pad?: number +} + +export interface Arg { + readonly $: "stack" | "uint" + readonly len: number + readonly range: ArgRange +} + +export interface ArgRange { + readonly min: string + readonly max: string +} + +export interface Refs { + readonly $: string + readonly count?: number + readonly delta?: number + readonly arg?: Arg + readonly len?: number + readonly range?: ArgRange +} + +export interface ControlFlowOfInstruction { + readonly branches: Continuation[] +} diff --git a/server/src/languages/fift/asm/stack-signatures-schema.ts b/server/src/languages/fift/asm/stack-signatures-schema.ts new file mode 100644 index 00000000..d459409c --- /dev/null +++ b/server/src/languages/fift/asm/stack-signatures-schema.ts @@ -0,0 +1,202 @@ +/** + * Allowed chars are `a-zA-Z0-9_`, must not begin with digit or underscore and must not end with underscore. + */ +export type VariableName = string + +export interface PossibleValueRange { + readonly min: number + readonly max: number +} +/** + * Representation of stack entry or group of stack entries + */ +export type StackEntry = + | { + readonly type: "simple" + readonly name: VariableName + readonly range?: PossibleValueRange + readonly presentation: string + readonly value_types?: PossibleValueTypes + readonly mutations?: Mutation[] + } + | { + readonly type: "const" + readonly value_type: ConstantType + readonly value: ConstantValue + } + | { + readonly type: "conditional" + readonly name: VariableName1 + readonly match: MatchArm[] + readonly else?: StackValues + } + | { + readonly type: "array" + readonly name: VariableName + readonly length_var: VariableName2 + readonly array_entry: ArraySingleEntryDefinition + } +export type PossibleValueTypes = readonly ( + | "Int" + | "Bool" + | "Cell" + | "Builder" + | "Slice" + | "Tuple" + | "Continuation" + | "Null" +)[] +export type ConstantType = "Int" | "Null" +export type ConstantValue = number | null | "NaN" +/** + * Allowed chars are `a-zA-Z0-9_`, must not begin with digit or underscore and must not end with underscore. + */ +export type VariableName1 = string +export type ArmValue = number +/** + * Allowed chars are `a-zA-Z0-9_`, must not begin with digit or underscore and must not end with underscore. + */ +export type VariableName2 = string +/** + * Array is a structure like `x1 y1 z1 x2 y2 z2 ... x_n y_n z_n n` which contains `n` entries of `x_i y_i z_i`. This property defines the structure of a single entry. + */ +export type ArraySingleEntryDefinition = StackValues +/** + * Stack constraints. Top of stack is the last value. + */ +export type StackValues = readonly StackEntry[] +/** + * Represents read/write access to a register + */ +export type Register = + | { + readonly type: "constant" + readonly index: number + } + | { + readonly type: "variable" + readonly var_name: VariableName + } + | { + readonly type: "special" + readonly name: "gas" | "cstate" | "r" + } +export type RegisterValues = readonly Register[] +/** + * Description of a continuation with static savelist + */ +export type Continuation = + | { + readonly type: "cc" + readonly save?: ContinuationSavelist + } + | { + readonly type: "variable" + readonly var_name: VariableName3 + readonly save?: ContinuationSavelist + } + | { + readonly type: "register" + readonly index: RegisterNumber03 + readonly save?: ContinuationSavelist + } + | { + readonly type: "special" + readonly name: "until" + readonly args: { + readonly body: Continuation + readonly after: Continuation + } + } + | { + readonly type: "special" + readonly name: "while" + readonly args: { + readonly cond: Continuation + readonly body: Continuation + readonly after: Continuation + } + } + | { + readonly type: "special" + readonly name: "again" + readonly args: { + readonly body: Continuation + } + } + | { + readonly type: "special" + readonly name: "repeat" + readonly args: { + readonly count: VariableName4 + readonly body: Continuation + readonly after: Continuation + } + } + | { + readonly type: "special" + readonly name: "pushint" + readonly args: { + readonly value: IntegerToPushToStack + readonly next: Continuation + } + } +/** + * Allowed chars are `a-zA-Z0-9_`, must not begin with digit or underscore and must not end with underscore. + */ +export type VariableName3 = string +export type RegisterNumber03 = number +/** + * Allowed chars are `a-zA-Z0-9_`, must not begin with digit or underscore and must not end with underscore. + */ +export type VariableName4 = string +export type IntegerToPushToStack = number + +export interface Mutation { + readonly length: { + readonly amount_arg?: number + readonly stack_amount_arg?: number + } +} + +export type Schema = Record + +/** + * Information related to usage of stack and registers by instruction. + */ +export interface InstructionSignature { + readonly stack_string?: string + readonly inputs?: InstructionInputs + readonly outputs?: InstructionOutputs +} + +/** + * Incoming values constraints. + */ +export interface InstructionInputs { + readonly stack?: StackValues + readonly registers: RegisterValues +} + +export interface MatchArm { + readonly value: ArmValue + readonly stack: StackValues +} + +/** + * Outgoing values constraints. + */ +export interface InstructionOutputs { + readonly stack?: StackValues + readonly registers: RegisterValues +} + +/** + * Values of saved control flow registers c0-c3 + */ +export interface ContinuationSavelist { + readonly c0?: Continuation + readonly c1?: Continuation + readonly c2?: Continuation + readonly c3?: Continuation +} diff --git a/server/src/languages/fift/asm/tvm-specification.json b/server/src/languages/fift/asm/tvm-specification.json new file mode 100644 index 00000000..1f368354 --- /dev/null +++ b/server/src/languages/fift/asm/tvm-specification.json @@ -0,0 +1,71512 @@ +{ + "$schema": "./schema.json", + "version": "0.0.4", + "instructions": [ + { + "name": "PUSHNAN", + "category": "arithmetic", + "sub_category": "int_const", + "description": { + "short": "", + "long": "Pushes a `NaN`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 8650496, + "max": 8650752, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_push_nan", + "kind": "simple", + "prefix": 33791, + "prefix_str": "83FF", + "tlb": "#83ff" + }, + "signature": { + "stack_string": "∅ -> NaN", + "outputs": { + "stack": [ + { + "type": "const", + "value_type": "Int", + "value": "NaN" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 120, + "function_name": "exec_push_nan" + } + }, + { + "name": "ADD", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "Adds two integers and pushes the result back onto the stack.", + "long": "Pops two integers from the stack, adds them and pushes the result back onto the stack.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "7", + "condition": "Top or second element is not an Int." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 10485760, + "max": 10551296, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_add(_1, false)", + "kind": "simple", + "prefix": 160, + "prefix_str": "A0", + "tlb": "#a0" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x + y", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 162, + "function_name": "exec_add" + } + }, + { + "name": "SUB", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "Subtracts two integers and pushes the result back onto the stack.", + "long": "Pops two integers from the stack, subtracts the second one from the first one and pushes the result back onto the stack.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "7", + "condition": "Top or second element is not an Int." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 10551296, + "max": 10616832, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_sub(_1, false)", + "kind": "simple", + "prefix": 161, + "prefix_str": "A1", + "tlb": "#a1" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x - y", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 171, + "function_name": "exec_sub" + } + }, + { + "name": "SUBR", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "Subtracts two integers in reverse order and pushes the result back onto the stack.", + "long": "Pops two integers from the stack, subtracts the first one from the second one and pushes the result back onto the stack.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "7", + "condition": "Top or second element is not an Int." + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["SWAP", "SUB"] + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 10616832, + "max": 10682368, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_subr(_1, false)", + "kind": "simple", + "prefix": 162, + "prefix_str": "A2", + "tlb": "#a2" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "y - x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 180, + "function_name": "exec_subr" + } + }, + { + "name": "NEGATE", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "Negates an integer and pushes the result back onto the stack.", + "long": "Pops an integer from the stack, negates it and pushes the result back onto the stack.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + }, + { + "errno": "4", + "condition": "Integer overflow if `x = -2^256`." + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["MULINT -1", "NEGATE"] + }, + { + "exact": true, + "instructions": ["PUSHINT_4 0", "SUBR"] + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 10682368, + "max": 10747904, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_negate(_1, false)", + "kind": "simple", + "prefix": 163, + "prefix_str": "A3", + "tlb": "#a3" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "-x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 189, + "function_name": "exec_negate" + } + }, + { + "name": "INC", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "Increments an integer and pushes the result back onto the stack.", + "long": "Pops an integer from the stack, increments it by 1 and pushes the result back onto the stack.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 10747904, + "max": 10813440, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_inc(_1, false)", + "kind": "simple", + "prefix": 164, + "prefix_str": "A4", + "tlb": "#a4" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x + 1", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 197, + "function_name": "exec_inc" + } + }, + { + "name": "DEC", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "Decrements an integer and pushes the result back onto the stack.", + "long": "Pops an integer from the stack, decrements it by 1 and pushes the result back onto the stack.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 10813440, + "max": 10878976, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_dec(_1, false)", + "kind": "simple", + "prefix": 165, + "prefix_str": "A5", + "tlb": "#a5" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x - 1", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 205, + "function_name": "exec_dec" + } + }, + { + "name": "MUL", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "Multiplies two integers and pushes the result back onto the stack.", + "long": "Pops two integers from the stack, multiplies them and pushes the result back onto the stack.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "7", + "condition": "Top or second element is not an Int." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11010048, + "max": 11075584, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_mul(_1, false)", + "kind": "simple", + "prefix": 168, + "prefix_str": "A8", + "tlb": "#a8" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x * y", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 231, + "function_name": "exec_mul" + } + }, + { + "name": "POW2", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "Raises 2 to the power of `x` and pushes the result back onto the stack.", + "long": "Pops an integer from the stack, raises 2 to the power of it and pushes the result back onto the stack.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHINT_4 1", "SWAP", "LSHIFT_VAR"] + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11403264, + "max": 11468800, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_pow2(_1, false)", + "kind": "simple", + "prefix": 174, + "prefix_str": "AE", + "tlb": "#ae" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "range": { + "min": 0, + "max": 1023 + }, + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 758, + "function_name": "exec_pow2" + } + }, + { + "name": "AND", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "Bitwise AND of two signed integers `x` and `y`, sign-extended to infinity and pushes the result back onto the stack.", + "long": "Pops two signed integers from the stack, performs a bitwise AND operation on them and pushes the result back onto the stack.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "7", + "condition": "Top or second element is not an Int." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11534336, + "max": 11599872, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_and(_1, false)", + "kind": "simple", + "prefix": 176, + "prefix_str": "B0", + "tlb": "#b0" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 769, + "function_name": "exec_and" + } + }, + { + "name": "OR", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "Bitwise OR of two signed integers `x` and `y`, sign-extended to infinity and pushes the result back onto the stack.", + "long": "Pops two signed integers from the stack, performs a bitwise OR operation on them and pushes the result back onto the stack.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "7", + "condition": "Top or second element is not an Int." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11599872, + "max": 11665408, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_or(_1, false)", + "kind": "simple", + "prefix": 177, + "prefix_str": "B1", + "tlb": "#b1" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 778, + "function_name": "exec_or" + } + }, + { + "name": "XOR", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "Bitwise XOR of two signed integers `x` and `y`, sign-extended to infinity and pushes the result back onto the stack.", + "long": "Pops two signed integers from the stack, performs a bitwise XOR operation on them and pushes the result back onto the stack.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "7", + "condition": "Top or second element is not an Int." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11665408, + "max": 11730944, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_xor(_1, false)", + "kind": "simple", + "prefix": 178, + "prefix_str": "B2", + "tlb": "#b2" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 787, + "function_name": "exec_xor" + } + }, + { + "name": "NOT", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "Bitwise NOT of an integer, sign-extended to infinity and pushes the result back onto the stack.", + "long": "Pops an integer from the stack, performs a bitwise NOT operation on it and pushes the result back onto the stack.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11730944, + "max": 11796480, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_not(_1, false)", + "kind": "simple", + "prefix": 179, + "prefix_str": "B3", + "tlb": "#b3" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 796, + "function_name": "exec_not" + } + }, + { + "name": "FITSX", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "", + "long": "Checks whether `x` is a `width`-bit signed integer.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "If no exception was thrown" + }, + { + "value": 76, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 11927552, + "max": 11927808, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_fits(_1, false)", + "kind": "simple", + "prefix": 46592, + "prefix_str": "B600", + "tlb": "#b600" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "x:Int width:Int -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 830, + "function_name": "exec_fits" + } + }, + { + "name": "UFITSX", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "", + "long": "Checks whether `x` is a `width`-bit unsigned integer.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "If no exception was thrown" + }, + { + "value": 76, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 11927808, + "max": 11928064, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_ufits(_1, false)", + "kind": "simple", + "prefix": 46593, + "prefix_str": "B601", + "tlb": "#b601" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "x:Int width:Int -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 843, + "function_name": "exec_ufits" + } + }, + { + "name": "BITSIZE", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "", + "long": "Computes smallest `width >= 0` such that `x` fits into a `width`-bit signed integer (`-2^(width-1) <= x < 2^(width-1)`).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11928064, + "max": 11928320, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_bitsize(_1, true, false)", + "kind": "simple", + "prefix": 46594, + "prefix_str": "B602", + "tlb": "#b602" + }, + "signature": { + "stack_string": "x:Int -> width:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "width", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 856, + "function_name": "exec_bitsize" + } + }, + { + "name": "UBITSIZE", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "", + "long": "Computes smallest `width >= 0` such that `x` fits into a `width`-bit unsigned integer (`0 <= x < 2^width`), or throws a range check exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11928320, + "max": 11928576, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_bitsize(_1, false, false)", + "kind": "simple", + "prefix": 46595, + "prefix_str": "B603", + "tlb": "#b603" + }, + "signature": { + "stack_string": "x:Int -> width:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "width", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 856, + "function_name": "exec_bitsize" + } + }, + { + "name": "MIN", + "category": "arithmetic", + "sub_category": "other_arith", + "description": { + "short": "", + "long": "Computes the minimum of two integers `x` and `y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11929600, + "max": 11929856, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_minmax(_1, 2)", + "kind": "simple", + "prefix": 46600, + "prefix_str": "B608", + "tlb": "#b608" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 914, + "function_name": "exec_minmax" + } + }, + { + "name": "MAX", + "category": "arithmetic", + "sub_category": "other_arith", + "description": { + "short": "", + "long": "Computes the maximum of two integers `x` and `y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11929856, + "max": 11930112, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_minmax(_1, 4)", + "kind": "simple", + "prefix": 46601, + "prefix_str": "B609", + "tlb": "#b609" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 914, + "function_name": "exec_minmax" + } + }, + { + "name": "MINMAX", + "category": "arithmetic", + "sub_category": "other_arith", + "description": { + "short": "", + "long": "Sorts two integers.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11930112, + "max": 11930368, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_minmax(_1, 6)", + "kind": "simple", + "prefix": 46602, + "prefix_str": "B60A", + "tlb": "#b60a" + }, + "signature": { + "stack_string": "x:Int y:Int -> r1:Int r2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "r1", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 914, + "function_name": "exec_minmax" + } + }, + { + "name": "ABS", + "category": "arithmetic", + "sub_category": "other_arith", + "description": { + "short": "", + "long": "Computes the absolute value of an integer `x`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11930368, + "max": 11930624, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_abs(_1, false)", + "kind": "simple", + "prefix": 46603, + "prefix_str": "B60B", + "tlb": "#b60b" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 936, + "function_name": "exec_abs" + } + }, + { + "name": "QADD", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "Adds two integers and pushes the result back onto the stack. Returns `NaN` if any operand is `NaN`.", + "long": "Pops two integers from the stack, adds them and pushes the result back onto the stack. If any of the operands is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12034048, + "max": 12034304, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_add(_1, true)", + "kind": "simple", + "prefix": 47008, + "prefix_str": "B7A0", + "tlb": "#b7a0" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 162, + "function_name": "exec_add" + } + }, + { + "name": "QSUB", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "Subtracts two integers and pushes the result back onto the stack. Returns `NaN` if any operand is `NaN`.", + "long": "Pops two integers from the stack, subtracts the second one from the first one and pushes the result back onto the stack. If any of the operands is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12034304, + "max": 12034560, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_sub(_1, true)", + "kind": "simple", + "prefix": 47009, + "prefix_str": "B7A1", + "tlb": "#b7a1" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 171, + "function_name": "exec_sub" + } + }, + { + "name": "QSUBR", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "Subtracts two integers in reverse order and pushes the result back onto the stack. Returns `NaN` if any operand is `NaN`.", + "long": "Pops two integers from the stack, subtracts the first one from the second one and pushes the result back onto the stack. If any of the operands is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12034560, + "max": 12034816, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_subr(_1, true)", + "kind": "simple", + "prefix": 47010, + "prefix_str": "B7A2", + "tlb": "#b7a2" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 180, + "function_name": "exec_subr" + } + }, + { + "name": "QNEGATE", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "Negates an integer and pushes the result back onto the stack. Returns `NaN` if operand is `NaN`.", + "long": "Pops an integer from the stack, negates it and pushes the result back onto the stack. If the operand is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12034816, + "max": 12035072, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_negate(_1, true)", + "kind": "simple", + "prefix": 47011, + "prefix_str": "B7A3", + "tlb": "#b7a3" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 189, + "function_name": "exec_negate" + } + }, + { + "name": "QINC", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "Increments an integer and pushes the result back onto the stack. Returns `NaN` if operand is `NaN`.", + "long": "Pops an integer from the stack, increments it by 1 and pushes the result back onto the stack. If the operand is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12035072, + "max": 12035328, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_inc(_1, true)", + "kind": "simple", + "prefix": 47012, + "prefix_str": "B7A4", + "tlb": "#b7a4" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 197, + "function_name": "exec_inc" + } + }, + { + "name": "QDEC", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "Decrements an integer and pushes the result back onto the stack. Returns `NaN` if operand is `NaN`.", + "long": "Pops an integer from the stack, decrements it by 1 and pushes the result back onto the stack. If the operand is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12035328, + "max": 12035584, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_dec(_1, true)", + "kind": "simple", + "prefix": 47013, + "prefix_str": "B7A5", + "tlb": "#b7a5" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 205, + "function_name": "exec_dec" + } + }, + { + "name": "QMUL", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "Multiplies two integers and pushes the result back onto the stack. Returns `NaN` if any operand is `NaN`.", + "long": "Pops two integers from the stack, multiplies them and pushes the result back onto the stack. If any of the operands is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036096, + "max": 12036352, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_mul(_1, true)", + "kind": "simple", + "prefix": 47016, + "prefix_str": "B7A8", + "tlb": "#b7a8" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 231, + "function_name": "exec_mul" + } + }, + { + "name": "QPOW2", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "Raises 2 to the power of `x` and pushes the result back onto the stack. Returns `NaN` if operand is `NaN`.", + "long": "Pops an integer from the stack, raises 2 to the power of it and pushes the result back onto the stack. If the operand is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12037632, + "max": 12037888, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_pow2(_1, true)", + "kind": "simple", + "prefix": 47022, + "prefix_str": "B7AE", + "tlb": "#b7ae" + }, + "signature": { + "stack_string": "y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 758, + "function_name": "exec_pow2" + } + }, + { + "name": "QAND", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "Bitwise AND of two signed integers `x` and `y`, sign-extended to infinity and pushes the result back onto the stack. Returns `NaN` if any operand is `NaN`.", + "long": "Pops two signed integers from the stack, performs a bitwise AND operation on them and pushes the result back onto the stack. If any of the operands is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12038144, + "max": 12038400, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_and(_1, true)", + "kind": "simple", + "prefix": 47024, + "prefix_str": "B7B0", + "tlb": "#b7b0" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 769, + "function_name": "exec_and" + } + }, + { + "name": "QOR", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "Bitwise OR of two signed integers `x` and `y`, sign-extended to infinity and pushes the result back onto the stack. Returns `NaN` if any operand is `NaN`.", + "long": "Pops two signed integers from the stack, performs a bitwise OR operation on them and pushes the result back onto the stack. If any of the operands is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12038400, + "max": 12038656, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_or(_1, true)", + "kind": "simple", + "prefix": 47025, + "prefix_str": "B7B1", + "tlb": "#b7b1" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 778, + "function_name": "exec_or" + } + }, + { + "name": "QXOR", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "Bitwise XOR of two signed integers `x` and `y`, sign-extended to infinity and pushes the result back onto the stack. Returns `NaN` if any operand is `NaN`.", + "long": "Pops two signed integers from the stack, performs a bitwise XOR operation on them and pushes the result back onto the stack. If any of the operands is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12038656, + "max": 12038912, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_xor(_1, true)", + "kind": "simple", + "prefix": 47026, + "prefix_str": "B7B2", + "tlb": "#b7b2" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 787, + "function_name": "exec_xor" + } + }, + { + "name": "QNOT", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "Bitwise NOT of an integer, sign-extended to infinity and pushes the result back onto the stack. Returns `NaN` if operand is `NaN`.", + "long": "Pops an integer from the stack, performs a bitwise NOT operation on it and pushes the result back onto the stack. If the operand is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12038912, + "max": 12039168, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_not(_1, true)", + "kind": "simple", + "prefix": 47027, + "prefix_str": "B7B3", + "tlb": "#b7b3" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 796, + "function_name": "exec_not" + } + }, + { + "name": "QFITSX", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "", + "long": "Replaces `x` with a `NaN` if x is not a `width`-bit signed integer, leaves it intact otherwise.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12039680, + "max": 12039681, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_fits(_1, true)", + "kind": "simple", + "prefix": 12039680, + "prefix_str": "B7B600", + "tlb": "#b7b600" + }, + "signature": { + "stack_string": "x:Int width:Int -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 830, + "function_name": "exec_fits" + } + }, + { + "name": "QUFITSX", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "", + "long": "Replaces `x` with a `NaN` if x is not a `width`-bit unsigned integer, leaves it intact otherwise.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12039681, + "max": 12039682, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_ufits(_1, true)", + "kind": "simple", + "prefix": 12039681, + "prefix_str": "B7B601", + "tlb": "#b7b601" + }, + "signature": { + "stack_string": "x:Int width:Int -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 843, + "function_name": "exec_ufits" + } + }, + { + "name": "QBITSIZE", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "Computes smallest `width >= 0` such that `x` fits into a `width`-bit signed integer. Returns `NaN` if operand is `NaN`.", + "long": "Computes smallest `width >= 0` such that `x` fits into a `width`-bit signed integer (`-2^(width-1) <= x < 2^(width-1)`). If the operand is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12039682, + "max": 12039683, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_bitsize(_1, true, true)", + "kind": "simple", + "prefix": 12039682, + "prefix_str": "B7B602", + "tlb": "#b7b602" + }, + "signature": { + "stack_string": "x:Int -> width:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "width", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 856, + "function_name": "exec_bitsize" + } + }, + { + "name": "QUBITSIZE", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "Computes smallest `width >= 0` such that `x` fits into a `width`-bit unsigned integer. Returns `NaN` if operand is `NaN`.", + "long": "Computes smallest `width >= 0` such that `x` fits into a `width`-bit unsigned integer (`0 <= x < 2^width`). If the operand is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12039683, + "max": 12039684, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_bitsize(_1, false, true)", + "kind": "simple", + "prefix": 12039683, + "prefix_str": "B7B603", + "tlb": "#b7b603" + }, + "signature": { + "stack_string": "x:Int -> width:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "width", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 856, + "function_name": "exec_bitsize" + } + }, + { + "name": "QMIN", + "category": "arithmetic", + "sub_category": "other_arith", + "description": { + "short": "", + "long": "Computes the minimum of two integers `x` and `y`. Returns `NaN` if any of the arguments is `NaN`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12039688, + "max": 12039689, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_minmax(_1, 3)", + "kind": "simple", + "prefix": 12039688, + "prefix_str": "B7B608", + "tlb": "#b7b608" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 914, + "function_name": "exec_minmax" + } + }, + { + "name": "QMAX", + "category": "arithmetic", + "sub_category": "other_arith", + "description": { + "short": "", + "long": "Computes the maximum of two integers `x` and `y`. Returns `NaN` if any of the arguments is `NaN`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12039689, + "max": 12039690, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_minmax(_1, 5)", + "kind": "simple", + "prefix": 12039689, + "prefix_str": "B7B609", + "tlb": "#b7b609" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 914, + "function_name": "exec_minmax" + } + }, + { + "name": "QMINMAX", + "category": "arithmetic", + "sub_category": "other_arith", + "description": { + "short": "", + "long": "Sorts two integers. Returns two `NaN` if any of the arguments is `NaN`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12039690, + "max": 12039691, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_minmax(_1, 7)", + "kind": "simple", + "prefix": 12039690, + "prefix_str": "B7B60A", + "tlb": "#b7b60a" + }, + "signature": { + "stack_string": "x:Int y:Int -> r1:Int r2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "r1", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 914, + "function_name": "exec_minmax" + } + }, + { + "name": "QABS", + "category": "arithmetic", + "sub_category": "other_arith", + "description": { + "short": "", + "long": "Computes the absolute value of an integer `x`. Returns `NaN` if any of the arguments is `NaN`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12039691, + "max": 12039692, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_abs(_1, true)", + "kind": "simple", + "prefix": 12039691, + "prefix_str": "B7B60B", + "tlb": "#b7b60b" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 936, + "function_name": "exec_abs" + } + }, + { + "name": "SGN", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "", + "long": "Computes the sign of an integer `x`:\n`-1` if `x < 0`, `0` if `x == 0`, `1` if `x > 0`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12058624, + "max": 12124160, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_sgn(_1, 0x987, false, 'SGN')", + "kind": "simple", + "prefix": 184, + "prefix_str": "B8", + "tlb": "#b8" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 961, + "function_name": "exec_sgn" + } + }, + { + "name": "LESS", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` and `y` for less than and returns `-1` if true and `0` otherwise.", + "long": "", + "tags": ["comparisons"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "5", + "condition": "Top or second element is not an Int." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12124160, + "max": 12189696, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_cmp(_1, 0x887, false, 'LESS')", + "kind": "simple", + "prefix": 185, + "prefix_str": "B9", + "tlb": "#b9" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x < y", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 975, + "function_name": "exec_cmp" + } + }, + { + "name": "EQUAL", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` and `y` for equality and returns `-1` if equal and `0` otherwise.", + "long": "", + "tags": ["comparisons"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "5", + "condition": "Top or second element is not an Int." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12189696, + "max": 12255232, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_cmp(_1, 0x878, false, 'EQUAL')", + "kind": "simple", + "prefix": 186, + "prefix_str": "BA", + "tlb": "#ba" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x == y", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 975, + "function_name": "exec_cmp" + } + }, + { + "name": "LEQ", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` and `y` for less than or equal to and returns `-1` if true and `0` otherwise.", + "long": "", + "tags": ["comparisons"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "5", + "condition": "Top or second element is not an Int." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12255232, + "max": 12320768, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_cmp(_1, 0x877, false, 'LEQ')", + "kind": "simple", + "prefix": 187, + "prefix_str": "BB", + "tlb": "#bb" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x <= y", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 975, + "function_name": "exec_cmp" + } + }, + { + "name": "GREATER", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` and `y` for greater than and returns `-1` if true and `0` otherwise.", + "long": "", + "tags": ["comparisons"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "5", + "condition": "Top or second element is not an Int." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12320768, + "max": 12386304, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_cmp(_1, 0x788, false, 'GREATER')", + "kind": "simple", + "prefix": 188, + "prefix_str": "BC", + "tlb": "#bc" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x >= y", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 975, + "function_name": "exec_cmp" + } + }, + { + "name": "NEQ", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` and `y` for inequality and returns `-1` if true and `0` otherwise.", + "long": "", + "tags": ["comparisons"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "5", + "condition": "Top or second element is not an Int." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12386304, + "max": 12451840, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_cmp(_1, 0x787, false, 'NEQ')", + "kind": "simple", + "prefix": 189, + "prefix_str": "BD", + "tlb": "#bd" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x != y", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 975, + "function_name": "exec_cmp" + } + }, + { + "name": "GEQ", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` and `y` for greater than or equal to and returns `-1` if true and `0` otherwise.", + "long": "", + "tags": ["comparisons"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "5", + "condition": "Top or second element is not an Int." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12451840, + "max": 12517376, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_cmp(_1, 0x778, false, 'GEQ')", + "kind": "simple", + "prefix": 190, + "prefix_str": "BE", + "tlb": "#be" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x >= y", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 975, + "function_name": "exec_cmp" + } + }, + { + "name": "CMP", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "", + "long": "Computes the sign of `x-y`:\n`-1` if `xy`.\nNo integer overflow can occur here unless `x` or `y` is a `NaN`.", + "tags": ["comparisons"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "5", + "condition": "Top or second element is not an Int." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12517376, + "max": 12582912, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_cmp(_1, 0x987, false, 'CMP')", + "kind": "simple", + "prefix": 191, + "prefix_str": "BF", + "tlb": "#bf" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 975, + "function_name": "exec_cmp" + } + }, + { + "name": "ISNAN", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "", + "long": "Checks whether `x` is a `NaN`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12845056, + "max": 12910592, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_is_nan", + "kind": "simple", + "prefix": 196, + "prefix_str": "C4", + "tlb": "#c4" + }, + "signature": { + "stack_string": "x:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 1007, + "function_name": "exec_is_nan" + } + }, + { + "name": "CHKNAN", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "", + "long": "Throws an arithmetic overflow exception if `x` is a `NaN`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 18, + "description": "If no exception was thrown" + }, + { + "value": 68, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 12910592, + "max": 12976128, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_chk_nan", + "kind": "simple", + "prefix": 197, + "prefix_str": "C5", + "tlb": "#c5" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "x:Int -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 1016, + "function_name": "exec_chk_nan" + } + }, + { + "name": "QSGN", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Computes the sign of an integer `x`. Returns `NaN` if operand is `NaN`.", + "long": "Computes the sign of an integer `x`:\n`-1` if `x < 0`, `0` if `x == 0`, `1` if `x > 0`. If the operand is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12040192, + "max": 12040448, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_sgn(_1, 0x987, true, 'QSGN')", + "kind": "simple", + "prefix": 47032, + "prefix_str": "B7B8", + "tlb": "#b7b8" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 961, + "function_name": "exec_sgn" + } + }, + { + "name": "QLESS", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` and `y` for less than and returns `-1` if true and `0` otherwise. Returns `NaN` if any operand is `NaN`.", + "long": "Compares two integers from the stack for less than and returns `-1` if true and `0` otherwise. If any of the operands is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": ["comparisons"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12040448, + "max": 12040704, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_cmp(_1, 0x887, true, 'QLESS')", + "kind": "simple", + "prefix": 47033, + "prefix_str": "B7B9", + "tlb": "#b7b9" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x < y", + "value_types": ["Bool"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 975, + "function_name": "exec_cmp" + } + }, + { + "name": "QEQUAL", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` and `y` for equality and returns `-1` if equal and `0` otherwise. Returns `NaN` if any operand is `NaN`.", + "long": "Compares two integers from the stack for equality and returns `-1` if equal and `0` otherwise. If any of the operands is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": ["comparisons"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12040704, + "max": 12040960, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_cmp(_1, 0x878, true, 'QEQUAL')", + "kind": "simple", + "prefix": 47034, + "prefix_str": "B7BA", + "tlb": "#b7ba" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x == y", + "value_types": ["Bool"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 975, + "function_name": "exec_cmp" + } + }, + { + "name": "QLEQ", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` and `y` for less than or equal to and returns `-1` if true and `0` otherwise. Returns `NaN` if any operand is `NaN`.", + "long": "Compares two integers from the stack for less than or equal to and returns `-1` if true and `0` otherwise. If any of the operands is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": ["comparisons"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12040960, + "max": 12041216, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_cmp(_1, 0x877, true, 'QLEQ')", + "kind": "simple", + "prefix": 47035, + "prefix_str": "B7BB", + "tlb": "#b7bb" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x <= y", + "value_types": ["Bool"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 975, + "function_name": "exec_cmp" + } + }, + { + "name": "QGREATER", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` and `y` for greater than and returns `-1` if true and `0` otherwise. Returns `NaN` if any operand is `NaN`.", + "long": "Compares two integers from the stack for greater than and returns `-1` if true and `0` otherwise. If any of the operands is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": ["comparisons"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12041216, + "max": 12041472, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_cmp(_1, 0x788, true, 'QGREATER')", + "kind": "simple", + "prefix": 47036, + "prefix_str": "B7BC", + "tlb": "#b7bc" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x >= y", + "value_types": ["Bool"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 975, + "function_name": "exec_cmp" + } + }, + { + "name": "QNEQ", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` and `y` for inequality and returns `-1` if true and `0` otherwise. Returns `NaN` if any operand is `NaN`.", + "long": "Compares two integers from the stack for inequality and returns `-1` if true and `0` otherwise. If any of the operands is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": ["comparisons"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12041472, + "max": 12041728, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_cmp(_1, 0x787, true, 'QNEQ')", + "kind": "simple", + "prefix": 47037, + "prefix_str": "B7BD", + "tlb": "#b7bd" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x != y", + "value_types": ["Bool"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 975, + "function_name": "exec_cmp" + } + }, + { + "name": "QGEQ", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` and `y` for greater than or equal to and returns `-1` if true and `0` otherwise. Returns `NaN` if any operand is `NaN`.", + "long": "Compares two integers from the stack for greater than or equal to and returns `-1` if true and `0` otherwise. If any of the operands is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": ["comparisons"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12041728, + "max": 12041984, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_cmp(_1, 0x778, true, 'QGEQ')", + "kind": "simple", + "prefix": 47038, + "prefix_str": "B7BE", + "tlb": "#b7be" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x >= y", + "value_types": ["Bool"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 975, + "function_name": "exec_cmp" + } + }, + { + "name": "QCMP", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Computes the sign of `x-y`. Returns `NaN` if any operand is `NaN`.", + "long": "Computes the sign of `x-y`:\n`-1` if `xy`. If any of the operands is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": ["comparisons"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12041984, + "max": 12042240, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_cmp(_1, 0x987, true, 'QCMP')", + "kind": "simple", + "prefix": 47039, + "prefix_str": "B7BF", + "tlb": "#b7bf" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 975, + "function_name": "exec_cmp" + } + }, + { + "name": "SEMPTY", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Checks whether a _Slice_ `s` is empty (i.e., contains no bits of data and no cell references).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13041664, + "max": 13041920, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_un_cs_cmp(_1, 'SEMPTY', (cs) => cs.empty() && !cs.size_refs())", + "kind": "simple", + "prefix": 50944, + "prefix_str": "C700", + "tlb": "#c700" + }, + "signature": { + "stack_string": "s:Slice -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 251, + "function_name": "exec_un_cs_cmp" + } + }, + { + "name": "SDEMPTY", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Checks whether _Slice_ `s` has no bits of data.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13041920, + "max": 13042176, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_un_cs_cmp(_1, 'SDEMPTY', (cs) => cs.empty())", + "kind": "simple", + "prefix": 50945, + "prefix_str": "C701", + "tlb": "#c701" + }, + "signature": { + "stack_string": "s:Slice -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 251, + "function_name": "exec_un_cs_cmp" + } + }, + { + "name": "SREMPTY", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Checks whether _Slice_ `s` has no references.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13042176, + "max": 13042432, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_un_cs_cmp(_1, 'SREMPTY', (cs) => !cs.size_refs())", + "kind": "simple", + "prefix": 50946, + "prefix_str": "C702", + "tlb": "#c702" + }, + "signature": { + "stack_string": "s:Slice -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 251, + "function_name": "exec_un_cs_cmp" + } + }, + { + "name": "SDFIRST", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Checks whether the first bit of _Slice_ `s` is a one.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13042432, + "max": 13042688, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_un_cs_cmp(_1, 'SDFIRST', (cs) => cs.prefetch_long(1) == -1)", + "kind": "simple", + "prefix": 50947, + "prefix_str": "C703", + "tlb": "#c703" + }, + "signature": { + "stack_string": "s:Slice -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 251, + "function_name": "exec_un_cs_cmp" + } + }, + { + "name": "SDLEXCMP", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Compares the data of `s` lexicographically with the data of `s'`, returning `-1`, 0, or 1 depending on the result.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13042688, + "max": 13042944, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_ibin_cs_cmp(_1, 'SDLEXCMP', (cs1, cs2) => cs1.lex_cmp(cs2))", + "kind": "simple", + "prefix": 50948, + "prefix_str": "C704", + "tlb": "#c704" + }, + "signature": { + "stack_string": "s:Slice s':Slice -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 277, + "function_name": "exec_ibin_cs_cmp" + } + }, + { + "name": "SDEQ", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Checks if the data parts of `s` and `s'` are bitwise equal.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": false, + "instructions": ["SDLEXCMP", "EQINT 0"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13042944, + "max": 13043200, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_bin_cs_cmp(_1, 'SDEQ', (cs1, cs2) => !cs1.lex_cmp(cs2))", + "kind": "simple", + "prefix": 50949, + "prefix_str": "C705", + "tlb": "#c705" + }, + "signature": { + "stack_string": "s:Slice s':Slice -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 267, + "function_name": "exec_bin_cs_cmp" + } + }, + { + "name": "SDPFX", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Checks whether `prefix` is a prefix of `s`.", + "tags": [], + "operands": [], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHSLICE b{1001}", + "comment": "prefix" + }, + { + "instruction": "PUSHSLICE b{10010}", + "comment": "where to search (s)" + }, + { + "instruction": "SDPFX", + "is_main": true + } + ], + "stack": { + "input": [], + "output": ["-1"] + } + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13043712, + "max": 13043968, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_bin_cs_cmp(_1, 'SDPFX', (cs1, cs2) => cs1.is_prefix_of(cs2))", + "kind": "simple", + "prefix": 50952, + "prefix_str": "C708", + "tlb": "#c708" + }, + "signature": { + "stack_string": "prefix:Slice s:Slice -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "prefix", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 267, + "function_name": "exec_bin_cs_cmp" + } + }, + { + "name": "SDPFXREV", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Checks whether `prefix` is a prefix of `s`. Same as `SDPFX`, but with arguments in a reverse order.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["SWAP", "SDPFX"] + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHSLICE b{10010}", + "comment": "where to search (s)" + }, + { + "instruction": "PUSHSLICE b{1001}", + "comment": "prefix" + }, + { + "instruction": "SDPFXREV", + "is_main": true + } + ], + "stack": { + "input": [], + "output": ["-1"] + } + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13043968, + "max": 13044224, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_bin_cs_cmp(_1, 'SDPFXREV', (cs1, cs2) => cs2.is_prefix_of(cs1))", + "kind": "simple", + "prefix": 50953, + "prefix_str": "C709", + "tlb": "#c709" + }, + "signature": { + "stack_string": "s:Slice prefix:Slice -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "prefix", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 267, + "function_name": "exec_bin_cs_cmp" + } + }, + { + "name": "SDPPFX", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Checks whether `prefix` is a proper prefix of `s` (i.e., a prefix distinct from `s`).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13044224, + "max": 13044480, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_bin_cs_cmp(_1, 'SDPPFX', (cs1, cs2) => cs1.is_proper_prefix_of(cs2))", + "kind": "simple", + "prefix": 50954, + "prefix_str": "C70A", + "tlb": "#c70a" + }, + "signature": { + "stack_string": "prefix:Slice s:Slice -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "prefix", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 267, + "function_name": "exec_bin_cs_cmp" + } + }, + { + "name": "SDPPFXREV", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Checks whether `prefix` is a proper prefix of `s` (i.e., a prefix distinct from `s`).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13044480, + "max": 13044736, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_bin_cs_cmp(_1, 'SDPPFXREV', (cs1, cs2) => cs2.is_proper_prefix_of(cs1))", + "kind": "simple", + "prefix": 50955, + "prefix_str": "C70B", + "tlb": "#c70b" + }, + "signature": { + "stack_string": "s:Slice prefix:Slice -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "prefix", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 267, + "function_name": "exec_bin_cs_cmp" + } + }, + { + "name": "SDSFX", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Checks whether `suffix` is a suffix of `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13044736, + "max": 13044992, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_bin_cs_cmp(_1, 'SDSFX', (cs1, cs2) => cs1.is_suffix_of(cs2))", + "kind": "simple", + "prefix": 50956, + "prefix_str": "C70C", + "tlb": "#c70c" + }, + "signature": { + "stack_string": "suffix:Slice s:Slice -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "suffix", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 267, + "function_name": "exec_bin_cs_cmp" + } + }, + { + "name": "SDSFXREV", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Checks whether `suffix` is a suffix of `s`. Same as `SDSFX`, but with arguments in a reverse order.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13044992, + "max": 13045248, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_bin_cs_cmp(_1, 'SDSFXREV', (cs1, cs2) => cs2.is_suffix_of(cs1))", + "kind": "simple", + "prefix": 50957, + "prefix_str": "C70D", + "tlb": "#c70d" + }, + "signature": { + "stack_string": "s:Slice suffix:Slice -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "suffix", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 267, + "function_name": "exec_bin_cs_cmp" + } + }, + { + "name": "SDPSFX", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Checks whether `suffix` is a proper suffix of `s` (i.e., a suffix distinct from `s`).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13045248, + "max": 13045504, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_bin_cs_cmp(_1, 'SDPSFX', (cs1, cs2) => cs1.is_proper_suffix_of(cs2))", + "kind": "simple", + "prefix": 50958, + "prefix_str": "C70E", + "tlb": "#c70e" + }, + "signature": { + "stack_string": "suffix:Slice s:Slice -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "suffix", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 267, + "function_name": "exec_bin_cs_cmp" + } + }, + { + "name": "SDPSFXREV", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Checks whether `suffix` is a proper suffix of `s` (i.e., a suffix distinct from `s`). Same as `SDPSFX`, but with arguments in a reverse order.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13045504, + "max": 13045760, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_bin_cs_cmp(_1, 'SDPSFXREV', (cs1, cs2) => cs2.is_proper_suffix_of(cs1))", + "kind": "simple", + "prefix": 50959, + "prefix_str": "C70F", + "tlb": "#c70f" + }, + "signature": { + "stack_string": "s:Slice suffix:Slice -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "suffix", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 267, + "function_name": "exec_bin_cs_cmp" + } + }, + { + "name": "SDCNTLEAD0", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Returns the number of leading zeroes in `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13045760, + "max": 13046016, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_iun_cs_cmp(_1, 'SDCNTLEAD0', (cs) => cs.count_leading(0))", + "kind": "simple", + "prefix": 50960, + "prefix_str": "C710", + "tlb": "#c710" + }, + "signature": { + "stack_string": "s:Slice -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 259, + "function_name": "exec_iun_cs_cmp" + } + }, + { + "name": "SDCNTLEAD1", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Returns the number of leading ones in `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13046016, + "max": 13046272, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_iun_cs_cmp(_1, 'SDCNTLEAD1', (cs) => cs.count_leading(1))", + "kind": "simple", + "prefix": 50961, + "prefix_str": "C711", + "tlb": "#c711" + }, + "signature": { + "stack_string": "s:Slice -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 259, + "function_name": "exec_iun_cs_cmp" + } + }, + { + "name": "SDCNTTRAIL0", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Returns the number of trailing zeroes in `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13046272, + "max": 13046528, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_iun_cs_cmp(_1, 'SDCNTTRAIL0', (cs) => cs.count_trailing(0))", + "kind": "simple", + "prefix": 50962, + "prefix_str": "C712", + "tlb": "#c712" + }, + "signature": { + "stack_string": "s:Slice -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 259, + "function_name": "exec_iun_cs_cmp" + } + }, + { + "name": "SDCNTTRAIL1", + "category": "cell", + "sub_category": "cell_cmp", + "description": { + "short": "", + "long": "Returns the number of trailing ones in `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13046528, + "max": 13046784, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_iun_cs_cmp(_1, 'SDCNTTRAIL1', (cs) => cs.count_trailing(1))", + "kind": "simple", + "prefix": 50963, + "prefix_str": "C713", + "tlb": "#c713" + }, + "signature": { + "stack_string": "s:Slice -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 259, + "function_name": "exec_iun_cs_cmp" + } + }, + { + "name": "NEWC", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "Creates a new empty _Builder_.", + "long": "", + "tags": [], + "operands": [], + "exit_codes": [], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13107200, + "max": 13172736, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_new_builder", + "kind": "simple", + "prefix": 200, + "prefix_str": "C8", + "tlb": "#c8" + }, + "signature": { + "stack_string": "∅ -> b:Builder", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 334, + "function_name": "exec_new_builder" + } + }, + { + "name": "ENDC", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "Converts a _Builder_ into an ordinary _Cell_.", + "long": "Pops a _Builder_ from the stack and converts it into an ordinary _Cell_.", + "tags": [], + "operands": [], + "exit_codes": [], + "gas": [ + { + "value": 518, + "description": "For Cell creation" + } + ] + }, + "layout": { + "min": 13172736, + "max": 13238272, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_builder_to_cell", + "kind": "simple", + "prefix": 201, + "prefix_str": "C9", + "tlb": "#c9" + }, + "effects": ["CellCreate"], + "signature": { + "stack_string": "b:Builder -> c:Cell", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 341, + "function_name": "exec_builder_to_cell" + } + }, + { + "name": "ENDCST", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Converts a _Builder_ to _Cell_ and stores a reference to it into another _Builder_.", + "tags": ["builder building"], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["ENDC", "SWAP", "STREF"] + } + ], + "gas": [ + { + "value": 518, + "description": "For Cell creation" + } + ] + }, + "layout": { + "min": 13434880, + "max": 13500416, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_builder_as_ref_rev(_1, false)", + "kind": "simple", + "prefix": 205, + "prefix_str": "CD", + "tlb": "#cd" + }, + "effects": ["CellCreate"], + "signature": { + "stack_string": "b:Builder child:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "child", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 484, + "function_name": "exec_store_builder_as_ref_rev" + } + }, + { + "name": "STBREF", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Converts a _Builder_ to _Cell_ and stores a reference to it into another _Builder_.", + "tags": ["builder building"], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["SWAP", "STBREFR"] + } + ], + "gas": [ + { + "value": 526, + "description": "For Cell creation" + } + ] + }, + "layout": { + "min": 13570304, + "max": 13570560, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_builder_as_ref(_1, false)", + "kind": "simple", + "prefix": 53009, + "prefix_str": "CF11", + "tlb": "#cf11" + }, + "effects": ["CellCreate"], + "signature": { + "stack_string": "child:Builder b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "child", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 461, + "function_name": "exec_store_builder_as_ref" + } + }, + { + "name": "STB", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Appends all data from _Builder_ `from` to _Builder_ `to`.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13570816, + "max": 13571072, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_builder(_1, false)", + "kind": "simple", + "prefix": 53011, + "prefix_str": "CF13", + "tlb": "#cf13" + }, + "signature": { + "stack_string": "from:Builder to:Builder -> from':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "from", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "to", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "from'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 553, + "function_name": "exec_store_builder" + } + }, + { + "name": "STREFR", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores a reference to _Cell_ `c` into _Builder_ `b` with swapped arguments.", + "tags": ["builder building"], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["SWAP", "STREF"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13571072, + "max": 13571328, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_ref_rev(_1, false)", + "kind": "simple", + "prefix": 53012, + "prefix_str": "CF14", + "tlb": "#cf14" + }, + "signature": { + "stack_string": "b:Builder c:Cell -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 438, + "function_name": "exec_store_ref_rev" + } + }, + { + "name": "STBREFR", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Converts a _Builder_ to _Cell_ and stores a reference to it into another _Builder_.", + "tags": ["builder building"], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["ENDC", "SWAP", "STREF"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13571328, + "max": 13571584, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_builder_as_ref_rev(_1, false)", + "kind": "simple", + "prefix": 53013, + "prefix_str": "CF15", + "tlb": "#cf15" + }, + "signature": { + "stack_string": "b:Builder child:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "child", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 484, + "function_name": "exec_store_builder_as_ref_rev" + } + }, + { + "name": "STSLICER", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores _Slice_ `s` into _Builder_ `b` with swapped arguments.", + "tags": ["builder building"], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["SWAP", "STSLICE"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13571584, + "max": 13571840, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_slice_rev(_1, false)", + "kind": "simple", + "prefix": 53014, + "prefix_str": "CF16", + "tlb": "#cf16" + }, + "signature": { + "stack_string": "b:Builder s:Slice -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 530, + "function_name": "exec_store_slice_rev" + } + }, + { + "name": "STBR", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Appends all data from _Builder_ `from` to _Builder_ `to` with swapped arguments.", + "tags": ["builder building"], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["SWAP", "STB"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13571840, + "max": 13572096, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_builder_rev(_1, false)", + "kind": "simple", + "prefix": 53015, + "prefix_str": "CF17", + "tlb": "#cf17" + }, + "signature": { + "stack_string": "to:Builder from:Builder -> res:Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "to", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "from", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "res", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 576, + "function_name": "exec_store_builder_rev" + } + }, + { + "name": "STREFQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores a reference to _Cell_ `c` into _Builder_ `b`. This is a quiet version of `STREF` which means that instead of throwing an exception, it pushes a status flag to the stack: -1 if there is no space in `b`, 0 if the operation succeeds.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13572096, + "max": 13572352, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_ref(_1, true)", + "kind": "simple", + "prefix": 53016, + "prefix_str": "CF18", + "tlb": "#cf18" + }, + "signature": { + "stack_string": "c:Cell b:Builder -> (b':Builder 0)|(c:Cell b:Builder -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 415, + "function_name": "exec_store_ref" + } + }, + { + "name": "STBREFQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Converts a _Builder_ to _Cell_ and stores a reference to it into another _Builder_. This is a quiet version of `STBREF` which means that instead of throwing an exception, it pushes a status flag to the stack: -1 if there is no space in `b`, 0 if the operation succeeds.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13572352, + "max": 13572608, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_builder_as_ref(_1, true)", + "kind": "simple", + "prefix": 53017, + "prefix_str": "CF19", + "tlb": "#cf19" + }, + "signature": { + "stack_string": "b':Builder b:Builder -> (b'':Builder 0)|(b':Builder b:Builder -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "b''", + "value_types": ["Builder"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 461, + "function_name": "exec_store_builder_as_ref" + } + }, + { + "name": "STSLICEQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores _Slice_ `s` into _Builder_ `b`. This is a quiet version of `STSLICE` which means that instead of throwing an exception, it pushes a status flag to the stack: -1 if there is no space in `b`, 0 if the operation succeeds.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13572608, + "max": 13572864, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_slice(_1, true)", + "kind": "simple", + "prefix": 53018, + "prefix_str": "CF1A", + "tlb": "#cf1a" + }, + "signature": { + "stack_string": "s:Slice b:Builder -> (b':Builder 0)|(s:Slice b:Builder -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 507, + "function_name": "exec_store_slice" + } + }, + { + "name": "STBQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Appends all data from _Builder_ `b'` to _Builder_ `b`. This is a quiet version of `STB` which means that instead of throwing an exception, it pushes a status flag to the stack: -1 if there is no space in `b`, 0 if the operation succeeds.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13572864, + "max": 13573120, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_builder(_1, true)", + "kind": "simple", + "prefix": 53019, + "prefix_str": "CF1B", + "tlb": "#cf1b" + }, + "signature": { + "stack_string": "b':Builder b:Builder -> (b'':Builder 0)|(b':Builder b:Builder -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "b''", + "value_types": ["Builder"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 553, + "function_name": "exec_store_builder" + } + }, + { + "name": "STREFRQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores a reference to _Cell_ `c` into _Builder_ `b` with swapped arguments. This is a quiet version of `STREFR` which means that instead of throwing an exception, it pushes a status flag to the stack: -1 if there is no space in `b`, 0 if the operation succeeds.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13573120, + "max": 13573376, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_ref_rev(_1, true)", + "kind": "simple", + "prefix": 53020, + "prefix_str": "CF1C", + "tlb": "#cf1c" + }, + "signature": { + "stack_string": "b:Builder c:Cell -> (b':Builder 0)|(b:Builder c:Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 438, + "function_name": "exec_store_ref_rev" + } + }, + { + "name": "STBREFRQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Converts a _Builder_ to _Cell_ and stores a reference to it into another _Builder_. This is a quiet version of `STBREFR` which means that instead of throwing an exception, it pushes a status flag to the stack: -1 if there is no space in `b`, 0 if the operation succeeds.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13573376, + "max": 13573632, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_builder_as_ref_rev(_1, true)", + "kind": "simple", + "prefix": 53021, + "prefix_str": "CF1D", + "tlb": "#cf1d" + }, + "signature": { + "stack_string": "b':Builder b:Builder -> (b'':Builder 0)|(b':Builder b:Builder -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "b''", + "value_types": ["Builder"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 484, + "function_name": "exec_store_builder_as_ref_rev" + } + }, + { + "name": "STSLICERQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores _Slice_ `s` into _Builder_ `b` with swapped arguments. This is a quiet version of `STSLICER` which means that instead of throwing an exception, it pushes a status flag to the stack: -1 if there is no space in `b`, 0 if the operation succeeds.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13573632, + "max": 13573888, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_slice_rev(_1, true)", + "kind": "simple", + "prefix": 53022, + "prefix_str": "CF1E", + "tlb": "#cf1e" + }, + "signature": { + "stack_string": "b:Builder s:Slice -> (b'':Builder 0)|(b:Builder s:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "b''", + "value_types": ["Builder"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 530, + "function_name": "exec_store_slice_rev" + } + }, + { + "name": "STBRQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Appends all data from _Builder_ `b'` to _Builder_ `b` with swapped arguments. This is a quiet version of `STBR` which means that instead of throwing an exception, it pushes a status flag to the stack: -1 if there is no space in `b`, 0 if the operation succeeds.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13573888, + "max": 13574144, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_builder_rev(_1, true)", + "kind": "simple", + "prefix": 53023, + "prefix_str": "CF1F", + "tlb": "#cf1f" + }, + "signature": { + "stack_string": "b:Builder b':Builder -> (b'':Builder 0)|(b:Builder b':Builder -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "b''", + "value_types": ["Builder"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 576, + "function_name": "exec_store_builder_rev" + } + }, + { + "name": "ENDXC", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "Creates an exotic or ordinary _Cell_ from _Builder_.", + "long": "If `x != 0`, creates a _special_ or _exotic_ cell from _Builder_ `b`.\nThe type of the exotic cell must be stored in the first 8 bits of `b`.\nIf `x == 0`, it is equivalent to `ENDC`. Otherwise some validity checks on the data and references of `b` are performed before creating the exotic cell.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 526, + "description": "For Cell creation" + } + ] + }, + "layout": { + "min": 13574912, + "max": 13575168, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_builder_to_special_cell", + "kind": "simple", + "prefix": 53027, + "prefix_str": "CF23", + "tlb": "#cf23" + }, + "effects": ["CellCreate"], + "signature": { + "stack_string": "b:Builder x:Int -> c:Cell", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 349, + "function_name": "exec_builder_to_special_cell" + } + }, + { + "name": "BDEPTH", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Returns the depth of _Builder_ `b`. If no cell references are stored in `b`, then `x == 0`; otherwise `x` is one plus the maximum of depths of cells referred to from `b`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13578240, + "max": 13578496, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_int_builder_func(x, 'BDEPTH', b => b.get_depth())", + "kind": "simple", + "prefix": 53040, + "prefix_str": "CF30", + "tlb": "#cf30" + }, + "signature": { + "stack_string": "b:Builder -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 704, + "function_name": "exec_int_builder_func" + } + }, + { + "name": "BBITS", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Returns the number of data bits already stored in _Builder_ `b`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13578496, + "max": 13578752, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_int_builder_func(x, 'BBITS', b => b.size())", + "kind": "simple", + "prefix": 53041, + "prefix_str": "CF31", + "tlb": "#cf31" + }, + "signature": { + "stack_string": "b:Builder -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 704, + "function_name": "exec_int_builder_func" + } + }, + { + "name": "BREFS", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Returns the number of cell references already stored in `b`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13578752, + "max": 13579008, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_int_builder_func(x, 'BREFS', b => b.size_refs())", + "kind": "simple", + "prefix": 53042, + "prefix_str": "CF32", + "tlb": "#cf32" + }, + "signature": { + "stack_string": "b:Builder -> y:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 704, + "function_name": "exec_int_builder_func" + } + }, + { + "name": "BBITREFS", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Returns the numbers of both data bits and cell references in `b`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13579008, + "max": 13579264, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_2int_builder_func(x, 'BBITSREFS', b => [b.size(), b.size_refs()])", + "kind": "simple", + "prefix": 53043, + "prefix_str": "CF33", + "tlb": "#cf33" + }, + "signature": { + "stack_string": "b:Builder -> x:Int y:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 712, + "function_name": "exec_2int_builder_func" + } + }, + { + "name": "BREMBITS", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Returns the number of data bits that can still be stored in `b`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13579520, + "max": 13579776, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_int_builder_func(x, 'BREMBITS', b => b.remaining_bits())", + "kind": "simple", + "prefix": 53045, + "prefix_str": "CF35", + "tlb": "#cf35" + }, + "signature": { + "stack_string": "b:Builder -> x2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 704, + "function_name": "exec_int_builder_func" + } + }, + { + "name": "BREMREFS", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Returns the number of references that can still be stored in `b`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13579776, + "max": 13580032, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_int_builder_func(x, 'BREMREFS', b => b.remaining_refs())", + "kind": "simple", + "prefix": 53046, + "prefix_str": "CF36", + "tlb": "#cf36" + }, + "signature": { + "stack_string": "b:Builder -> y2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "y2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 704, + "function_name": "exec_int_builder_func" + } + }, + { + "name": "BREMBITREFS", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Returns the numbers of both data bits and references that can still be stored in `b`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13580032, + "max": 13580288, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_2int_builder_func(x, 'BREMBITSREFS', b => [b.remaining_bits(), b.remaining_refs()])", + "kind": "simple", + "prefix": 53047, + "prefix_str": "CF37", + "tlb": "#cf37" + }, + "signature": { + "stack_string": "b:Builder -> x2:Int y2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x2", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 712, + "function_name": "exec_2int_builder_func" + } + }, + { + "name": "BCHKREFS", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Checks whether `y` references can be stored into `b`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "If no exception was thrown" + }, + { + "value": 76, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 13580800, + "max": 13581056, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_builder_chk_bits_refs(_1, 2)", + "kind": "simple", + "prefix": 53050, + "prefix_str": "CF3A", + "tlb": "#cf3a" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "b:Builder y:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 7 + } + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 737, + "function_name": "exec_builder_chk_bits_refs" + } + }, + { + "name": "BCHKBITREFS", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Checks whether `x` bits and `y` references can be stored into `b`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "If no exception was thrown" + }, + { + "value": 76, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 13581056, + "max": 13581312, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_builder_chk_bits_refs(_1, 3)", + "kind": "simple", + "prefix": 53051, + "prefix_str": "CF3B", + "tlb": "#cf3b" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "b:Builder x:Int y:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 7 + } + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 737, + "function_name": "exec_builder_chk_bits_refs" + } + }, + { + "name": "BCHKREFSQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Checks whether `y` references can be stored into `b`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13581824, + "max": 13582080, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_builder_chk_bits_refs(_1, 6)", + "kind": "simple", + "prefix": 53054, + "prefix_str": "CF3E", + "tlb": "#cf3e" + }, + "signature": { + "stack_string": "b:Builder y:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 7 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 737, + "function_name": "exec_builder_chk_bits_refs" + } + }, + { + "name": "BCHKBITREFSQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Checks whether `x` bits and `y` references can be stored into `b`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13582080, + "max": 13582336, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_builder_chk_bits_refs(_1, 7)", + "kind": "simple", + "prefix": 53055, + "prefix_str": "CF3F", + "tlb": "#cf3f" + }, + "signature": { + "stack_string": "b:Builder x:Int y:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 7 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 737, + "function_name": "exec_builder_chk_bits_refs" + } + }, + { + "name": "STZEROES", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores `n` binary zeroes into _Builder_ `b`.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13582336, + "max": 13582592, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_same(_1, 'STZEROES', 0)", + "kind": "simple", + "prefix": 53056, + "prefix_str": "CF40", + "tlb": "#cf40" + }, + "signature": { + "stack_string": "b:Builder n:Int -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 752, + "function_name": "exec_store_same" + } + }, + { + "name": "STONES", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores `n` binary ones into _Builder_ `b`.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13582592, + "max": 13582848, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_same(_1, 'STONES', 1)", + "kind": "simple", + "prefix": 53057, + "prefix_str": "CF41", + "tlb": "#cf41" + }, + "signature": { + "stack_string": "b:Builder n:Int -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 752, + "function_name": "exec_store_same" + } + }, + { + "name": "STSAME", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores `n` binary `x`-es into _Builder_ `b`.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13582848, + "max": 13583104, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_same(_1, 'STSAME', -1)", + "kind": "simple", + "prefix": 53058, + "prefix_str": "CF42", + "tlb": "#cf42" + }, + "signature": { + "stack_string": "b:Builder n:Int x:Int -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 752, + "function_name": "exec_store_same" + } + }, + { + "name": "CTOS", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "Converts a _Cell_ into a _Slice_.", + "long": "`c` must be either an ordinary cell, or an exotic cell. If cell is exotic, it is automatically loaded to yield an ordinary cell `c'` and converted into a _Slice_ afterwards.", + "tags": [], + "operands": [], + "exit_codes": [], + "gas": [ + { + "value": 118, + "description": "If cell is loaded for the first time" + }, + { + "value": 43, + "description": "If cell is already loaded" + } + ] + }, + "layout": { + "min": 13631488, + "max": 13697024, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_cell_to_slice", + "kind": "simple", + "prefix": 208, + "prefix_str": "D0", + "tlb": "#d0" + }, + "effects": ["CellLoad"], + "signature": { + "stack_string": "c:Cell -> s:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 883, + "function_name": "exec_cell_to_slice" + } + }, + { + "name": "ENDS", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "Removes a _Slice_ `s` from the stack. Throws an exception if it is not empty.", + "long": "", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice is not empty." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "NEWC", + "comment": "Create an empty builder" + }, + { + "instruction": "ENDC", + "comment": "Convert builder to cell" + }, + { + "instruction": "CTOS", + "comment": "Convert cell to slice (empty slice)" + }, + { + "instruction": "ENDS", + "comment": "Remove the empty slice from the stack" + } + ], + "stack": { + "input": ["Slice{empty}"], + "output": [] + } + }, + { + "instructions": [ + { + "instruction": "PUSHINT_16 123" + }, + { + "instruction": "NEWC" + }, + { + "instruction": "STU 8", + "comment": "Store 123 as an 8-bit unsigned integer" + }, + { + "instruction": "ENDC" + }, + { + "instruction": "CTOS", + "comment": "Convert to slice (non-empty slice)" + }, + { + "instruction": "ENDS", + "comment": "Try to remove a non-empty slice" + } + ], + "exit_code": 9, + "stack": { + "input": ["Slice{123}"], + "output": ["Slice{123}"] + } + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13697024, + "max": 13762560, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_slice_chk_empty", + "kind": "simple", + "prefix": 209, + "prefix_str": "D1", + "tlb": "#d1" + }, + "signature": { + "stack_string": "s:Slice -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 946, + "function_name": "exec_slice_chk_empty" + } + }, + { + "name": "LDREF", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads a cell reference `c` from `s` and returns the remainder of `s` as `s''`.", + "tags": ["slice parsing"], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice does not contain any references." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13893632, + "max": 13959168, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_ref(_1, 0)", + "kind": "simple", + "prefix": 212, + "prefix_str": "D4", + "tlb": "#d4" + }, + "signature": { + "stack_string": "s:Slice -> c:Cell s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1013, + "function_name": "exec_load_ref" + } + }, + { + "name": "LDREFRTOS", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads a cell reference `c` from `s`, converts it to _Slice_ and returns that _Slice_ and remainder of `s` as `s''`.", + "tags": ["slice parsing"], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice does not contain any references." + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["LDREF", "SWAP", "CTOS"] + } + ], + "gas": [ + { + "value": 118, + "description": "If cell is loaded for the first time" + }, + { + "value": 43, + "description": "If cell is already loaded" + } + ] + }, + "layout": { + "min": 13959168, + "max": 14024704, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_ref_rev_to_slice(_1, 0)", + "kind": "simple", + "prefix": 213, + "prefix_str": "D5", + "tlb": "#d5" + }, + "effects": ["CellLoad"], + "signature": { + "stack_string": "s:Slice -> s':Slice loaded:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "loaded", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1036, + "function_name": "exec_load_ref_rev_to_slice" + } + }, + { + "name": "SDCUTFIRST", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns the first `length` bits of `s`.", + "tags": ["slice parsing"], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice does not contain enough bits." + } + ], + "other_implementations": [ + { + "exact": false, + "instructions": ["PLDSLICEX"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14098432, + "max": 14098688, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_slice_op_args(x, 'SDCUTFIRST', 1023, (cs, bits) => cs.only_first(bits))", + "kind": "simple", + "prefix": 55072, + "prefix_str": "D720", + "tlb": "#d720" + }, + "signature": { + "stack_string": "s:Slice length:Int -> s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1167, + "function_name": "exec_slice_op_args" + } + }, + { + "name": "SDSKIPFIRST", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns all but the first `length` bits of `s`.", + "tags": ["slice parsing"], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice does not contain enough bits." + } + ], + "other_implementations": [ + { + "exact": false, + "instructions": ["LDSLICEX", "NIP"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14098688, + "max": 14098944, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_slice_op_args(x, 'SDSKIPFIRST', 1023, (cs, bits) => cs.skip_first(bits))", + "kind": "simple", + "prefix": 55073, + "prefix_str": "D721", + "tlb": "#d721" + }, + "signature": { + "stack_string": "s:Slice length:Int -> s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1167, + "function_name": "exec_slice_op_args" + } + }, + { + "name": "SDCUTLAST", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns the last `length` bits of `s`.", + "tags": ["slice parsing"], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice does not contain enough bits." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14098944, + "max": 14099200, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_slice_op_args(x, 'SDCUTLAST', 1023, (cs, bits) => cs.only_last(bits))", + "kind": "simple", + "prefix": 55074, + "prefix_str": "D722", + "tlb": "#d722" + }, + "signature": { + "stack_string": "s:Slice length:Int -> s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1167, + "function_name": "exec_slice_op_args" + } + }, + { + "name": "SDSKIPLAST", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns all but the last `length` bits of `s`.", + "tags": ["slice parsing"], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice does not contain enough bits." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14099200, + "max": 14099456, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_slice_op_args(x, 'SDSKIPLAST', 1023, (cs, bits) => cs.skip_last(bits))", + "kind": "simple", + "prefix": 55075, + "prefix_str": "D723", + "tlb": "#d723" + }, + "signature": { + "stack_string": "s:Slice length:Int -> s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1167, + "function_name": "exec_slice_op_args" + } + }, + { + "name": "SDSUBSTR", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns `length` bits of `s` starting from `offset`, thus extracting a bit substring out of the data of `s`.", + "tags": ["slice parsing"], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice does not contain enough bits." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14099456, + "max": 14099712, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_slice_op_args2(x, 'SDSUBSTR', 1023, 1023, (cs, offs, bits) => cs.skip_first(offs) && cs.only_first(bits))", + "kind": "simple", + "prefix": 55076, + "prefix_str": "D724", + "tlb": "#d724" + }, + "signature": { + "stack_string": "s:Slice offset:Int length:Int -> s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "offset", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1181, + "function_name": "exec_slice_op_args2" + } + }, + { + "name": "SCUTFIRST", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns the first `length` bits and first `refs` references of `s`.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice does not contain enough bits or references." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14102528, + "max": 14102784, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_slice_op_args2(x, 'SCUTFIRST', 1023, 4, (cs, bits, refs) => cs.only_first(bits, refs))", + "kind": "simple", + "prefix": 55088, + "prefix_str": "D730", + "tlb": "#d730" + }, + "signature": { + "stack_string": "s:Slice length:Int refs:Int -> s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + }, + { + "type": "simple", + "name": "refs", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 4 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1181, + "function_name": "exec_slice_op_args2" + } + }, + { + "name": "SSKIPFIRST", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns all but the first `length` bits of `s` and `refs` references of `s`.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice does not contain enough bits or references." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14102784, + "max": 14103040, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_slice_op_args2(x, 'SSKIPFIRST', 1023, 4, (cs, bits, refs) => cs.skip_first(bits, refs))", + "kind": "simple", + "prefix": 55089, + "prefix_str": "D731", + "tlb": "#d731" + }, + "signature": { + "stack_string": "s:Slice length:Int refs:Int -> s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + }, + { + "type": "simple", + "name": "refs", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 4 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1181, + "function_name": "exec_slice_op_args2" + } + }, + { + "name": "SCUTLAST", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns the last `length` data bits and last `refs` references of `s`.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice does not contain enough bits or references." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14103040, + "max": 14103296, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_slice_op_args2(x, 'SCUTLAST', 1023, 4, (cs, bits, refs) => cs.only_last(bits, refs))", + "kind": "simple", + "prefix": 55090, + "prefix_str": "D732", + "tlb": "#d732" + }, + "signature": { + "stack_string": "s:Slice length:Int refs:Int -> s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + }, + { + "type": "simple", + "name": "refs", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 4 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1181, + "function_name": "exec_slice_op_args2" + } + }, + { + "name": "SSKIPLAST", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns all but the last `length` bits of `s` and `refs` references of `s`.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice does not contain enough bits or references." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14103296, + "max": 14103552, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_slice_op_args2(x, 'SSKIPLAST', 1023, 4, (cs, bits, refs) => cs.skip_last(bits, refs))", + "kind": "simple", + "prefix": 55091, + "prefix_str": "D733", + "tlb": "#d733" + }, + "signature": { + "stack_string": "s:Slice length:Int refs:Int -> s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + }, + { + "type": "simple", + "name": "refs", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 4 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1181, + "function_name": "exec_slice_op_args2" + } + }, + { + "name": "SUBSLICE", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns `length` bits and `refs` references from _Slice_ `s`, after skipping the first `skip_len` bits and first `skip_refs` references.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice does not contain enough bits or references." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14103552, + "max": 14103808, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_subslice", + "kind": "simple", + "prefix": 55092, + "prefix_str": "D734", + "tlb": "#d734" + }, + "signature": { + "stack_string": "s:Slice skip_len:Int skip_refs:Int length:Int refs:Int -> s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "skip_len", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + }, + { + "type": "simple", + "name": "skip_refs", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 4 + } + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "refs", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1246, + "function_name": "exec_subslice" + } + }, + { + "name": "SPLIT", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Splits the first `length` data bits and first `refs` references from `s` into `s'`, returning the remainder of `s` as `s''`.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice does not contain enough bits or references." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14104064, + "max": 14104320, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_split(_1, false)", + "kind": "simple", + "prefix": 55094, + "prefix_str": "D736", + "tlb": "#d736" + }, + "signature": { + "stack_string": "s:Slice length:Int refs:Int -> s':Slice s'':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + }, + { + "type": "simple", + "name": "refs", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 4 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s''", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1260, + "function_name": "exec_split" + } + }, + { + "name": "SPLITQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Splits the first `length` data bits and first `refs` references from `s` into `s'`, returning the remainder of `s` as `s''`. This is a quiet version of `SPLIT` which means that instead of throwing an exception, it pushes a status flag to the stack: 0 if the operation fails, -1 if the operation succeeds.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14104320, + "max": 14104576, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_split(_1, true)", + "kind": "simple", + "prefix": 55095, + "prefix_str": "D737", + "tlb": "#d737" + }, + "signature": { + "stack_string": "s:Slice length:Int refs:Int -> (s:Slice 0)|(s':Slice s'':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + }, + { + "type": "simple", + "name": "refs", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 4 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s''", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1260, + "function_name": "exec_split" + } + }, + { + "name": "XCTOS", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Transforms an ordinary or exotic cell into a _Slice_, as if it were an ordinary cell. A flag is returned indicating whether `c` is exotic. If that be the case, its type can later be deserialized from the first eight bits of `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14104832, + "max": 14105088, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_cell_to_slice_maybe_special", + "kind": "simple", + "prefix": 55097, + "prefix_str": "D739", + "tlb": "#d739" + }, + "signature": { + "stack_string": "c:Cell -> s:Slice flag:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "flag", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 891, + "function_name": "exec_cell_to_slice_maybe_special" + } + }, + { + "name": "XLOAD", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads an exotic cell `c` and returns an ordinary cell `c'`. If `c` is already ordinary, does nothing. If `c` cannot be loaded, throws an exception.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Failed to load exotic cell." + }, + { + "errno": "9", + "condition": "Unexpected special cell type." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14105088, + "max": 14105344, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_special_cell(_1, false)", + "kind": "simple", + "prefix": 55098, + "prefix_str": "D73A", + "tlb": "#d73a" + }, + "signature": { + "stack_string": "c:Cell -> c':Cell", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c'", + "value_types": ["Cell"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 901, + "function_name": "exec_load_special_cell" + } + }, + { + "name": "XLOADQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads an exotic cell `c` and returns an ordinary cell `c'`. If `c` is already ordinary, does nothing. If `c` cannot be loaded, returns 0.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14105344, + "max": 14105600, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_special_cell(_1, true)", + "kind": "simple", + "prefix": 55099, + "prefix_str": "D73B", + "tlb": "#d73b" + }, + "signature": { + "stack_string": "c:Cell -> (c:Cell 0)|(c':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "c'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 901, + "function_name": "exec_load_special_cell" + } + }, + { + "name": "SCHKBITS", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Checks whether there are at least `length` data bits in _Slice_ `s`. If this is not the case, throws a cell deserialisation (i.e., cell underflow) exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "If no exception was thrown" + }, + { + "value": 76, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 14106880, + "max": 14107136, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_slice_chk_op_args(x, 'SCHKBITS', 1023, false, (cs, bits) => cs.have(bits))", + "kind": "simple", + "prefix": 55105, + "prefix_str": "D741", + "tlb": "#d741" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "s:Slice length:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1285, + "function_name": "exec_slice_chk_op_args" + } + }, + { + "name": "SCHKREFS", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Checks whether there are at least `r` references in _Slice_ `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "If no exception was thrown" + }, + { + "value": 76, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 14107136, + "max": 14107392, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_slice_chk_op_args(x, 'SCHKREFS', 1023, false, (cs, refs) => cs.have_refs(refs))", + "kind": "simple", + "prefix": 55106, + "prefix_str": "D742", + "tlb": "#d742" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "s:Slice r:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1285, + "function_name": "exec_slice_chk_op_args" + } + }, + { + "name": "SCHKBITREFS", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Checks whether there are at least `length` data bits and `r` references in _Slice_ `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "If no exception was thrown" + }, + { + "value": 76, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 14107392, + "max": 14107648, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_slice_chk_op_args2(x, 'SCHKBITREFS', 1023, 4, false, (cs, bits, refs) => cs.have(bits) && cs.have_refs(refs))", + "kind": "simple", + "prefix": 55107, + "prefix_str": "D743", + "tlb": "#d743" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "s:Slice length:Int r:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1301, + "function_name": "exec_slice_chk_op_args2" + } + }, + { + "name": "SCHKBITSQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Checks whether there are at least `length` data bits in _Slice_ `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14107904, + "max": 14108160, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_slice_chk_op_args(x, 'SCHKBITSQ', 1023, true, (cs, bits) => cs.have(bits))", + "kind": "simple", + "prefix": 55109, + "prefix_str": "D745", + "tlb": "#d745" + }, + "signature": { + "stack_string": "s:Slice length:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1285, + "function_name": "exec_slice_chk_op_args" + } + }, + { + "name": "SCHKREFSQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Checks whether there are at least `r` references in _Slice_ `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14108160, + "max": 14108416, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_slice_chk_op_args(x, 'SCHKREFSQ', 1023, true, (cs, refs) => cs.have_refs(refs))", + "kind": "simple", + "prefix": 55110, + "prefix_str": "D746", + "tlb": "#d746" + }, + "signature": { + "stack_string": "s:Slice r:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1285, + "function_name": "exec_slice_chk_op_args" + } + }, + { + "name": "SCHKBITREFSQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Checks whether there are at least `length` data bits and `r` references in _Slice_ `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14108416, + "max": 14108672, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "x => exec_slice_chk_op_args2(x, 'SCHKBITREFSQ', 1023, 4, true, (cs, bits, refs) => cs.have(bits) && cs.have_refs(refs))", + "kind": "simple", + "prefix": 55111, + "prefix_str": "D747", + "tlb": "#d747" + }, + "signature": { + "stack_string": "s:Slice length:Int r:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1301, + "function_name": "exec_slice_chk_op_args2" + } + }, + { + "name": "PLDREFVAR", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads the `n`-th cell reference of _Slice_ `s`.", + "tags": ["slice parsing"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14108672, + "max": 14108928, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_preload_ref", + "kind": "simple", + "prefix": 55112, + "prefix_str": "D748", + "tlb": "#d748" + }, + "signature": { + "stack_string": "s:Slice n:Int -> c:Cell", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1000, + "function_name": "exec_preload_ref" + } + }, + { + "name": "SBITS", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns the number of data bits in _Slice_ `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14108928, + "max": 14109184, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_slice_bits_refs(_1, 1)", + "kind": "simple", + "prefix": 55113, + "prefix_str": "D749", + "tlb": "#d749" + }, + "signature": { + "stack_string": "s:Slice -> length:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "length", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1318, + "function_name": "exec_slice_bits_refs" + } + }, + { + "name": "SREFS", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns the number of references in _Slice_ `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14109184, + "max": 14109440, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_slice_bits_refs(_compute_len_slice_begins_with_const1, 2)", + "kind": "simple", + "prefix": 55114, + "prefix_str": "D74A", + "tlb": "#d74a" + }, + "signature": { + "stack_string": "s:Slice -> r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1318, + "function_name": "exec_slice_bits_refs" + } + }, + { + "name": "SBITREFS", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns both the number of data bits and the number of references in `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14109440, + "max": 14109696, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_slice_bits_refs(_1, 3)", + "kind": "simple", + "prefix": 55115, + "prefix_str": "D74B", + "tlb": "#d74b" + }, + "signature": { + "stack_string": "s:Slice -> length:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "length", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1318, + "function_name": "exec_slice_bits_refs" + } + }, + { + "name": "LDZEROES", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns the count `n` of leading zero bits in `s`, and removes these bits from `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14114816, + "max": 14115072, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_same(_1, 'LDZEROES', 0)", + "kind": "simple", + "prefix": 55136, + "prefix_str": "D760", + "tlb": "#d760" + }, + "signature": { + "stack_string": "s:Slice -> n:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1371, + "function_name": "exec_load_same" + } + }, + { + "name": "LDONES", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns the count `n` of leading one bits in `s`, and removes these bits from `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14115072, + "max": 14115328, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_same(_1, 'LDONES', 1)", + "kind": "simple", + "prefix": 55137, + "prefix_str": "D761", + "tlb": "#d761" + }, + "signature": { + "stack_string": "s:Slice -> n:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1371, + "function_name": "exec_load_same" + } + }, + { + "name": "LDSAME", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns the count `n` of leading bits equal to `x` (0 or 1) in `s`, and removes these bits from `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14115328, + "max": 14115584, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_same(_1, 'LDSAME', -1)", + "kind": "simple", + "prefix": 55138, + "prefix_str": "D762", + "tlb": "#d762" + }, + "signature": { + "stack_string": "s:Slice x:Int -> n:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1371, + "function_name": "exec_load_same" + } + }, + { + "name": "SDEPTH", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns the depth of _Slice_ `s`. If `s` has no references, then `x == 0`; otherwise `x` is one plus the maximum of depths of cells referred to from `s`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14115840, + "max": 14116096, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_slice_depth", + "kind": "simple", + "prefix": 55140, + "prefix_str": "D764", + "tlb": "#d764" + }, + "signature": { + "stack_string": "s:Slice -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1396, + "function_name": "exec_slice_depth" + } + }, + { + "name": "CDEPTH", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns the depth of _Cell_ `c`. If `c` has no references, then `x == 0`; otherwise `x` is one plus the maximum of depths of cells referred to from `c`. If `c` is a _Null_ instead of a _Cell_, returns zero.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14116096, + "max": 14116352, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_cell_depth", + "kind": "simple", + "prefix": 55141, + "prefix_str": "D765", + "tlb": "#d765" + }, + "signature": { + "stack_string": "c:Cell -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1388, + "function_name": "exec_cell_depth" + } + }, + { + "name": "CLEVEL", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns level of the cell.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14116352, + "max": 14116608, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_cell_level", + "version": 6, + "kind": "simple", + "prefix": 55142, + "prefix_str": "D766", + "tlb": "#d766" + }, + "signature": { + "stack_string": "cell:Cell -> level:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cell", + "value_types": ["Cell"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "level", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1404, + "function_name": "exec_cell_level" + } + }, + { + "name": "CLEVELMASK", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns level mask of the cell.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14116608, + "max": 14116864, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_cell_level_mask", + "version": 6, + "kind": "simple", + "prefix": 55143, + "prefix_str": "D767", + "tlb": "#d767" + }, + "signature": { + "stack_string": "cell:Cell -> level_mask:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cell", + "value_types": ["Cell"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "level_mask", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1412, + "function_name": "exec_cell_level_mask" + } + }, + { + "name": "CHASHIX", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns `i`-th hash of the cell.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14118912, + "max": 14119168, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": " (_1) => exec_cell_hash_i(_1, 0, true)", + "version": 6, + "kind": "simple", + "prefix": 55152, + "prefix_str": "D770", + "tlb": "#d770" + }, + "signature": { + "stack_string": "cell:Cell i:Int -> hash:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cell", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "hash", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1420, + "function_name": "exec_cell_hash_i" + } + }, + { + "name": "CDEPTHIX", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns `i`-th depth of the cell.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14119168, + "max": 14119424, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": " (_1) => exec_cell_depth_i(_1, 0, true)", + "version": 6, + "kind": "simple", + "prefix": 55153, + "prefix_str": "D771", + "tlb": "#d771" + }, + "signature": { + "stack_string": "cell:Cell i:Int -> depth:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cell", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "depth", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1438, + "function_name": "exec_cell_depth_i" + } + }, + { + "name": "EXECUTE", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "_Calls_ or _executes_, continuation `c` from the stack. After the call old `cc` is restored and execution continues.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14155776, + "max": 14221312, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_execute", + "kind": "simple", + "prefix": 216, + "prefix_str": "D8", + "tlb": "#d8" + }, + "signature": { + "stack_string": "c:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 33, + "function_name": "exec_execute" + } + }, + { + "name": "JMPX", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "_Jumps_, or transfers control, to continuation `c` from the stack.\nThe remainder of the previous current continuation `cc` is discarded.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14221312, + "max": 14286848, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_jmpx", + "kind": "simple", + "prefix": 217, + "prefix_str": "D9", + "tlb": "#d9" + }, + "signature": { + "stack_string": "c:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 53, + "function_name": "exec_jmpx" + } + }, + { + "name": "RET", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "_Returns_ to the continuation from `c0`. The remainder of the current continuation `cc` is discarded.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": false, + "instructions": ["PUSHCTR c0", "JMPX"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14364672, + "max": 14364928, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_ret", + "kind": "simple", + "prefix": 56112, + "prefix_str": "DB30", + "tlb": "#db30" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 0 + } + ] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "control_flow": { + "branches": [ + { + "type": "register", + "index": 0 + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 66, + "function_name": "exec_ret" + } + }, + { + "name": "RETALT", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "_Returns_ to the continuation from `c1`. The remainder of the current continuation `cc` is discarded.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": false, + "instructions": ["PUSHCTR c1", "JMPX"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14364928, + "max": 14365184, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_ret_alt", + "kind": "simple", + "prefix": 56113, + "prefix_str": "DB31", + "tlb": "#db31" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "control_flow": { + "branches": [ + { + "type": "register", + "index": 1 + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 77, + "function_name": "exec_ret_alt" + } + }, + { + "name": "RETBOOL", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "Pop `cond` from the stack and perform a `RET` or `RETALT` depending on the value of `cond` (-1 for `RET`, 0 for `RETALT`).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14365184, + "max": 14365440, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_ret_bool", + "kind": "simple", + "prefix": 56114, + "prefix_str": "DB32", + "tlb": "#db32" + }, + "signature": { + "stack_string": "cond:Bool -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Bool"] + } + ], + "registers": [ + { + "type": "constant", + "index": 0 + }, + { + "type": "constant", + "index": 1 + } + ] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 82, + "function_name": "exec_ret_bool" + } + }, + { + "name": "CALLCC", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "_Call with current continuation_, transfers control to `c` from the stack, pushing the old value of `cc` into `c`'s stack (instead of discarding it or writing it into new `c0`).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14365696, + "max": 14365952, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_callcc", + "kind": "simple", + "prefix": 56116, + "prefix_str": "DB34", + "tlb": "#db34" + }, + "signature": { + "stack_string": "c:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 87, + "function_name": "exec_callcc" + } + }, + { + "name": "JMPXDATA", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "_Transfers control_ to continuation `c` from the stack, converting the remainder of the current continuation (the old value of `cc`) into a _Slice_ before pushing it onto the stack of `c`. Unlike `CALLCC` which pushes the old continuation as is, this instruction converts it to a _Slice_ first.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14365952, + "max": 14366208, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_jmpx_data", + "kind": "simple", + "prefix": 56117, + "prefix_str": "DB35", + "tlb": "#db35" + }, + "signature": { + "stack_string": "c:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 96, + "function_name": "exec_jmpx_data" + } + }, + { + "name": "CALLXVARARGS", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "_Calls_ continuation `c` with parameters and expected return values, but unlike `CALLXARGS` which takes these values from the instruction itself, this instruction takes `p` and `r` from the stack. Here `p` represents the number of parameters to pass to the continuation, and `r` represents the number of expected return values.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14366720, + "max": 14366976, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_callx_varargs", + "kind": "simple", + "prefix": 56120, + "prefix_str": "DB38", + "tlb": "#db38" + }, + "signature": { + "stack_string": "x_1...x_p c:Continuation p:Int r:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "array", + "name": "args", + "length_var": "p", + "array_entry": [ + { + "type": "simple", + "name": "arg" + } + ] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + }, + { + "type": "simple", + "name": "p", + "value_types": ["Int"], + "range": { + "min": -1, + "max": 254 + } + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"], + "range": { + "min": -1, + "max": 254 + } + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 114, + "function_name": "exec_callx_varargs" + } + }, + { + "name": "RETVARARGS", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "_Returns_ to the continuation at `c0`, but unlike `RETARGS` which takes the number of return values from the instruction itself, this instruction takes the number of return values `r` from the stack. The top `r` values from the current stack are passed as return values to `c0`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14366976, + "max": 14367232, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_ret_varargs", + "kind": "simple", + "prefix": 56121, + "prefix_str": "DB39", + "tlb": "#db39" + }, + "signature": { + "stack_string": "x_1...x_p p:Int r:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "array", + "name": "args", + "length_var": "p", + "array_entry": [ + { + "type": "simple", + "name": "arg" + } + ] + }, + { + "type": "simple", + "name": "p", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 255 + } + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 123, + "function_name": "exec_ret_varargs" + } + }, + { + "name": "JMPXVARARGS", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "_Jumps_ to continuation `c`, but unlike `JMPXARGS` which takes the number of parameters from the instruction itself, this instruction takes the number of parameters `p` from the stack. Only the top `p` values from the current stack are passed to the continuation, and the remainder of the current stack is discarded. The remainder of the current continuation is also discarded.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14367232, + "max": 14367488, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_jmpx_varargs", + "kind": "simple", + "prefix": 56122, + "prefix_str": "DB3A", + "tlb": "#db3a" + }, + "signature": { + "stack_string": "x_1...x_p c:Continuation p:Int r:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "array", + "name": "args", + "length_var": "p", + "array_entry": [ + { + "type": "simple", + "name": "arg" + } + ] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + }, + { + "type": "simple", + "name": "p", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 254 + } + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 130, + "function_name": "exec_jmpx_varargs" + } + }, + { + "name": "CALLCCVARARGS", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "_Calls_ continuation `c` with parameters and pushes the old value of the current continuation, but unlike `CALLCCARGS` which takes the number of parameters and return values from the instruction itself, this instruction takes `p` and `r` from the stack. The old value of the current continuation `cc` (along with the top `p` values from the original stack) is pushed onto the stack of the newly-invoked continuation `c`, setting `cc.nargs` to `r`. This allows the called continuation to later return to the caller with the specified number of return values.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14367488, + "max": 14367744, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_callcc_varargs", + "kind": "simple", + "prefix": 56123, + "prefix_str": "DB3B", + "tlb": "#db3b" + }, + "signature": { + "stack_string": "x_1...x_p c:Continuation p:Int r:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "array", + "name": "args", + "length_var": "p", + "array_entry": [ + { + "type": "simple", + "name": "arg" + } + ] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + }, + { + "type": "simple", + "name": "p", + "value_types": ["Int"], + "range": { + "min": -1, + "max": 254 + } + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"], + "range": { + "min": -1, + "max": 254 + } + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 139, + "function_name": "exec_callcc_varargs" + } + }, + { + "name": "RETDATA", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "Returns to the continuation at `c0`, converting the remainder of the current continuation into a _Slice_ and pushing it onto the stack of `c0`.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHCTR c0", "JMPXDATA"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14368512, + "max": 14368768, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_ret_data", + "kind": "simple", + "prefix": 56127, + "prefix_str": "DB3F", + "tlb": "#db3f" + }, + "signature": { + "stack_string": "∅ -> prev_cc:Slice", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 0 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "prev_cc", + "value_types": ["Slice"] + } + ], + "registers": [] + } + }, + "control_flow": { + "branches": [ + { + "type": "register", + "index": 0 + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 209, + "function_name": "exec_ret_data" + } + }, + { + "name": "RUNVMX", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "Runs child VM with `code` and stack `x_1...x_n`. Returns the resulting stack `x'_1...x'_m` and exitcode. Other arguments and return values are enabled by flags taken from the stack.", + "long": "Flags:\n\n- **+1** — same_c3 (set c3 to code)\n- **+2** — push_0 (push an implicit 0 before running the code); only works with +1 enabled\n- **+4** — load c4 (persistent data) from stack and return its final value\n- **+8** — load gas limit from stack and return consumed gas\n- **+16** — load c7 (smart-contract context)\n- **+32** — return c5 (actions)\n- **+64** — pop hard gas limit (enabled by ACCEPT) from stack as well\n- **+128** — isolated gas consumption (separate set of visited cells, reset chksgn counter)\n- **+256** — pop number N, return exactly N values from stack (only if res=0 or 1; if not enough then res=stk_und)", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14372864, + "max": 14373120, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_runvmx", + "version": 4, + "kind": "simple", + "prefix": 56144, + "prefix_str": "DB50", + "tlb": "#db50" + }, + "signature": { + "stack_string": "flags:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "flags", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 277, + "function_name": "exec_runvmx" + } + }, + { + "name": "IFRET", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `cond` is non-zero, ends the current continuation and returns to `c0`.", + "long": "If condition is met, performs `RET` which ends the current continuation and returns to continuation in `c0`. If `c0` holds the initial `quit` continuation (that is, the current execution is in the root continuation), the program exits with code 0.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "4", + "condition": "If `cond` is a `NaN`." + } + ], + "docs_links": [ + { + "name": "c0 register and normal exit point", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/diving-deeper-exit-points-of-continuations/#normal-exit-point-c0" + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14417920, + "max": 14483456, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_ifret", + "kind": "simple", + "prefix": 220, + "prefix_str": "DC", + "tlb": "#dc" + }, + "signature": { + "stack_string": "cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 0 + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "register", + "index": 0 + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 369, + "function_name": "exec_ifret" + } + }, + { + "name": "IFNOTRET", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `cond` is zero, ends the current continuation and returns to `c0`.", + "long": "If condition is met, performs `RET` which ends the current continuation and returns to continuation in `c0`. If `c0` holds the initial `quit` continuation (that is, the current execution is in the root continuation), the program exits with code 0.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "4", + "condition": "If `cond` is a `NaN`." + } + ], + "docs_links": [ + { + "name": "c0 register and normal exit point", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/diving-deeper-exit-points-of-continuations/#normal-exit-point-c0" + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14483456, + "max": 14548992, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_ifnotret", + "kind": "simple", + "prefix": 221, + "prefix_str": "DD", + "tlb": "#dd" + }, + "signature": { + "stack_string": "cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 0 + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "register", + "index": 0 + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 377, + "function_name": "exec_ifnotret" + } + }, + { + "name": "IF", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `cond` is non-zero, executes `body`, otherwise does nothing.", + "long": "If condition is met, performs `EXECUTE` on `body` continuation. After the body is executed, execution will return to the next instruction after the `IF`.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "4", + "condition": "If `cond` is a `NaN`." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 -1", + "comment": "Condition value (non-zero means true)" + }, + { + "instruction": "PUSHCONT {", + "comment": "Continuation body that adds 5 and 10" + }, + { + "instruction": " PUSHINT_4 5\n PUSHINT_4 10\n ADD\n}", + "comment": "" + }, + { + "instruction": "IF", + "comment": "Execute the continuation if condition is true" + } + ], + "stack": { + "input": ["-1", "Continuation"], + "output": ["15"] + } + }, + { + "instructions": [ + { + "instruction": "PUSHINT_4 0", + "comment": "Condition value (zero means false)" + }, + { + "instruction": "PUSHCONT {", + "comment": "Continuation body that adds 5 and 10" + }, + { + "instruction": " PUSHINT_4 5\n PUSHINT_4 10\n ADD\n}", + "comment": "" + }, + { + "instruction": "IF", + "comment": "Execute the continuation if condition is true" + } + ], + "stack": { + "input": ["0", "Continuation"], + "output": [] + } + } + ], + "docs_links": [ + { + "name": "JMP vs. EXECUTE", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/manual-handling-and-jmp-vs-execute/" + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14548992, + "max": 14614528, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_if", + "kind": "simple", + "prefix": 222, + "prefix_str": "DE", + "tlb": "#de" + }, + "signature": { + "stack_string": "cond:Int body:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 325, + "function_name": "exec_if" + } + }, + { + "name": "IFNOT", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `cond` is zero, executes `body`, otherwise does nothing.", + "long": "If condition is met, performs `EXECUTE` on `body` continuation. After the body is executed, execution will return to the next instruction after the `IFNOT`.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "4", + "condition": "If `cond` is a `NaN`." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 0", + "comment": "Condition value (zero means false)" + }, + { + "instruction": "PUSHCONT {", + "comment": "Continuation body that adds 5 and 10" + }, + { + "instruction": " PUSHINT_4 5\n PUSHINT_4 10\n ADD\n}", + "comment": "" + }, + { + "instruction": "IFNOT", + "comment": "Execute the continuation if condition is false" + } + ], + "stack": { + "input": ["0", "Continuation"], + "output": ["15"] + } + }, + { + "instructions": [ + { + "instruction": "PUSHINT_4 -1", + "comment": "Condition value (non-zero means true)" + }, + { + "instruction": "PUSHCONT {", + "comment": "Continuation body that adds 5 and 10" + }, + { + "instruction": " PUSHINT_4 5\n PUSHINT_4 10\n ADD\n}", + "comment": "" + }, + { + "instruction": "IFNOT", + "comment": "Execute the continuation if condition is false" + } + ], + "stack": { + "input": ["-1", "Continuation"], + "output": [] + } + } + ], + "docs_links": [ + { + "name": "JMP vs. EXECUTE", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/manual-handling-and-jmp-vs-execute/" + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14614528, + "max": 14680064, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_ifnot", + "kind": "simple", + "prefix": 223, + "prefix_str": "DF", + "tlb": "#df" + }, + "signature": { + "stack_string": "cond:Int body:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 336, + "function_name": "exec_ifnot" + } + }, + { + "name": "IFJMP", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `cond` is non-zero, jumps to `body`, otherwise does nothing.", + "long": "If condition is met, performs `JMPX` on `body` continuation. The remainder of the current continuation is discarded which means that after `body` completes, control will not return to instruction immediately following the `IFJMP`. Instead, it will return to the instruction immediately following the instruction that started current continuation. If this continuation is default `quit`, the program will exit with code 0.", + "tags": ["control_flow"], + "operands": [], + "exit_codes": [ + { + "errno": "4", + "condition": "If `cond` is a `NaN`." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 -1" + }, + { + "instruction": "PUSHCONT {\n PUSHINT_4 1\n PUSHINT_4 2\n ADD\n // implicit exit from the continuation\n // and since grand continuation is default `quit`\n // the program will exit with code 0\n}", + "is_main": true + }, + { + "instruction": "IFJMP", + "comment": "Transfers control to the continuation", + "is_main": true + }, + { + "instruction": "PUSHINT_LONG 999", + "comment": "This will never be executed" + } + ], + "stack": { + "input": ["Continuation", "-1"], + "output": ["3"] + } + } + ], + "docs_links": [ + { + "name": "JMP vs. EXECUTE", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/manual-handling-and-jmp-vs-execute/" + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14680064, + "max": 14745600, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_if_jmp", + "kind": "simple", + "prefix": 224, + "prefix_str": "E0", + "tlb": "#e0" + }, + "signature": { + "stack_string": "cond:Int body:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 347, + "function_name": "exec_if_jmp" + } + }, + { + "name": "IFNOTJMP", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `cond` is zero, jumps to `body`, otherwise does nothing.", + "long": "If condition is met, performs `JMPX` on `body` continuation. The remainder of the current continuation is discarded which means that after `body` completes, control will not return to instruction immediately following the `IFNOTJMP`. Instead, it will return to the instruction immediately following the instruction that started current continuation. If this continuation is default `quit`, the program will exit with code 0.", + "tags": ["control_flow"], + "operands": [], + "exit_codes": [ + { + "errno": "4", + "condition": "If `cond` is a `NaN`." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 0" + }, + { + "instruction": "PUSHCONT {\n PUSHINT_4 1\n PUSHINT_4 2\n ADD\n // implicit exit from the continuation\n // and since grand continuation is default `quit`\n // the program will exit with code 0\n}", + "is_main": true + }, + { + "instruction": "IFNOTJMP", + "comment": "Transfers control to the continuation", + "is_main": true + }, + { + "instruction": "PUSHINT_LONG 999", + "comment": "This will never be executed" + } + ], + "stack": { + "input": ["Continuation", "0"], + "output": ["3"] + } + } + ], + "docs_links": [ + { + "name": "JMP vs. EXECUTE", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/manual-handling-and-jmp-vs-execute/" + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14745600, + "max": 14811136, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_ifnot_jmp", + "kind": "simple", + "prefix": 225, + "prefix_str": "E1", + "tlb": "#e1" + }, + "signature": { + "stack_string": "cond:Int body:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 358, + "function_name": "exec_ifnot_jmp" + } + }, + { + "name": "IFELSE", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `cond` is non-zero, executes `body`, otherwise executes `else`.", + "long": "If condition is met, performs `EXECUTE` on `body` continuation, otherwise performs `EXECUTE` on `else` continuation. After the either body is executed, execution will return to the next instruction after the `IFELSE`.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "4", + "condition": "If `cond` is a `NaN`." + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["CONDSELCHK", "EXECUTE"] + } + ], + "docs_links": [ + { + "name": "JMP vs. EXECUTE", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/manual-handling-and-jmp-vs-execute/" + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14811136, + "max": 14876672, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_if_else", + "kind": "simple", + "prefix": 226, + "prefix_str": "E2", + "tlb": "#e2" + }, + "signature": { + "stack_string": "cond:Int body:Continuation else:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + }, + { + "type": "simple", + "name": "else", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + }, + { + "type": "variable", + "var_name": "c'", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 385, + "function_name": "exec_if_else" + } + }, + { + "name": "CONDSEL", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If integer `f` is non-zero, returns `x`, otherwise returns `y`.", + "long": "No type checks are performed on `x` and `y`, so this can be thought of as a conditional stack operation.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": false, + "instructions": ["ROT", "EQINT 0", "INC", "ROLL", "NIP"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14877696, + "max": 14877952, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_condsel", + "kind": "simple", + "prefix": 58116, + "prefix_str": "E304", + "tlb": "#e304" + }, + "signature": { + "stack_string": "cond:Int x:Any y:Any -> result:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "x" + }, + { + "type": "simple", + "name": "y" + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 398, + "function_name": "exec_condsel" + } + }, + { + "name": "CONDSELCHK", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If integer `f` is non-zero, returns `x`, otherwise returns `y`. Throws if `x` and `y` have different types.", + "long": "This instruction checks whether `x` and `y` have the same type, unlike `CONDSEL`.", + "tags": [], + "exit_codes": [ + { + "errno": "7", + "condition": "If `x` and `y` have different types." + } + ], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14877952, + "max": 14878208, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_condsel_chk", + "kind": "simple", + "prefix": 58117, + "prefix_str": "E305", + "tlb": "#e305" + }, + "signature": { + "stack_string": "cond:Int x:Any y:Any -> result:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "x" + }, + { + "type": "simple", + "name": "y" + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 408, + "function_name": "exec_condsel_chk" + } + }, + { + "name": "IFRETALT", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `cond` is non-zero, ends the current continuation and returns to `c1`.", + "long": "If condition is met, performs `RETALT` which ends the current continuation and returns to continuation in `c1`. If `c1` holds the initial `quit` continuation (that is, the current execution is in the root continuation), the program exits with code 0.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "4", + "condition": "If `cond` is a `NaN`." + } + ], + "docs_links": [ + { + "name": "c1 register and alternative exit point", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/diving-deeper-exit-points-of-continuations/#alternative-exit-point-c1" + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14878720, + "max": 14878976, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_ifretalt", + "kind": "simple", + "prefix": 58120, + "prefix_str": "E308", + "tlb": "#e308" + }, + "signature": { + "stack_string": "cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "register", + "index": 1 + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 421, + "function_name": "exec_ifretalt" + } + }, + { + "name": "IFNOTRETALT", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `cond` is zero, ends the current continuation and returns to `c1`.", + "long": "If condition is met, performs `RETALT` which ends the current continuation and returns to continuation in `c1`. If `c1` holds the initial `quit` continuation (that is, the current execution is in the root continuation), the program exits with code 0.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "4", + "condition": "If `cond` is a `NaN`." + } + ], + "docs_links": [ + { + "name": "c1 register and alternative exit point", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/diving-deeper-exit-points-of-continuations/#alternative-exit-point-c1" + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14878976, + "max": 14879232, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_ifnotretalt", + "kind": "simple", + "prefix": 58121, + "prefix_str": "E309", + "tlb": "#e309" + }, + "signature": { + "stack_string": "cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "register", + "index": 1 + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 429, + "function_name": "exec_ifnotretalt" + } + }, + { + "name": "REPEAT", + "category": "continuation", + "sub_category": "continuation_cond_loop", + "description": { + "short": "Executes continuation `body` `n`-times, if integer `n` is non-negative.", + "long": "`RET` inside the code of `body` works as a `continue`, not as a `break`. To `break` from the loop, use either alternative loop `REPEATBRK` + `RETALT` or `RETALT`, along with a `SETEXITALT` before the loop.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "5", + "condition": "If `n >= 2^31` or `n < -2^31`." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 0", + "comment": "Initialize sum" + }, + { + "instruction": "PUSHINT_4 5", + "comment": "Number of iterations" + }, + { + "instruction": "PUSHCONT {\n PUSHINT_4 10\n ADD\n}", + "comment": "Body: add 10 to the sum in each iteration" + }, + { + "instruction": "REPEAT", + "comment": "Execute the body 5 times" + } + ], + "stack": { + "input": ["0", "5", "Body"], + "output": ["50"] + } + } + ], + "docs_links": [ + { + "name": "Exit points of continuations", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/diving-deeper-exit-points-of-continuations/" + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14942208, + "max": 15007744, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_repeat(_1, false)", + "kind": "simple", + "prefix": 228, + "prefix_str": "E4", + "tlb": "#e4" + }, + "signature": { + "stack_string": "n:Int body:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "special", + "name": "repeat", + "args": { + "count": "n", + "body": { + "type": "variable", + "var_name": "c" + }, + "after": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 489, + "function_name": "exec_repeat" + } + }, + { + "name": "REPEATEND", + "category": "continuation", + "sub_category": "continuation_cond_loop", + "description": { + "short": "Takes a remainder of the current continuation and executes it `n`-times, if integer `n` is non-negative.", + "long": "Unlike `REPEAT` which executes a separate continuation `body` as the loop body, this instruction uses the current continuation itself as the loop body.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "5", + "condition": "If `n >= 2^31` or `n < -2^31`." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15007744, + "max": 15073280, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_repeat_end(_1, false)", + "kind": "simple", + "prefix": 229, + "prefix_str": "E5", + "tlb": "#e5" + }, + "signature": { + "stack_string": "n:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "control_flow": { + "branches": [ + { + "type": "special", + "name": "repeat", + "args": { + "count": "n", + "body": { + "type": "cc" + }, + "after": { + "type": "register", + "index": 0 + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 501, + "function_name": "exec_repeat_end" + } + }, + { + "name": "UNTIL", + "category": "continuation", + "sub_category": "continuation_cond_loop", + "description": { + "short": "Executes continuation `body`, then pops an integer `cond` from the resulting stack. If `cond` is **zero**, performs another iteration of this loop, otherwise ends the loop.", + "long": "The actual implementation of this primitive involves an extraordinary continuation `ec_until` with its arguments set to the `body` of the loop and the original current continuation `cc`. This extraordinary continuation is then saved into the savelist of `body` as `body.c0` and the modified `body` is then executed. The other loop primitives are implemented similarly with the aid of suitable extraordinary continuations.", + "tags": [], + "operands": [], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_8 100" + }, + { + "instruction": "PUSHCONT {\n DEC\n DUP" + }, + { + "instruction": " EQINT 10", + "comment": "Check if counter is ten," + }, + { + "instruction": " ", + "comment": "if true, exit the loop" + }, + { + "instruction": "}" + }, + { + "instruction": "UNTIL", + "comment": "Starts the loop", + "is_main": true + } + ], + "stack": { + "input": ["Continuation", "100"], + "output": ["10"] + } + } + ], + "docs_links": [ + { + "name": "Save lists", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/basics-register-c0-cc-savelist-if-instruction/" + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15073280, + "max": 15138816, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_until(_1, false)", + "kind": "simple", + "prefix": 230, + "prefix_str": "E6", + "tlb": "#e6" + }, + "signature": { + "stack_string": "body:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c", + "save": { + "c0": { + "type": "special", + "name": "until", + "args": { + "body": { + "type": "variable", + "var_name": "c" + }, + "after": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 513, + "function_name": "exec_until" + } + }, + { + "name": "UNTILEND", + "category": "continuation", + "sub_category": "continuation_cond_loop", + "description": { + "short": "Takes a remainder of the current continuation, executes it, then pops an integer `cond` from the resulting stack. If `cond` is **zero**, performs another iteration of this loop, otherwise ends the loop.", + "long": "Unlike `UNTIL` which executes a separate continuation as the loop body, this instruction uses the current continuation itself as the loop body. When the loop exit condition is satisfied (when `cond` is **non-zero**), performs a `RET`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15138816, + "max": 15204352, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_until_end(_1, false)", + "kind": "simple", + "prefix": 231, + "prefix_str": "E7", + "tlb": "#e7" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "control_flow": { + "branches": [ + { + "type": "cc", + "save": { + "c0": { + "type": "special", + "name": "until", + "args": { + "body": { + "type": "cc" + }, + "after": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 520, + "function_name": "exec_until_end" + } + }, + { + "name": "WHILE", + "category": "continuation", + "sub_category": "continuation_cond_loop", + "description": { + "short": "Executes continuation `cond`, then pops an integer `cond` from the resulting stack. If `cond` is **non-zero**, executes `body`, and then begins a new iteration, otherwise ends the loop.", + "long": "The actual implementation of this primitive involves an extraordinary continuation `ec_while`.", + "tags": [], + "operands": [], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 0", + "comment": "Initialize counter" + }, + { + "instruction": "PUSHCONT {\n DUP\n PUSHINT_4 3\n LESS\n}", + "comment": "Condition: check if counter < 3" + }, + { + "instruction": "PUSHCONT {\n INC\n}", + "comment": "Body: increment counter" + }, + { + "instruction": "WHILE", + "comment": "Execute loop while condition is true" + } + ], + "stack": { + "input": ["0", "Condition", "Body"], + "output": ["3"] + } + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15204352, + "max": 15269888, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_while(_1, false)", + "kind": "simple", + "prefix": 232, + "prefix_str": "E8", + "tlb": "#e8" + }, + "signature": { + "stack_string": "cond:Continuation body:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Continuation"] + }, + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c'", + "save": { + "c0": { + "type": "special", + "name": "while", + "args": { + "cond": { + "type": "variable", + "var_name": "c'" + }, + "body": { + "type": "variable", + "var_name": "c" + }, + "after": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 526, + "function_name": "exec_while" + } + }, + { + "name": "WHILEEND", + "category": "continuation", + "sub_category": "continuation_cond_loop", + "description": { + "short": "Executes continuation `cond`, then pops an integer `cond` from the resulting stack. If `cond` is **non-zero**, takes a remainder of the current continuation and executes it as the loop body, then begins a new iteration, otherwise ends the loop.", + "long": "Unlike `WHILE` which executes a separate continuation `body` as the loop body, this instruction uses the current continuation itself as the loop body.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15269888, + "max": 15335424, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_while_end(_1, false)", + "kind": "simple", + "prefix": 233, + "prefix_str": "E9", + "tlb": "#e9" + }, + "signature": { + "stack_string": "cond:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Continuation"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c'", + "save": { + "c0": { + "type": "special", + "name": "while", + "args": { + "cond": { + "type": "variable", + "var_name": "c'" + }, + "body": { + "type": "cc" + }, + "after": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 535, + "function_name": "exec_while_end" + } + }, + { + "name": "AGAIN", + "category": "continuation", + "sub_category": "continuation_cond_loop", + "description": { + "short": "Executes continuation `body` infinitely many times.", + "long": "Unlike `REPEAT` which executes a continuation a specified number of times, this instruction creates an infinite loop. `RET` inside `body` code starts a new iteration of an infinite loop, rather than breaks from the loop. `AGAIN` loop can be exited only by an exception, `RETALT` with a `SETEXITALT` before the loop, or an explicit `JMPX`. Another way is to use `AGAINBRK`, which also sets `c1` to `cc`, and `RETALT` in the body, which will transfer control to the original `cc` and exit the loop.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15335424, + "max": 15400960, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_again(_1, false)", + "kind": "simple", + "prefix": 234, + "prefix_str": "EA", + "tlb": "#ea" + }, + "signature": { + "stack_string": "body:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "special", + "name": "again", + "args": { + "body": { + "type": "variable", + "var_name": "c" + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 542, + "function_name": "exec_again" + } + }, + { + "name": "AGAINEND", + "category": "continuation", + "sub_category": "continuation_cond_loop", + "description": { + "short": "Takes a remainder of the current continuation and executes it infinitely many times.", + "long": "Unlike `AGAIN` which executes a separate continuation in an infinite loop, this instruction uses the current continuation itself as the loop body. `RET` inside `body` code starts a new iteration of an infinite loop, rather than breaks from the loop. `AGAINEND` loop can be exited only by an exception, `RETALT` with a `SETEXITALT` before the loop, or an explicit `JMPX`. Another way is to use `AGAINENDBRK`, which also sets `c1` to `cc`, and `RETALT` in the body, which will transfer control to the original `cc` and exit the loop.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15400960, + "max": 15466496, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_again_end(_1, false)", + "kind": "simple", + "prefix": 235, + "prefix_str": "EB", + "tlb": "#eb" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "control_flow": { + "branches": [ + { + "type": "special", + "name": "again", + "args": { + "body": { + "type": "cc" + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 550, + "function_name": "exec_again_end" + } + }, + { + "name": "REPEATBRK", + "category": "continuation", + "sub_category": "continuation_cond_loop", + "description": { + "short": "Stores current continuation in `c1` of `body` and executes continuation `body` `n`-times, if integer `n` is non-negative.", + "long": "Just like `REPEAT`, but additionally sets `c1` to the original `c` after saving the old value of `c1` into the savelist of the original `c`. This modification allows `RETALT` to be used to break out of the loop body, providing a way to exit the loop before all iterations are completed.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "5", + "condition": "If `n >= 2^31` or `n < -2^31`." + } + ], + "docs_links": [ + { + "name": "Exit points of continuations", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/diving-deeper-exit-points-of-continuations/" + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14881792, + "max": 14882048, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_repeat(_1, true)", + "kind": "simple", + "prefix": 58132, + "prefix_str": "E314", + "tlb": "#e314" + }, + "signature": { + "stack_string": "n:Int body:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "special", + "name": "repeat", + "args": { + "count": "n", + "body": { + "type": "variable", + "var_name": "c", + "save": { + "c1": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + }, + "c1": { + "type": "register", + "index": 1 + } + } + } + } + }, + "after": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + }, + "c1": { + "type": "register", + "index": 1 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 489, + "function_name": "exec_repeat" + } + }, + { + "name": "REPEATENDBRK", + "category": "continuation", + "sub_category": "continuation_cond_loop", + "description": { + "short": "Stores current continuation in `c1` and takes a remainder of the current continuation and executes it `n`-times, if integer `n` is non-negative.", + "long": "Just like `REPEATEND`, but additionally sets `c1` to the original `c0` after saving the old value of `c1` into the savelist of the original `c0`. This modification allows `RETALT` to be used to break out of the loop body, providing a way to exit the loop before all iterations are completed.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "5", + "condition": "If `n >= 2^31` or `n < -2^31`." + } + ], + "docs_links": [ + { + "name": "Exit points of continuations", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/diving-deeper-exit-points-of-continuations/" + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["SAMEALTSAVE", "REPEATEND"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14882048, + "max": 14882304, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_repeat_end(_1, true)", + "kind": "simple", + "prefix": 58133, + "prefix_str": "E315", + "tlb": "#e315" + }, + "signature": { + "stack_string": "n:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "special", + "name": "repeat", + "args": { + "count": "n", + "body": { + "type": "cc", + "save": { + "c1": { + "type": "register", + "index": 0 + } + } + }, + "after": { + "type": "register", + "index": 0 + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 501, + "function_name": "exec_repeat_end" + } + }, + { + "name": "UNTILBRK", + "category": "continuation", + "sub_category": "continuation_cond_loop", + "description": { + "short": "Stores current continuation in `c1` of `body` and executes continuation `body`, then pops an integer `cond` from the resulting stack. If `cond` is **zero**, performs another iteration of this loop, otherwise ends the loop.", + "long": "Just like `UNTIL`, but additionally sets `c1` to the original continuation after saving the old value of `c1` into the savelist of the original continuation. This modification allows `RETALT` to be used to break out of the loop body, providing a way to exit the loop before the exit condition is met.", + "tags": [], + "operands": [], + "docs_links": [ + { + "name": "Exit points of continuations", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/diving-deeper-exit-points-of-continuations/" + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14882304, + "max": 14882560, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_until(_1, true)", + "kind": "simple", + "prefix": 58134, + "prefix_str": "E316", + "tlb": "#e316" + }, + "signature": { + "stack_string": "body:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c", + "save": { + "c0": { + "type": "special", + "name": "until", + "args": { + "body": { + "type": "variable", + "var_name": "c", + "save": { + "c1": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + }, + "c1": { + "type": "register", + "index": 1 + } + } + } + } + }, + "after": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + }, + "c1": { + "type": "register", + "index": 1 + } + } + } + } + }, + "c1": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + }, + "c1": { + "type": "register", + "index": 1 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 513, + "function_name": "exec_until" + } + }, + { + "name": "UNTILENDBRK", + "category": "continuation", + "sub_category": "continuation_cond_loop", + "description": { + "short": "Stores current continuation in `c1` and takes a remainder of the current continuation, executes it, then pops an integer `cond` from the resulting stack. If `cond` is **zero**, performs another iteration of this loop, otherwise ends the loop.", + "long": "Just like `UNTILEND`, but additionally sets `c1` to the original `c0` after saving the old value of `c1` into the savelist of the original `c0`. This modification allows `RETALT` to be used to break out of the loop body, providing a way to exit the loop before the exit condition is met.", + "tags": [], + "operands": [], + "docs_links": [ + { + "name": "Exit points of continuations", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/diving-deeper-exit-points-of-continuations/" + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["SAMEALTSAVE", "UNTILEND"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14882560, + "max": 14882816, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_until_end(_1, true)", + "kind": "simple", + "prefix": 58135, + "prefix_str": "E317", + "tlb": "#e317" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "cc", + "save": { + "c0": { + "type": "special", + "name": "until", + "args": { + "body": { + "type": "cc", + "save": { + "c1": { + "type": "register", + "index": 0 + } + } + }, + "after": { + "type": "register", + "index": 0 + } + } + }, + "c1": { + "type": "register", + "index": 0 + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 520, + "function_name": "exec_until_end" + } + }, + { + "name": "WHILEBRK", + "category": "continuation", + "sub_category": "continuation_cond_loop", + "description": { + "short": "Stores current continuation in `c1` of `body` and executes continuation `cond`, then pops an integer `cond` from the resulting stack. If `cond` is **non-zero**, executes `body`, and then begins a new iteration, otherwise ends the loop.", + "long": "Just like `WHILE`, but additionally sets `c1` to the original continuation after saving the old value of `c1` into the savelist of the original continuation. This modification allows `RETALT` to be used to break out of the loop body, providing a way to exit the loop before the condition becomes false.", + "tags": [], + "operands": [], + "docs_links": [ + { + "name": "Exit points of continuations", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/diving-deeper-exit-points-of-continuations/" + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14882816, + "max": 14883072, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_while(_1, true)", + "kind": "simple", + "prefix": 58136, + "prefix_str": "E318", + "tlb": "#e318" + }, + "signature": { + "stack_string": "cond:Continuation body:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Continuation"] + }, + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c'", + "save": { + "c0": { + "type": "special", + "name": "while", + "args": { + "cond": { + "type": "variable", + "var_name": "c'" + }, + "body": { + "type": "variable", + "var_name": "c" + }, + "after": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + }, + "c1": { + "type": "register", + "index": 1 + } + } + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 526, + "function_name": "exec_while" + } + }, + { + "name": "WHILEENDBRK", + "category": "continuation", + "sub_category": "continuation_cond_loop", + "description": { + "short": "Stores current continuation in `c1` and executes continuation `cond`, then pops an integer `cond` from the resulting stack. If `cond` is **non-zero**, takes a remainder of the current continuation and executes it as the loop body, then begins a new iteration, otherwise ends the loop.", + "long": "Just like `WHILEEND`, but additionally sets `c1` to the original `c0` after saving the old value of `c1` into the savelist of the original `c0`. This modification allows `RETALT` to be used to break out of the loop body, providing a way to exit the loop before the condition becomes false.", + "tags": [], + "operands": [], + "docs_links": [ + { + "name": "Exit points of continuations", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/diving-deeper-exit-points-of-continuations/" + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["SAMEALTSAVE", "WHILEEND"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14883072, + "max": 14883328, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_while_end(_1, true)", + "kind": "simple", + "prefix": 58137, + "prefix_str": "E319", + "tlb": "#e319" + }, + "signature": { + "stack_string": "cond:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Continuation"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 535, + "function_name": "exec_while_end" + } + }, + { + "name": "AGAINBRK", + "category": "continuation", + "sub_category": "continuation_cond_loop", + "description": { + "short": "Store current continuation in `c1` of `body` and executes continuation `body` infinitely many times.", + "long": "This instruction sets `c1` to the original continuation after saving the old value of `c1` into the savelist of the original continuation. This modification allows `RETALT` to be used to break out of the infinite loop, providing a way to exit the loop that would otherwise continue indefinitely.", + "tags": [], + "operands": [], + "docs_links": [ + { + "name": "Exit points of continuations", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/diving-deeper-exit-points-of-continuations/" + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14883328, + "max": 14883584, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_again(_1, true)", + "kind": "simple", + "prefix": 58138, + "prefix_str": "E31A", + "tlb": "#e31a" + }, + "signature": { + "stack_string": "body:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 542, + "function_name": "exec_again" + } + }, + { + "name": "AGAINENDBRK", + "category": "continuation", + "sub_category": "continuation_cond_loop", + "description": { + "short": "Stores current continuation in `c1` and takes a remainder of the current continuation and executes it infinitely many times.", + "long": "Just like `AGAINEND`, but additionally sets `c1` to the original `c0` after saving the old value of `c1` into the savelist of the original `c0`. This modification allows `RETALT` to be used to break out of the infinite loop, providing a way to exit the loop that would otherwise continue indefinitely.", + "tags": [], + "operands": [], + "docs_links": [ + { + "name": "Exit points of continuations", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/diving-deeper-exit-points-of-continuations/" + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["SAMEALTSAVE", "AGAINEND"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14883584, + "max": 14883840, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_again_end(_1, true)", + "kind": "simple", + "prefix": 58139, + "prefix_str": "E31B", + "tlb": "#e31b" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 550, + "function_name": "exec_again_end" + } + }, + { + "name": "RETURNVARARGS", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Leaves only the top `p` values in the current stack, where `p` is taken from the stack. Unlike `RETURNARGS` which takes the number of values to keep from the instruction itself, this instruction takes this number from the stack. All the unused bottom values are not discarded, but saved into continuation `c0` in the same way as `SETCONTARGS` does.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15536128, + "max": 15536384, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_return_varargs", + "kind": "simple", + "prefix": 60688, + "prefix_str": "ED10", + "tlb": "#ed10" + }, + "signature": { + "stack_string": "p:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "p", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 255 + } + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 728, + "function_name": "exec_return_varargs" + } + }, + { + "name": "SETCONTVARARGS", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Pushes values onto the stack of a continuation and optionally sets the number of missing arguments. Unlike `SETCONTARGS` which takes the number of values to push and the number of missing arguments from the instruction itself, this instruction takes `r` and `n` from the stack. It pushes `r` values from the current stack onto the stack of continuation `c`, and for `n` not equal to -1, sets `c.nargs` to the final size of the stack of `c` plus `n`, effectively creating a closure with `n` missing arguments.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15536384, + "max": 15536640, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_setcont_varargs", + "kind": "simple", + "prefix": 60689, + "prefix_str": "ED11", + "tlb": "#ed11" + }, + "signature": { + "stack_string": "x_1...x_r c:Continuation r:Int n:Int -> c':Continuation", + "inputs": { + "stack": [ + { + "type": "array", + "name": "args", + "length_var": "r", + "array_entry": [ + { + "type": "simple", + "name": "x" + } + ] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 255 + } + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"], + "range": { + "min": -1, + "max": 255 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c'", + "value_types": ["Continuation"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 678, + "function_name": "exec_setcont_varargs" + } + }, + { + "name": "SETNUMVARARGS", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Sets the number of arguments expected by continuation `c`. If `n=-1`, this operation does nothing (`c'=c`). Otherwise, it sets `c.nargs` to `n`, where `n` is taken from the stack. Unlike `SETNUMARGS` which takes the number of expected arguments from the instruction itself, this instruction takes this number from the stack.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15536640, + "max": 15536896, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_setnum_varargs", + "kind": "simple", + "prefix": 60690, + "prefix_str": "ED12", + "tlb": "#ed12" + }, + "signature": { + "stack_string": "c:Continuation n:Int -> c':Continuation", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + }, + { + "type": "simple", + "name": "n", + "range": { + "min": -1, + "max": 255 + }, + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c'", + "value_types": ["Continuation"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 687, + "function_name": "exec_setnum_varargs" + } + }, + { + "name": "BLESS", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Transforms a _Slice_ `s` into a simple ordinary continuation `c`, with `c.code=s` and an empty stack and savelist.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15539712, + "max": 15539968, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bless", + "kind": "simple", + "prefix": 60702, + "prefix_str": "ED1E", + "tlb": "#ed1e" + }, + "signature": { + "stack_string": "s:Slice -> c:Continuation", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 733, + "function_name": "exec_bless" + } + }, + { + "name": "BLESSVARARGS", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Transforms a _Slice_ into a simple ordinary continuation and sets its arguments from the stack.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["ROT", "BLESS", "ROTREV", "SETCONTVARARGS"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15539968, + "max": 15540224, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bless_varargs", + "kind": "simple", + "prefix": 60703, + "prefix_str": "ED1F", + "tlb": "#ed1f" + }, + "signature": { + "stack_string": "x_1...x_r s:Slice r:Int n:Int -> c:Continuation", + "inputs": { + "stack": [ + { + "type": "array", + "name": "args", + "length_var": "r", + "array_entry": [ + { + "type": "simple", + "name": "x" + } + ] + }, + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 750, + "function_name": "exec_bless_varargs" + } + }, + { + "name": "PUSHCTRX", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Pushes the current value of control register `c(i)` onto the stack, where `i` is taken from the stack. Unlike `c(i) PUSHCTR` which takes the register index from the instruction itself, this instruction takes this index from the stack. If the control register is not supported in the current codepage, or if it does not have a value, an exception is triggered.\nNotice that this primitive is one of the few \"exotic\" primitives, which are not polymorphic like stack manipulation primitives, and at the same time do not have well-defined types of parameters and return values, because the type of `x` depends on `i`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15589376, + "max": 15589632, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_push_ctr_var", + "kind": "simple", + "prefix": 60896, + "prefix_str": "EDE0", + "tlb": "#ede0" + }, + "signature": { + "stack_string": "i:Int -> x:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 255 + } + } + ], + "registers": [ + { + "type": "variable", + "var_name": "i" + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 894, + "function_name": "exec_push_ctr_var" + } + }, + { + "name": "POPCTRX", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Pops a value `x` from the stack and stores it into control register `c(i)`, where `i` is taken from the stack. Unlike `c(i) POPCTR` which takes the register index from the instruction itself, this instruction takes this index from the stack. If the control register is not supported in the current codepage, or if it only accepts values of a specific type and `x` is not of that type, an exception is triggered.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15589632, + "max": 15589888, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_pop_ctr_var", + "kind": "simple", + "prefix": 60897, + "prefix_str": "EDE1", + "tlb": "#ede1" + }, + "signature": { + "stack_string": "x:Any i:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x" + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 255 + } + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "variable", + "var_name": "i" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 904, + "function_name": "exec_pop_ctr_var" + } + }, + { + "name": "SETCONTCTRX", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Stores value `x` into the savelist of continuation `c` as `c(i)`, and returns the resulting continuation `c'`, where `i` is taken from the stack. Unlike `c(i) SETCONTCTR` which takes the register index from the instruction itself, this instruction takes this index from the stack. Almost all operations with continuations may be expressed in terms of this primitive, along with `POPCTRX` and `PUSHCTRX`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15589888, + "max": 15590144, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_setcont_ctr_var", + "kind": "simple", + "prefix": 60898, + "prefix_str": "EDE2", + "tlb": "#ede2" + }, + "signature": { + "stack_string": "x:Any c:Continuation i:Int -> c':Continuation", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x" + }, + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 255 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c'", + "value_types": ["Continuation"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 914, + "function_name": "exec_setcont_ctr_var" + } + }, + { + "name": "SETCONTCTRMANYX", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "Sets multiple control registers in a continuation by a `mask`.", + "long": "Takes a `mask` that describes which control registers of the current continuation should be copied and set in continuation `c`. This is a more efficient version of multiple `SETCONTCTRX` calls.", + "tags": ["continuation", "control"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15590400, + "max": 15590656, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_setcont_ctr_many_var", + "version": 9, + "kind": "simple", + "prefix": 60900, + "prefix_str": "EDE4", + "tlb": "#ede4" + }, + "signature": { + "stack_string": "c:Continuation mask:Int -> c':Continuation", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + }, + { + "type": "simple", + "name": "mask", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c'", + "value_types": ["Continuation"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 943, + "function_name": "exec_setcont_ctr_many_var" + } + }, + { + "name": "BOOLAND", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Computes the composition `compose0(c, c')`, which has the meaning of \"perform `c`, and, if successful, perform `c'`\" (if `c` is a boolean circuit) or simply \"perform `c`, then `c'`\".", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["SWAP", "SETCONTCTR c0"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15593472, + "max": 15593728, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_compos(_1, 1, 'BOOLAND')", + "kind": "simple", + "prefix": 60912, + "prefix_str": "EDF0", + "tlb": "#edf0" + }, + "signature": { + "stack_string": "c:Continuation c':Continuation -> c'':Continuation", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + }, + { + "type": "simple", + "name": "c'", + "value_types": ["Continuation"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c''", + "value_types": ["Continuation"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 961, + "function_name": "exec_compos" + } + }, + { + "name": "BOOLOR", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Computes the alternative composition `compose1(c, c')`, which has the meaning of \"perform `c`, and, if not successful, perform `c'`\" (if `c` is a boolean circuit).", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["SWAP", "SETCONTCTR c1"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15593728, + "max": 15593984, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_compos(_1, 2, 'BOOLOR')", + "kind": "simple", + "prefix": 60913, + "prefix_str": "EDF1", + "tlb": "#edf1" + }, + "signature": { + "stack_string": "c:Continuation c':Continuation -> c'':Continuation", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + }, + { + "type": "simple", + "name": "c'", + "value_types": ["Continuation"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c''", + "value_types": ["Continuation"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 961, + "function_name": "exec_compos" + } + }, + { + "name": "COMPOSBOTH", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Computes composition `compose1(compose0(c, c'), c')`, which has the meaning of \"compute boolean circuit `c`, then compute `c'`, regardless of the result of `c`\".", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15593984, + "max": 15594240, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_compos(_1, 3, 'COMPOSBOTH')", + "kind": "simple", + "prefix": 60914, + "prefix_str": "EDF2", + "tlb": "#edf2" + }, + "signature": { + "stack_string": "c:Continuation c':Continuation -> c'':Continuation", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + }, + { + "type": "simple", + "name": "c'", + "value_types": ["Continuation"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c''", + "value_types": ["Continuation"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 961, + "function_name": "exec_compos" + } + }, + { + "name": "ATEXIT", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Sets `c0` to `compose0(c, c0)`. In other words, `c` will be executed before exiting current continuation.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15594240, + "max": 15594496, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_atexit", + "kind": "simple", + "prefix": 60915, + "prefix_str": "EDF3", + "tlb": "#edf3" + }, + "signature": { + "stack_string": "c:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ], + "registers": [ + { + "type": "constant", + "index": 0 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 0 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 983, + "function_name": "exec_atexit" + } + }, + { + "name": "ATEXITALT", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Sets `c1` to `compose1(c, c1)`. In other words, `c` will be executed before exiting current continuation by its alternative return path.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15594496, + "max": 15594752, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_atexit_alt", + "kind": "simple", + "prefix": 60916, + "prefix_str": "EDF4", + "tlb": "#edf4" + }, + "signature": { + "stack_string": "c:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 992, + "function_name": "exec_atexit_alt" + } + }, + { + "name": "SETEXITALT", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Sets `c1` to `compose1(compose0(c, c0), c1)`,\nIn this way, a subsequent `RETALT` will first execute `c`, then transfer control to the original `c0`. This can be used, for instance, to exit from nested loops.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15594752, + "max": 15595008, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_setexit_alt", + "kind": "simple", + "prefix": 60917, + "prefix_str": "EDF5", + "tlb": "#edf5" + }, + "signature": { + "stack_string": "c:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ], + "registers": [ + { + "type": "constant", + "index": 0 + }, + { + "type": "constant", + "index": 1 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1001, + "function_name": "exec_setexit_alt" + } + }, + { + "name": "THENRET", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Computes `compose0(c, c0)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15595008, + "max": 15595264, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_thenret", + "kind": "simple", + "prefix": 60918, + "prefix_str": "EDF6", + "tlb": "#edf6" + }, + "signature": { + "stack_string": "c:Continuation -> c':Continuation", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ], + "registers": [ + { + "type": "constant", + "index": 0 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c'", + "value_types": ["Continuation"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1011, + "function_name": "exec_thenret" + } + }, + { + "name": "THENRETALT", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Computes `compose0(c, c1)`", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15595264, + "max": 15595520, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_thenret_alt", + "kind": "simple", + "prefix": 60919, + "prefix_str": "EDF7", + "tlb": "#edf7" + }, + "signature": { + "stack_string": "c:Continuation -> c':Continuation", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c'", + "value_types": ["Continuation"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1020, + "function_name": "exec_thenret_alt" + } + }, + { + "name": "INVERT", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Interchanges `c0` and `c1`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15595520, + "max": 15595776, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_invert", + "kind": "simple", + "prefix": 60920, + "prefix_str": "EDF8", + "tlb": "#edf8" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 0 + }, + { + "type": "constant", + "index": 1 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 0 + }, + { + "type": "constant", + "index": 1 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1029, + "function_name": "exec_invert" + } + }, + { + "name": "BOOLEVAL", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Performs `cc := compose1(compose0(c, compose0(-1 PUSHINT, cc)), compose0(0 PUSHINT, cc))`. If `c` represents a boolean circuit, the net effect is to evaluate it and push either `-1` or `0` onto the stack before continuing.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15595776, + "max": 15596032, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_booleval", + "kind": "simple", + "prefix": 60921, + "prefix_str": "EDF9", + "tlb": "#edf9" + }, + "signature": { + "stack_string": "c:Continuation -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c", + "save": { + "c0": { + "type": "special", + "name": "pushint", + "args": { + "next": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + }, + "c1": { + "type": "register", + "index": 1 + } + } + }, + "value": -1 + } + }, + "c1": { + "type": "special", + "name": "pushint", + "args": { + "next": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + }, + "c1": { + "type": "register", + "index": 1 + } + } + }, + "value": 0 + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1037, + "function_name": "exec_booleval" + } + }, + { + "name": "SAMEALT", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Sets `c1` to `c0`.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHCTR c0", "POPCTR c1"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15596032, + "max": 15596288, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_samealt(_1, false)", + "kind": "simple", + "prefix": 60922, + "prefix_str": "EDFA", + "tlb": "#edfa" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 862, + "function_name": "exec_samealt" + } + }, + { + "name": "SAMEALTSAVE", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Sets `c1` to `c0`, but first saves the old value of `c1` into the savelist of `c0`.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["SAVECTR c1", "SAMEALT"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15596288, + "max": 15596544, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_samealt(_1, true)", + "kind": "simple", + "prefix": 60923, + "prefix_str": "EDFB", + "tlb": "#edfb" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 0 + }, + { + "type": "constant", + "index": 1 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 0 + }, + { + "type": "constant", + "index": 1 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 862, + "function_name": "exec_samealt" + } + }, + { + "name": "TRY", + "category": "exception", + "sub_category": "", + "description": { + "short": "Executes `body` and if it throws an exception, transfers control to `handler`.", + "long": "Sets `c2` to `handler`, first saving the old value of `c2` both into the savelist of `handler` and into the savelist of the current continuation `cc`, which is stored into `body.c0` and `handler.c0`. Then performs `EXECUTE` on `body` continuation. If `body` does not throw any exceptions, the original value of `c2` is automatically restored on return from `body`. If an exception occurs, the execution is transferred to `handler`, but the original value of `c2` is restored in the process, so that `handler` can re-throw the exception by `THROWANY` if it cannot handle it by itself.", + "tags": ["exception_handling", "control_flow"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15924992, + "max": 15925248, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_try(_1, -1)", + "kind": "simple", + "prefix": 62207, + "prefix_str": "F2FF", + "tlb": "#f2ff" + }, + "signature": { + "stack_string": "body:Continuation handler:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + }, + { + "type": "simple", + "name": "handler", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + }, + "c1": { + "type": "register", + "index": 1 + }, + "c2": { + "type": "register", + "index": 2 + } + } + }, + "c2": { + "type": "variable", + "var_name": "c'", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + }, + "c1": { + "type": "register", + "index": 1 + }, + "c2": { + "type": "register", + "index": 2 + } + } + }, + "c2": { + "type": "register", + "index": 2 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1186, + "function_name": "exec_try" + } + }, + { + "name": "STDICT", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Stores dictionary `D` into _Builder_ `b`, returing the resulting _Builder_ `b'`.\nIn other words, if `D` is a cell, performs `STONE` and `STREF`; if `D` is _Null_, performs `NIP` and `STZERO`.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "7", + "condition": "Second element is not a `Cell` or `Null`." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15990784, + "max": 15991040, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_store_dict", + "kind": "simple", + "prefix": 62464, + "prefix_str": "F400", + "tlb": "#f400" + }, + "signature": { + "stack_string": "D:Cell|Null b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 53, + "function_name": "exec_store_dict" + } + }, + { + "name": "SKIPDICT", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Loads a dictionary and discards its value.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": false, + "instructions": ["LDDICT", "NIP"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15991040, + "max": 15991296, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_skip_dict", + "kind": "simple", + "prefix": 62465, + "prefix_str": "F401", + "tlb": "#f401" + }, + "signature": { + "stack_string": "s:Slice -> s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 82, + "function_name": "exec_skip_dict" + } + }, + { + "name": "LDDICTS", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Loads a (_Slice_-represented) dictionary `s'` from _Slice_ `s`, and returns the remainder of `s` as `s'`.\nThis is a 'split function' for all `HashmapE(n,X)` dictionary types.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15991296, + "max": 15991552, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_dict_slice(_1, 0)", + "kind": "simple", + "prefix": 62466, + "prefix_str": "F402", + "tlb": "#f402" + }, + "signature": { + "stack_string": "s:Slice -> D:Slice s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 121, + "function_name": "exec_load_dict_slice" + } + }, + { + "name": "PLDDICTS", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Preloads a (_Slice_-represented) dictionary `s'` from _Slice_ `s`.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": false, + "instructions": ["LDDICTS", "DROP"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15991552, + "max": 15991808, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_dict_slice(_1, 1)", + "kind": "simple", + "prefix": 62467, + "prefix_str": "F403", + "tlb": "#f403" + }, + "signature": { + "stack_string": "s:Slice -> s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 121, + "function_name": "exec_load_dict_slice" + } + }, + { + "name": "LDDICT", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Loads a dictionary `D` from _Slice_ `s`, and returns the remainder of `s` as `s'`. May be applied to dictionaries or to values of arbitrary `(^Y)?` types.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15991808, + "max": 15992064, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_dict(_1, 0)", + "kind": "simple", + "prefix": 62468, + "prefix_str": "F404", + "tlb": "#f404" + }, + "signature": { + "stack_string": "s:Slice -> D:Cell|Null s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 148, + "function_name": "exec_load_dict" + } + }, + { + "name": "PLDDICT", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Preloads a dictionary `D` from _Slice_ `s`.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": false, + "instructions": ["LDDICT", "DROP"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15992064, + "max": 15992320, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_dict(_1, 1)", + "kind": "simple", + "prefix": 62469, + "prefix_str": "F405", + "tlb": "#f405" + }, + "signature": { + "stack_string": "s:Slice -> D:Cell|Null", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 148, + "function_name": "exec_load_dict" + } + }, + { + "name": "LDDICTQ", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Loads a dictionary `D` from _Slice_ `s`, and returns the remainder of `s` as `s'`. May be applied to dictionaries or to values of arbitrary `(^Y)?` types. This is a quiet version of `LDDICT` which means that instead of throwing an exception, it pushes a status flag to the stack: 0 if the operation fails, -1 if the operation succeeds.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15992320, + "max": 15992576, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_dict(_1, 2)", + "kind": "simple", + "prefix": 62470, + "prefix_str": "F406", + "tlb": "#f406" + }, + "signature": { + "stack_string": "s:Slice -> (∅ 0)|(D:Cell|Null s':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 148, + "function_name": "exec_load_dict" + } + }, + { + "name": "PLDDICTQ", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Preloads a dictionary `D` from _Slice_ `s`. This is a quiet version of `PLDDICT` which means that instead of throwing an exception, it pushes a status flag to the stack: 0 if the operation fails, -1 if the operation succeeds.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15992576, + "max": 15992832, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_dict(_1, 3)", + "kind": "simple", + "prefix": 62471, + "prefix_str": "F407", + "tlb": "#f407" + }, + "signature": { + "stack_string": "s:Slice -> (∅ 0)|(D:Cell|Null -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 148, + "function_name": "exec_load_dict" + } + }, + { + "name": "PFXDICTSET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "Sets or updates a key-value pair in a prefix dictionary.", + "long": "Sets or updates a value `x` for key `k` in prefix dictionary `D` with key length `n`. If the key already exists, its value is updated. Returns the modified dictionary and a status flag.", + "tags": ["dictionary", "prefix"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16019456, + "max": 16019712, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_pfx_dict_set(_1, Set, 'SET')", + "kind": "simple", + "prefix": 62576, + "prefix_str": "F470", + "tlb": "#f470" + }, + "signature": { + "stack_string": "x:Slice k:Slice D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 566, + "function_name": "exec_pfx_dict_set" + } + }, + { + "name": "PFXDICTREPLACE", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "Replaces a value in prefix dictionary if key exists.", + "long": "Replaces the value `x` for key `k` in prefix dictionary `D` with key length `n`. Operation succeeds only if the key already exists. Returns the modified dictionary and a status flag.", + "tags": ["dictionary", "prefix"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16019712, + "max": 16019968, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_pfx_dict_set(_1, Replace, 'REPLACE')", + "kind": "simple", + "prefix": 62577, + "prefix_str": "F471", + "tlb": "#f471" + }, + "signature": { + "stack_string": "x:Slice k:Slice D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 566, + "function_name": "exec_pfx_dict_set" + } + }, + { + "name": "PFXDICTADD", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "Adds a new key-value pair to prefix dictionary.", + "long": "Adds a new value `x` for key `k` in prefix dictionary `D` with key length `n`. Operation succeeds only if the key does not exist. Returns the modified dictionary and a status flag.", + "tags": ["dictionary", "prefix"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16019968, + "max": 16020224, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_pfx_dict_set(_1, Add, 'ADD')", + "kind": "simple", + "prefix": 62578, + "prefix_str": "F472", + "tlb": "#f472" + }, + "signature": { + "stack_string": "x:Slice k:Slice D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 566, + "function_name": "exec_pfx_dict_set" + } + }, + { + "name": "PFXDICTDEL", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "Deletes a key-value pair from prefix dictionary.", + "long": "Removes the key-value pair with key `k` from prefix dictionary `D` with key length `n`. Returns the modified dictionary and a status flag indicating success or failure.", + "tags": ["dictionary", "prefix"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16020224, + "max": 16020480, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_pfx_dict_delete", + "kind": "simple", + "prefix": 62579, + "prefix_str": "F473", + "tlb": "#f473" + }, + "signature": { + "stack_string": "k:Slice D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 580, + "function_name": "exec_pfx_dict_delete" + } + }, + { + "name": "PFXDICTGETQ", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up the unique prefix of _Slice_ `s` present in the prefix code dictionary represented by `Cell^?` `D` and `n`. If found, the prefix of `s` is returned as `s'`, and the corresponding value (also a _Slice_) as `x`. The remainder of `s` is returned as a _Slice_ `s''`. If no prefix of `s` is a key in prefix code dictionary `D`, returns the unchanged `s` and a zero flag to indicate failure.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16033792, + "max": 16034048, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_pfx_dict_get(_1, 0, 'Q')", + "kind": "simple", + "prefix": 62632, + "prefix_str": "F4A8", + "tlb": "#f4a8" + }, + "signature": { + "stack_string": "s:Slice D:Cell|Null n:Int -> (s:Slice 0)|(s':Slice x:Slice s'':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s''", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 658, + "function_name": "exec_pfx_dict_get" + } + }, + { + "name": "PFXDICTGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up the unique prefix of _Slice_ `s` present in the prefix code dictionary represented by `Cell^?` `D` and `n`. If found, the prefix of `s` is returned as `s'`, and the corresponding value (also a _Slice_) as `x`. The remainder of `s` is returned as a _Slice_ `s''`. If no prefix of `s` is a key in prefix code dictionary `D`, throws a `Cell` deserialization failure exception.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "6", + "condition": "No prefix of s is a key in prefix code dictionary D." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16034048, + "max": 16034304, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_pfx_dict_get(_1, 1, '')", + "kind": "simple", + "prefix": 62633, + "prefix_str": "F4A9", + "tlb": "#f4a9" + }, + "signature": { + "stack_string": "s:Slice D:Cell|Null n:Int -> s':Slice x:Slice s'':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s''", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 658, + "function_name": "exec_pfx_dict_get" + } + }, + { + "name": "PFXDICTGETJMP", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up the unique prefix of _Slice_ `s` present in the prefix code dictionary represented by `Cell^?` `D` and `n`. If found, `BLESS`es the corresponding value into a _Continuation_ and transfers control to it as if by a `JMPX`. If no prefix of `s` is a key in prefix code dictionary `D`, returns the unchanged `s` and continues execution.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16034304, + "max": 16034560, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_pfx_dict_get(_1, 2, 'JMP')", + "kind": "simple", + "prefix": 62634, + "prefix_str": "F4AA", + "tlb": "#f4aa" + }, + "signature": { + "stack_string": "s:Slice D:Cell|Null n:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "x" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 658, + "function_name": "exec_pfx_dict_get" + } + }, + { + "name": "PFXDICTGETEXEC", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up the unique prefix of _Slice_ `s` present in the prefix code dictionary represented by `Cell^?` `D` and `n`. If found, `BLESS`es the corresponding value into a _Continuation_ and executes it as if by `EXECUTE`. If no prefix of `s` is a key in prefix code dictionary `D`, throws a `Cell` deserialization exception.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "6", + "condition": "No prefix of s is a key in prefix code dictionary D." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16034560, + "max": 16034816, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_pfx_dict_get(_1, 3, 'EXEC')", + "kind": "simple", + "prefix": 62635, + "prefix_str": "F4AB", + "tlb": "#f4ab" + }, + "signature": { + "stack_string": "s:Slice D:Cell|Null n:Int -> s':Slice s'':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s''", + "value_types": ["Slice"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "x", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 658, + "function_name": "exec_pfx_dict_get" + } + }, + { + "name": "NOP", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Does nothing.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 0, + "max": 65536, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_nop", + "kind": "simple", + "prefix": 0, + "prefix_str": "0", + "tlb": "#0" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 28, + "function_name": "exec_nop" + } + }, + { + "name": "SWAP", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Interchanges the top two stack items. Takes two elements from the stack and pushes them back in reverse order.", + "tags": ["stack"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "SWAP", + "comment": "Swaps the top two elements (1 and 2)" + } + ], + "stack": { + "input": ["1", "2"], + "output": ["2", "1"] + } + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 65536, + "max": 131072, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_swap", + "kind": "simple", + "prefix": 1, + "prefix_str": "1", + "tlb": "#1" + }, + "signature": { + "stack_string": "x:Any y:Any -> y:Any x:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 35, + "function_name": "exec_swap" + } + }, + { + "name": "DUP", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Duplicates the top stack item. Copies the top element of the stack and pushes the copy on top of the stack.", + "tags": ["stack"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack is empty." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_16 42" + }, + { + "instruction": "DUP", + "comment": "Duplicates the top element (42)" + } + ], + "stack": { + "input": ["42"], + "output": ["42", "42"] + } + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 2097152, + "max": 2162688, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dup", + "kind": "simple", + "prefix": 32, + "prefix_str": "20", + "tlb": "#20" + }, + "signature": { + "stack_string": "x:Any -> x:Any x:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 93, + "function_name": "exec_dup" + } + }, + { + "name": "OVER", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Copies the second stack item to the top. Takes the second element from the stack and pushes a copy of it on top of the stack, leaving the original element in place.", + "tags": ["stack"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "OVER", + "comment": "Copies the second element (1) to the top of the stack" + } + ], + "stack": { + "input": ["1", "2"], + "output": ["1", "2", "1"] + } + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 2162688, + "max": 2228224, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_over", + "kind": "simple", + "prefix": 33, + "prefix_str": "21", + "tlb": "#21" + }, + "signature": { + "stack_string": "y:Any x:Any -> y:Any x:Any y:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 101, + "function_name": "exec_over" + } + }, + { + "name": "DROP", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Removes the top element from the stack. Discards the top element without using it.", + "tags": ["stack"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack is empty." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "DROP", + "comment": "Removes the top element (2) from the stack" + } + ], + "stack": { + "input": ["1", "2"], + "output": ["1"] + } + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 3145728, + "max": 3211264, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_drop", + "kind": "simple", + "prefix": 48, + "prefix_str": "30", + "tlb": "#30" + }, + "signature": { + "stack_string": "x:Any -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 127, + "function_name": "exec_drop" + } + }, + { + "name": "NIP", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Removes the second element from the stack.", + "tags": ["stack"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "NIP", + "comment": "Removes the second element (1) from the stack" + } + ], + "stack": { + "input": ["1", "2"], + "output": ["2"] + } + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 3211264, + "max": 3276800, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_nip", + "kind": "simple", + "prefix": 49, + "prefix_str": "31", + "tlb": "#31" + }, + "signature": { + "stack_string": "y:Any x:Any -> x:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 135, + "function_name": "exec_nip" + } + }, + { + "name": "ROT", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Rearranges the top three elements. Moves the third element to the top of the stack: `1 2 3 -> 2 3 1`", + "tags": ["stack"], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["BLKSWAP 1 2"] + }, + { + "exact": true, + "instructions": ["XCHG2 s2 s1"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 3 elements." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "PUSHINT_4 3" + }, + { + "instruction": "ROT", + "comment": "Rotates the top three elements: (1,2,3) -> (2,3,1)" + } + ], + "stack": { + "input": ["1", "2", "3"], + "output": ["2", "3", "1"] + } + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5767168, + "max": 5832704, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_rot", + "kind": "simple", + "prefix": 88, + "prefix_str": "58", + "tlb": "#58" + }, + "signature": { + "stack_string": "z:Any y:Any x:Any -> y:Any x:Any z:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "z", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Any"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 308, + "function_name": "exec_rot" + } + }, + { + "name": "ROTREV", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Rearranges the top three elements. Places the top element below the first two following elements.: `1 2 3 -> 3 1 2`", + "tags": ["stack"], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["BLKSWAP 2 1"] + }, + { + "exact": true, + "instructions": ["XCHG2 s2 s2"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 3 elements." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "PUSHINT_4 3" + }, + { + "instruction": "ROTREV", + "comment": "Rotates in reverse the top three elements: (1,2,3) -> (3,1,2)" + } + ], + "stack": { + "input": ["1", "2", "3"], + "output": ["3", "1", "2"] + } + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5832704, + "max": 5898240, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_rotrev", + "kind": "simple", + "prefix": 89, + "prefix_str": "59", + "tlb": "#59" + }, + "signature": { + "stack_string": "z:Any y:Any x:Any -> x:Any z:Any y:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "z", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 317, + "function_name": "exec_rotrev" + } + }, + { + "name": "PICK", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Pops integer `i` from the stack, then performs `s(i) PUSH`.", + "tags": ["stack"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack is empty." + }, + { + "errno": "7", + "condition": "Top element is not an `Int`." + }, + { + "errno": "5", + "condition": "Integer is out of range." + }, + { + "errno": "2", + "condition": "Stack contains less than `i + 1` elements." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 6291456, + "max": 6356992, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_pick", + "kind": "simple", + "prefix": 96, + "prefix_str": "60", + "tlb": "#60" + }, + "signature": { + "stack_string": "i:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1073741823 + } + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 400, + "function_name": "exec_pick" + } + }, + { + "name": "ROLL", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Takes integer `x` from the top of the stack and moves the `x`-th element from the top to the top of the stack. For example, `ROLL 2` is equivalent to `ROT` (`1 2 3 -> 2 3 1`).", + "tags": ["stack"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + }, + { + "errno": "7", + "condition": "Top element is not an `Int`." + }, + { + "errno": "5", + "condition": "Integer is out of range." + }, + { + "errno": "2", + "condition": "Stack contains less than `x + 1` elements." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "PUSHINT_4 3" + }, + { + "instruction": "PUSHINT_4 2", + "comment": "Push x=2 for ROLL" + }, + { + "instruction": "ROLL", + "comment": "Moves third element (1) to the top: (1,2,3) -> (2,3,1)" + } + ], + "stack": { + "input": ["1", "2", "3", "2"], + "output": ["2", "3", "1"] + } + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 6356992, + "max": 6422528, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_roll", + "kind": "simple", + "prefix": 97, + "prefix_str": "61", + "tlb": "#61" + }, + "signature": { + "stack_string": "x:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1073741823 + } + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 410, + "function_name": "exec_roll" + } + }, + { + "name": "ROLLREV", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Takes integer `x` from the top of the stack and moves the top element to position `x` from the top. For example, `ROLLREV 2` is equivalent to `ROTREV` (`1 2 3 -> 3 1 2`).", + "tags": ["stack"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + }, + { + "errno": "7", + "condition": "Top element is not an `Int`." + }, + { + "errno": "5", + "condition": "Integer is out of range." + }, + { + "errno": "2", + "condition": "Stack contains less than `x + 1` elements." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "PUSHINT_4 3" + }, + { + "instruction": "PUSHINT_4 2", + "comment": "Push x=2 for ROLLREV" + }, + { + "instruction": "ROLLREV", + "comment": "Moves top element (3) to position 2: (1,2,3) -> (3,1,2)" + } + ], + "stack": { + "input": ["1", "2", "3", "2"], + "output": ["3", "1", "2"] + } + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 6422528, + "max": 6488064, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_rollrev", + "kind": "simple", + "prefix": 98, + "prefix_str": "62", + "tlb": "#62" + }, + "signature": { + "stack_string": "x:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1073741823 + } + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 423, + "function_name": "exec_rollrev" + } + }, + { + "name": "BLKSWX", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Pops integers `i`,`j` from the stack, then performs `[i] [j] BLKSWAP`.", + "tags": ["stack"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "7", + "condition": "Top element is not an `Int`." + }, + { + "errno": "7", + "condition": "Second element is not an `Int`." + }, + { + "errno": "5", + "condition": "Integer is out of range." + }, + { + "errno": "2", + "condition": "Stack contains less than `i + j` elements." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 6488064, + "max": 6553600, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_blkswap_x", + "kind": "simple", + "prefix": 99, + "prefix_str": "63", + "tlb": "#63" + }, + "signature": { + "stack_string": "i:Int j:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1073741823 + } + }, + { + "type": "simple", + "name": "j", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1073741823 + } + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 436, + "function_name": "exec_blkswap_x" + } + }, + { + "name": "REVX", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Pops integers `i`,`j` from the stack, then performs `[i] [j] REVERSE`.", + "tags": ["stack"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "7", + "condition": "Top element is not an `Int`." + }, + { + "errno": "7", + "condition": "Second element is not an `Int`." + }, + { + "errno": "5", + "condition": "Integer is out of range." + }, + { + "errno": "2", + "condition": "Stack contains less than `i + j` elements." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 6553600, + "max": 6619136, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_reverse_x", + "kind": "simple", + "prefix": 100, + "prefix_str": "64", + "tlb": "#64" + }, + "signature": { + "stack_string": "i:Int j:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1073741823 + } + }, + { + "type": "simple", + "name": "j", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1073741823 + } + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 452, + "function_name": "exec_reverse_x" + } + }, + { + "name": "DROPX", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Pops integer `i` from the stack, then performs `[i] BLKDROP`.", + "tags": ["stack"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + }, + { + "errno": "7", + "condition": "Top element is not an `Int`." + }, + { + "errno": "5", + "condition": "Integer is out of range." + }, + { + "errno": "2", + "condition": "Stack contains less than `i` elements." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 6619136, + "max": 6684672, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_drop_x", + "kind": "simple", + "prefix": 101, + "prefix_str": "65", + "tlb": "#65" + }, + "signature": { + "stack_string": "i:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1073741823 + } + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 464, + "function_name": "exec_drop_x" + } + }, + { + "name": "TUCK", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Copies the top stack item below the second item. For example, `1 2 -> 2 1 2`.", + "tags": ["stack"], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["SWAP", "OVER"] + }, + { + "exact": true, + "instructions": ["XCPU s1 s1"] + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 6684672, + "max": 6750208, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_tuck", + "kind": "simple", + "prefix": 102, + "prefix_str": "66", + "tlb": "#66" + }, + "signature": { + "stack_string": "y:Any x:Any -> x:Any y:Any x:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 474, + "function_name": "exec_tuck" + } + }, + { + "name": "XCHGX", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Pops integer `i` from the stack, then performs `s(i) XCHG`.", + "tags": ["stack"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + }, + { + "errno": "7", + "condition": "Top element is not an `Int`." + }, + { + "errno": "5", + "condition": "Integer is out of range." + }, + { + "errno": "2", + "condition": "Stack contains less than `i + 1` elements." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 6750208, + "max": 6815744, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_xchg_x", + "kind": "simple", + "prefix": 103, + "prefix_str": "67", + "tlb": "#67" + }, + "signature": { + "stack_string": "i:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1073741823 + } + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 483, + "function_name": "exec_xchg_x" + } + }, + { + "name": "DEPTH", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Pushes the current depth of the stack.", + "tags": [], + "operands": [], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "PUSHINT_4 3" + }, + { + "instruction": "DEPTH", + "comment": "Pushes the current stack depth (3) onto the stack" + } + ], + "stack": { + "input": ["1", "2", "3"], + "output": ["1", "2", "3", "3"] + } + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 6815744, + "max": 6881280, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_depth", + "kind": "simple", + "prefix": 104, + "prefix_str": "68", + "tlb": "#68" + }, + "signature": { + "stack_string": "∅ -> depth:Int", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "depth", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 493, + "function_name": "exec_depth" + } + }, + { + "name": "CHKDEPTH", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Pops integer `i` from the stack and checks whether there are at least `i` elements, generating a stack underflow exception otherwise.", + "tags": ["stack"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + }, + { + "errno": "7", + "condition": "Top element is not an `Int`." + }, + { + "errno": "5", + "condition": "Integer is out of range." + }, + { + "errno": "2", + "condition": "Stack contains less than `i` elements." + } + ], + "gas": [ + { + "value": 18, + "description": "If no exception was thrown" + }, + { + "value": 68, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 6881280, + "max": 6946816, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_chkdepth", + "kind": "simple", + "prefix": 105, + "prefix_str": "69", + "tlb": "#69" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "i:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1073741823 + } + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 500, + "function_name": "exec_chkdepth" + } + }, + { + "name": "ONLYTOPX", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Pops integer `i` from the stack, then removes all but the top `i` elements.", + "tags": ["stack"], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + }, + { + "errno": "7", + "condition": "Top element is not an `Int`." + }, + { + "errno": "5", + "condition": "Integer is out of range." + }, + { + "errno": "2", + "condition": "Stack contains less than `i` elements." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 6946816, + "max": 7012352, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_onlytop_x", + "kind": "simple", + "prefix": 106, + "prefix_str": "6A", + "tlb": "#6a" + }, + "signature": { + "stack_string": "i:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1073741823 + } + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 509, + "function_name": "exec_onlytop_x" + } + }, + { + "name": "ONLYX", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Pops integer `i` from the stack, then leaves only the bottom `i` elements.", + "tags": ["stack"], + "operands": [], + "other_implementations": [ + { + "exact": false, + "instructions": ["DEPTH", "SWAP", "SUB", "DROPX"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + }, + { + "errno": "7", + "condition": "Top element is not an `Int`." + }, + { + "errno": "5", + "condition": "Integer is out of range." + }, + { + "errno": "2", + "condition": "Stack contains less than `i` elements." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7012352, + "max": 7077888, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_only_x", + "kind": "simple", + "prefix": 107, + "prefix_str": "6B", + "tlb": "#6b" + }, + "signature": { + "stack_string": "i:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1073741823 + } + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 526, + "function_name": "exec_only_x" + } + }, + { + "name": "ACCEPT", + "category": "basic_gas", + "sub_category": "", + "description": { + "short": "", + "long": "Sets current gas limit `g_l` to its maximal allowed value `g_m`, and resets the gas credit `g_c` to zero, decreasing the value of `g_r` by `g_c` in the process.\nIn other words, the current smart contract agrees to buy some gas to finish the current transaction. This action is required to process external messages, which bring no value (hence no gas) with themselves.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16252928, + "max": 16253184, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_accept", + "kind": "simple", + "prefix": 63488, + "prefix_str": "F800", + "tlb": "#f800" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [ + { + "type": "special", + "name": "gas" + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "special", + "name": "gas" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 81, + "function_name": "exec_accept" + } + }, + { + "name": "SETGASLIMIT", + "category": "basic_gas", + "sub_category": "", + "description": { + "short": "", + "long": "Sets current gas limit `g_l` to the minimum of `g` and `g_m`, and resets the gas credit `g_c` to zero. If the gas consumed so far (including the present instruction) exceeds the resulting value of `g_l`, an (unhandled) out of gas exception is thrown before setting new gas limits. Notice that `SETGASLIMIT` with an argument `g >= 2^63-1` is equivalent to `ACCEPT`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16253184, + "max": 16253440, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_set_gas_limit", + "kind": "simple", + "prefix": 63489, + "prefix_str": "F801", + "tlb": "#f801" + }, + "signature": { + "stack_string": "g:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "g", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "special", + "name": "gas" + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "special", + "name": "gas" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 86, + "function_name": "exec_set_gas_limit" + } + }, + { + "name": "GASCONSUMED", + "category": "basic_gas", + "sub_category": "", + "description": { + "short": "", + "long": "Returns gas consumed by VM so far (including this instruction) in current Computation Phase.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16254720, + "max": 16254976, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_gas_consumed", + "version": 4, + "kind": "simple", + "prefix": 63495, + "prefix_str": "F807", + "tlb": "#f807" + }, + "signature": { + "stack_string": "∅ -> g_c:Int", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "g_c", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "special", + "name": "gas" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 96, + "function_name": "exec_gas_consumed" + } + }, + { + "name": "COMMIT", + "category": "basic_gas", + "sub_category": "", + "description": { + "short": "", + "long": "Commits the current state of registers `c4` ('persistent data') and `c5` ('actions') so that the current execution is considered 'successful' with the saved values even if an exception is thrown later.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16256768, + "max": 16257024, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_commit", + "kind": "simple", + "prefix": 63503, + "prefix_str": "F80F", + "tlb": "#f80f" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 4 + }, + { + "type": "constant", + "index": 5 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "special", + "name": "cstate" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 102, + "function_name": "exec_commit" + } + }, + { + "name": "NOW", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns current Unix timestamp.", + "long": "Returns the current Unix timestamp in seconds since epoch. This value is taken from the parameter 3 of the c7 tuple.", + "tags": ["time"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16261888, + "max": 16262144, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_param(_1, 3, 'NOW')", + "kind": "simple", + "prefix": 63523, + "prefix_str": "F823", + "tlb": "#f823" + }, + "signature": { + "stack_string": "∅ -> timestamp:Int", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "timestamp", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 143, + "function_name": "exec_get_param" + } + }, + { + "name": "BLOCKLT", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns current block's logical time.", + "long": "Returns the logical time of the current block. This value is taken from the parameter 4 of the c7 tuple.", + "tags": ["time"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16262144, + "max": 16262400, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_param(_1, 4, 'BLOCKLT')", + "kind": "simple", + "prefix": 63524, + "prefix_str": "F824", + "tlb": "#f824" + }, + "signature": { + "stack_string": "∅ -> lt:Int", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "lt", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 143, + "function_name": "exec_get_param" + } + }, + { + "name": "LTIME", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns current transaction's logical time.", + "long": "Returns the logical time of the current transaction. This value is taken from the parameter 5 of the c7 tuple.", + "tags": ["time"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16262400, + "max": 16262656, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_param(_1, 5, 'LTIME')", + "kind": "simple", + "prefix": 63525, + "prefix_str": "F825", + "tlb": "#f825" + }, + "signature": { + "stack_string": "∅ -> lt:Int", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "lt", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 143, + "function_name": "exec_get_param" + } + }, + { + "name": "RANDSEED", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns current random seed.", + "long": "Returns the current random seed used for PRNG operations. This value is taken from the parameter 6 of the c7 tuple.", + "tags": ["random"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16262656, + "max": 16262912, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_param(_1, 6, 'RANDSEED')", + "kind": "simple", + "prefix": 63526, + "prefix_str": "F826", + "tlb": "#f826" + }, + "signature": { + "stack_string": "∅ -> seed:Int", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "seed", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 143, + "function_name": "exec_get_param" + } + }, + { + "name": "BALANCE", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns current smart contract balance.", + "long": "Returns the current balance of the smart contract in nanotons. This value is taken from the parameter 7 of the c7 tuple.", + "tags": ["balance"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16262912, + "max": 16263168, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_param(_1, 7, 'BALANCE')", + "kind": "simple", + "prefix": 63527, + "prefix_str": "F827", + "tlb": "#f827" + }, + "signature": { + "stack_string": "∅ -> balance:Int", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "balance", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 143, + "function_name": "exec_get_param" + } + }, + { + "name": "MYADDR", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns current smart contract address.", + "long": "Returns the address of the current smart contract as a _Slice_. This is the same address that is used for sending messages to this contract. This value is taken from the parameter 8 of the c7 tuple.", + "tags": ["address"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16263168, + "max": 16263424, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_param(_1, 8, 'MYADDR')", + "kind": "simple", + "prefix": 63528, + "prefix_str": "F828", + "tlb": "#f828" + }, + "signature": { + "stack_string": "∅ -> address:Slice", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "address", + "value_types": ["Slice"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 143, + "function_name": "exec_get_param" + } + }, + { + "name": "CONFIGROOT", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns global configuration dictionary.", + "long": "Returns the root cell of the global configuration dictionary. This dictionary contains various blockchain parameters and settings. This value is taken from the parameter 9 of the c7 tuple.", + "tags": ["config"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16263424, + "max": 16263680, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_param(_1, 9, 'CONFIGROOT')", + "kind": "simple", + "prefix": 63529, + "prefix_str": "F829", + "tlb": "#f829" + }, + "signature": { + "stack_string": "∅ -> config:Cell", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "config", + "value_types": ["Cell"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 143, + "function_name": "exec_get_param" + } + }, + { + "name": "MYCODE", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns current smart contract code.", + "long": "Returns the code of the current smart contract as a _Cell_. This is the same code that is currently being executed. This value is taken from the parameter 10 of the c7 tuple.", + "tags": ["code"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16263680, + "max": 16263936, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_param(_1, 10, 'MYCODE')", + "kind": "simple", + "prefix": 63530, + "prefix_str": "F82A", + "tlb": "#f82a" + }, + "signature": { + "stack_string": "∅ -> value:Cell", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "value", + "value_types": ["Cell"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 143, + "function_name": "exec_get_param" + } + }, + { + "name": "INCOMINGVALUE", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns value attached to incoming message.", + "long": "Returns the amount of nanotons attached to the incoming message that initiated this transaction. For external messages and tick-tock transactions returns 0. This value is taken from the parameter 11 of the c7 tuple.", + "tags": ["message", "value"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16263936, + "max": 16264192, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_param(_1, 11, 'INCOMINGVALUE')", + "kind": "simple", + "prefix": 63531, + "prefix_str": "F82B", + "tlb": "#f82b" + }, + "signature": { + "stack_string": "∅ -> value:Int", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "value", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 143, + "function_name": "exec_get_param" + } + }, + { + "name": "STORAGEFEES", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns accumulated storage fees.", + "long": "Returns the amount of storage fees that have been accumulated since the last transaction. This value is deducted from the contract's balance during transaction execution. This value is taken from the parameter 12 of the c7 tuple.", + "tags": ["fees"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16264192, + "max": 16264448, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_param(_1, 12, 'STORAGEFEES')", + "kind": "simple", + "prefix": 63532, + "prefix_str": "F82C", + "tlb": "#f82c" + }, + "signature": { + "stack_string": "∅ -> fees:Int", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "fees", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 143, + "function_name": "exec_get_param" + } + }, + { + "name": "PREVBLOCKSINFOTUPLE", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns information about previous blocks.", + "long": "Returns a tuple containing information about previous blocks in the blockchain. This includes masterchain blocks and the previous key block. This value is taken from the parameter 13 of the c7 tuple.", + "tags": ["block", "info"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16264448, + "max": 16264704, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_param(_1, 13, 'PREVBLOCKSINFOTUPLE')", + "kind": "simple", + "prefix": 63533, + "prefix_str": "F82D", + "tlb": "#f82d" + }, + "signature": { + "stack_string": "∅ -> info:Tuple", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "info", + "value_types": ["Tuple"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 143, + "function_name": "exec_get_param" + } + }, + { + "name": "UNPACKEDCONFIGTUPLE", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns unpacked configuration parameters.", + "long": "Returns a tuple containing unpacked global configuration parameters. This provides easier access to commonly used configuration values without manual dictionary lookup. This value is taken from the parameter 14 of the c7 tuple.", + "tags": ["config"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16264704, + "max": 16264960, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_param(_1, 14, 'UNPACKEDCONFIGTUPLE')", + "kind": "simple", + "prefix": 63534, + "prefix_str": "F82E", + "tlb": "#f82e" + }, + "signature": { + "stack_string": "∅ -> info:Tuple", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "info", + "value_types": ["Tuple"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 143, + "function_name": "exec_get_param" + } + }, + { + "name": "DUEPAYMENT", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns required payment amount.", + "long": "Returns the amount of nanotons that must be paid for the current operation. This value is taken from the parameter 15 of the c7 tuple.", + "tags": ["payment"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16264960, + "max": 16265216, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_param(_1, 15, 'DUEPAYMENT')", + "kind": "simple", + "prefix": 63535, + "prefix_str": "F82F", + "tlb": "#f82f" + }, + "signature": { + "stack_string": "∅ -> payment:Int", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "payment", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 143, + "function_name": "exec_get_param" + } + }, + { + "name": "CONFIGDICT", + "category": "config", + "sub_category": "", + "description": { + "short": "", + "long": "Returns the global configuration dictionary along with its key length (32).", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["CONFIGROOT", "PUSHINT_8 32"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16265216, + "max": 16265472, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_config_dict", + "kind": "simple", + "prefix": 63536, + "prefix_str": "F830", + "tlb": "#f830" + }, + "signature": { + "stack_string": "∅ -> x:Slice|Null 32", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice", "Null"] + }, + { + "type": "const", + "value": 32, + "value_type": "Int" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 182, + "function_name": "exec_get_config_dict" + } + }, + { + "name": "CONFIGPARAM", + "category": "config", + "sub_category": "", + "description": { + "short": "", + "long": "Returns the value of the global configuration parameter with integer index `i` as a _Cell_ `c`, and a flag to indicate success.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["CONFIGDICT", "DICTIGETREF"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16265728, + "max": 16265984, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_config_param(_1, false)", + "kind": "simple", + "prefix": 63538, + "prefix_str": "F832", + "tlb": "#f832" + }, + "signature": { + "stack_string": "i:Int -> (∅ 0)|(c:Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 188, + "function_name": "exec_get_config_param" + } + }, + { + "name": "CONFIGOPTPARAM", + "category": "config", + "sub_category": "", + "description": { + "short": "", + "long": "Returns the value of the global configuration parameter with integer index `i` as a _Maybe Cell_ `c^?`.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["CONFIGDICT", "DICTIGETOPTREF"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16265984, + "max": 16266240, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_config_param(_1, true)", + "kind": "simple", + "prefix": 63539, + "prefix_str": "F833", + "tlb": "#f833" + }, + "signature": { + "stack_string": "i:Int -> c:Cell|Null", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell", "Null"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 188, + "function_name": "exec_get_config_param" + } + }, + { + "name": "PREVMCBLOCKS", + "category": "config", + "sub_category": "", + "description": { + "short": "", + "long": "Retrives `last_mc_blocks` part of `PrevBlocksInfo` from c7 (parameter 13).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16266240, + "max": 16266241, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_prev_blocks_info(_1, 0, 'PREVMCBLOCKS')", + "version": 4, + "kind": "simple", + "prefix": 16266240, + "prefix_str": "F83400", + "tlb": "#f83400" + }, + "signature": { + "stack_string": "∅ -> t:Tuple", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 259, + "function_name": "exec_get_prev_blocks_info" + } + }, + { + "name": "PREVKEYBLOCK", + "category": "config", + "sub_category": "", + "description": { + "short": "", + "long": "Retrives `prev_key_block` part of `PrevBlocksInfo` from c7 (parameter 13).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16266241, + "max": 16266242, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_prev_blocks_info(_1, 1, 'PREVKEYBLOCK')", + "version": 4, + "kind": "simple", + "prefix": 16266241, + "prefix_str": "F83401", + "tlb": "#f83401" + }, + "signature": { + "stack_string": "∅ -> t:Tuple", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 259, + "function_name": "exec_get_prev_blocks_info" + } + }, + { + "name": "PREVMCBLOCKS_100", + "category": "config", + "sub_category": "", + "description": { + "short": "", + "long": "Retrives `last_mc_blocks` part of `PrevBlocksInfo` from c7 (parameter 13).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16266242, + "max": 16266243, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_get_prev_blocks_info(_1, 2, 'PREVMCBLOCKS_100')", + "version": 9, + "kind": "simple", + "prefix": 16266242, + "prefix_str": "F83402", + "tlb": "#f83402" + }, + "signature": { + "stack_string": "∅ -> t:Tuple", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 259, + "function_name": "exec_get_prev_blocks_info" + } + }, + { + "name": "GLOBALID", + "category": "config", + "sub_category": "", + "description": { + "short": "", + "long": "Retrieves `global_id` from 19 network config.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16266496, + "max": 16266752, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_global_id", + "version": 4, + "kind": "simple", + "prefix": 63541, + "prefix_str": "F835", + "tlb": "#f835" + }, + "signature": { + "stack_string": "∅ -> i:Int", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 276, + "function_name": "exec_get_global_id" + } + }, + { + "name": "GETGASFEE", + "category": "config", + "sub_category": "", + "description": { + "short": "", + "long": "Calculates gas fee (amount in nanotoncoin to be paid) for a transaction which consumed `gas_used` gas units.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16266752, + "max": 16267008, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_gas_fee", + "version": 6, + "kind": "simple", + "prefix": 63542, + "prefix_str": "F836", + "tlb": "#f836" + }, + "signature": { + "stack_string": "gas_used:Int is_mc:Int -> price:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "gas_used", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "is_mc", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "price", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 306, + "function_name": "exec_get_gas_fee" + } + }, + { + "name": "GETSTORAGEFEE", + "category": "config", + "sub_category": "", + "description": { + "short": "", + "long": "Calculates storage fees (amount in nanotoncoin to be paid, only current StoragePrices entry is used) for storing a contract of provided size for `seconds`, `bits` and `cells` represent contract state (`code` + `data`).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16267008, + "max": 16267264, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_storage_fee", + "version": 6, + "kind": "simple", + "prefix": 63543, + "prefix_str": "F837", + "tlb": "#f837" + }, + "signature": { + "stack_string": "cells:Int bits:Int seconds:Int is_mc:Int -> price:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cells", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "bits", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "seconds", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "is_mc", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "price", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 317, + "function_name": "exec_get_storage_fee" + } + }, + { + "name": "GETFORWARDFEE", + "category": "config", + "sub_category": "", + "description": { + "short": "", + "long": "Calculates amount of nanotoncoin that must be paid to send a message of the specified size.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16267264, + "max": 16267520, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_forward_fee", + "version": 6, + "kind": "simple", + "prefix": 63544, + "prefix_str": "F838", + "tlb": "#f838" + }, + "signature": { + "stack_string": "cells:Int bits:Int is_mc:Int -> price:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cells", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "bits", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "is_mc", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "price", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 331, + "function_name": "exec_get_forward_fee" + } + }, + { + "name": "GETPRECOMPILEDGAS", + "category": "config", + "sub_category": "", + "description": { + "short": "", + "long": "Returns gas usage for the current contract if it is precompiled, `null` otherwise.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16267520, + "max": 16267776, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_precompiled_gas", + "version": 6, + "kind": "simple", + "prefix": 63545, + "prefix_str": "F839", + "tlb": "#f839" + }, + "signature": { + "stack_string": "∅ -> x:Int", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 343, + "function_name": "exec_get_precompiled_gas" + } + }, + { + "name": "GETORIGINALFWDFEE", + "category": "config", + "sub_category": "", + "description": { + "short": "", + "long": "Calculate `fwd_fee * 2^16 / first_frac`. Can be used to get the original `fwd_fee` of the message.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16267776, + "max": 16268032, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_original_fwd_fee", + "version": 6, + "kind": "simple", + "prefix": 63546, + "prefix_str": "F83A", + "tlb": "#f83a" + }, + "signature": { + "stack_string": "fwd_fee:Int is_mc:Int -> orig_fwd_fee:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "fwd_fee", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "is_mc", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "orig_fwd_fee", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 350, + "function_name": "exec_get_original_fwd_fee" + } + }, + { + "name": "GETGASFEESIMPLE", + "category": "config", + "sub_category": "", + "description": { + "short": "", + "long": "Same as `GETGASFEE`, but without flat price (just `(gas_used * price) / 2^16)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16268032, + "max": 16268288, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_gas_fee_simple", + "version": 6, + "kind": "simple", + "prefix": 63547, + "prefix_str": "F83B", + "tlb": "#f83b" + }, + "signature": { + "stack_string": "gas_used:Int is_mc:Int -> price:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "gas_used", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "is_mc", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "price", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 364, + "function_name": "exec_get_gas_fee_simple" + } + }, + { + "name": "GETFORWARDFEESIMPLE", + "category": "config", + "sub_category": "", + "description": { + "short": "", + "long": "Same as `GETFORWARDFEE`, but without lump price (just (`bits*bit_price + cells*cell_price) / 2^16`).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16268288, + "max": 16268544, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_forward_fee_simple", + "version": 6, + "kind": "simple", + "prefix": 63548, + "prefix_str": "F83C", + "tlb": "#f83c" + }, + "signature": { + "stack_string": "cells:Int bits:Int is_mc:Int -> price:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cells", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "bits", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "is_mc", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "price", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 375, + "function_name": "exec_get_forward_fee_simple" + } + }, + { + "name": "GETGLOBVAR", + "category": "globals", + "sub_category": "", + "description": { + "short": "", + "long": "Returns the `i`-th (from the stack) global variable.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHCTR c7", "SWAP", "INDEXVARQ"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16269312, + "max": 16269568, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_global_var", + "kind": "simple", + "prefix": 63552, + "prefix_str": "F840", + "tlb": "#f840" + }, + "signature": { + "stack_string": "i:Int -> x:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 221, + "function_name": "exec_get_global_var" + } + }, + { + "name": "SETGLOBVAR", + "category": "globals", + "sub_category": "", + "description": { + "short": "", + "long": "Assigns `x` from the stack to the `i`-th (from the stack) global variable.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHCTR c7", "ROTREV", "SETINDEXVARQ", "POPCTR c7"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16277504, + "max": 16277760, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_set_global_var", + "kind": "simple", + "prefix": 63584, + "prefix_str": "F860", + "tlb": "#f860" + }, + "signature": { + "stack_string": "x:Any i:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x" + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 252, + "function_name": "exec_set_global_var" + } + }, + { + "name": "RANDU256", + "category": "prng", + "sub_category": "", + "description": { + "short": "", + "long": "Generates a new pseudo-random unsigned 256-bit _Integer_ `x`. The algorithm is as follows: if `r` is the old value of the random seed, considered as a 32-byte array (by constructing the big-endian representation of an unsigned 256-bit integer), then its `sha512(r)` is computed; the first 32 bytes of this hash are stored as the new value `r'` of the random seed, and the remaining 32 bytes are returned as the next random value `x`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16257024, + "max": 16257280, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_randu256", + "kind": "simple", + "prefix": 63504, + "prefix_str": "F810", + "tlb": "#f810" + }, + "signature": { + "stack_string": "∅ -> x:Int", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 542, + "function_name": "exec_randu256" + } + }, + { + "name": "RAND", + "category": "prng", + "sub_category": "", + "description": { + "short": "", + "long": "Generates a new pseudo-random integer `z` in the range `0...y-1` (or `y...-1`, if `y<0`). More precisely, an unsigned random value `x` is generated as in `RAND256U`; then `z:=floor(x*y/2^256)` is computed.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["RANDU256", "MULRSHIFT# 256"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16257280, + "max": 16257536, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_rand_int", + "kind": "simple", + "prefix": 63505, + "prefix_str": "F811", + "tlb": "#f811" + }, + "signature": { + "stack_string": "y:Int -> z:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 548, + "function_name": "exec_rand_int" + } + }, + { + "name": "SETRAND", + "category": "prng", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the random seed to unsigned 256-bit _Integer_ `x`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16258048, + "max": 16258304, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_set_rand(_1, false)", + "kind": "simple", + "prefix": 63508, + "prefix_str": "F814", + "tlb": "#f814" + }, + "signature": { + "stack_string": "x:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 561, + "function_name": "exec_set_rand" + } + }, + { + "name": "ADDRAND", + "category": "prng", + "sub_category": "", + "description": { + "short": "", + "long": "Mixes unsigned 256-bit _Integer_ `x` into the random seed `r` by setting the random seed to `Sha` of the concatenation of two 32-byte strings: the first with the big-endian representation of the old seed `r`, and the second with the big-endian representation of `x`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16258304, + "max": 16258560, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_set_rand(_1, true)", + "kind": "simple", + "prefix": 63509, + "prefix_str": "F815", + "tlb": "#f815" + }, + "signature": { + "stack_string": "x:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 561, + "function_name": "exec_set_rand" + } + }, + { + "name": "HASHCU", + "category": "crypto", + "sub_category": "crypto_common", + "description": { + "short": "", + "long": "Computes the representation hash of a _Cell_ `c` and returns it as a 256-bit unsigned integer `hash`. Useful for signing and checking signatures of arbitrary entities represented by a tree of cells.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16318464, + "max": 16318720, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_compute_hash(_1, 0)", + "kind": "simple", + "prefix": 63744, + "prefix_str": "F900", + "tlb": "#f900" + }, + "signature": { + "stack_string": "c:Cell -> hash:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "hash", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 612, + "function_name": "exec_compute_hash" + } + }, + { + "name": "HASHSU", + "category": "crypto", + "sub_category": "crypto_common", + "description": { + "short": "", + "long": "Computes the hash of a _Slice_ `s` and returns it as a 256-bit unsigned integer `hash`. The result is the same as if an ordinary cell containing only data and references from `s` had been created and its hash computed by `HASHCU`.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["ENDC", "HASHCU"] + } + ], + "gas": [ + { + "value": 526, + "description": "For Cell creation" + } + ] + }, + "layout": { + "min": 16318720, + "max": 16318976, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_compute_hash(_1, 1)", + "kind": "simple", + "prefix": 63745, + "prefix_str": "F901", + "tlb": "#f901" + }, + "effects": ["CellCreate"], + "signature": { + "stack_string": "s:Slice -> hash:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "hash", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 612, + "function_name": "exec_compute_hash" + } + }, + { + "name": "SHA256U", + "category": "crypto", + "sub_category": "crypto_common", + "description": { + "short": "", + "long": "Computes `Sha` of the data bits of _Slice_ `s`. If the bit length of `s` is not divisible by eight, throws a cell underflow exception. The hash value is returned as a 256-bit unsigned integer `hash`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16318976, + "max": 16319232, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_compute_sha256", + "kind": "simple", + "prefix": 63746, + "prefix_str": "F902", + "tlb": "#f902" + }, + "signature": { + "stack_string": "s:Slice -> hash:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "hash", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 634, + "function_name": "exec_compute_sha256" + } + }, + { + "name": "CHKSIGNU", + "category": "crypto", + "sub_category": "crypto_common", + "description": { + "short": "", + "long": "Checks the Ed25519-signature `s` of a hash `h` (a 256-bit unsigned integer, usually computed as the hash of some data) using public key `k` (also represented by a 256-bit unsigned integer).\nThe signature `s` must be a _Slice_ containing at least 512 data bits; only the first 512 bits are used. The result is `-1` if the signature is valid, `0` otherwise.\nNotice that `CHKSIGNU` is equivalent to `ROT` `NEWC` `256 STU` `ENDC` `ROTREV` `CHKSIGNS`, i.e., to `CHKSIGNS` with the first argument `d` set to 256-bit _Slice_ containing `h`. Therefore, if `h` is computed as the hash of some data, these data are hashed _twice_, the second hashing occurring inside `CHKSIGNS`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 4026, + "description": "For CHKSIGN operation" + } + ] + }, + "layout": { + "min": 16322560, + "max": 16322816, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_ed25519_check_signature(_1, false)", + "kind": "simple", + "prefix": 63760, + "prefix_str": "F910", + "tlb": "#f910" + }, + "effects": ["Chksign"], + "signature": { + "stack_string": "h:Int s:Slice k:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "h", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 724, + "function_name": "exec_ed25519_check_signature" + } + }, + { + "name": "CHKSIGNS", + "category": "crypto", + "sub_category": "crypto_common", + "description": { + "short": "", + "long": "Checks whether `s` is a valid Ed25519-signature of the data portion of _Slice_ `d` using public key `k`, similarly to `CHKSIGNU`. If the bit length of _Slice_ `d` is not divisible by eight, throws a cell underflow exception. The verification of Ed25519 signatures is the standard one, with `Sha` used to reduce `d` to the 256-bit number that is actually signed.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 4026, + "description": "For CHKSIGN operation" + } + ] + }, + "layout": { + "min": 16322816, + "max": 16323072, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_ed25519_check_signature(_1, true)", + "kind": "simple", + "prefix": 63761, + "prefix_str": "F911", + "tlb": "#f911" + }, + "effects": ["Chksign"], + "signature": { + "stack_string": "d:Slice s:Slice k:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "d", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 724, + "function_name": "exec_ed25519_check_signature" + } + }, + { + "name": "ECRECOVER", + "category": "crypto", + "sub_category": "crypto_common", + "description": { + "short": "", + "long": "Recovers public key from signature, identical to Bitcoin/Ethereum operations. Takes 32-byte hash as uint256 `hash`; 65-byte signature as uint8 `v` and uint256 `r`, `s`. Returns `0` on failure, public key and `-1` on success. 65-byte public key is returned as uint8 `h`, uint256 `x1`, `x2`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 1526, + "description": "For ECRECOVER operation" + } + ] + }, + "layout": { + "min": 16323072, + "max": 16323328, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_ecrecover", + "version": 4, + "kind": "simple", + "prefix": 63762, + "prefix_str": "F912", + "tlb": "#f912" + }, + "effects": ["Ecrecover"], + "signature": { + "stack_string": "hash:Int v:Int r:Int s:Int -> (∅ 0)|(h:Int x1:Int x2:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "hash", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "v", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "h", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "x1", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "x2", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 760, + "function_name": "exec_ecrecover" + } + }, + { + "name": "SECP256K1_XONLY_PUBKEY_TWEAK_ADD", + "category": "crypto", + "sub_category": "crypto_common", + "description": { + "short": "Performs `secp256k1_xonly_pubkey_tweak_add()`.", + "long": "`key` and `tweak` are 256-bit unsigned integers. 65-byte public key is returned as `uint8 f`, `uint256 x, y` as in `ECRECOVER`.", + "tags": [], + "operands": [], + "docs_links": [ + { + "name": "Implementation of the `secp256k1_xonly_pubkey_tweak_add`", + "url": "https://github.com/bitcoin-core/secp256k1/blob/master/include/secp256k1_extrakeys.h#L120" + } + ], + "gas": [ + { + "value": 1276, + "description": "For SECP256K1_XONLY_PUBKEY_TWEAK_ADD operation" + } + ] + }, + "layout": { + "min": 16323328, + "max": 16323584, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_secp256k1_xonly_pubkey_tweak_add", + "version": 9, + "kind": "simple", + "prefix": 63763, + "prefix_str": "F913", + "tlb": "#f913" + }, + "effects": ["Secp256k1XonlyPubkeyTweakAdd"], + "signature": { + "stack_string": "key:Int tweak:Int -> (∅ 0)|(f:Int x:Int y:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "key", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "tweak", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "f", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 798, + "function_name": "exec_secp256k1_xonly_pubkey_tweak_add" + } + }, + { + "name": "P256_CHKSIGNU", + "category": "crypto", + "sub_category": "crypto_common", + "description": { + "short": "", + "long": "Checks seck256r1-signature `sig` of a number `h` (a 256-bit unsigned integer, usually computed as the hash of some data) and public key `k`. Returns -1 on success, 0 on failure. Public key is a 33-byte slice (encoded according to Sec. 2.3.4 point 2 of [SECG SEC 1](https://www.secg.org/sec1-v2.pdf)). Signature `sig` is a 64-byte slice (two 256-bit unsigned integers `r` and `s`).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 3526, + "description": "For P256_CHKSIGN operation" + } + ] + }, + "layout": { + "min": 16323584, + "max": 16323840, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_p256_chksign(_1, false)", + "version": 4, + "kind": "simple", + "prefix": 63764, + "prefix_str": "F914", + "tlb": "#f914" + }, + "effects": ["P256Chksign"], + "signature": { + "stack_string": "d:Slice sig:Slice k:Slice -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "d", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "sig", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 829, + "function_name": "exec_p256_chksign" + } + }, + { + "name": "P256_CHKSIGNS", + "category": "crypto", + "sub_category": "crypto_common", + "description": { + "short": "", + "long": "Checks seck256r1-signature `sig` of data portion of slice `d` and public key `k`. Returns -1 on success, 0 on failure. Public key is a 33-byte slice (encoded according to Sec. 2.3.4 point 2 of [SECG SEC 1](https://www.secg.org/sec1-v2.pdf)). Signature `sig` is a 64-byte slice (two 256-bit unsigned integers `r` and `s`).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 3526, + "description": "For P256_CHKSIGN operation" + } + ] + }, + "layout": { + "min": 16323840, + "max": 16324096, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_p256_chksign(_1, true)", + "version": 4, + "kind": "simple", + "prefix": 63765, + "prefix_str": "F915", + "tlb": "#f915" + }, + "effects": ["P256Chksign"], + "signature": { + "stack_string": "d:Slice sig:Slice k:Slice -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "d", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "sig", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 829, + "function_name": "exec_p256_chksign" + } + }, + { + "name": "RIST255_FROMHASH", + "category": "crypto", + "sub_category": "crypto_rist255", + "description": { + "short": "", + "long": "Deterministically generates a valid point `x` from a 512-bit hash (given as two 256-bit integers).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 626, + "description": "For RIST255_FROMHASH operation" + } + ] + }, + "layout": { + "min": 16326656, + "max": 16326912, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_ristretto255_from_hash", + "version": 4, + "kind": "simple", + "prefix": 63776, + "prefix_str": "F920", + "tlb": "#f920" + }, + "effects": ["Rist255Fromhash"], + "signature": { + "stack_string": "h1:Int h2:Int -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "h1", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "h2", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 874, + "function_name": "exec_ristretto255_from_hash" + } + }, + { + "name": "RIST255_VALIDATE", + "category": "crypto", + "sub_category": "crypto_rist255", + "description": { + "short": "", + "long": "Checks that integer `x` is a valid representation of some curve point. Throws range_chk on error.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 226, + "description": "For RIST255_VALIDATE operation" + } + ] + }, + "layout": { + "min": 16326912, + "max": 16327168, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_ristretto255_validate(_1, false)", + "version": 4, + "kind": "simple", + "prefix": 63777, + "prefix_str": "F921", + "tlb": "#f921" + }, + "effects": ["Rist255Validate"], + "signature": { + "stack_string": "x:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 895, + "function_name": "exec_ristretto255_validate" + } + }, + { + "name": "RIST255_ADD", + "category": "crypto", + "sub_category": "crypto_rist255", + "description": { + "short": "", + "long": "Addition of two points on a curve.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 626, + "description": "For RIST255_ADD operation" + } + ] + }, + "layout": { + "min": 16327168, + "max": 16327424, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_ristretto255_add(_1, false)", + "version": 4, + "kind": "simple", + "prefix": 63778, + "prefix_str": "F922", + "tlb": "#f922" + }, + "effects": ["Rist255Add"], + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 914, + "function_name": "exec_ristretto255_add" + } + }, + { + "name": "RIST255_SUB", + "category": "crypto", + "sub_category": "crypto_rist255", + "description": { + "short": "", + "long": "Subtraction of two points on curve.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 626, + "description": "For RIST255_ADD operation" + } + ] + }, + "layout": { + "min": 16327424, + "max": 16327680, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_ristretto255_sub(_1, false)", + "version": 4, + "kind": "simple", + "prefix": 63779, + "prefix_str": "F923", + "tlb": "#f923" + }, + "effects": ["Rist255Add"], + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 938, + "function_name": "exec_ristretto255_sub" + } + }, + { + "name": "RIST255_MUL", + "category": "crypto", + "sub_category": "crypto_rist255", + "description": { + "short": "", + "long": "Multiplies point `x` by a scalar `n`. Any `n` is valid, including negative.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 2026, + "description": "For RIST255_MUL operation" + } + ] + }, + "layout": { + "min": 16327680, + "max": 16327936, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_ristretto255_mul(_1, false)", + "version": 4, + "kind": "simple", + "prefix": 63780, + "prefix_str": "F924", + "tlb": "#f924" + }, + "effects": ["Rist255Mul"], + "signature": { + "stack_string": "x:Int n:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 976, + "function_name": "exec_ristretto255_mul" + } + }, + { + "name": "RIST255_MULBASE", + "category": "crypto", + "sub_category": "crypto_rist255", + "description": { + "short": "", + "long": "Multiplies the generator point `g` by a scalar `n`. Any `n` is valid, including negative.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 776, + "description": "For RIST255_MULBASE operation" + } + ] + }, + "layout": { + "min": 16327936, + "max": 16328192, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_ristretto255_mul_base(_1, false)", + "version": 4, + "kind": "simple", + "prefix": 63781, + "prefix_str": "F925", + "tlb": "#f925" + }, + "effects": ["Rist255Mulbase"], + "signature": { + "stack_string": "n:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1007, + "function_name": "exec_ristretto255_mul_base" + } + }, + { + "name": "RIST255_PUSHL", + "category": "crypto", + "sub_category": "crypto_rist255", + "description": { + "short": "", + "long": "Pushes integer l=2^252+27742317777372353535851937790883648493, which is the order of the group.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16328192, + "max": 16328448, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_ristretto255_push_l", + "version": 4, + "kind": "simple", + "prefix": 63782, + "prefix_str": "F926", + "tlb": "#f926" + }, + "signature": { + "stack_string": "∅ -> result:Int", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1032, + "function_name": "exec_ristretto255_push_l" + } + }, + { + "name": "RIST255_QVALIDATE", + "category": "crypto", + "sub_category": "crypto_rist255", + "description": { + "short": "", + "long": "Checks that integer `x` is a valid representation of some curve point. Returns -1 on success and 0 on failure.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 234, + "description": "For RIST255_VALIDATE operation" + } + ] + }, + "layout": { + "min": 12056865, + "max": 12056866, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_ristretto255_validate(_1, true)", + "version": 4, + "kind": "simple", + "prefix": 12056865, + "prefix_str": "B7F921", + "tlb": "#b7f921" + }, + "effects": ["Rist255Validate"], + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 895, + "function_name": "exec_ristretto255_validate" + } + }, + { + "name": "RIST255_QADD", + "category": "crypto", + "sub_category": "crypto_rist255", + "description": { + "short": "", + "long": "Addition of two points on a curve. Returns -1 on success and 0 on failure.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 634, + "description": "For RIST255_ADD operation" + } + ] + }, + "layout": { + "min": 12056866, + "max": 12056867, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_ristretto255_add(_1, true)", + "version": 4, + "kind": "simple", + "prefix": 12056866, + "prefix_str": "B7F922", + "tlb": "#b7f922" + }, + "effects": ["Rist255Add"], + "signature": { + "stack_string": "x:Int y:Int -> (∅ 0)|(result:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 914, + "function_name": "exec_ristretto255_add" + } + }, + { + "name": "RIST255_QSUB", + "category": "crypto", + "sub_category": "crypto_rist255", + "description": { + "short": "", + "long": "Subtraction of two points on curve. Returns -1 on success and 0 on failure.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 634, + "description": "For RIST255_ADD operation" + } + ] + }, + "layout": { + "min": 12056867, + "max": 12056868, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_ristretto255_sub(_1, true)", + "version": 4, + "kind": "simple", + "prefix": 12056867, + "prefix_str": "B7F923", + "tlb": "#b7f923" + }, + "effects": ["Rist255Add"], + "signature": { + "stack_string": "x:Int y:Int -> (∅ 0)|(result:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 938, + "function_name": "exec_ristretto255_sub" + } + }, + { + "name": "RIST255_QMUL", + "category": "crypto", + "sub_category": "crypto_rist255", + "description": { + "short": "", + "long": "Multiplies point `x` by a scalar `n`. Any `n` is valid, including negative. Returns -1 on success and 0 on failure.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 2034, + "description": "For RIST255_MUL operation" + } + ] + }, + "layout": { + "min": 12056868, + "max": 12056869, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_ristretto255_mul(_1, true)", + "version": 4, + "kind": "simple", + "prefix": 12056868, + "prefix_str": "B7F924", + "tlb": "#b7f924" + }, + "effects": ["Rist255Mul"], + "signature": { + "stack_string": "x:Int n:Int -> (∅ 0)|(result:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 976, + "function_name": "exec_ristretto255_mul" + } + }, + { + "name": "RIST255_QMULBASE", + "category": "crypto", + "sub_category": "crypto_rist255", + "description": { + "short": "", + "long": "Multiplies the generator point `g` by a scalar `n`. Any `n` is valid, including negative.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 784, + "description": "For RIST255_MULBASE operation" + } + ] + }, + "layout": { + "min": 12056869, + "max": 12056870, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_ristretto255_mul_base(_1, true)", + "version": 4, + "kind": "simple", + "prefix": 12056869, + "prefix_str": "B7F925", + "tlb": "#b7f925" + }, + "effects": ["Rist255Mulbase"], + "signature": { + "stack_string": "n:Int -> (∅ 0)|(result:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1007, + "function_name": "exec_ristretto255_mul_base" + } + }, + { + "name": "BLS_VERIFY", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Checks BLS signature, return true on success, false otherwise.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 61034, + "description": "For BLS_VERIFY operation" + } + ] + }, + "layout": { + "min": 16330752, + "max": 16330753, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_verify", + "version": 4, + "kind": "simple", + "prefix": 16330752, + "prefix_str": "F93000", + "tlb": "#f93000" + }, + "effects": ["BlsVerify"], + "signature": { + "stack_string": "pk:Slice msg:Slice sgn:Slice -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "pk", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "msg", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "sgn", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1095, + "function_name": "exec_bls_verify" + } + }, + { + "name": "BLS_AGGREGATE", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Aggregates signatures. `n>0`. Throw exception if `n=0` or if some `sig_i` is not a valid signature.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 0, + "description": "For BLS_AGGREGATE operation", + "formula": "-2650 + n * 4350" + } + ] + }, + "layout": { + "min": 16330753, + "max": 16330754, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_aggregate", + "version": 4, + "kind": "simple", + "prefix": 16330753, + "prefix_str": "F93001", + "tlb": "#f93001" + }, + "effects": ["DynamicGas"], + "signature": { + "stack_string": "x_1...x_n n:Int -> result:Slice", + "inputs": { + "stack": [ + { + "type": "array", + "name": "signatures", + "length_var": "n", + "array_entry": [ + { + "type": "simple", + "name": "sig", + "value_types": ["Slice"] + } + ] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1107, + "function_name": "exec_bls_aggregate" + } + }, + { + "name": "BLS_FASTAGGREGATEVERIFY", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Checks aggregated BLS signature for keys `pk_1...pk_n` and message `msg`. Return true on success, false otherwise. Return false if `n=0`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 0, + "description": "For BLS_FASTAGGREGATEVERIFY operation", + "formula": "58000 + n * 3000" + } + ] + }, + "layout": { + "min": 16330754, + "max": 16330755, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_fast_aggregate_verify", + "version": 4, + "kind": "simple", + "prefix": 16330754, + "prefix_str": "F93002", + "tlb": "#f93002" + }, + "effects": ["DynamicGas"], + "signature": { + "stack_string": "x_1...x_n n:Int msg:Slice sig:Slice -> result:Int", + "inputs": { + "stack": [ + { + "type": "array", + "name": "public_keys", + "length_var": "n", + "array_entry": [ + { + "type": "simple", + "name": "pk", + "value_types": ["Slice"] + } + ] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "msg", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "sig", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1121, + "function_name": "exec_bls_fast_aggregate_verify" + } + }, + { + "name": "BLS_AGGREGATEVERIFY", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Checks aggregated BLS signature for key-message pairs `pk_1 msg_1...pk_n msg_n`. Return true on success, false otherwise. Return false if `n=0`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 0, + "description": "For BLS_AGGREGATEVERIFY operation", + "formula": "38500 + n * 22500" + } + ] + }, + "layout": { + "min": 16330755, + "max": 16330756, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_aggregate_verify", + "version": 4, + "kind": "simple", + "prefix": 16330755, + "prefix_str": "F93003", + "tlb": "#f93003" + }, + "effects": ["DynamicGas"], + "signature": { + "stack_string": "x_1...x_n n:Int sgn:Slice -> result:Int", + "inputs": { + "stack": [ + { + "type": "array", + "name": "key_message_pairs", + "length_var": "n", + "array_entry": [ + { + "type": "simple", + "name": "pk", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "msg", + "value_types": ["Slice"] + } + ] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "sgn", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1138, + "function_name": "exec_bls_aggregate_verify" + } + }, + { + "name": "BLS_G1_ADD", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Addition on G1.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 3934, + "description": "For BLS_G1_ADD/BLS_G1_SUB operation" + } + ] + }, + "layout": { + "min": 16330768, + "max": 16330769, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_g1_add", + "version": 4, + "kind": "simple", + "prefix": 16330768, + "prefix_str": "F93010", + "tlb": "#f93010" + }, + "effects": ["BlsG1AddSub"], + "signature": { + "stack_string": "x:Slice y:Slice -> result:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1155, + "function_name": "exec_bls_g1_add" + } + }, + { + "name": "BLS_G1_SUB", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Subtraction on G1.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 3934, + "description": "For BLS_G1_ADD/BLS_G1_SUB operation" + } + ] + }, + "layout": { + "min": 16330769, + "max": 16330770, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_g1_sub", + "version": 4, + "kind": "simple", + "prefix": 16330769, + "prefix_str": "F93011", + "tlb": "#f93011" + }, + "effects": ["BlsG1AddSub"], + "signature": { + "stack_string": "x:Slice y:Slice -> result:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1166, + "function_name": "exec_bls_g1_sub" + } + }, + { + "name": "BLS_G1_NEG", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Negation on G1.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 784, + "description": "For BLS_G1_NEG operation" + } + ] + }, + "layout": { + "min": 16330770, + "max": 16330771, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_g1_neg", + "version": 4, + "kind": "simple", + "prefix": 16330770, + "prefix_str": "F93012", + "tlb": "#f93012" + }, + "effects": ["BlsG1Neg"], + "signature": { + "stack_string": "x:Slice -> result:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1177, + "function_name": "exec_bls_g1_neg" + } + }, + { + "name": "BLS_G1_MUL", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Multiplies G1 point `x` by scalar `s`. Any `s` is valid, including negative.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 5234, + "description": "For BLS_G1_MUL operation" + } + ] + }, + "layout": { + "min": 16330771, + "max": 16330772, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_g1_mul", + "version": 4, + "kind": "simple", + "prefix": 16330771, + "prefix_str": "F93013", + "tlb": "#f93013" + }, + "effects": ["BlsG1Mul"], + "signature": { + "stack_string": "x:Slice s:Int -> result:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1186, + "function_name": "exec_bls_g1_mul" + } + }, + { + "name": "BLS_G1_MULTIEXP", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Calculates `x_1*s_1+...+x_n*s_n` for G1 points `x_i` and scalars `s_i`. Returns zero point if `n=0`. Any `s_i` is valid, including negative.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 0, + "description": "For BLS_G1_MULTIEXP operation", + "formula": "11375 + 630 * n + 8820 * n * n" + } + ] + }, + "layout": { + "min": 16330772, + "max": 16330773, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_g1_multiexp", + "version": 4, + "kind": "simple", + "prefix": 16330772, + "prefix_str": "F93014", + "tlb": "#f93014" + }, + "effects": ["DynamicGas"], + "signature": { + "stack_string": "x_1...x_n n:Int -> result:Slice", + "inputs": { + "stack": [ + { + "type": "array", + "name": "components", + "length_var": "n", + "array_entry": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s", + "value_types": ["Int"] + } + ] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1197, + "function_name": "exec_bls_g1_multiexp" + } + }, + { + "name": "BLS_G1_ZERO", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Pushes zero point in G1.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16330773, + "max": 16330774, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_g1_zero", + "version": 4, + "kind": "simple", + "prefix": 16330773, + "prefix_str": "F93015", + "tlb": "#f93015" + }, + "signature": { + "stack_string": "∅ -> zero:Slice", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "zero", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1213, + "function_name": "exec_bls_g1_zero" + } + }, + { + "name": "BLS_MAP_TO_G1", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Converts FP element `f` to a G1 point.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 2384, + "description": "For BLS_MAP_TO_G1 operation" + } + ] + }, + "layout": { + "min": 16330774, + "max": 16330775, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_map_to_g1", + "version": 4, + "kind": "simple", + "prefix": 16330774, + "prefix_str": "F93016", + "tlb": "#f93016" + }, + "effects": ["BlsMapToG1"], + "signature": { + "stack_string": "f:Slice -> x:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "f", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1220, + "function_name": "exec_bls_map_to_g1" + } + }, + { + "name": "BLS_G1_INGROUP", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Checks that slice `x` represents a valid element of G1.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 2984, + "description": "For BLS_G1_INGROUP operation" + } + ] + }, + "layout": { + "min": 16330775, + "max": 16330776, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_g1_in_group", + "version": 4, + "kind": "simple", + "prefix": 16330775, + "prefix_str": "F93017", + "tlb": "#f93017" + }, + "effects": ["BlsG1InGroup"], + "signature": { + "stack_string": "x:Slice -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1229, + "function_name": "exec_bls_g1_in_group" + } + }, + { + "name": "BLS_G1_ISZERO", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Checks that G1 point `x` is equal to zero.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16330776, + "max": 16330777, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_g1_is_zero", + "version": 4, + "kind": "simple", + "prefix": 16330776, + "prefix_str": "F93018", + "tlb": "#f93018" + }, + "signature": { + "stack_string": "x:Slice -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1238, + "function_name": "exec_bls_g1_is_zero" + } + }, + { + "name": "BLS_G2_ADD", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Addition on G2.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 6134, + "description": "For BLS_G2_ADD/BLS_G2_SUB operation" + } + ] + }, + "layout": { + "min": 16330784, + "max": 16330785, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_g2_add", + "version": 4, + "kind": "simple", + "prefix": 16330784, + "prefix_str": "F93020", + "tlb": "#f93020" + }, + "effects": ["BlsG2AddSub"], + "signature": { + "stack_string": "x:Slice y:Slice -> result:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1246, + "function_name": "exec_bls_g2_add" + } + }, + { + "name": "BLS_G2_SUB", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Subtraction on G2.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 6134, + "description": "For BLS_G2_ADD/BLS_G2_SUB operation" + } + ] + }, + "layout": { + "min": 16330785, + "max": 16330786, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_g2_sub", + "version": 4, + "kind": "simple", + "prefix": 16330785, + "prefix_str": "F93021", + "tlb": "#f93021" + }, + "effects": ["BlsG2AddSub"], + "signature": { + "stack_string": "x:Slice y:Slice -> result:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1257, + "function_name": "exec_bls_g2_sub" + } + }, + { + "name": "BLS_G2_NEG", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Negation on G2.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 1584, + "description": "For BLS_G2_NEG operation" + } + ] + }, + "layout": { + "min": 16330786, + "max": 16330787, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_g2_neg", + "version": 4, + "kind": "simple", + "prefix": 16330786, + "prefix_str": "F93022", + "tlb": "#f93022" + }, + "effects": ["BlsG2Neg"], + "signature": { + "stack_string": "x:Slice -> result:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1268, + "function_name": "exec_bls_g2_neg" + } + }, + { + "name": "BLS_G2_MUL", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Multiplies G2 point `x` by scalar `s`. Any `s` is valid, including negative.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 10584, + "description": "For BLS_G2_MUL operation" + } + ] + }, + "layout": { + "min": 16330787, + "max": 16330788, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_g2_mul", + "version": 4, + "kind": "simple", + "prefix": 16330787, + "prefix_str": "F93023", + "tlb": "#f93023" + }, + "effects": ["BlsG2Mul"], + "signature": { + "stack_string": "x:Slice s:Int -> result:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1277, + "function_name": "exec_bls_g2_mul" + } + }, + { + "name": "BLS_G2_MULTIEXP", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Calculates `x_1*s_1+...+x_n*s_n` for G2 points `x_i` and scalars `s_i`. Returns zero point if `n=0`. Any `s_i` is valid, including negative.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 0, + "description": "For BLS_G2_MULTIEXP operation", + "formula": "30388 + 1280 * n + 22840 * n * n" + } + ] + }, + "layout": { + "min": 16330788, + "max": 16330789, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_g2_multiexp", + "version": 4, + "kind": "simple", + "prefix": 16330788, + "prefix_str": "F93024", + "tlb": "#f93024" + }, + "effects": ["DynamicGas"], + "signature": { + "stack_string": "x_1...x_n n:Int -> result:Slice", + "inputs": { + "stack": [ + { + "type": "array", + "name": "components", + "length_var": "n", + "array_entry": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s", + "value_types": ["Int"] + } + ] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1288, + "function_name": "exec_bls_g2_multiexp" + } + }, + { + "name": "BLS_G2_ZERO", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Pushes zero point in G2.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16330789, + "max": 16330790, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_g2_zero", + "version": 4, + "kind": "simple", + "prefix": 16330789, + "prefix_str": "F93025", + "tlb": "#f93025" + }, + "signature": { + "stack_string": "∅ -> zero:Slice", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "zero", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1304, + "function_name": "exec_bls_g2_zero" + } + }, + { + "name": "BLS_MAP_TO_G2", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Converts FP2 element `f` to a G2 point.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 7984, + "description": "For BLS_MAP_TO_G2 operation" + } + ] + }, + "layout": { + "min": 16330790, + "max": 16330791, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_map_to_g2", + "version": 4, + "kind": "simple", + "prefix": 16330790, + "prefix_str": "F93026", + "tlb": "#f93026" + }, + "effects": ["BlsMapToG2"], + "signature": { + "stack_string": "f:Slice -> x:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "f", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1311, + "function_name": "exec_bls_map_to_g2" + } + }, + { + "name": "BLS_G2_INGROUP", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Checks that slice `x` represents a valid element of G2.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 4284, + "description": "For BLS_G2_INGROUP operation" + } + ] + }, + "layout": { + "min": 16330791, + "max": 16330792, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_g2_in_group", + "version": 4, + "kind": "simple", + "prefix": 16330791, + "prefix_str": "F93027", + "tlb": "#f93027" + }, + "effects": ["BlsG2InGroup"], + "signature": { + "stack_string": "x:Slice -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1320, + "function_name": "exec_bls_g2_in_group" + } + }, + { + "name": "BLS_G2_ISZERO", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Checks that G2 point `x` is equal to zero.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16330792, + "max": 16330793, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_g2_is_zero", + "version": 4, + "kind": "simple", + "prefix": 16330792, + "prefix_str": "F93028", + "tlb": "#f93028" + }, + "signature": { + "stack_string": "x:Slice -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1329, + "function_name": "exec_bls_g2_is_zero" + } + }, + { + "name": "BLS_PAIRING", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Given G1 points `x_i` and G2 points `y_i`, calculates and multiply pairings of `x_i,y_i`. Returns true if the result is the multiplicative identity in FP12, false otherwise. Returns false if `n=0`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 0, + "description": "For BLS_PAIRING operation", + "formula": "20000 + n * 11800" + } + ] + }, + "layout": { + "min": 16330800, + "max": 16330801, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_pairing", + "version": 4, + "kind": "simple", + "prefix": 16330800, + "prefix_str": "F93030", + "tlb": "#f93030" + }, + "effects": ["DynamicGas"], + "signature": { + "stack_string": "x_1...x_n n:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "array", + "name": "components", + "length_var": "n", + "array_entry": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1337, + "function_name": "exec_bls_pairing" + } + }, + { + "name": "BLS_PUSHR", + "category": "crypto", + "sub_category": "crypto_bls", + "description": { + "short": "", + "long": "Pushes the order of G1 and G2 (approx. `2^255`).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16330801, + "max": 16330802, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_bls_push_r", + "version": 4, + "kind": "simple", + "prefix": 16330801, + "prefix_str": "F93031", + "tlb": "#f93031" + }, + "signature": { + "stack_string": "∅ -> result:Int", + "inputs": { + "stack": [], + "registers": [ + { + "type": "special", + "name": "r" + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1351, + "function_name": "exec_bls_push_r" + } + }, + { + "name": "CDATASIZEQ", + "category": "misc", + "sub_category": "", + "description": { + "short": "", + "long": "Recursively computes the count of distinct cells `x`, data bits `y`, and cell references `z` in the dag rooted at _Cell_ `c`, effectively returning the total storage used by this dag taking into account the identification of equal cells. The values of `x`, `y`, and `z` are computed by a depth-first traversal of this dag, with a hash table of visited cell hashes used to prevent visits of already-visited cells. The total count of visited cells `x` cannot exceed non-negative _Integer_ `n`; otherwise the computation is aborted before visiting the `(n+1)`-st cell and a zero is returned to indicate failure. If `c` is _Null_, returns `x=y=z=0`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16334848, + "max": 16335104, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_compute_data_size(_1, 1)", + "kind": "simple", + "prefix": 63808, + "prefix_str": "F940", + "tlb": "#f940" + }, + "signature": { + "stack_string": "c:Cell n:Int -> (∅ 0)|(x:Int y:Int z:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1415, + "function_name": "exec_compute_data_size" + } + }, + { + "name": "CDATASIZE", + "category": "misc", + "sub_category": "", + "description": { + "short": "", + "long": "A non-quiet version of `CDATASIZEQ` that throws a cell overflow exception (8) on failure.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16335104, + "max": 16335360, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_compute_data_size(_1, 0)", + "kind": "simple", + "prefix": 63809, + "prefix_str": "F941", + "tlb": "#f941" + }, + "signature": { + "stack_string": "c:Cell n:Int -> x:Int y:Int z:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1415, + "function_name": "exec_compute_data_size" + } + }, + { + "name": "SDATASIZEQ", + "category": "misc", + "sub_category": "", + "description": { + "short": "", + "long": "Recursively computes the count of distinct cells `x`, data bits `y`, and cell references `z` in the dag rooted at _Slice_ `s`, effectively returning the total storage used by this dag taking into account the identification of equal cells. The values of `x`, `y`, and `z` are computed by a depth-first traversal of this dag, with a hash table of visited cell hashes used to prevent visits of already-visited cells. The total count of visited cells `x` cannot exceed non-negative _Integer_ `n`; otherwise the computation is aborted before visiting the `(n+1)`-st cell and a zero is returned to indicate failure. The returned value of `x` does not take into account the cell that contains the slice `s` itself; however, the data bits and the cell references of `s` are accounted for in `y` and `z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16335360, + "max": 16335616, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_compute_data_size(_1, 3)", + "kind": "simple", + "prefix": 63810, + "prefix_str": "F942", + "tlb": "#f942" + }, + "signature": { + "stack_string": "s:Slice n:Int -> (∅ 0)|(x:Int y:Int z:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1415, + "function_name": "exec_compute_data_size" + } + }, + { + "name": "SDATASIZE", + "category": "misc", + "sub_category": "", + "description": { + "short": "", + "long": "A non-quiet version of `SDATASIZEQ` that throws a cell overflow exception (8) on failure.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16335616, + "max": 16335872, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_compute_data_size(_1, 2)", + "kind": "simple", + "prefix": 63811, + "prefix_str": "F943", + "tlb": "#f943" + }, + "signature": { + "stack_string": "s:Slice n:Int -> x:Int y:Int z:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1415, + "function_name": "exec_compute_data_size" + } + }, + { + "name": "LDGRAMS", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads a `Gram` or `VarUInteger 16` amount from _Slice_ `s`, and returns the amount as _Integer_ `x` along with the remainder `s'` of `s`. The expected serialization of `x` consists of a 4-bit unsigned big-endian integer `l`, followed by an `8l`-bit unsigned big-endian representation of `x`.", + "tags": ["variable-size integer", "slice parsing"], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Cannot deserialize a variable-length integer." + } + ], + "other_implementations": [ + { + "exact": false, + "instructions": ["LDU 4", "SWAP", "LSHIFT 3", "LDUX"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16384000, + "max": 16384256, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_var_integer(_1, 4, false, false)", + "kind": "simple", + "prefix": 64000, + "prefix_str": "FA00", + "tlb": "#fa00" + }, + "signature": { + "stack_string": "s:Slice -> x:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1453, + "function_name": "exec_load_var_integer" + } + }, + { + "name": "LDVARINT16", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads a `VarInteger 16` amount from _Slice_ `s`, and returns the amount as _Integer_ `x` along with the remainder `s'` of `s`. The expected serialization of `x` consists of a 4-bit unsigned big-endian integer `l`, followed by an `8l`-bit signed big-endian representation of `x`.", + "tags": ["variable-size integer", "slice parsing"], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Cannot deserialize a variable-length integer." + } + ], + "other_implementations": [ + { + "exact": false, + "instructions": ["LDU 4", "SWAP", "LSHIFT 3", "LDIX"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16384256, + "max": 16384512, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_var_integer(_1, 4, true, false)", + "kind": "simple", + "prefix": 64001, + "prefix_str": "FA01", + "tlb": "#fa01" + }, + "signature": { + "stack_string": "s:Slice -> x:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1453, + "function_name": "exec_load_var_integer" + } + }, + { + "name": "STGRAMS", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "Stores an integer `x` into _Builder_ `b` as an 16-bit unsigned variable-length integer.", + "long": "Stores an integer `x` in the range `0...2^120-1` into _Builder_ `b`, and returns the resulting _Builder_ `b'`. The serialization of `x` consists of a 4-bit unsigned big-endian integer `l`, which is the smallest integer `l>=0`, such that `x<2^(8l)`, followed by an `8l`-bit unsigned big-endian representation of `x`.", + "tags": ["variable-size integer", "builder building"], + "operands": [], + "exit_codes": [ + { + "errno": "5", + "condition": "If `x` is less than 0 and bigger than 2^120-1" + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16384512, + "max": 16384768, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_var_integer(_1, 4, false, false)", + "kind": "simple", + "prefix": 64002, + "prefix_str": "FA02", + "tlb": "#fa02" + }, + "signature": { + "stack_string": "b:Builder x:Int -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1.329227995784916e36 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1474, + "function_name": "exec_store_var_integer" + } + }, + { + "name": "STVARINT16", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "Stores an integer `x` into _Builder_ `b` as an 16-bit signed variable-length integer.", + "long": "Stores a _signed_ _Integer_ `x` in the range `-2^119...2^119-1` into _Builder_ `b`, and returns the resulting _Builder_ `b'`. The serialization of `x` consists of a 4-bit unsigned big-endian integer `l`, which is the smallest integer `l>=0`, such that `-2^(8l-1) <= x < 2^(8l-1)`, followed by an `8l`-bit signed big-endian representation of `x`.", + "tags": ["variable-size integer", "builder building"], + "operands": [], + "exit_codes": [ + { + "errno": "5", + "condition": "If `x` is less than -2^119 and bigger than 2^119-1" + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16384768, + "max": 16385024, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_var_integer(_1, 4, true, false)", + "kind": "simple", + "prefix": 64003, + "prefix_str": "FA03", + "tlb": "#fa03" + }, + "signature": { + "stack_string": "b:Builder x:Int -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1474, + "function_name": "exec_store_var_integer" + } + }, + { + "name": "LDVARUINT32", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads a `VarUInteger 32` amount from _Slice_ `s`, and returns the amount as _Integer_ `x` along with the remainder `s'` of `s`. The expected serialization of `x` consists of a 5-bit unsigned big-endian integer `l`, followed by an `8l`-bit unsigned big-endian representation of `x`.", + "tags": ["variable-size integer", "slice parsing"], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Cannot deserialize a variable-length integer." + } + ], + "other_implementations": [ + { + "exact": false, + "instructions": ["LDU 4", "SWAP", "LSHIFT 3", "LDUX"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16385024, + "max": 16385280, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_var_integer(_1, 5, false, false)", + "kind": "simple", + "prefix": 64004, + "prefix_str": "FA04", + "tlb": "#fa04" + }, + "signature": { + "stack_string": "s:Slice -> x:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1453, + "function_name": "exec_load_var_integer" + } + }, + { + "name": "LDVARINT32", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads a `VarInteger 32` amount from _Slice_ `s`, and returns the amount as _Integer_ `x` along with the remainder `s'` of `s`. The expected serialization of `x` consists of a 5-bit unsigned big-endian integer `l`, followed by an `8l`-bit signed big-endian representation of `x`.", + "tags": ["variable-size integer", "slice parsing"], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Cannot deserialize a variable-length integer." + } + ], + "other_implementations": [ + { + "exact": false, + "instructions": ["LDU 5", "SWAP", "LSHIFT 3", "LDIX"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16385280, + "max": 16385536, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_var_integer(_1, 5, true, false)", + "kind": "simple", + "prefix": 64005, + "prefix_str": "FA05", + "tlb": "#fa05" + }, + "signature": { + "stack_string": "s:Slice -> x:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1453, + "function_name": "exec_load_var_integer" + } + }, + { + "name": "STVARUINT32", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "Stores an integer `x` into _Builder_ `b` as an 32-bit unsigned variable-length integer.", + "long": "Stores an _Integer_ `x` in the range `0...2^248-1` into _Builder_ `b`, and returns the resulting _Builder_ `b'`. The serialization of `x` consists of a 5-bit unsigned big-endian integer `l`, which is the smallest integer `l>=0`, such that `x<2^(8l)`, followed by an `8l`-bit unsigned big-endian representation of `x`.", + "tags": ["variable-size integer", "builder building"], + "operands": [], + "exit_codes": [ + { + "errno": "5", + "condition": "If `x` is less than 0 and bigger than 2^248-1" + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16385536, + "max": 16385792, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_var_integer(_1, 5, false, false)", + "kind": "simple", + "prefix": 64006, + "prefix_str": "FA06", + "tlb": "#fa06" + }, + "signature": { + "stack_string": "b:Builder x:Int -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1474, + "function_name": "exec_store_var_integer" + } + }, + { + "name": "STVARINT32", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "Stores an integer `x` into _Builder_ `b` as an 32-bit signed variable-length integer.", + "long": "Stores a _signed_ _Integer_ `x` in the range `-2^247...2^247-1` into _Builder_ `b`, and returns the resulting _Builder_ `b'`. The serialization of `x` consists of a 5-bit unsigned big-endian integer `l`, which is the smallest integer `l>=0`, such that `-2^(8l-1) <= x < 2^(8l-1)`, followed by an `8l`-bit signed big-endian representation of `x`.", + "tags": ["variable-size integer", "builder building"], + "operands": [], + "exit_codes": [ + { + "errno": "5", + "condition": "If `x` is less than -2^247 and bigger than 2^247-1" + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16385792, + "max": 16386048, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_var_integer(_1, 5, true, false)", + "kind": "simple", + "prefix": 64007, + "prefix_str": "FA07", + "tlb": "#fa07" + }, + "signature": { + "stack_string": "b:Builder x:Int -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1474, + "function_name": "exec_store_var_integer" + } + }, + { + "name": "LDMSGADDR", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads a valid `MsgAddress` from _Slice_ `s` and pushes the loaded `addr` value onto the stack along with _Slice_ `s'` with the remaining data.", + "tags": ["address", "slice parsing"], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Cannot load a MsgAddress." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16400384, + "max": 16400640, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_message_addr(_1, false)", + "kind": "simple", + "prefix": 64064, + "prefix_str": "FA40", + "tlb": "#fa40" + }, + "signature": { + "stack_string": "s:Slice -> s':Slice addr:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "addr", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1536, + "function_name": "exec_load_message_addr" + } + }, + { + "name": "LDMSGADDRQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads a valid `MsgAddress` from _Slice_ `s` and pushes the loaded `addr` value onto the stack along with _Slice_ `s'` with the remaining data. This is a quiet version of `LDMSGADDR` which means that instead of throwing an exception, it pushes a status flag to the stack: 0 if the operation fails, -1 if the operation succeeds.", + "tags": ["address", "slice parsing"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16400640, + "max": 16400896, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_load_message_addr(_1, true)", + "kind": "simple", + "prefix": 64065, + "prefix_str": "FA41", + "tlb": "#fa41" + }, + "signature": { + "stack_string": "s:Slice -> (s:Slice 0)|(s':Slice addr:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "addr", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1536, + "function_name": "exec_load_message_addr" + } + }, + { + "name": "PARSEMSGADDR", + "category": "address", + "sub_category": "", + "description": { + "short": "", + "long": "Decomposes _Slice_ `s` containing a valid `MsgAddress` into a _Tuple_ `t` with separate fields of this `MsgAddress`. If `s` is not a valid `MsgAddress`, a cell deserialization exception is thrown.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16400896, + "max": 16401152, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_parse_message_addr(_1, false)", + "kind": "simple", + "prefix": 64066, + "prefix_str": "FA42", + "tlb": "#fa42" + }, + "signature": { + "stack_string": "s:Slice -> t:Tuple", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1629, + "function_name": "exec_parse_message_addr" + } + }, + { + "name": "PARSEMSGADDRQ", + "category": "address", + "sub_category": "", + "description": { + "short": "", + "long": "Decomposes _Slice_ `s` containing a valid `MsgAddress` into a _Tuple_ `t` with separate fields of this `MsgAddress`. If `s` is not a valid `MsgAddress`, returns a zero instead throwing an exception as for `PARSEMSGADDR`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16401152, + "max": 16401408, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_parse_message_addr(_1, true)", + "kind": "simple", + "prefix": 64067, + "prefix_str": "FA43", + "tlb": "#fa43" + }, + "signature": { + "stack_string": "s:Slice -> (∅ 0)|(t:Tuple -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1629, + "function_name": "exec_parse_message_addr" + } + }, + { + "name": "REWRITESTDADDR", + "category": "address", + "sub_category": "", + "description": { + "short": "", + "long": "Parses _Slice_ `s` containing a valid `MsgAddressInt` (usually a `msg_addr_std`), applies rewriting from the `anycast` (if present) to the same-length prefix of the address, and returns both the `workchain` and the 256-bit address `hash` as integers. If the address is not 256-bit, or if `s` is not a valid serialization of `MsgAddressInt`, throws a cell deserialization exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16401408, + "max": 16401664, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_rewrite_message_addr(_1, false, false)", + "kind": "simple", + "prefix": 64068, + "prefix_str": "FA44", + "tlb": "#fa44" + }, + "signature": { + "stack_string": "s:Slice -> workchain:Int hash:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "workchain", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "hash", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1669, + "function_name": "exec_rewrite_message_addr" + } + }, + { + "name": "REWRITESTDADDRQ", + "category": "address", + "sub_category": "", + "description": { + "short": "", + "long": "A quiet version of primitive `REWRITESTDADDR`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16401664, + "max": 16401920, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_rewrite_message_addr(_1, false, true)", + "kind": "simple", + "prefix": 64069, + "prefix_str": "FA45", + "tlb": "#fa45" + }, + "signature": { + "stack_string": "s:Slice -> (∅ 0)|(hash:Int workchain:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "hash", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "workchain", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1669, + "function_name": "exec_rewrite_message_addr" + } + }, + { + "name": "REWRITEVARADDR", + "category": "address", + "sub_category": "", + "description": { + "short": "", + "long": "A variant of `REWRITESTDADDR` that returns the (rewritten) address as a _Slice_ `s`, even if it is not exactly 256 bit long (represented by a `msg_addr_var`).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16401920, + "max": 16402176, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_rewrite_message_addr(_1, true, false)", + "kind": "simple", + "prefix": 64070, + "prefix_str": "FA46", + "tlb": "#fa46" + }, + "signature": { + "stack_string": "s:Slice -> x:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1669, + "function_name": "exec_rewrite_message_addr" + } + }, + { + "name": "REWRITEVARADDRQ", + "category": "address", + "sub_category": "", + "description": { + "short": "", + "long": "A quiet version of primitive `REWRITEVARADDR`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16402176, + "max": 16402432, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_rewrite_message_addr(_1, true, true)", + "kind": "simple", + "prefix": 64071, + "prefix_str": "FA47", + "tlb": "#fa47" + }, + "signature": { + "stack_string": "s:Slice -> (∅ 0)|(x:Int s':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1669, + "function_name": "exec_rewrite_message_addr" + } + }, + { + "name": "SENDRAWMSG", + "category": "message", + "sub_category": "", + "description": { + "short": "Creates an output action to send a raw message `msg`.", + "long": "Cell `msg` should contain a correctly serialized object `Message X`.\n\nSource address can have dummy value `addr_none`, and will be automatically replaced with the current smart-contract address.\n\n`ihr_fee`, `fwd_fee`, `created_lt` and `created_at` fields can also have arbitrary values and will be rewritten with correct values during the action phase of the current transaction.\n\nInteger parameter `mode` contains the flags.\n\n- `mode=0` is used for ordinary messages.\n\n- `mode=128` is used for messages that are to carry all the remaining balance of the current smart contract (instead of the value originally indicated in the message).\n\n- `mode=64` is used for messages that carry all the remaining value of the inbound message in addition to the value initially indicated in the new message (if bit 0 is not set, the gas fees are deducted from this amount).\n\n- `mode'=mode+1` means that the sender wants to pay transfer fees separately.\n\n- `mode'=mode+2` means that any errors arising while processing this message during the action phase should be ignored.\n\n- `mode'=mode+32` means that the current account must be destroyed if its resulting balance is zero. This flag is usually employed together with `+128`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16449536, + "max": 16449792, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_send_raw_message", + "kind": "simple", + "prefix": 64256, + "prefix_str": "FB00", + "tlb": "#fb00" + }, + "signature": { + "stack_string": "msg:Cell mode:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "msg", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "mode", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 5 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 5 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1762, + "function_name": "exec_send_raw_message" + } + }, + { + "name": "RAWRESERVE", + "category": "message", + "sub_category": "", + "description": { + "short": "Creates an output action which would reserve exactly `amount` nanotons (if `mode=0`), at most `x` nanotons (if `mode=2`), or all but `x` nanotons (if `mode=1` or `mode=3`), from the remaining balance of the account. ", + "long": "This behavior is roughly equivalent to creating an outbound message carrying `amount` nanotons (or `b-amount` nanotons, where `b` is the remaining balance) to oneself, so that the subsequent output actions would not be able to spend more money than the remainder.\n\n- Bit `+2` in `mode` means that the external action does not fail if the specified amount cannot be reserved; instead, all remaining balance is reserved.\n\n- Bit `+8` in `mode` means `amount=-amount` before performing any further actions.\n\n- Bit `+4` in `mode` means that `amount` is increased by the original balance of the current account (before the compute phase), including all extra currencies, before performing any other checks and actions.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16450048, + "max": 16450304, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_reserve_raw(_1, 0)", + "kind": "simple", + "prefix": 64258, + "prefix_str": "FB02", + "tlb": "#fb02" + }, + "signature": { + "stack_string": "amount:Int mode:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "amount", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 2147483648 + } + }, + { + "type": "simple", + "name": "mode", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 15 + } + } + ], + "registers": [ + { + "type": "constant", + "index": 5 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 5 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 2035, + "function_name": "exec_reserve_raw" + } + }, + { + "name": "RAWRESERVEX", + "category": "message", + "sub_category": "", + "description": { + "short": "", + "long": "Similar to `RAWRESERVE`, but also accepts a dictionary `D` with extra currencies. In this way currencies other than TON can be reserved.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16450304, + "max": 16450560, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_reserve_raw(_1, 1)", + "kind": "simple", + "prefix": 64259, + "prefix_str": "FB03", + "tlb": "#fb03" + }, + "signature": { + "stack_string": "amount:Int D:Cell|Null mode:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "amount", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "mode", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 5 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 5 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 2035, + "function_name": "exec_reserve_raw" + } + }, + { + "name": "SETCODE", + "category": "message", + "sub_category": "", + "description": { + "short": "", + "long": "Creates an output action that would change this smart contract code to that given by _Cell_ `code`. This change will take effect only after the successful termination of the current run of the smart contract.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16450560, + "max": 16450816, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_set_code", + "kind": "simple", + "prefix": 64260, + "prefix_str": "FB04", + "tlb": "#fb04" + }, + "signature": { + "stack_string": "code:Cell -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "code", + "value_types": ["Cell"] + } + ], + "registers": [ + { + "type": "constant", + "index": 5 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 5 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 2059, + "function_name": "exec_set_code" + } + }, + { + "name": "SETLIBCODE", + "category": "message", + "sub_category": "", + "description": { + "short": "Creates an output action that would modify the collection of this smart contract libraries by adding or removing library with code given in _Cell_ `code`.", + "long": "- If `mode=0`, the library is removed if it was previously present in the collection, if not, this action does nothing.\n\n- If `mode=1`, the library is added as a private library.\n\n- If `mode=2`, the library is added as a public library and becomes available to all smart contracts if the current smart contract resides in the masterchain.\n\nIf the library was present in the collection before, its public/private status is changed according to `mode`. Values of `mode` other than `0...2` are invalid.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16451072, + "max": 16451328, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_set_lib_code", + "kind": "simple", + "prefix": 64262, + "prefix_str": "FB06", + "tlb": "#fb06" + }, + "signature": { + "stack_string": "code:Cell mode:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "code", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "mode", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 2 + } + } + ], + "registers": [ + { + "type": "constant", + "index": 5 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 5 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 2071, + "function_name": "exec_set_lib_code" + } + }, + { + "name": "CHANGELIB", + "category": "message", + "sub_category": "", + "description": { + "short": "", + "long": "Creates an output action similarly to `SETLIBCODE`, but instead of the library code accepts its hash as an unsigned 256-bit integer `hash`. If `mode != 0` and the library with `hash` is absent from the library collection of this smart contract, this output action will fail.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16451328, + "max": 16451584, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_change_lib", + "kind": "simple", + "prefix": 64263, + "prefix_str": "FB07", + "tlb": "#fb07" + }, + "signature": { + "stack_string": "hash:Int mode:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "hash", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "mode", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 5 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 5 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 2095, + "function_name": "exec_change_lib" + } + }, + { + "name": "SENDMSG", + "category": "message", + "sub_category": "", + "description": { + "short": "Creates an output action to send a message `msg` and returns a fee for creating a message.", + "long": "Mode has the same effect as in the case of `SENDRAWMSG`.\n\nAdditionally `+1024` means — do not create an action, only estimate fee. Other modes affect the fee calculation as follows:\n\n- `+64` substitutes the entire balance of the incoming message as an outcoming value (slightly inaccurate, gas expenses that cannot be estimated before the computation is completed are not taken into account).\n\n- `+128` substitutes the value of the entire balance of the contract before the start of the computation phase (slightly inaccurate, since gas expenses that cannot be estimated before the completion of the computation phase are not taken into account).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16451584, + "max": 16451840, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_send_message", + "version": 4, + "kind": "simple", + "prefix": 64264, + "prefix_str": "FB08", + "tlb": "#fb08" + }, + "signature": { + "stack_string": "msg:Cell mode:Int -> fee:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "msg", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "mode", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 5 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "fee", + "value_types": ["Int"] + } + ], + "registers": [ + { + "type": "constant", + "index": 5 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 1800, + "function_name": "exec_send_message" + } + }, + { + "name": "PUSHNULL", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Pushes a `null`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7143424, + "max": 7208960, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_push_null", + "kind": "simple", + "prefix": 109, + "prefix_str": "6D", + "tlb": "#6d" + }, + "signature": { + "stack_string": "∅ -> null", + "outputs": { + "stack": [ + { + "type": "const", + "value": null, + "value_type": "Null" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 28, + "function_name": "exec_push_null" + } + }, + { + "name": "ISNULL", + "category": "tuple", + "sub_category": "", + "description": { + "short": "Checks whether `x` is a _Null_.", + "long": "Pops an element from the stack and checks whether it is a _Null_, pushing `-1` or `0` accordingly.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7208960, + "max": 7274496, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_is_null", + "kind": "simple", + "prefix": 110, + "prefix_str": "6E", + "tlb": "#6e" + }, + "signature": { + "stack_string": "x:Any|Null -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Any", "Null"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 34, + "function_name": "exec_is_null" + } + }, + { + "name": "TUPLEVAR", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Creates a new _Tuple_ `t` of length `n` similarly to `TUPLE`, but with `n` taken from the stack.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7307264, + "max": 7307520, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mktuple_var", + "kind": "simple", + "prefix": 28544, + "prefix_str": "6F80", + "tlb": "#6f80" + }, + "signature": { + "stack_string": "x_1...x_n n:Int -> t:Tuple", + "inputs": { + "stack": [ + { + "type": "array", + "name": "tuple_elements", + "length_var": "n", + "array_entry": [ + { + "type": "simple", + "name": "x" + } + ] + }, + { + "type": "simple", + "name": "n", + "range": { + "min": 0, + "max": 255 + }, + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 94, + "function_name": "exec_mktuple_var" + } + }, + { + "name": "INDEXVAR", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Returns the `k`-th element of a _Tuple_ `t`, where `k` is taken from the stack rather than specified in the instruction.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "7", + "condition": "Top element is not a Tuple." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7307520, + "max": 7307776, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_tuple_index_var", + "kind": "simple", + "prefix": 28545, + "prefix_str": "6F81", + "tlb": "#6f81" + }, + "signature": { + "stack_string": "t:Tuple k:Int -> x:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + }, + { + "type": "simple", + "name": "k", + "range": { + "min": 0, + "max": 254 + }, + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 112, + "function_name": "exec_tuple_index_var" + } + }, + { + "name": "UNTUPLEVAR", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Unpacks a _Tuple_ `t=(x_1,...,x_n)` of length equal to `n`, where `n` is taken from the stack rather than specified in the instruction.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "7", + "condition": "Top element is not a Tuple." + }, + { + "errno": "7", + "condition": "Tuple length is not equal to n." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7307776, + "max": 7308032, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_untuple_var", + "kind": "simple", + "prefix": 28546, + "prefix_str": "6F82", + "tlb": "#6f82" + }, + "signature": { + "stack_string": "t:Tuple n:Int -> x_1...x_n", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + }, + { + "type": "simple", + "name": "n", + "range": { + "min": 0, + "max": 255 + }, + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "array", + "name": "tuple_elements", + "length_var": "n", + "array_entry": [ + { + "type": "simple", + "name": "x" + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 164, + "function_name": "exec_untuple_var" + } + }, + { + "name": "UNPACKFIRSTVAR", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Unpacks first `k` elements of a _Tuple_ `t`, where `k` is taken from the stack rather than specified in the instruction.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "7", + "condition": "Tuple length is less than k." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7308032, + "max": 7308288, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_untuple_first_var", + "kind": "simple", + "prefix": 28547, + "prefix_str": "6F83", + "tlb": "#6f83" + }, + "signature": { + "stack_string": "t:Tuple n:Int -> x_1...x_n", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + }, + { + "type": "simple", + "name": "n", + "range": { + "min": 0, + "max": 255 + }, + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "array", + "name": "tuple_elements", + "length_var": "n", + "array_entry": [ + { + "type": "simple", + "name": "x" + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 181, + "function_name": "exec_untuple_first_var" + } + }, + { + "name": "EXPLODEVAR", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Unpacks a _Tuple_ `t=(x_1,...,x_m)` and returns its length `m`, but only if `m <= n <= 255`, where `n` is taken from the stack rather than specified in the instruction.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "7", + "condition": "Tuple length is greater than n or greater than 15." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7308288, + "max": 7308544, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_explode_tuple_var", + "kind": "simple", + "prefix": 28548, + "prefix_str": "6F84", + "tlb": "#6f84" + }, + "signature": { + "stack_string": "t:Tuple n:Int -> x_1...x_m m:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + }, + { + "type": "simple", + "name": "n", + "range": { + "min": 0, + "max": 255 + }, + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "array", + "name": "tuple_elements", + "length_var": "m", + "array_entry": [ + { + "type": "simple", + "name": "x" + } + ] + }, + { + "type": "simple", + "name": "m", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 202, + "function_name": "exec_explode_tuple_var" + } + }, + { + "name": "SETINDEXVAR", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the `i`-th component of _Tuple_ `t` to `x` taken from the stack.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "7", + "condition": "Index k is greater than or equal to tuple length." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7308544, + "max": 7308800, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_tuple_set_index_var", + "kind": "simple", + "prefix": 28549, + "prefix_str": "6F85", + "tlb": "#6f85" + }, + "signature": { + "stack_string": "t:Tuple x:Any i:Int -> t2:Tuple", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + }, + { + "type": "simple", + "name": "x" + }, + { + "type": "simple", + "name": "i", + "range": { + "min": 0, + "max": 254 + }, + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "t2", + "value_types": ["Tuple"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 229, + "function_name": "exec_tuple_set_index_var" + } + }, + { + "name": "INDEXVARQ", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Returns the `i`-th element of a _Tuple_ `t` with `i` taken from the stack. If `t` is _Null_ or `i` is greater than tuple length, returns a _Null_.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7308800, + "max": 7309056, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_tuple_quiet_index_var", + "kind": "simple", + "prefix": 28550, + "prefix_str": "6F86", + "tlb": "#6f86" + }, + "signature": { + "stack_string": "t:Tuple|Null i:Int -> x:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple", "Null"] + }, + { + "type": "simple", + "name": "i", + "range": { + "min": 0, + "max": 254 + }, + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 130, + "function_name": "exec_tuple_quiet_index_var" + } + }, + { + "name": "SETINDEXVARQ", + "category": "tuple", + "sub_category": "", + "description": { + "short": "Sets the `i`-th component of _Tuple_ `t` to `x` take from the stack. If `i` is bigger than tuple length, extends the tuple with Nulls first.", + "long": "If `|t| <= k`, first extends the original _Tuple_ to length `n'=k+1` by setting all new components to _Null_. If the original value of `t` is _Null_, treats it as an empty _Tuple_. If `x` is _Null_ and either `|t| <= k` or `t` is _Null_, then always returns `t'=t` and does not consume tuple creation gas.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "7", + "condition": "Top element is neither a Tuple nor Null." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7309056, + "max": 7309312, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_tuple_quiet_set_index_var", + "kind": "simple", + "prefix": 28551, + "prefix_str": "6F87", + "tlb": "#6f87" + }, + "signature": { + "stack_string": "t:Tuple|Null x:Any i:Int -> t2:Tuple|Null", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple", "Null"] + }, + { + "type": "simple", + "name": "x" + }, + { + "type": "simple", + "name": "i", + "range": { + "min": 0, + "max": 254 + }, + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "t2", + "value_types": ["Tuple", "Null"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 258, + "function_name": "exec_tuple_quiet_set_index_var" + } + }, + { + "name": "TLEN", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Returns the length of a _Tuple_.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7309312, + "max": 7309568, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_tuple_length", + "kind": "simple", + "prefix": 28552, + "prefix_str": "6F88", + "tlb": "#6f88" + }, + "signature": { + "stack_string": "t:Tuple -> n:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 265, + "function_name": "exec_tuple_length" + } + }, + { + "name": "QTLEN", + "category": "tuple", + "sub_category": "", + "description": { + "short": "Returns the length of a _Tuple_ `t`. If `t` is not a _Tuple_, returns `-1`.", + "long": "Unlike `TLEN` which throws an exception when `t` is not a _Tuple_, this instruction provides a way to safely check if a value is a _Tuple_ and get its length in one operation.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7309568, + "max": 7309824, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_tuple_length_quiet", + "kind": "simple", + "prefix": 28553, + "prefix_str": "6F89", + "tlb": "#6f89" + }, + "signature": { + "stack_string": "t:Tuple -> (-1 0)|(length:Int -1)", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "is_tuple", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "const", + "value": "-1", + "value_type": "Int" + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "length", + "value_types": ["Int"] + } + ] + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 273, + "function_name": "exec_tuple_length_quiet" + } + }, + { + "name": "ISTUPLE", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Returns `-1` (true) or `0` (false) depending on whether `t` is a _Tuple_.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7309824, + "max": 7310080, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_is_tuple", + "kind": "simple", + "prefix": 28554, + "prefix_str": "6F8A", + "tlb": "#6f8a" + }, + "signature": { + "stack_string": "t:Tuple -> n:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "n", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 281, + "function_name": "exec_is_tuple" + } + }, + { + "name": "LAST", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Returns the last element of a non-empty _Tuple_ `t`.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "7", + "condition": "Tuple is empty." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7310080, + "max": 7310336, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_tuple_last", + "kind": "simple", + "prefix": 28555, + "prefix_str": "6F8B", + "tlb": "#6f8b" + }, + "signature": { + "stack_string": "t:Tuple -> x:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 288, + "function_name": "exec_tuple_last" + } + }, + { + "name": "TPUSH", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Appends a value `x` to a _Tuple_ `t=(x_1,...,x_n)`, but only if the resulting _Tuple_ `t'=(x_1,...,x_n,x)` is of length at most 255.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "7", + "condition": "Top element is not a Tuple." + }, + { + "errno": "7", + "condition": "Resulting tuple length would exceed 255." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "TUPLE 2", + "comment": "Creates a tuple (1,2)" + }, + { + "instruction": "PUSHINT_4 3" + }, + { + "instruction": "TPUSH", + "comment": "Appends 3 to the tuple, resulting in (1,2,3)" + } + ], + "stack": { + "input": ["(1,2)", "3"], + "output": ["(1,2,3)"] + } + }, + { + "instructions": [ + { + "instruction": "PUSHINT_16 123", + "comment": "Push an integer (not a tuple)" + }, + { + "instruction": "PUSHINT_16 456" + }, + { + "instruction": "TPUSH", + "comment": "Try to append to a non-tuple value" + } + ], + "exit_code": 7, + "stack": { + "input": ["123", "456"], + "output": ["123", "456"] + } + } + ], + "gas": [ + { + "value": 26, + "description": "For 0 elements tuple" + }, + { + "value": 27, + "description": "For 1 element tuple" + }, + { + "value": 28, + "description": "For 2 elements tuple" + }, + { + "value": 29, + "description": "For 3 elements tuple" + }, + { + "value": 30, + "description": "For 4 elements tuple" + }, + { + "value": 31, + "description": "For 5 elements tuple" + }, + { + "value": 32, + "description": "For 6 elements tuple" + }, + { + "value": 33, + "description": "For 7 elements tuple" + }, + { + "value": 34, + "description": "For 8 elements tuple" + }, + { + "value": 35, + "description": "For 9 elements tuple" + }, + { + "value": 37, + "description": "For 11 elements tuple" + }, + { + "value": 38, + "description": "For 12 elements tuple" + }, + { + "value": 39, + "description": "For 13 elements tuple" + }, + { + "value": 40, + "description": "For 14 elements tuple" + }, + { + "value": 41, + "description": "For 15 elements tuple" + } + ] + }, + "layout": { + "min": 7310336, + "max": 7310592, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_tuple_push", + "kind": "simple", + "prefix": 28556, + "prefix_str": "6F8C", + "tlb": "#6f8c" + }, + "effects": ["Tuple"], + "signature": { + "stack_string": "t:Tuple x:Any -> t2:Tuple", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + }, + { + "type": "simple", + "name": "x" + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "t2", + "value_types": ["Tuple"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 296, + "function_name": "exec_tuple_push" + } + }, + { + "name": "TPOP", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Detaches the last element `x=x_n` from a non-empty _Tuple_ `t=(x_1,...,x_n)`, and returns both the resulting _Tuple_ `t'=(x_1,...,x_{n-1})` and the original last element `x`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "For 0 elements tuple" + }, + { + "value": 27, + "description": "For 1 element tuple" + }, + { + "value": 28, + "description": "For 2 elements tuple" + }, + { + "value": 29, + "description": "For 3 elements tuple" + }, + { + "value": 30, + "description": "For 4 elements tuple" + }, + { + "value": 31, + "description": "For 5 elements tuple" + }, + { + "value": 32, + "description": "For 6 elements tuple" + }, + { + "value": 33, + "description": "For 7 elements tuple" + }, + { + "value": 34, + "description": "For 8 elements tuple" + }, + { + "value": 35, + "description": "For 9 elements tuple" + }, + { + "value": 37, + "description": "For 11 elements tuple" + }, + { + "value": 38, + "description": "For 12 elements tuple" + }, + { + "value": 39, + "description": "For 13 elements tuple" + }, + { + "value": 40, + "description": "For 14 elements tuple" + }, + { + "value": 41, + "description": "For 15 elements tuple" + } + ] + }, + "layout": { + "min": 7310592, + "max": 7310848, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_tuple_pop", + "kind": "simple", + "prefix": 28557, + "prefix_str": "6F8D", + "tlb": "#6f8d" + }, + "effects": ["Tuple"], + "signature": { + "stack_string": "t:Tuple -> t2:Tuple x:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "t2", + "value_types": ["Tuple"] + }, + { + "type": "simple", + "name": "x" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 308, + "function_name": "exec_tuple_pop" + } + }, + { + "name": "NULLSWAPIF", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Pushes a _Null_ under the topmost _Integer_ `x`, but only if `x != 0`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7315456, + "max": 7315712, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_null_swap_if(_1, true, 0)", + "kind": "simple", + "prefix": 28576, + "prefix_str": "6FA0", + "tlb": "#6fa0" + }, + "signature": { + "stack_string": "x:Int -> (∅ 0)|null x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "x", + "match": [ + { + "value": 0, + "stack": [] + } + ], + "else": [ + { + "type": "const", + "value": null, + "value_type": "Null" + } + ] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 41, + "function_name": "exec_null_swap_if" + } + }, + { + "name": "NULLSWAPIFNOT", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Pushes a _Null_ under the topmost _Integer_ `x`, but only if `x == 0`. May be used for stack alignment after quiet primitives such as `PLDUXQ`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7315712, + "max": 7315968, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_null_swap_if(_1, false, 0)", + "kind": "simple", + "prefix": 28577, + "prefix_str": "6FA1", + "tlb": "#6fa1" + }, + "signature": { + "stack_string": "x:Int -> (null 0)|∅ x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "x", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "const", + "value": null, + "value_type": "Null" + } + ] + } + ], + "else": [] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 41, + "function_name": "exec_null_swap_if" + } + }, + { + "name": "NULLROTRIF", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Pushes a _Null_ under the second stack entry from the top, but only if the topmost _Integer_ `y` is non-zero.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7315968, + "max": 7316224, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_null_swap_if(_1, true, 1)", + "kind": "simple", + "prefix": 28578, + "prefix_str": "6FA2", + "tlb": "#6fa2" + }, + "signature": { + "stack_string": "x:Any y:Int -> (∅ 0)|null x:Any y:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x" + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "y", + "match": [ + { + "value": 0, + "stack": [] + } + ], + "else": [ + { + "type": "const", + "value": null, + "value_type": "Null" + } + ] + }, + { + "type": "simple", + "name": "x" + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 41, + "function_name": "exec_null_swap_if" + } + }, + { + "name": "NULLROTRIFNOT", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Pushes a _Null_ under the second stack entry from the top, but only if the topmost _Integer_ `y` is zero. May be used for stack alignment after quiet primitives such as `LDUXQ`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7316224, + "max": 7316480, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_null_swap_if(_1, false, 1)", + "kind": "simple", + "prefix": 28579, + "prefix_str": "6FA3", + "tlb": "#6fa3" + }, + "signature": { + "stack_string": "x:Any y:Int -> (null 0)|∅ x:Any y:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x" + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "y", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "const", + "value": null, + "value_type": "Null" + } + ] + } + ], + "else": [] + }, + { + "type": "simple", + "name": "x" + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 41, + "function_name": "exec_null_swap_if" + } + }, + { + "name": "NULLSWAPIF2", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Pushes two nulls under the topmost _Integer_ `x`, but only if `x != 0`.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["NULLSWAPIF", "NULLSWAPIF"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7316480, + "max": 7316736, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_null_swap_if_many(_1, true, 0, 2)", + "kind": "simple", + "prefix": 28580, + "prefix_str": "6FA4", + "tlb": "#6fa4" + }, + "signature": { + "stack_string": "x:Int -> (∅ 0)|null null x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "x", + "match": [ + { + "value": 0, + "stack": [] + } + ], + "else": [ + { + "type": "const", + "value": null, + "value_type": "Null" + }, + { + "type": "const", + "value": null, + "value_type": "Null" + } + ] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 56, + "function_name": "exec_null_swap_if_many" + } + }, + { + "name": "NULLSWAPIFNOT2", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Pushes two nulls under the topmost _Integer_ `x`, but only if `x == 0`.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["NULLSWAPIFNOT", "NULLSWAPIFNOT"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7316736, + "max": 7316992, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_null_swap_if_many(_1, false, 0, 2)", + "kind": "simple", + "prefix": 28581, + "prefix_str": "6FA5", + "tlb": "#6fa5" + }, + "signature": { + "stack_string": "x:Int -> (null null 0)|∅ x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "x", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "const", + "value": null, + "value_type": "Null" + }, + { + "type": "const", + "value": null, + "value_type": "Null" + } + ] + } + ], + "else": [] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 56, + "function_name": "exec_null_swap_if_many" + } + }, + { + "name": "NULLROTRIF2", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Pushes two nulls under the second stack entry from the top, but only if the topmost _Integer_ `y` is non-zero.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["NULLROTRIF", "NULLROTRIF"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7316992, + "max": 7317248, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_null_swap_if_many(_1, true, 1, 2)", + "kind": "simple", + "prefix": 28582, + "prefix_str": "6FA6", + "tlb": "#6fa6" + }, + "signature": { + "stack_string": "x:Any y:Int -> (∅ 0)|null null x:Any y:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x" + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "y", + "match": [ + { + "value": 0, + "stack": [] + } + ], + "else": [ + { + "type": "const", + "value": null, + "value_type": "Null" + }, + { + "type": "const", + "value": null, + "value_type": "Null" + } + ] + }, + { + "type": "simple", + "name": "x" + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 56, + "function_name": "exec_null_swap_if_many" + } + }, + { + "name": "NULLROTRIFNOT2", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Pushes two nulls under the second stack entry from the top, but only if the topmost _Integer_ `y` is zero.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["NULLROTRIFNOT", "NULLROTRIFNOT"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7317248, + "max": 7317504, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_null_swap_if_many(_1, false, 1, 2)", + "kind": "simple", + "prefix": 28583, + "prefix_str": "6FA7", + "tlb": "#6fa7" + }, + "signature": { + "stack_string": "x:Any y:Int -> (null null 0)|∅ x:Any y:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x" + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "y", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "const", + "value": null, + "value_type": "Null" + }, + { + "type": "const", + "value": null, + "value_type": "Null" + } + ] + } + ], + "else": [] + }, + { + "type": "simple", + "name": "x" + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 56, + "function_name": "exec_null_swap_if_many" + } + }, + { + "name": "ADDDIVMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor((x+w)/z)` and `r=(x+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11075584, + "max": 11075840, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, false)", + "version": 4, + "kind": "simple", + "prefix": 43264, + "prefix_str": "A900", + "tlb": "#a900" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "ADDDIVMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round((x+w)/z)` and `r=(x+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11075840, + "max": 11076096, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, false)", + "version": 4, + "kind": "simple", + "prefix": 43265, + "prefix_str": "A901", + "tlb": "#a901" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "ADDDIVMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil((x+w)/z)` and `r=(x+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11076096, + "max": 11076352, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, false)", + "version": 4, + "kind": "simple", + "prefix": 43266, + "prefix_str": "A902", + "tlb": "#a902" + }, + "signature": { + "stack_string": "x:Int w:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "DIV", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "Divides two integers and pushes the result back onto the stack.", + "long": "Pops two integers from the stack, divides the second one by the first one and pushes the result back onto the stack.\nFormula: `q = floor(x / y)`.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "7", + "condition": "Top or second element is not an Int." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11076608, + "max": 11076864, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, false)", + "kind": "simple", + "prefix": 43268, + "prefix_str": "A904", + "tlb": "#a904" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x / y", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "DIVR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "Divides two integers, rounds the result and pushes it back onto the stack.", + "long": "Pops two integers from the stack, divides the second one by the first one, rounds the result and pushes it back onto the stack.\nFormula: `q = round(x / y)`.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "7", + "condition": "Top or second element is not an Int." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11076864, + "max": 11077120, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, false)", + "kind": "simple", + "prefix": 43269, + "prefix_str": "A905", + "tlb": "#a905" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "DIVC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "Divides two integers, rounds the result up and pushes it back onto the stack.", + "long": "Pops two integers from the stack, divides the second one by the first one, rounds the result up and pushes it back onto the stack.\nFormula: `q = ceil(x / y)`.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "7", + "condition": "Top or second element is not an Int." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11077120, + "max": 11077376, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, false)", + "kind": "simple", + "prefix": 43270, + "prefix_str": "A906", + "tlb": "#a906" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "MOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Divides two integers and pushes the remainder back onto the stack.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11077632, + "max": 11077888, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, false)", + "kind": "simple", + "prefix": 43272, + "prefix_str": "A908", + "tlb": "#a908" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x % y", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "MODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Divides two integers (in reverse order) and pushes the remainder back onto the stack.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11077888, + "max": 11078144, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, false)", + "kind": "simple", + "prefix": 43273, + "prefix_str": "A909", + "tlb": "#a909" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "MODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x % y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11078144, + "max": 11078400, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, false)", + "kind": "simple", + "prefix": 43274, + "prefix_str": "A90A", + "tlb": "#a90a" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "DIVMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Divides two integers and pushes the quotient and remainder back onto the stack.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11078656, + "max": 11078912, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, false)", + "kind": "simple", + "prefix": 43276, + "prefix_str": "A90C", + "tlb": "#a90c" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "DIVMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Divides two integers (in reverse order) and pushes the quotient and remainder back onto the stack.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11078912, + "max": 11079168, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, false)", + "kind": "simple", + "prefix": 43277, + "prefix_str": "A90D", + "tlb": "#a90d" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "DIVMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q = ceil(x / y)` and `r = x - q * y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11079168, + "max": 11079424, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, false)", + "kind": "simple", + "prefix": 43278, + "prefix_str": "A90E", + "tlb": "#a90e" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "QADDDIVMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor((x+w)/z)` and `r=(x+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036352, + "max": 12036353, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, true)", + "version": 4, + "kind": "simple", + "prefix": 12036352, + "prefix_str": "B7A900", + "tlb": "#b7a900" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "QADDDIVMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round((x+w)/z)` and `r=(x+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036353, + "max": 12036354, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, true)", + "version": 4, + "kind": "simple", + "prefix": 12036353, + "prefix_str": "B7A901", + "tlb": "#b7a901" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "QADDDIVMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil((x+w)/z)` and `r=(x+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036354, + "max": 12036355, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, true)", + "version": 4, + "kind": "simple", + "prefix": 12036354, + "prefix_str": "B7A902", + "tlb": "#b7a902" + }, + "signature": { + "stack_string": "x:Int w:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "QDIV", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Division returns `NaN` if `y == 0`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036356, + "max": 12036357, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036356, + "prefix_str": "B7A904", + "tlb": "#b7a904" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "QDIVR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = round(x / y)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036357, + "max": 12036358, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036357, + "prefix_str": "B7A905", + "tlb": "#b7a905" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "QDIVC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = ceil(x / y)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036358, + "max": 12036359, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036358, + "prefix_str": "B7A906", + "tlb": "#b7a906" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "QMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x % y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036360, + "max": 12036361, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036360, + "prefix_str": "B7A908", + "tlb": "#b7a908" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "QMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x % y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036361, + "max": 12036362, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036361, + "prefix_str": "B7A909", + "tlb": "#b7a909" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "QMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x % y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036362, + "max": 12036363, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036362, + "prefix_str": "B7A90A", + "tlb": "#b7a90a" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "QDIVMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q = floor(x / y)` and `r = x - q * y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036364, + "max": 12036365, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036364, + "prefix_str": "B7A90C", + "tlb": "#b7a90c" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "QDIVMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q = round(x / y)` and `r = x - q * y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036365, + "max": 12036366, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036365, + "prefix_str": "B7A90D", + "tlb": "#b7a90d" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "QDIVMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q = ceil(x / y)` and `r = x - q * y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036366, + "max": 12036367, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_divmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036366, + "prefix_str": "B7A90E", + "tlb": "#b7a90e" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 266, + "function_name": "exec_divmod" + } + }, + { + "name": "ADDRSHIFTMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor((x+w)/2^z)` and `r=(x+w)-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11083776, + "max": 11084032, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 0)", + "version": 4, + "kind": "simple", + "prefix": 43296, + "prefix_str": "A920", + "tlb": "#a920" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "ADDRSHIFTMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round((x+w)/2^z)` and `r=(x+w)-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11084032, + "max": 11084288, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 0)", + "version": 4, + "kind": "simple", + "prefix": 43297, + "prefix_str": "A921", + "tlb": "#a921" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "ADDRSHIFTMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil((x+w)/2^z)` and `r=(x+w)-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11084288, + "max": 11084544, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 0)", + "version": 4, + "kind": "simple", + "prefix": 43298, + "prefix_str": "A922", + "tlb": "#a922" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "RSHIFTR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = round(x/2^y)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11085056, + "max": 11085312, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43301, + "prefix_str": "A925", + "tlb": "#a925" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "RSHIFTC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = ceil(x/2^y)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11085312, + "max": 11085568, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43302, + "prefix_str": "A926", + "tlb": "#a926" + }, + "signature": { + "stack_string": "x:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "MODPOW2", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x % (2^y)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11085824, + "max": 11086080, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43304, + "prefix_str": "A928", + "tlb": "#a928" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "MODPOW2R", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x mod 2^y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11086080, + "max": 11086336, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43305, + "prefix_str": "A929", + "tlb": "#a929" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "MODPOW2C", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x mod 2^y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11086336, + "max": 11086592, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43306, + "prefix_str": "A92A", + "tlb": "#a92a" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "RSHIFTMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor(x/2^y)` and `r=x-q*2^y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11086848, + "max": 11087104, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43308, + "prefix_str": "A92C", + "tlb": "#a92c" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "RSHIFTMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q = round(x / 2^y)` and `r = x - q * 2^y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11087104, + "max": 11087360, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43309, + "prefix_str": "A92D", + "tlb": "#a92d" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "RSHIFTMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q = ceil(x / 2^y)` and `r = x - q * 2^y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11087360, + "max": 11087616, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43310, + "prefix_str": "A92E", + "tlb": "#a92e" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "QADDRSHIFTMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor((x+w)/2^z)` and `r=(x+w)-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036384, + "max": 12036385, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 1)", + "version": 4, + "kind": "simple", + "prefix": 12036384, + "prefix_str": "B7A920", + "tlb": "#b7a920" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "QADDRSHIFTMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round((x+w)/2^z)` and `r=(x+w)-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036385, + "max": 12036386, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 1)", + "version": 4, + "kind": "simple", + "prefix": 12036385, + "prefix_str": "B7A921", + "tlb": "#b7a921" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "QADDRSHIFTMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil((x+w)/2^z)` and `r=(x+w)-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036386, + "max": 12036387, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 1)", + "version": 4, + "kind": "simple", + "prefix": 12036386, + "prefix_str": "B7A922", + "tlb": "#b7a922" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "QRSHIFTR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = round(x/2^y)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036389, + "max": 12036390, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036389, + "prefix_str": "B7A925", + "tlb": "#b7a925" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "QRSHIFTC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = ceil(x/2^y)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036390, + "max": 12036391, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036390, + "prefix_str": "B7A926", + "tlb": "#b7a926" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "QMODPOW2", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x mod 2^y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036392, + "max": 12036393, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036392, + "prefix_str": "B7A928", + "tlb": "#b7a928" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "QMODPOW2R", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x mod 2^y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036393, + "max": 12036394, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036393, + "prefix_str": "B7A929", + "tlb": "#b7a929" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "QMODPOW2C", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x mod 2^y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036394, + "max": 12036395, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036394, + "prefix_str": "B7A92A", + "tlb": "#b7a92a" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "QRSHIFTMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor(x/2^y)` and `r=x-q*2^y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036396, + "max": 12036397, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036396, + "prefix_str": "B7A92C", + "tlb": "#b7a92c" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "QRSHIFTMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q = round(x / 2^y)` and `r = x - q * 2^y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036397, + "max": 12036398, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036397, + "prefix_str": "B7A92D", + "tlb": "#b7a92d" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "QRSHIFTMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q = ceil(x / 2^y)` and `r = x - q * 2^y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036398, + "max": 12036399, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036398, + "prefix_str": "B7A92E", + "tlb": "#b7a92e" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "MULADDDIVMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor((xy+w)/z)` and `r=(xy+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11108352, + "max": 11108608, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, false)", + "version": 4, + "kind": "simple", + "prefix": 43392, + "prefix_str": "A980", + "tlb": "#a980" + }, + "signature": { + "stack_string": "x:Int y:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "MULADDDIVMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round((xy+w)/z)` and `r=(xy+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11108608, + "max": 11108864, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, false)", + "version": 4, + "kind": "simple", + "prefix": 43393, + "prefix_str": "A981", + "tlb": "#a981" + }, + "signature": { + "stack_string": "x:Int y:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "MULADDDIVMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil((xy+w)/z)` and `r=(xy+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11108864, + "max": 11109120, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, false)", + "version": 4, + "kind": "simple", + "prefix": 43394, + "prefix_str": "A982", + "tlb": "#a982" + }, + "signature": { + "stack_string": "x:Int y:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "MULDIV", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = floor(x * y / z)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11109376, + "max": 11109632, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, false)", + "kind": "simple", + "prefix": 43396, + "prefix_str": "A984", + "tlb": "#a984" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "MULDIVR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = round(x * y / z)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11109632, + "max": 11109888, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, false)", + "kind": "simple", + "prefix": 43397, + "prefix_str": "A985", + "tlb": "#a985" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "MULDIVC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = ceil( x * y / z)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11109888, + "max": 11110144, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, false)", + "kind": "simple", + "prefix": 43398, + "prefix_str": "A986", + "tlb": "#a986" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "MULMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x*y mod z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11110400, + "max": 11110656, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, false)", + "kind": "simple", + "prefix": 43400, + "prefix_str": "A988", + "tlb": "#a988" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "MULMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x*y mod z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11110656, + "max": 11110912, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, false)", + "kind": "simple", + "prefix": 43401, + "prefix_str": "A989", + "tlb": "#a989" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "MULMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x*y mod z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11110912, + "max": 11111168, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, false)", + "kind": "simple", + "prefix": 43402, + "prefix_str": "A98A", + "tlb": "#a98a" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "MULDIVMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "`q=floor(x*y/z)`, `r=x*y-z*q`", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11111424, + "max": 11111680, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, false)", + "kind": "simple", + "prefix": 43404, + "prefix_str": "A98C", + "tlb": "#a98c" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "MULDIVMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "`q=round(x*y/z)`, `r=x*y-z*q`", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11111680, + "max": 11111936, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, false)", + "kind": "simple", + "prefix": 43405, + "prefix_str": "A98D", + "tlb": "#a98d" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "MULDIVMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "`q=ceil(x*y/z)`, `r=x*y-z*q`", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11111936, + "max": 11112192, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, false)", + "kind": "simple", + "prefix": 43406, + "prefix_str": "A98E", + "tlb": "#a98e" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "QMULADDDIVMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor((xy+w)/z)` and `r=(xy+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036480, + "max": 12036481, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, true)", + "version": 4, + "kind": "simple", + "prefix": 12036480, + "prefix_str": "B7A980", + "tlb": "#b7a980" + }, + "signature": { + "stack_string": "x:Int y:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "QMULADDDIVMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round((xy+w)/z)` and `r=(xy+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036481, + "max": 12036482, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, true)", + "version": 4, + "kind": "simple", + "prefix": 12036481, + "prefix_str": "B7A981", + "tlb": "#b7a981" + }, + "signature": { + "stack_string": "x:Int y:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "QMULADDDIVMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil((xy+w)/z)` and `r=(xy+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036482, + "max": 12036483, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, true)", + "version": 4, + "kind": "simple", + "prefix": 12036482, + "prefix_str": "B7A982", + "tlb": "#b7a982" + }, + "signature": { + "stack_string": "x:Int y:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "QMULDIV", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = floor(x * y / z)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036484, + "max": 12036485, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036484, + "prefix_str": "B7A984", + "tlb": "#b7a984" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "QMULDIVR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = round(x * y / z)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036485, + "max": 12036486, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036485, + "prefix_str": "B7A985", + "tlb": "#b7a985" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> q:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "QMULDIVC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = ceil(x * y / z)`", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036486, + "max": 12036487, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036486, + "prefix_str": "B7A986", + "tlb": "#b7a986" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "QMULMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x*y mod z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036488, + "max": 12036489, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036488, + "prefix_str": "B7A988", + "tlb": "#b7a988" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "QMULMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x*y mod z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036489, + "max": 12036490, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036489, + "prefix_str": "B7A989", + "tlb": "#b7a989" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "QMULMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x*y mod z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036490, + "max": 12036491, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036490, + "prefix_str": "B7A98A", + "tlb": "#b7a98a" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "QMULDIVMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q = floor(x * y / z)` and `r = x * y - z * q`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036492, + "max": 12036493, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036492, + "prefix_str": "B7A98C", + "tlb": "#b7a98c" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "QMULDIVMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q = round(x * y / z)` and `r = x * y - z * q`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036493, + "max": 12036494, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036493, + "prefix_str": "B7A98D", + "tlb": "#b7a98d" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "QMULDIVMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q = ceil(x * y / z)` and `r = x * y - z * q`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036494, + "max": 12036495, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_muldivmod(_1, _2, true)", + "kind": "simple", + "prefix": 12036494, + "prefix_str": "B7A98E", + "tlb": "#b7a98e" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 434, + "function_name": "exec_muldivmod" + } + }, + { + "name": "MULADDRSHIFTMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor((xy+w)/2^z)` and `r=(xy+w)-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11116544, + "max": 11116800, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 0)", + "version": 4, + "kind": "simple", + "prefix": 43424, + "prefix_str": "A9A0", + "tlb": "#a9a0" + }, + "signature": { + "stack_string": "x:Int y:Int w:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULADDRSHIFTRMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round((xy+w)/2^z)` and `r=(xy+w)-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11116800, + "max": 11117056, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 0)", + "version": 4, + "kind": "simple", + "prefix": 43425, + "prefix_str": "A9A1", + "tlb": "#a9a1" + }, + "signature": { + "stack_string": "x:Int y:Int w:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULADDRSHIFTCMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil((xy+w)/2^z)` and `r=(xy+w)-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11117056, + "max": 11117312, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 0)", + "version": 4, + "kind": "simple", + "prefix": 43426, + "prefix_str": "A9A2", + "tlb": "#a9a2" + }, + "signature": { + "stack_string": "x:Int y:Int w:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULRSHIFT", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = (x * y) >> z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11117568, + "max": 11117824, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43428, + "prefix_str": "A9A4", + "tlb": "#a9a4" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULRSHIFTR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = round(x*y/2^z)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11117824, + "max": 11118080, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43429, + "prefix_str": "A9A5", + "tlb": "#a9a5" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULRSHIFTC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = ceil(x*y/2^z)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11118080, + "max": 11118336, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43430, + "prefix_str": "A9A6", + "tlb": "#a9a6" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULMODPOW2", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x*y mod 2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11118592, + "max": 11118848, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43432, + "prefix_str": "A9A8", + "tlb": "#a9a8" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULMODPOW2R", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x*y mod 2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11118848, + "max": 11119104, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43433, + "prefix_str": "A9A9", + "tlb": "#a9a9" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULMODPOW2C", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x*y mod 2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11119104, + "max": 11119360, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43434, + "prefix_str": "A9AA", + "tlb": "#a9aa" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULRSHIFTMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor(x*y/2^z)` and `r=xy-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11119616, + "max": 11119872, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43436, + "prefix_str": "A9AC", + "tlb": "#a9ac" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULRSHIFTRMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round(x*y/2^z)` and `r=xy-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11119872, + "max": 11120128, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43437, + "prefix_str": "A9AD", + "tlb": "#a9ad" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULRSHIFTCMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil(x*y/2^z)` and `r=xy-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11120128, + "max": 11120384, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43438, + "prefix_str": "A9AE", + "tlb": "#a9ae" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "QMULADDRSHIFTMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor((xy+w)/2^z)` and `r=(xy+w)-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036512, + "max": 12036513, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 1)", + "version": 4, + "kind": "simple", + "prefix": 12036512, + "prefix_str": "B7A9A0", + "tlb": "#b7a9a0" + }, + "signature": { + "stack_string": "x:Int y:Int w:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "QMULADDRSHIFTRMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round((xy+w)/2^z)` and `r=(xy+w)-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036513, + "max": 12036514, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 1)", + "version": 4, + "kind": "simple", + "prefix": 12036513, + "prefix_str": "B7A9A1", + "tlb": "#b7a9a1" + }, + "signature": { + "stack_string": "x:Int y:Int w:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "QMULADDRSHIFTCMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil((xy+w)/2^z)` and `r=(xy+w)-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036514, + "max": 12036515, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 1)", + "version": 4, + "kind": "simple", + "prefix": 12036514, + "prefix_str": "B7A9A2", + "tlb": "#b7a9a2" + }, + "signature": { + "stack_string": "x:Int y:Int w:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "QMULRSHIFT", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = floor(x*y/2^z)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036516, + "max": 12036517, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036516, + "prefix_str": "B7A9A4", + "tlb": "#b7a9a4" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "QMULRSHIFTR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = round(x*y/2^z)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036517, + "max": 12036518, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036517, + "prefix_str": "B7A9A5", + "tlb": "#b7a9a5" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "QMULRSHIFTC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = ceil(x*y/2^z)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036518, + "max": 12036519, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036518, + "prefix_str": "B7A9A6", + "tlb": "#b7a9a6" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "QMULMODPOW2", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x*y mod 2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036520, + "max": 12036521, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036520, + "prefix_str": "B7A9A8", + "tlb": "#b7a9a8" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "QMULMODPOW2R", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x*y mod 2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036521, + "max": 12036522, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036521, + "prefix_str": "B7A9A9", + "tlb": "#b7a9a9" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "QMULMODPOW2C", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x*y mod 2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036522, + "max": 12036523, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036522, + "prefix_str": "B7A9AA", + "tlb": "#b7a9aa" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "QMULRSHIFTMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor(x*y/2^z)` and `r=xy-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036524, + "max": 12036525, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036524, + "prefix_str": "B7A9AC", + "tlb": "#b7a9ac" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "QMULRSHIFTRMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round(x*y/2^z)` and `r=xy-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036525, + "max": 12036526, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036525, + "prefix_str": "B7A9AD", + "tlb": "#b7a9ad" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "QMULRSHIFTCMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil(x*y/2^z)` and `r=xy-q*2^z`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036526, + "max": 12036527, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_mulshrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036526, + "prefix_str": "B7A9AE", + "tlb": "#b7a9ae" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "LSHIFTADDDIVMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor((x*2^y+w)/z)` and `r=(x*2^y+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11124736, + "max": 11124992, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 0)", + "version": 4, + "kind": "simple", + "prefix": 43456, + "prefix_str": "A9C0", + "tlb": "#a9c0" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int y:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFTADDDIVMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round((x*2^y+w)/z)` and `r=(x*2^y+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11124992, + "max": 11125248, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 0)", + "version": 4, + "kind": "simple", + "prefix": 43457, + "prefix_str": "A9C1", + "tlb": "#a9c1" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int y:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFTADDDIVMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil((x*2^y+w)/z)` and `r=(x*2^y+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11125248, + "max": 11125504, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 0)", + "version": 4, + "kind": "simple", + "prefix": 43458, + "prefix_str": "A9C2", + "tlb": "#a9c2" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int y:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFTDIV", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = floor(2^z*x/y)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11125760, + "max": 11126016, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43460, + "prefix_str": "A9C4", + "tlb": "#a9c4" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFTDIVR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = round(2^z*x/y)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11126016, + "max": 11126272, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43461, + "prefix_str": "A9C5", + "tlb": "#a9c5" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFTDIVC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = ceil(2^z*x/y)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11126272, + "max": 11126528, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43462, + "prefix_str": "A9C6", + "tlb": "#a9c6" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFTMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = 2^z*x mod y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11126784, + "max": 11127040, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43464, + "prefix_str": "A9C8", + "tlb": "#a9c8" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFTMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = 2^z*x mod y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11127040, + "max": 11127296, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43465, + "prefix_str": "A9C9", + "tlb": "#a9c9" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFTMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = 2^z*x mod y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11127296, + "max": 11127552, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43466, + "prefix_str": "A9CA", + "tlb": "#a9ca" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFTDIVMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor(2^z*x/y)` and `r=2^z*x-q*y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11127808, + "max": 11128064, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43468, + "prefix_str": "A9CC", + "tlb": "#a9cc" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFTDIVMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round(2^z*x/y)` and `r=2^z*x-q*y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11128064, + "max": 11128320, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43469, + "prefix_str": "A9CD", + "tlb": "#a9cd" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFTDIVMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil(2^z*x/y)` and `r=2^z*x-q*y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11128320, + "max": 11128576, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43470, + "prefix_str": "A9CE", + "tlb": "#a9ce" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "QLSHIFTADDDIVMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor((x*2^y+w)/z)` and `r=(x*2^y+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036544, + "max": 12036545, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 1)", + "version": 4, + "kind": "simple", + "prefix": 12036544, + "prefix_str": "B7A9C0", + "tlb": "#b7a9c0" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int y:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "QLSHIFTADDDIVMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round((x*2^y+w)/z)` and `r=(x*2^y+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036545, + "max": 12036546, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 1)", + "version": 4, + "kind": "simple", + "prefix": 12036545, + "prefix_str": "B7A9C1", + "tlb": "#b7a9c1" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int y:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "QLSHIFTADDDIVMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round((x*2^y+w)/z)` and `r=(x*2^y+w)-zq`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036546, + "max": 12036547, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 1)", + "version": 4, + "kind": "simple", + "prefix": 12036546, + "prefix_str": "B7A9C2", + "tlb": "#b7a9c2" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int y:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "QLSHIFTDIV", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = floor(2^z*x/y)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036548, + "max": 12036549, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036548, + "prefix_str": "B7A9C4", + "tlb": "#b7a9c4" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "QLSHIFTDIVR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = round(2^z*x/y)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036549, + "max": 12036550, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036549, + "prefix_str": "B7A9C5", + "tlb": "#b7a9c5" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "QLSHIFTDIVC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = ceil(2^z*x/y)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036550, + "max": 12036551, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036550, + "prefix_str": "B7A9C6", + "tlb": "#b7a9c6" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "QLSHIFTMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = 2^z*x mod y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036552, + "max": 12036553, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036552, + "prefix_str": "B7A9C8", + "tlb": "#b7a9c8" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "QLSHIFTMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = 2^z*x mod y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036553, + "max": 12036554, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036553, + "prefix_str": "B7A9C9", + "tlb": "#b7a9c9" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "QLSHIFTMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = 2^z*x mod y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036554, + "max": 12036555, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036554, + "prefix_str": "B7A9CA", + "tlb": "#b7a9ca" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "QLSHIFTDIVMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor(2^z*x/y)` and `r=2^z*x-q*y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036556, + "max": 12036557, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036556, + "prefix_str": "B7A9CC", + "tlb": "#b7a9cc" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "QLSHIFTDIVMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round(2^z*x/y)` and `r=2^z*x-q*y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036557, + "max": 12036558, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036557, + "prefix_str": "B7A9CD", + "tlb": "#b7a9cd" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "QLSHIFTDIVMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil(2^z*x/y)` and `r=2^z*x-q*y`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036558, + "max": 12036559, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shldivmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036558, + "prefix_str": "B7A9CE", + "tlb": "#b7a9ce" + }, + "signature": { + "stack_string": "x:Int y:Int z:Int -> result:Int result2:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "result2", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "STIX", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores a signed `width`-bit integer `x` into `b`.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13565952, + "max": 13566208, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_store_int_var", + "kind": "simple", + "prefix": 52992, + "prefix_str": "CF00", + "tlb": "#cf00" + }, + "signature": { + "stack_string": "x:Int b:Builder width:Int -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 257 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"], + "mutations": [ + { + "length": { + "stack_amount_arg": 0 + } + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 599, + "function_name": "exec_store_int_var" + } + }, + { + "name": "STUX", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores an unsigned `width`-bit integer `x` into `b`.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13566208, + "max": 13566464, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_store_int_var", + "kind": "simple", + "prefix": 52993, + "prefix_str": "CF01", + "tlb": "#cf01" + }, + "signature": { + "stack_string": "x:Int b:Builder width:Int -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 256 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"], + "mutations": [ + { + "length": { + "stack_amount_arg": 0 + } + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 599, + "function_name": "exec_store_int_var" + } + }, + { + "name": "STIXR", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores a signed `width`-bit integer `x` into `b`, but with arguments in a different order.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13566464, + "max": 13566720, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_store_int_var", + "kind": "simple", + "prefix": 52994, + "prefix_str": "CF02", + "tlb": "#cf02" + }, + "signature": { + "stack_string": "b:Builder x:Int width:Int -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 257 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"], + "mutations": [ + { + "length": { + "stack_amount_arg": 0 + } + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 599, + "function_name": "exec_store_int_var" + } + }, + { + "name": "STUXR", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores an unsigned `width`-bit integer `x` into `b`, but with arguments in a different order.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13566720, + "max": 13566976, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_store_int_var", + "kind": "simple", + "prefix": 52995, + "prefix_str": "CF03", + "tlb": "#cf03" + }, + "signature": { + "stack_string": "b:Builder x:Int width:Int -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 256 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"], + "mutations": [ + { + "length": { + "stack_amount_arg": 0 + } + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 599, + "function_name": "exec_store_int_var" + } + }, + { + "name": "STIXQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores a signed `width`-bit integer `x` into `b`. If there is no space in `b`, sets `b' = b` and `f = -1`.\nIf `x` does not fit into `width` bits, sets `b' = b` and `f = 1`.\nIf the operation succeeds, `b'` is the new _Builder_ and `f=0`.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13566976, + "max": 13567232, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_store_int_var", + "kind": "simple", + "prefix": 52996, + "prefix_str": "CF04", + "tlb": "#cf04" + }, + "signature": { + "stack_string": "x:Int b:Builder width:Int -> (b':Builder 0)|(x:Int b:Builder -1)|(x:Int b:Builder 1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 257 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + { + "value": 1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 599, + "function_name": "exec_store_int_var" + } + }, + { + "name": "STUXQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores an unsigned `width`-bit integer `x` into `b`. This is a quiet version of `STUX` which means that instead of throwing an exception, it pushes a status flag to the stack: -1 if there is no space in `b`, 0 if the operation succeeds.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13567232, + "max": 13567488, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_store_int_var", + "kind": "simple", + "prefix": 52997, + "prefix_str": "CF05", + "tlb": "#cf05" + }, + "signature": { + "stack_string": "x:Int b:Builder width:Int -> (b':Builder 0)|(x:Int b:Builder -1)|(x:Int b:Builder 1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 256 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + { + "value": 1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 599, + "function_name": "exec_store_int_var" + } + }, + { + "name": "STIXRQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores a signed `width`-bit integer `x` into `b`, but with arguments in a different order. This is a quiet version of `STIXR` which means that instead of throwing an exception, it pushes a status flag to the stack: -1 if there is no space in `b`, 0 if the operation succeeds.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13567488, + "max": 13567744, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_store_int_var", + "kind": "simple", + "prefix": 52998, + "prefix_str": "CF06", + "tlb": "#cf06" + }, + "signature": { + "stack_string": "b:Builder x:Int width:Int -> (b':Builder 0)|(b:Builder x:Int -1)|(b:Builder x:Int 1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 257 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + { + "value": 1, + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 599, + "function_name": "exec_store_int_var" + } + }, + { + "name": "STUXRQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores an unsigned `width`-bit integer `x` into `b`, but with arguments in a different order. This is a quiet version of `STUXR` which means that instead of throwing an exception, it pushes a status flag to the stack: -1 if there is no space in `b`, 0 if the operation succeeds.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13567744, + "max": 13568000, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_store_int_var", + "kind": "simple", + "prefix": 52999, + "prefix_str": "CF07", + "tlb": "#cf07" + }, + "signature": { + "stack_string": "b:Builder x:Int width:Int -> (b':Builder 0)|(b:Builder x:Int -1)|(b:Builder x:Int 1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 256 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + { + "value": 1, + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 599, + "function_name": "exec_store_int_var" + } + }, + { + "name": "STILE4", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores a little-endian signed 32-bit integer.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13576192, + "max": 13576448, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_store_le_int", + "kind": "simple", + "prefix": 53032, + "prefix_str": "CF28", + "tlb": "#cf28" + }, + "signature": { + "stack_string": "x:Int b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 680, + "function_name": "exec_store_le_int" + } + }, + { + "name": "STULE4", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores a little-endian unsigned 32-bit integer.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13576448, + "max": 13576704, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_store_le_int", + "kind": "simple", + "prefix": 53033, + "prefix_str": "CF29", + "tlb": "#cf29" + }, + "signature": { + "stack_string": "x:Int b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 680, + "function_name": "exec_store_le_int" + } + }, + { + "name": "STILE8", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores a little-endian signed 64-bit integer.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13576704, + "max": 13576960, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_store_le_int", + "kind": "simple", + "prefix": 53034, + "prefix_str": "CF2A", + "tlb": "#cf2a" + }, + "signature": { + "stack_string": "x:Int b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 680, + "function_name": "exec_store_le_int" + } + }, + { + "name": "STULE8", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores a little-endian unsigned 64-bit integer.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13576960, + "max": 13577216, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_store_le_int", + "kind": "simple", + "prefix": 53035, + "prefix_str": "CF2B", + "tlb": "#cf2b" + }, + "signature": { + "stack_string": "x:Int b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 680, + "function_name": "exec_store_le_int" + } + }, + { + "name": "LDIX", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads a signed `width`-bit integer `x` from _Slice_ `s`, and returns the remainder of `s` as `s'`.", + "tags": ["slice parsing"], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice doesn't contain enough bits." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14090240, + "max": 14090496, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_int_var", + "kind": "simple", + "prefix": 55040, + "prefix_str": "D700", + "tlb": "#d700" + }, + "signature": { + "stack_string": "s:Slice width:Int -> x:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 257 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1090, + "function_name": "exec_load_int_var" + } + }, + { + "name": "LDUX", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads an unsigned `width`-bit integer `x` from (the first `width` bits of) `s`.", + "tags": ["slice parsing"], + "operands": [], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice doesn't contain enough bits." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14090496, + "max": 14090752, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_int_var", + "kind": "simple", + "prefix": 55041, + "prefix_str": "D701", + "tlb": "#d701" + }, + "signature": { + "stack_string": "s:Slice width:Int -> x:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 256 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1090, + "function_name": "exec_load_int_var" + } + }, + { + "name": "PLDIX", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads a signed `width`-bit integer from _Slice_ `s`.", + "tags": ["slice parsing", "preload"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14090752, + "max": 14091008, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_int_var", + "kind": "simple", + "prefix": 55042, + "prefix_str": "D702", + "tlb": "#d702" + }, + "signature": { + "stack_string": "s:Slice width:Int -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 257 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1090, + "function_name": "exec_load_int_var" + } + }, + { + "name": "PLDUX", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads an unsigned `width`-bit integer from `s`.", + "tags": ["slice parsing", "preload"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14091008, + "max": 14091264, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_int_var", + "kind": "simple", + "prefix": 55043, + "prefix_str": "D703", + "tlb": "#d703" + }, + "signature": { + "stack_string": "s:Slice width:Int -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 256 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1090, + "function_name": "exec_load_int_var" + } + }, + { + "name": "LDIXQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads a signed `width`-bit integer `x` from _Slice_ `s`, and returns the remainder of `s` as `s'`. This is a quiet version of `LDIX` which means that instead of throwing an exception, it pushes a status flag to the stack: 0 if the operation fails, -1 if the operation succeeds.", + "tags": ["slice parsing"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14091264, + "max": 14091520, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_int_var", + "kind": "simple", + "prefix": 55044, + "prefix_str": "D704", + "tlb": "#d704" + }, + "signature": { + "stack_string": "s:Slice width:Int -> (s:Slice 0)|(x:Int s':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 257 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1090, + "function_name": "exec_load_int_var" + } + }, + { + "name": "LDUXQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads an unsigned `width`-bit integer `x` from (the first `width` bits of) `s`. This is a quiet version of `LDUX` which means that instead of throwing an exception, it pushes a status flag to the stack: 0 if the operation fails, -1 if the operation succeeds.", + "tags": ["slice parsing"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14091520, + "max": 14091776, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_int_var", + "kind": "simple", + "prefix": 55045, + "prefix_str": "D705", + "tlb": "#d705" + }, + "signature": { + "stack_string": "s:Slice width:Int -> (s:Slice 0)|(x:Int s':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 256 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1090, + "function_name": "exec_load_int_var" + } + }, + { + "name": "PLDIXQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads a signed `width`-bit integer from _Slice_ `s`. This is a quiet version of `PLDIX` which means that instead of throwing an exception, it pushes a status flag to the stack: 0 if the operation fails, -1 if the operation succeeds.", + "tags": ["slice parsing", "preload"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14091776, + "max": 14092032, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_int_var", + "kind": "simple", + "prefix": 55046, + "prefix_str": "D706", + "tlb": "#d706" + }, + "signature": { + "stack_string": "s:Slice width:Int -> (∅ 0)|(x:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 257 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1090, + "function_name": "exec_load_int_var" + } + }, + { + "name": "PLDUXQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads an unsigned `width`-bit integer from `s`. This is a quiet version of `PLDUX` which means that instead of throwing an exception, it pushes a status flag to the stack: 0 if the operation fails, -1 if the operation succeeds.", + "tags": ["slice parsing", "preload"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14092032, + "max": 14092288, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_int_var", + "kind": "simple", + "prefix": 55047, + "prefix_str": "D707", + "tlb": "#d707" + }, + "signature": { + "stack_string": "s:Slice width:Int -> (∅ 0)|(x:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 256 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1090, + "function_name": "exec_load_int_var" + } + }, + { + "name": "LDSLICEX", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads the first `width` bits from _Slice_ `s` into a separate _Slice_ `loaded`, returning the remainder of `s` as `s'`.", + "tags": ["slice parsing"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14096384, + "max": 14096640, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_slice", + "kind": "simple", + "prefix": 55064, + "prefix_str": "D718", + "tlb": "#d718" + }, + "signature": { + "stack_string": "s:Slice width:Int -> loaded:Slice s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "loaded", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1137, + "function_name": "exec_load_slice" + } + }, + { + "name": "PLDSLICEX", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads the first `width` bits of `s` as `loaded`.", + "tags": ["slice parsing", "preload"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14096640, + "max": 14096896, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_slice", + "kind": "simple", + "prefix": 55065, + "prefix_str": "D719", + "tlb": "#d719" + }, + "signature": { + "stack_string": "s:Slice width:Int -> loaded:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "loaded", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1137, + "function_name": "exec_load_slice" + } + }, + { + "name": "LDSLICEXQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads the first `width` bits from _Slice_ `s` into a separate _Slice_ `loaded`, returning the remainder of `s` as `s'`. This is a quiet version of `LDSLICEX` which means that instead of throwing an exception, it pushes a status flag to the stack: 0 if the operation fails, -1 if the operation succeeds.", + "tags": ["slice parsing"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14096896, + "max": 14097152, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_slice", + "kind": "simple", + "prefix": 55066, + "prefix_str": "D71A", + "tlb": "#d71a" + }, + "signature": { + "stack_string": "s:Slice width:Int -> (s:Slice 0)|(loaded:Slice s':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "loaded", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1137, + "function_name": "exec_load_slice" + } + }, + { + "name": "PLDSLICEXQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads the first `width` bits of `s` as `loaded`. This is a quiet version of `PLDSLICEX` which means that instead of throwing an exception, it pushes a status flag to the stack: 0 if the operation fails, -1 if the operation succeeds.", + "tags": ["slice parsing", "preload"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14097152, + "max": 14097408, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_slice", + "kind": "simple", + "prefix": 55067, + "prefix_str": "D71B", + "tlb": "#d71b" + }, + "signature": { + "stack_string": "s:Slice width:Int -> (∅ 0)|(s':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "width", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1137, + "function_name": "exec_load_slice" + } + }, + { + "name": "LDILE4", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads a little-endian signed 32-bit integer.", + "tags": ["slice parsing"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14110720, + "max": 14110976, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_le_int", + "kind": "simple", + "prefix": 55120, + "prefix_str": "D750", + "tlb": "#d750" + }, + "signature": { + "stack_string": "s:Slice -> x:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1332, + "function_name": "exec_load_le_int" + } + }, + { + "name": "LDULE4", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads a little-endian unsigned 32-bit integer.", + "tags": ["slice parsing"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14110976, + "max": 14111232, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_le_int", + "kind": "simple", + "prefix": 55121, + "prefix_str": "D751", + "tlb": "#d751" + }, + "signature": { + "stack_string": "s:Slice -> x:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1332, + "function_name": "exec_load_le_int" + } + }, + { + "name": "LDILE8", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads a little-endian signed 64-bit integer.", + "tags": ["slice parsing"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14111232, + "max": 14111488, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_le_int", + "kind": "simple", + "prefix": 55122, + "prefix_str": "D752", + "tlb": "#d752" + }, + "signature": { + "stack_string": "s:Slice -> x:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1332, + "function_name": "exec_load_le_int" + } + }, + { + "name": "LDULE8", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads a little-endian unsigned 64-bit integer.", + "tags": ["slice parsing"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14111488, + "max": 14111744, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_le_int", + "kind": "simple", + "prefix": 55123, + "prefix_str": "D753", + "tlb": "#d753" + }, + "signature": { + "stack_string": "s:Slice -> x:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1332, + "function_name": "exec_load_le_int" + } + }, + { + "name": "PLDILE4", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads a little-endian signed 32-bit integer.", + "tags": ["slice parsing", "preload"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14111744, + "max": 14112000, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_le_int", + "kind": "simple", + "prefix": 55124, + "prefix_str": "D754", + "tlb": "#d754" + }, + "signature": { + "stack_string": "s:Slice -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1332, + "function_name": "exec_load_le_int" + } + }, + { + "name": "PLDULE4", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads a little-endian unsigned 32-bit integer.", + "tags": ["slice parsing", "preload"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14112000, + "max": 14112256, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_le_int", + "kind": "simple", + "prefix": 55125, + "prefix_str": "D755", + "tlb": "#d755" + }, + "signature": { + "stack_string": "s:Slice -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1332, + "function_name": "exec_load_le_int" + } + }, + { + "name": "PLDILE8", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads a little-endian signed 64-bit integer.", + "tags": ["slice parsing", "preload"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14112256, + "max": 14112512, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_le_int", + "kind": "simple", + "prefix": 55126, + "prefix_str": "D756", + "tlb": "#d756" + }, + "signature": { + "stack_string": "s:Slice -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1332, + "function_name": "exec_load_le_int" + } + }, + { + "name": "PLDULE8", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads a little-endian unsigned 64-bit integer.", + "tags": ["slice parsing", "preload"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14112512, + "max": 14112768, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_le_int", + "kind": "simple", + "prefix": 55127, + "prefix_str": "D757", + "tlb": "#d757" + }, + "signature": { + "stack_string": "s:Slice -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1332, + "function_name": "exec_load_le_int" + } + }, + { + "name": "LDILE4Q", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Quietly loads a little-endian signed 32-bit integer.", + "tags": ["slice parsing"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14112768, + "max": 14113024, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_le_int", + "kind": "simple", + "prefix": 55128, + "prefix_str": "D758", + "tlb": "#d758" + }, + "signature": { + "stack_string": "s:Slice -> (s:Slice 0)|(x:Int s':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1332, + "function_name": "exec_load_le_int" + } + }, + { + "name": "LDULE4Q", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Quietly loads a little-endian unsigned 32-bit integer.", + "tags": ["slice parsing"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14113024, + "max": 14113280, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_le_int", + "kind": "simple", + "prefix": 55129, + "prefix_str": "D759", + "tlb": "#d759" + }, + "signature": { + "stack_string": "s:Slice -> (s:Slice 0)|(x:Int s':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1332, + "function_name": "exec_load_le_int" + } + }, + { + "name": "LDILE8Q", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Quietly loads a little-endian signed 64-bit integer.", + "tags": ["slice parsing"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14113280, + "max": 14113536, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_le_int", + "kind": "simple", + "prefix": 55130, + "prefix_str": "D75A", + "tlb": "#d75a" + }, + "signature": { + "stack_string": "s:Slice -> (s:Slice 0)|(x:Int s':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1332, + "function_name": "exec_load_le_int" + } + }, + { + "name": "LDULE8Q", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Quietly loads a little-endian unsigned 64-bit integer.", + "tags": ["slice parsing"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14113536, + "max": 14113792, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_le_int", + "kind": "simple", + "prefix": 55131, + "prefix_str": "D75B", + "tlb": "#d75b" + }, + "signature": { + "stack_string": "s:Slice -> (s:Slice 0)|(x:Int s':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1332, + "function_name": "exec_load_le_int" + } + }, + { + "name": "PLDILE4Q", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Quietly preloads a little-endian signed 32-bit integer.", + "tags": ["slice parsing", "preload"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14113792, + "max": 14114048, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_le_int", + "kind": "simple", + "prefix": 55132, + "prefix_str": "D75C", + "tlb": "#d75c" + }, + "signature": { + "stack_string": "s:Slice -> (∅ 0)|(x:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1332, + "function_name": "exec_load_le_int" + } + }, + { + "name": "PLDULE4Q", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Quietly preloads a little-endian unsigned 32-bit integer.", + "tags": ["slice parsing", "preload"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14114048, + "max": 14114304, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_le_int", + "kind": "simple", + "prefix": 55133, + "prefix_str": "D75D", + "tlb": "#d75d" + }, + "signature": { + "stack_string": "s:Slice -> (∅ 0)|(x:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1332, + "function_name": "exec_load_le_int" + } + }, + { + "name": "PLDILE8Q", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Quietly preloads a little-endian signed 64-bit integer.", + "tags": ["slice parsing"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14114304, + "max": 14114560, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_le_int", + "kind": "simple", + "prefix": 55134, + "prefix_str": "D75E", + "tlb": "#d75e" + }, + "signature": { + "stack_string": "s:Slice -> (∅ 0)|(x:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1332, + "function_name": "exec_load_le_int" + } + }, + { + "name": "PLDULE8Q", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Quietly preloads a little-endian unsigned 64-bit integer.", + "tags": ["slice parsing"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14114560, + "max": 14114816, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_load_le_int", + "kind": "simple", + "prefix": 55135, + "prefix_str": "D75F", + "tlb": "#d75f" + }, + "signature": { + "stack_string": "s:Slice -> (∅ 0)|(x:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1332, + "function_name": "exec_load_le_int" + } + }, + { + "name": "DICTIGETJMP", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key represented by a signed (big-endian) `n`-bit _Integer_ `i` in dictionary `D`. On success, `BLESS`es the found value into a continuation and transfers control to it as if by a `JMPX`. On failure, does nothing. This is useful for implementing `switch`/`case` constructions.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16031744, + "max": 16032000, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get_exec", + "kind": "simple", + "prefix": 62624, + "prefix_str": "F4A0", + "tlb": "#f4a0" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "x" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 593, + "function_name": "exec_dict_get_exec" + } + }, + { + "name": "DICTUGETJMP", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key represented by an unsigned (big-endian) `n`-bit _Integer_ `i` in dictionary `D`. On success, `BLESS`es the found value into a continuation and transfers control to it as if by a `JMPX`. On failure, does nothing. This is useful for implementing `switch`/`case` constructions.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16032000, + "max": 16032256, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get_exec", + "kind": "simple", + "prefix": 62625, + "prefix_str": "F4A1", + "tlb": "#f4a1" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "x" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 593, + "function_name": "exec_dict_get_exec" + } + }, + { + "name": "DICTIGETEXEC", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key represented by a signed (big-endian) `n`-bit _Integer_ `i` in dictionary `D`. On success, `BLESS`es the found value into a continuation and executes it as if by `EXECUTE`. On failure, does nothing. This is useful for implementing `switch`/`case` constructions.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16032256, + "max": 16032512, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get_exec", + "kind": "simple", + "prefix": 62626, + "prefix_str": "F4A2", + "tlb": "#f4a2" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "x", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 593, + "function_name": "exec_dict_get_exec" + } + }, + { + "name": "DICTUGETEXEC", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key represented by an unsigned (big-endian) `n`-bit _Integer_ `i` in dictionary `D`. On success, `BLESS`es the found value into a continuation and executes it as if by `EXECUTE`. On failure, does nothing. This is useful for implementing `switch`/`case` constructions.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16032512, + "max": 16032768, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get_exec", + "kind": "simple", + "prefix": 62627, + "prefix_str": "F4A3", + "tlb": "#f4a3" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "x", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 593, + "function_name": "exec_dict_get_exec" + } + }, + { + "name": "DICTIGETJMPZ", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key represented by a signed (big-endian) `n`-bit _Integer_ `i` in dictionary `D`. On success, `BLESS`es the found value into a continuation and transfers control to it as if by a `JMPX`. On failure, returns the index `i` and continues execution. This is useful for implementing `switch`/`case` constructions with a default case.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16038912, + "max": 16039168, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get_exec", + "kind": "simple", + "prefix": 62652, + "prefix_str": "F4BC", + "tlb": "#f4bc" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (i:Int 0)", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "is_found", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + } + ], + "registers": [] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "x" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 593, + "function_name": "exec_dict_get_exec" + } + }, + { + "name": "DICTUGETJMPZ", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key represented by an unsigned (big-endian) `n`-bit _Integer_ `i` in dictionary `D`. On success, `BLESS`es the found value into a continuation and transfers control to it as if by a `JMPX`. On failure, returns the index `i` and continues execution. This is useful for implementing `switch`/`case` constructions with a default case.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16039168, + "max": 16039424, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get_exec", + "kind": "simple", + "prefix": 62653, + "prefix_str": "F4BD", + "tlb": "#f4bd" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (i:Int 0)", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "is_found", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + } + ], + "registers": [] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "x" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 593, + "function_name": "exec_dict_get_exec" + } + }, + { + "name": "DICTIGETEXECZ", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key represented by a signed (big-endian) `n`-bit _Integer_ `i` in dictionary `D`. On success, `BLESS`es the found value into a continuation and executes it as if by `EXECUTE`. On failure, returns the index `i` and continues execution. This is useful for implementing function dispatch with a default handler.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16039424, + "max": 16039680, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get_exec", + "kind": "simple", + "prefix": 62654, + "prefix_str": "F4BE", + "tlb": "#f4be" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (i:Int 0)", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "is_found", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + } + ], + "registers": [] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "x", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 593, + "function_name": "exec_dict_get_exec" + } + }, + { + "name": "DICTUGETEXECZ", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key represented by an unsigned (big-endian) `n`-bit _Integer_ `i` in dictionary `D`. On success, `BLESS`es the found value into a continuation and executes it as if by `EXECUTE`. On failure, returns the index `i` and continues execution. This is useful for implementing function dispatch with a default handler.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16039680, + "max": 16039936, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get_exec", + "kind": "simple", + "prefix": 62655, + "prefix_str": "F4BF", + "tlb": "#f4bf" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (i:Int 0)", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "is_found", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + } + ], + "registers": [] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "x", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 593, + "function_name": "exec_dict_get_exec" + } + }, + { + "name": "DICTGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key `k` (represented by a _Slice_, the first `n` data bits of which are used as a key) in dictionary `D` of type `HashmapE(n,X)` with `n`-bit keys.\nOn success, returns the found value as a _Slice_ `x`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15993344, + "max": 15993600, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get", + "kind": "simple", + "prefix": 62474, + "prefix_str": "F40A", + "tlb": "#f40a" + }, + "signature": { + "stack_string": "k:Slice D:Cell|Null n:Int -> (∅ 0)|(x:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 207, + "function_name": "exec_dict_get" + } + }, + { + "name": "DICTGETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key `k` (represented by a _Slice_, the first `n` data bits of which are used as a key) in dictionary `D` of type `HashmapE(n,X)` with `n`-bit keys. On success, applies `LDREF` `ENDS` to the found value, returning a _Cell_ `c` instead of a _Slice_.\nThis operation is useful for dictionaries of type `HashmapE(n,^Y)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15993600, + "max": 15993856, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get", + "kind": "simple", + "prefix": 62475, + "prefix_str": "F40B", + "tlb": "#f40b" + }, + "signature": { + "stack_string": "k:Slice D:Cell|Null n:Int -> (∅ 0)|(c:Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 207, + "function_name": "exec_dict_get" + } + }, + { + "name": "DICTIGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key represented by a signed (big-endian) `n`-bit _Integer_ `i` in dictionary `D` of type `HashmapE(n,X)` with `n`-bit keys. On success, returns the found value as a _Slice_ `x`. If `i` does not fit into `n` bits, returns `0`.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "5", + "condition": "Integer is `NaN`." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15993856, + "max": 15994112, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get", + "kind": "simple", + "prefix": 62476, + "prefix_str": "F40C", + "tlb": "#f40c" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (∅ 0)|(x:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 207, + "function_name": "exec_dict_get" + } + }, + { + "name": "DICTIGETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key represented by a signed (big-endian) `n`-bit _Integer_ `i` in dictionary `D` of type `HashmapE(n,^Y)`. On success, applies `LDREF` `ENDS` to the found value, returning a _Cell_ `c` instead of a _Slice_. If `i` does not fit into `n` bits or the key is absent, returns _Null_.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15994112, + "max": 15994368, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get", + "kind": "simple", + "prefix": 62477, + "prefix_str": "F40D", + "tlb": "#f40d" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (∅ 0)|(c:Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 207, + "function_name": "exec_dict_get" + } + }, + { + "name": "DICTUGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key represented by an unsigned (big-endian) `n`-bit _Integer_ `i` in dictionary `D` of type `HashmapE(n,X)` with `n`-bit keys. On success, returns the found value as a _Slice_ `x`. If `i` does not fit into `n` bits, returns `0`.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "5", + "condition": "Integer is `NaN`." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15994368, + "max": 15994624, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get", + "kind": "simple", + "prefix": 62478, + "prefix_str": "F40E", + "tlb": "#f40e" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (∅ 0)|(x:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 207, + "function_name": "exec_dict_get" + } + }, + { + "name": "DICTUGETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key represented by an unsigned (big-endian) `n`-bit _Integer_ `i` in dictionary `D` of type `HashmapE(n,X)` with `n`-bit keys. On success, applies `LDREF` `ENDS` to the found value, returning a _Cell_ `c` instead of a _Slice_. If `i` does not fit into `n` bits, returns `0`.", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "5", + "condition": "Integer is `NaN`." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15994624, + "max": 15994880, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get", + "kind": "simple", + "prefix": 62479, + "prefix_str": "F40F", + "tlb": "#f40f" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (∅ 0)|(c:Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 207, + "function_name": "exec_dict_get" + } + }, + { + "name": "DICTSET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` (represented by a _Slice_ as in `DICTGET`) in dictionary `D` to value `x` (represented by a _Slice_), and returns the resulting dictionary as `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15995392, + "max": 15995648, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Set, 'SET', false)", + "kind": "simple", + "prefix": 62482, + "prefix_str": "F412", + "tlb": "#f412" + }, + "signature": { + "stack_string": "x:Slice k:Slice D:Cell|Null n:Int -> D':Cell", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTSETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` (represented by a _Slice_ as in `DICTGET`) in dictionary `D` to a reference to _Cell_ `c`, and returns the resulting dictionary as `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15995648, + "max": 15995904, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Set, 'SET', false)", + "kind": "simple", + "prefix": 62483, + "prefix_str": "F413", + "tlb": "#f413" + }, + "signature": { + "stack_string": "c:Cell k:Slice D:Cell|Null n:Int -> D':Cell", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTISET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to value `x`, and returns the resulting dictionary as `D'`. If `i` does not fit into `n` bits, a range check exception is generated.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15995904, + "max": 15996160, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Set, 'SET', false)", + "kind": "simple", + "prefix": 62484, + "prefix_str": "F414", + "tlb": "#f414" + }, + "signature": { + "stack_string": "x:Slice i:Int D:Cell|Null n:Int -> D':Cell", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTISETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to a reference to _Cell_ `c`, and returns the resulting dictionary as `D'`. If `i` does not fit into `n` bits, a range check exception is generated.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15996160, + "max": 15996416, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Set, 'SET', false)", + "kind": "simple", + "prefix": 62485, + "prefix_str": "F415", + "tlb": "#f415" + }, + "signature": { + "stack_string": "c:Cell i:Int D:Cell|Null n:Int -> D':Cell", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTUSET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to value `x`, and returns the resulting dictionary as `D'`. If `i` does not fit into `n` bits, a range check exception is generated.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15996416, + "max": 15996672, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Set, 'SET', false)", + "kind": "simple", + "prefix": 62486, + "prefix_str": "F416", + "tlb": "#f416" + }, + "signature": { + "stack_string": "x:Slice i:Int D:Cell|Null n:Int -> D':Cell", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTUSETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to a reference to _Cell_ `c`, and returns the resulting dictionary as `D'`. If `i` does not fit into `n` bits, a range check exception is generated.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15996672, + "max": 15996928, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Set, 'SET', false)", + "kind": "simple", + "prefix": 62487, + "prefix_str": "F417", + "tlb": "#f417" + }, + "signature": { + "stack_string": "c:Cell i:Int D:Cell|Null n:Int -> D':Cell", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTSETGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` in dictionary `D` to `x`, and returns the resulting dictionary `D'` along with the old value `y` associated with the key in question, if present. If the key was absent, returns `D'` and `-1`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15997440, + "max": 15997696, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Set, 'SETGET', false)", + "kind": "simple", + "prefix": 62490, + "prefix_str": "F41A", + "tlb": "#f41a" + }, + "signature": { + "stack_string": "x:Slice k:Slice D:Cell|Null n:Int -> (D':Cell 0)|(D':Cell y:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTSETGETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` in dictionary `D` to a reference to _Cell_ `c`, and returns the resulting dictionary `D'` along with the old value (a reference to a _Cell_ or _Null_). If the key was absent, returns `D'` and _Null_.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15997696, + "max": 15997952, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Set, 'SETGET', false)", + "kind": "simple", + "prefix": 62491, + "prefix_str": "F41B", + "tlb": "#f41b" + }, + "signature": { + "stack_string": "c:Cell k:Slice D:Cell|Null n:Int -> (D':Cell 0)|(D':Cell c':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "c'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTISETGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to value `x`, and returns the resulting dictionary as `D'` along with the old value `y` associated with the key in question, if present.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15997952, + "max": 15998208, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Set, 'SETGET', false)", + "kind": "simple", + "prefix": 62492, + "prefix_str": "F41C", + "tlb": "#f41c" + }, + "signature": { + "stack_string": "x:Slice i:Int D:Cell|Null n:Int -> (D':Cell 0)|(D':Cell y:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTISETGETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to a reference to _Cell_ `c`, and returns the resulting dictionary as `D'` along with the old value's reference as a _Cell_ if present.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15998208, + "max": 15998464, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Set, 'SETGET', false)", + "kind": "simple", + "prefix": 62493, + "prefix_str": "F41D", + "tlb": "#f41d" + }, + "signature": { + "stack_string": "c:Cell i:Int D:Cell|Null n:Int -> (D':Cell 0)|(D':Cell c':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "c'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTUSETGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to value `x`, and returns the resulting dictionary as `D'` along with the old value `y` associated with the key in question, if present.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15998464, + "max": 15998720, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Set, 'SETGET', false)", + "kind": "simple", + "prefix": 62494, + "prefix_str": "F41E", + "tlb": "#f41e" + }, + "signature": { + "stack_string": "x:Slice i:Int D:Cell|Null n:Int -> (D':Cell 0)|(D':Cell y:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTUSETGETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to a reference to _Cell_ `c`, and returns the resulting dictionary as `D'` along with the old value's reference as a _Cell_ if present.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15998720, + "max": 15998976, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Set, 'SETGET', false)", + "kind": "simple", + "prefix": 62495, + "prefix_str": "F41F", + "tlb": "#f41f" + }, + "signature": { + "stack_string": "c:Cell i:Int D:Cell|Null n:Int -> (D':Cell 0)|(D':Cell c':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "c'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTREPLACE", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "A _Replace_ operation, which is similar to `DICTSET`, but sets the value of key `k` in dictionary `D` to `x` only if the key `k` was already present in `D`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15999488, + "max": 15999744, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Replace, 'REPLACE', false)", + "kind": "simple", + "prefix": 62498, + "prefix_str": "F422", + "tlb": "#f422" + }, + "signature": { + "stack_string": "x:Slice k:Slice D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTREPLACEREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` in dictionary `D` to a reference to _Cell_ `c`, but only if the key is already present in `D`. Returns the resulting dictionary as `D'` on success, or the original dictionary `D` if the key was absent.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15999744, + "max": 16000000, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Replace, 'REPLACE', false)", + "kind": "simple", + "prefix": 62499, + "prefix_str": "F423", + "tlb": "#f423" + }, + "signature": { + "stack_string": "c:Cell k:Slice D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTIREPLACE", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to value `x` only if the key `i` was already present in `D`. Returns the resulting dictionary as `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16000000, + "max": 16000256, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Replace, 'REPLACE', false)", + "kind": "simple", + "prefix": 62500, + "prefix_str": "F424", + "tlb": "#f424" + }, + "signature": { + "stack_string": "x:Slice i:Int D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTIREPLACEREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to a reference to _Cell_ `c` only if the key `i` was already present in `D`. Returns the resulting dictionary as `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16000256, + "max": 16000512, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Replace, 'REPLACE', false)", + "kind": "simple", + "prefix": 62501, + "prefix_str": "F425", + "tlb": "#f425" + }, + "signature": { + "stack_string": "c:Cell i:Int D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTUREPLACE", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to value `x` only if the key `i` was already present in `D`. Returns the resulting dictionary as `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16000512, + "max": 16000768, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Replace, 'REPLACE', false)", + "kind": "simple", + "prefix": 62502, + "prefix_str": "F426", + "tlb": "#f426" + }, + "signature": { + "stack_string": "x:Slice i:Int D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTUREPLACEREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to a reference to _Cell_ `c` only if the key `i` was already present in `D`. Returns the resulting dictionary as `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16000768, + "max": 16001024, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Replace, 'REPLACE', false)", + "kind": "simple", + "prefix": 62503, + "prefix_str": "F427", + "tlb": "#f427" + }, + "signature": { + "stack_string": "c:Cell i:Int D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTREPLACEGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` in dictionary `D` to `x`, but only if the key is already present in `D`. On success, returns the resulting dictionary `D'` and the old value `y` associated with the key. If the key was absent, returns the original dictionary `D` and `-1`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16001536, + "max": 16001792, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Replace, 'REPLACEGET', false)", + "kind": "simple", + "prefix": 62506, + "prefix_str": "F42A", + "tlb": "#f42a" + }, + "signature": { + "stack_string": "x:Slice k:Slice D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell y:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTREPLACEGETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` in dictionary `D` to a reference to _Cell_ `c`, but only if the key is already present in `D`. On success, returns the resulting dictionary `D'` and the old value (a reference to a _Cell_ or _Null_). If the key was absent, returns the original dictionary `D` and _Null_.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16001792, + "max": 16002048, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Replace, 'REPLACEGET', false)", + "kind": "simple", + "prefix": 62507, + "prefix_str": "F42B", + "tlb": "#f42b" + }, + "signature": { + "stack_string": "c:Cell k:Slice D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell c':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "c'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTIREPLACEGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to value `x` only if the key `i` was already present in `D`. Returns the resulting dictionary `D'` and the old value associated with the key in question.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16002048, + "max": 16002304, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Replace, 'REPLACEGET', false)", + "kind": "simple", + "prefix": 62508, + "prefix_str": "F42C", + "tlb": "#f42c" + }, + "signature": { + "stack_string": "x:Slice i:Int D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell y:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTIREPLACEGETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to a reference to _Cell_ `c` only if the key `i` was already present in `D`. Returns the resulting dictionary `D'` and the old value's reference as a _Cell_.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16002304, + "max": 16002560, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Replace, 'REPLACEGET', false)", + "kind": "simple", + "prefix": 62509, + "prefix_str": "F42D", + "tlb": "#f42d" + }, + "signature": { + "stack_string": "c:Cell i:Int D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell c':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "c'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTUREPLACEGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to value `x` only if the key `i` was already present in `D`. Returns the resulting dictionary `D'` and the old value associated with the key in question.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16002560, + "max": 16002816, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Replace, 'REPLACEGET', false)", + "kind": "simple", + "prefix": 62510, + "prefix_str": "F42E", + "tlb": "#f42e" + }, + "signature": { + "stack_string": "x:Slice i:Int D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell y:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTUREPLACEGETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to a reference to _Cell_ `c` only if the key `i` was already present in `D`. Returns the resulting dictionary `D'` and the old value's reference as a _Cell_.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16002816, + "max": 16003072, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Replace, 'REPLACEGET', false)", + "kind": "simple", + "prefix": 62511, + "prefix_str": "F42F", + "tlb": "#f42f" + }, + "signature": { + "stack_string": "c:Cell i:Int D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell c':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "c'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTADD", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` in dictionary `D` to `x`, but only if the key is not already present in `D`. Returns the resulting dictionary `D'` on success, or the original dictionary `D` if the key was already present.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16003584, + "max": 16003840, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Add, 'ADD', false)", + "kind": "simple", + "prefix": 62514, + "prefix_str": "F432", + "tlb": "#f432" + }, + "signature": { + "stack_string": "x:Slice k:Slice D:Cell|Null n:Int -> (D:Cell 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTADDREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` in dictionary `D` to a reference to _Cell_ `c`, but only if the key is not already present in `D`. Returns the resulting dictionary `D'` on success, or the original dictionary `D` if the key was already present.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16003840, + "max": 16004096, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Add, 'ADD', false)", + "kind": "simple", + "prefix": 62515, + "prefix_str": "F433", + "tlb": "#f433" + }, + "signature": { + "stack_string": "c:Cell k:Slice D:Cell|Null n:Int -> (D:Cell 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTIADD", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to value `x`, but only if key `i` is not already present in `D`. Returns the resulting dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16004096, + "max": 16004352, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Add, 'ADD', false)", + "kind": "simple", + "prefix": 62516, + "prefix_str": "F434", + "tlb": "#f434" + }, + "signature": { + "stack_string": "x:Slice i:Int D:Cell|Null n:Int -> (D:Cell 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTIADDREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to a reference to _Cell_ `c`, but only if key `i` is not already present in `D`. Returns the resulting dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16004352, + "max": 16004608, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Add, 'ADD', false)", + "kind": "simple", + "prefix": 62517, + "prefix_str": "F435", + "tlb": "#f435" + }, + "signature": { + "stack_string": "c:Cell i:Int D:Cell|Null n:Int -> (D:Cell 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTUADD", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to value `x`, but only if key `i` is not already present in `D`. Returns the resulting dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16004608, + "max": 16004864, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Add, 'ADD', false)", + "kind": "simple", + "prefix": 62518, + "prefix_str": "F436", + "tlb": "#f436" + }, + "signature": { + "stack_string": "x:Slice i:Int D:Cell|Null n:Int -> (D:Cell 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTUADDREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to a reference to _Cell_ `c`, but only if key `i` is not already present in `D`. Returns the resulting dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16004864, + "max": 16005120, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Add, 'ADD', false)", + "kind": "simple", + "prefix": 62519, + "prefix_str": "F437", + "tlb": "#f437" + }, + "signature": { + "stack_string": "c:Cell i:Int D:Cell|Null n:Int -> (D:Cell 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTADDGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` in dictionary `D` to `x`, but only if the key is not already present in `D`. Returns the resulting dictionary `D'` and the new value `x` on success. If the key was already present, returns the original dictionary `D` and the existing value `y` without modification.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16005632, + "max": 16005888, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Add, 'ADDGET', false)", + "kind": "simple", + "prefix": 62522, + "prefix_str": "F43A", + "tlb": "#f43a" + }, + "signature": { + "stack_string": "x:Slice k:Slice D:Cell|Null n:Int -> (D:Cell y:Slice 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTADDGETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` in dictionary `D` to a reference to _Cell_ `c`, but only if the key is not already present in `D`. Returns the resulting dictionary `D'` and the reference to _Cell_ `c` on success. If the key was already present, returns the original dictionary `D` and the existing _Cell_ reference without modification.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16005888, + "max": 16006144, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Add, 'ADDGET', false)", + "kind": "simple", + "prefix": 62523, + "prefix_str": "F43B", + "tlb": "#f43b" + }, + "signature": { + "stack_string": "c:Cell k:Slice D:Cell|Null n:Int -> (D:Cell c':Cell 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "c'", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTIADDGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to value `x`, but only if key `i` is not already present in `D`. Otherwise, returns the old value `y` without changing the dictionary.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16006144, + "max": 16006400, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Add, 'ADDGET', false)", + "kind": "simple", + "prefix": 62524, + "prefix_str": "F43C", + "tlb": "#f43c" + }, + "signature": { + "stack_string": "x:Slice i:Int D:Cell|Null n:Int -> (D:Cell y:Slice 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTIADDGETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to a reference to _Cell_ `c`, but only if key `i` is not already present in `D`. Otherwise, returns the old value's reference as a _Cell_ without changing the dictionary.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16006400, + "max": 16006656, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Add, 'ADDGET', false)", + "kind": "simple", + "prefix": 62525, + "prefix_str": "F43D", + "tlb": "#f43d" + }, + "signature": { + "stack_string": "c:Cell i:Int D:Cell|Null n:Int -> (D:Cell c':Cell 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "c'", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTUADDGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to value `x`, but only if key `i` is not already present in `D`. Otherwise, returns the old value `y` without changing the dictionary.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16006656, + "max": 16006912, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Add, 'ADDGET', false)", + "kind": "simple", + "prefix": 62526, + "prefix_str": "F43E", + "tlb": "#f43e" + }, + "signature": { + "stack_string": "x:Slice i:Int D:Cell|Null n:Int -> (D:Cell y:Slice 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTUADDGETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to a reference to _Cell_ `c`, but only if key `i` is not already present in `D`. Otherwise, returns the old value's reference as a _Cell_ without changing the dictionary.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16006912, + "max": 16007168, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Add, 'ADDGET', false)", + "kind": "simple", + "prefix": 62527, + "prefix_str": "F43F", + "tlb": "#f43f" + }, + "signature": { + "stack_string": "c:Cell i:Int D:Cell|Null n:Int -> (D:Cell c':Cell 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "c'", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTDELGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Deletes `n`-bit key, represented by a _Slice_ `k`, from dictionary `D`. If the key is present, returns the modified dictionary `D'`, the original value `x` associated with the key `k` (represented by a _Slice_), and the success flag `-1`. Otherwise, returns the original dictionary `D` and `0`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16015872, + "max": 16016128, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_deleteget", + "kind": "simple", + "prefix": 62562, + "prefix_str": "F462", + "tlb": "#f462" + }, + "signature": { + "stack_string": "k:Slice D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null x:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 401, + "function_name": "exec_dict_deleteget" + } + }, + { + "name": "DICTDELGETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Deletes `n`-bit key, represented by a _Slice_ `k`, from dictionary `D`. If the key is present, returns the modified dictionary `D'`, applies `LDREF` `ENDS` to the original value associated with the key `k` so that the value returned `c` is a _Cell_, and returns the success flag `-1`. Otherwise, returns the original dictionary `D` and `0`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16016128, + "max": 16016384, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_deleteget", + "kind": "simple", + "prefix": 62563, + "prefix_str": "F463", + "tlb": "#f463" + }, + "signature": { + "stack_string": "k:Slice D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null c:Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 401, + "function_name": "exec_dict_deleteget" + } + }, + { + "name": "DICTIDELGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Deletes `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` from dictionary `D`. If the key is present, returns the modified dictionary `D'`, the original value `x` associated with the key `i` (represented by a _Slice_), and the success flag `-1`. Otherwise, returns the original dictionary `D` and `0`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16016384, + "max": 16016640, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_deleteget", + "kind": "simple", + "prefix": 62564, + "prefix_str": "F464", + "tlb": "#f464" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null x:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 401, + "function_name": "exec_dict_deleteget" + } + }, + { + "name": "DICTIDELGETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Deletes `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` from dictionary `D`. If the key is present, returns the modified dictionary `D'`, applies `LDREF` `ENDS` to the original value associated with the key `i` so that the value returned `c` is a _Cell_, and returns the success flag `-1`. Otherwise, returns the original dictionary `D` and `0`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16016640, + "max": 16016896, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_deleteget", + "kind": "simple", + "prefix": 62565, + "prefix_str": "F465", + "tlb": "#f465" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null c:Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 401, + "function_name": "exec_dict_deleteget" + } + }, + { + "name": "DICTUDELGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Deletes `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` from dictionary `D`. If the key is present, returns the modified dictionary `D'`, the original value `x` associated with the key `i` (represented by a _Slice_), and the success flag `-1`. Otherwise, returns the original dictionary `D` and `0`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16016896, + "max": 16017152, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_deleteget", + "kind": "simple", + "prefix": 62566, + "prefix_str": "F466", + "tlb": "#f466" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null x:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 401, + "function_name": "exec_dict_deleteget" + } + }, + { + "name": "DICTUDELGETREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Deletes `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` from dictionary `D`. If the key is present, returns the modified dictionary `D'`, applies `LDREF` `ENDS` to the original value associated with the key `i` so that the value returned `c` is a _Cell_, and returns the success flag `-1`. Otherwise, returns the original dictionary `D` and `0`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16017152, + "max": 16017408, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_deleteget", + "kind": "simple", + "prefix": 62567, + "prefix_str": "F467", + "tlb": "#f467" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null c:Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 401, + "function_name": "exec_dict_deleteget" + } + }, + { + "name": "DICTMIN", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the minimal key `k` (represented by a _Slice_ with `n` data bits) in dictionary `D`, and returns `k` along with the associated value `x`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16024064, + "max": 16024320, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62594, + "prefix_str": "F482", + "tlb": "#f482" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (∅ 0)|(x:Slice k:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTMINREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the minimal key `k` (represented by a _Slice_ with `n` data bits) in dictionary `D`, and returns `k` along with the only reference in the associated value as a _Cell_ `c`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16024320, + "max": 16024576, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62595, + "prefix_str": "F483", + "tlb": "#f483" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (∅ 0)|(c:Cell k:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTIMIN", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the minimal key `i` in dictionary `D` under the assumption that all keys are big-endian signed `n`-bit integers, and returns `i` along with the associated value `x`. Notice that the key and value returned may differ from those computed by `DICTMIN` and `DICTUMIN`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16024576, + "max": 16024832, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62596, + "prefix_str": "F484", + "tlb": "#f484" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (∅ 0)|(x:Slice i:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTIMINREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the minimal key `i` in dictionary `D` under the assumption that all keys are big-endian signed `n`-bit integers, and returns `i` along with the only reference in the associated value as a _Cell_ `c`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16024832, + "max": 16025088, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62597, + "prefix_str": "F485", + "tlb": "#f485" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (∅ 0)|(c:Cell i:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTUMIN", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the minimal key in dictionary `D` under the assumption that all keys are big-endian unsigned `n`-bit integers, and returns the key as an unsigned `n`-bit _Integer_ `i` along with the associated value `x`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16025088, + "max": 16025344, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62598, + "prefix_str": "F486", + "tlb": "#f486" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (∅ 0)|(x:Slice i:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTUMINREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the minimal key in dictionary `D` under the assumption that all keys are big-endian unsigned `n`-bit integers, and returns the key as an unsigned `n`-bit _Integer_ `i` along with the only reference in the associated value as a _Cell_ `c`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16025344, + "max": 16025600, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62599, + "prefix_str": "F487", + "tlb": "#f487" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (∅ 0)|(c:Cell i:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTMAX", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the maximal key `k` (represented by a _Slice_ with `n` data bits) in dictionary `D`, and returns `k` along with the associated value `x`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16026112, + "max": 16026368, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62602, + "prefix_str": "F48A", + "tlb": "#f48a" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (∅ 0)|(x:Slice k:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTMAXREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the maximal key `k` (represented by a _Slice_ with `n` data bits) in dictionary `D`, and returns `k` along with the only reference in the associated value as a _Cell_ `c`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16026368, + "max": 16026624, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62603, + "prefix_str": "F48B", + "tlb": "#f48b" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (∅ 0)|(c:Cell k:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTIMAX", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the maximal key `i` in dictionary `D` under the assumption that all keys are big-endian signed `n`-bit integers, and returns `i` along with the associated value `x`. Notice that the key and value returned may differ from those computed by `DICTMAX` and `DICTUMAX`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16026624, + "max": 16026880, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62604, + "prefix_str": "F48C", + "tlb": "#f48c" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (∅ 0)|(x:Slice i:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTIMAXREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the maximal key `i` in dictionary `D` under the assumption that all keys are big-endian signed `n`-bit integers, and returns `i` along with the only reference in the associated value as a _Cell_ `c`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16026880, + "max": 16027136, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62605, + "prefix_str": "F48D", + "tlb": "#f48d" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (∅ 0)|(c:Cell i:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTUMAX", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the maximal key in dictionary `D` under the assumption that all keys are big-endian unsigned `n`-bit integers, and returns the key as an unsigned `n`-bit _Integer_ `i` along with the associated value `x`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16027136, + "max": 16027392, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62606, + "prefix_str": "F48E", + "tlb": "#f48e" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (∅ 0)|(x:Slice i:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTUMAXREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the maximal key in dictionary `D` under the assumption that all keys are big-endian unsigned `n`-bit integers, and returns the key as an unsigned `n`-bit _Integer_ `i` along with the only reference in the associated value as a _Cell_ `c`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16027392, + "max": 16027648, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62607, + "prefix_str": "F48F", + "tlb": "#f48f" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (∅ 0)|(c:Cell i:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTREMMIN", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the minimal key `k` (represented by a _Slice_ with `n` data bits) in dictionary `D`, removes `k` from the dictionary, and returns `k` along with the associated value `x` and the modified dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16028160, + "max": 16028416, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62610, + "prefix_str": "F492", + "tlb": "#f492" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null x:Slice k:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTREMMINREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the minimal key `k` (represented by a _Slice_ with `n` data bits) in dictionary `D`, removes `k` from the dictionary, and returns `k` along with the only reference in the associated value as a _Cell_ `c` and the modified dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16028416, + "max": 16028672, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62611, + "prefix_str": "F493", + "tlb": "#f493" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null c:Cell k:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTIREMMIN", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the minimal key `i` in dictionary `D` under the assumption that all keys are big-endian signed `n`-bit integers, removes `i` from the dictionary, and returns `i` along with the associated value `x` and the modified dictionary `D'`. Notice that the key and value returned may differ from those computed by `DICTREMMIN` and `DICTUREMMIN`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16028672, + "max": 16028928, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62612, + "prefix_str": "F494", + "tlb": "#f494" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null x:Slice i:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTIREMMINREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the minimal key `i` in dictionary `D` under the assumption that all keys are big-endian signed `n`-bit integers, removes `i` from the dictionary, and returns `i` along with the only reference in the associated value as a _Cell_ `c` and the modified dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16028928, + "max": 16029184, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62613, + "prefix_str": "F495", + "tlb": "#f495" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null c:Cell i:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTUREMMIN", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the minimal key in dictionary `D` under the assumption that all keys are big-endian unsigned `n`-bit integers, removes it from the dictionary, and returns the key as an unsigned `n`-bit _Integer_ `i` along with the associated value `x` and the modified dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16029184, + "max": 16029440, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62614, + "prefix_str": "F496", + "tlb": "#f496" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null x:Slice i:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTUREMMINREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the minimal key in dictionary `D` under the assumption that all keys are big-endian unsigned `n`-bit integers, removes it from the dictionary, and returns the key as an unsigned `n`-bit _Integer_ `i` along with the only reference in the associated value as a _Cell_ `c` and the modified dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16029440, + "max": 16029696, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62615, + "prefix_str": "F497", + "tlb": "#f497" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null c:Cell i:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTREMMAX", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the maximal key `k` (represented by a _Slice_ with `n` data bits) in dictionary `D`, removes `k` from the dictionary, and returns `k` along with the associated value `x` and the modified dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16030208, + "max": 16030464, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62618, + "prefix_str": "F49A", + "tlb": "#f49a" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null x:Slice k:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTREMMAXREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the maximal key `k` (represented by a _Slice_ with `n` data bits) in dictionary `D`, removes `k` from the dictionary, and returns `k` along with the only reference in the associated value as a _Cell_ `c` and the modified dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16030464, + "max": 16030720, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62619, + "prefix_str": "F49B", + "tlb": "#f49b" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null c:Cell k:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTIREMMAX", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the maximal key `i` in dictionary `D` under the assumption that all keys are big-endian signed `n`-bit integers, removes `i` from the dictionary, and returns `i` along with the associated value `x` and the modified dictionary `D'`. Notice that the key and value returned may differ from those computed by `DICTREMMAX` and `DICTUREMMAX`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16030720, + "max": 16030976, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62620, + "prefix_str": "F49C", + "tlb": "#f49c" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null x:Slice i:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTIREMMAXREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the maximal key `i` in dictionary `D` under the assumption that all keys are big-endian signed `n`-bit integers, removes `i` from the dictionary, and returns `i` along with the only reference in the associated value as a _Cell_ `c` and the modified dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16030976, + "max": 16031232, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62621, + "prefix_str": "F49D", + "tlb": "#f49d" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null c:Cell i:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTUREMMAX", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the maximal key in dictionary `D` under the assumption that all keys are big-endian unsigned `n`-bit integers, removes it from the dictionary, and returns the key as an unsigned `n`-bit _Integer_ `i` along with the associated value `x` and the modified dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16031232, + "max": 16031488, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62622, + "prefix_str": "F49E", + "tlb": "#f49e" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null x:Slice i:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTUREMMAXREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the maximal key in dictionary `D` under the assumption that all keys are big-endian unsigned `n`-bit integers, removes it from the dictionary, and returns the key as an unsigned `n`-bit _Integer_ `i` along with the only reference in the associated value as a _Cell_ `c` and the modified dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16031488, + "max": 16031744, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getmin", + "kind": "simple", + "prefix": 62623, + "prefix_str": "F49F", + "tlb": "#f49f" + }, + "signature": { + "stack_string": "D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null c:Cell i:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 470, + "function_name": "exec_dict_getmin" + } + }, + { + "name": "DICTSETB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` (represented by a _Slice_ as in `DICTGET`) in dictionary `D` to value `x` (represented by a _Builder_), and returns the resulting dictionary as `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16007424, + "max": 16007680, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Set, 'SET', true)", + "kind": "simple", + "prefix": 62529, + "prefix_str": "F441", + "tlb": "#f441" + }, + "signature": { + "stack_string": "x:Builder k:Slice D:Cell|Null n:Int -> D':Cell", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTISETB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to value `x` (represented by a _Builder_), and returns the resulting dictionary as `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16007680, + "max": 16007936, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Set, 'SET', true)", + "kind": "simple", + "prefix": 62530, + "prefix_str": "F442", + "tlb": "#f442" + }, + "signature": { + "stack_string": "x:Builder i:Int D:Cell|Null n:Int -> D':Cell", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTUSETB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to value `x` (represented by a _Builder_), and returns the resulting dictionary as `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16007936, + "max": 16008192, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Set, 'SET', true)", + "kind": "simple", + "prefix": 62531, + "prefix_str": "F443", + "tlb": "#f443" + }, + "signature": { + "stack_string": "x:Builder i:Int D:Cell|Null n:Int -> D':Cell", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTSETGETB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` (represented by a _Slice_ as in `DICTGET`) in dictionary `D` to value `x` (represented by a _Builder_), and returns the resulting dictionary `D'` along with the old value `y` associated with the key in question, if present.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16008448, + "max": 16008704, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Set, 'SETGET', true)", + "kind": "simple", + "prefix": 62533, + "prefix_str": "F445", + "tlb": "#f445" + }, + "signature": { + "stack_string": "x:Builder k:Slice D:Cell|Null n:Int -> (D':Cell 0)|(D':Cell y:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTISETGETB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to value `x` (represented by a _Builder_), and returns the resulting dictionary `D'` along with the old value `y` associated with the key in question, if present.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16008704, + "max": 16008960, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Set, 'SETGET', true)", + "kind": "simple", + "prefix": 62534, + "prefix_str": "F446", + "tlb": "#f446" + }, + "signature": { + "stack_string": "x:Builder i:Int D:Cell|Null n:Int -> (D':Cell 0)|(D':Cell y:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTUSETGETB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to value `x` (represented by a _Builder_), and returns the resulting dictionary `D'` along with the old value `y` associated with the key in question, if present.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16008960, + "max": 16009216, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Set, 'SETGET', true)", + "kind": "simple", + "prefix": 62535, + "prefix_str": "F447", + "tlb": "#f447" + }, + "signature": { + "stack_string": "x:Builder i:Int D:Cell|Null n:Int -> (D':Cell 0)|(D':Cell y:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTREPLACEB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` (represented by a _Slice_ as in `DICTGET`) in dictionary `D` to value `x` (represented by a _Builder_) only if the key `k` was already present in `D`. Returns the resulting dictionary as `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16009472, + "max": 16009728, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Replace, 'REPLACE', true)", + "kind": "simple", + "prefix": 62537, + "prefix_str": "F449", + "tlb": "#f449" + }, + "signature": { + "stack_string": "x:Builder k:Slice D:Cell|Null n:Int -> (D:Cell 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTIREPLACEB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to value `x` (represented by a _Builder_) only if the key `i` was already present in `D`. Returns the resulting dictionary as `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16009728, + "max": 16009984, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Replace, 'REPLACE', true)", + "kind": "simple", + "prefix": 62538, + "prefix_str": "F44A", + "tlb": "#f44a" + }, + "signature": { + "stack_string": "x:Builder i:Int D:Cell|Null n:Int -> (D:Cell 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTUREPLACEB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to value `x` (represented by a _Builder_) only if the key `i` was already present in `D`. Returns the resulting dictionary as `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16009984, + "max": 16010240, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Replace, 'REPLACE', true)", + "kind": "simple", + "prefix": 62539, + "prefix_str": "F44B", + "tlb": "#f44b" + }, + "signature": { + "stack_string": "x:Builder i:Int D:Cell|Null n:Int -> (D:Cell 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTREPLACEGETB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` (represented by a _Slice_ as in `DICTGET`) in dictionary `D` to value `x` (represented by a _Builder_) only if the key `k` was already present in `D`. Returns the resulting dictionary `D'` and the old value associated with the key in question.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16010496, + "max": 16010752, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Replace, 'REPLACEGET', true)", + "kind": "simple", + "prefix": 62541, + "prefix_str": "F44D", + "tlb": "#f44d" + }, + "signature": { + "stack_string": "x:Builder k:Slice D:Cell|Null n:Int -> (D:Cell 0)|(D':Cell y:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTIREPLACEGETB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to value `x` (represented by a _Builder_) only if the key `i` was already present in `D`. Returns the resulting dictionary `D'` and the old value associated with the key in question.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16010752, + "max": 16011008, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Replace, 'REPLACEGET', true)", + "kind": "simple", + "prefix": 62542, + "prefix_str": "F44E", + "tlb": "#f44e" + }, + "signature": { + "stack_string": "x:Builder i:Int D:Cell|Null n:Int -> (D:Cell 0)|(D':Cell y:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTUREPLACEGETB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to value `x` (represented by a _Builder_) only if the key `i` was already present in `D`. Returns the resulting dictionary `D'` and the old value associated with the key in question.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16011008, + "max": 16011264, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Replace, 'REPLACEGET', true)", + "kind": "simple", + "prefix": 62543, + "prefix_str": "F44F", + "tlb": "#f44f" + }, + "signature": { + "stack_string": "x:Builder i:Int D:Cell|Null n:Int -> (D:Cell 0)|(D':Cell y:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTADDB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` (represented by a _Slice_ as in `DICTGET`) in dictionary `D` to value `x` (represented by a _Builder_), but only if key `k` is not already present in `D`. Returns the resulting dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16011520, + "max": 16011776, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Add, 'ADD', true)", + "kind": "simple", + "prefix": 62545, + "prefix_str": "F451", + "tlb": "#f451" + }, + "signature": { + "stack_string": "x:Builder k:Slice D:Cell|Null n:Int -> (D:Cell 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTIADDB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to value `x` (represented by a _Builder_), but only if key `i` is not already present in `D`. Returns the resulting dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16011776, + "max": 16012032, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Add, 'ADD', true)", + "kind": "simple", + "prefix": 62546, + "prefix_str": "F452", + "tlb": "#f452" + }, + "signature": { + "stack_string": "x:Builder i:Int D:Cell|Null n:Int -> (D:Cell 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTUADDB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to value `x` (represented by a _Builder_), but only if key `i` is not already present in `D`. Returns the resulting dictionary `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16012032, + "max": 16012288, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_set(_1, _2, Add, 'ADD', true)", + "kind": "simple", + "prefix": 62547, + "prefix_str": "F453", + "tlb": "#f453" + }, + "signature": { + "stack_string": "x:Builder i:Int D:Cell|Null n:Int -> (D:Cell 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 271, + "function_name": "exec_dict_set" + } + }, + { + "name": "DICTADDGETB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` (represented by a _Slice_ as in `DICTGET`) in dictionary `D` to value `x` (represented by a _Builder_), but only if key `k` is not already present in `D`. Otherwise, returns the old value `y` without changing the dictionary.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16012544, + "max": 16012800, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Add, 'ADDGET', true)", + "kind": "simple", + "prefix": 62549, + "prefix_str": "F455", + "tlb": "#f455" + }, + "signature": { + "stack_string": "x:Builder k:Slice D:Cell|Null n:Int -> (D:Cell y:Slice 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTIADDGETB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by a (big-endian) signed `n`-bit integer `i` in dictionary `D` to value `x` (represented by a _Builder_), but only if key `i` is not already present in `D`. Otherwise, returns the old value `y` without changing the dictionary.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16012800, + "max": 16013056, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Add, 'ADDGET', true)", + "kind": "simple", + "prefix": 62550, + "prefix_str": "F456", + "tlb": "#f456" + }, + "signature": { + "stack_string": "x:Builder i:Int D:Cell|Null n:Int -> (D:Cell y:Slice 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTUADDGETB", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key represented by an unsigned (big-endian) `n`-bit integer `i` in dictionary `D` to value `x` (represented by a _Builder_), but only if key `i` is not already present in `D`. Otherwise, returns the old value `y` without changing the dictionary.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16013056, + "max": 16013312, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget(_1, _2, Add, 'ADDGET', true)", + "kind": "simple", + "prefix": 62551, + "prefix_str": "F457", + "tlb": "#f457" + }, + "signature": { + "stack_string": "x:Builder i:Int D:Cell|Null n:Int -> (D:Cell y:Slice 0)|(D':Cell -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 315, + "function_name": "exec_dict_setget" + } + }, + { + "name": "DICTDEL", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Deletes `n`-bit key, represented by a _Slice_ `k`, from dictionary `D`. If the key is present, returns the modified dictionary `D'` and the success flag `-1`. Otherwise, returns the original dictionary `D` and `0`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16013568, + "max": 16013824, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_delete", + "kind": "simple", + "prefix": 62553, + "prefix_str": "F459", + "tlb": "#f459" + }, + "signature": { + "stack_string": "k:Slice D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 374, + "function_name": "exec_dict_delete" + } + }, + { + "name": "DICTIDEL", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "A version of `DICTDEL` with the key represented by a signed `n`-bit _Integer_ `i`. If `i` does not fit into `n` bits, simply returns `D` `0` (\"key not found, dictionary unmodified\").", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16013824, + "max": 16014080, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_delete", + "kind": "simple", + "prefix": 62554, + "prefix_str": "F45A", + "tlb": "#f45a" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 374, + "function_name": "exec_dict_delete" + } + }, + { + "name": "DICTUDEL", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Deletes `n`-bit key, represented by an unsigned `n`-bit _Integer_ `i`, from dictionary `D`. If the key is present, returns the modified dictionary `D'` and the success flag `-1`. Otherwise, returns the original dictionary `D` and `0`. If `i` does not fit into `n` bits, simply returns `D` `0` (\"key not found, dictionary unmodified\").", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16014080, + "max": 16014336, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_delete", + "kind": "simple", + "prefix": 62555, + "prefix_str": "F45B", + "tlb": "#f45b" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (D:Cell|Null 0)|(D':Cell|Null -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 374, + "function_name": "exec_dict_delete" + } + }, + { + "name": "DICTGETOPTREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key `k` (represented by a _Slice_) in dictionary `D` of type `HashmapE(n,^Y)`. On success, applies `LDREF` `ENDS` to the found value, returning a _Cell_ `c`. If the key is absent, returns _Null_ instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16017664, + "max": 16017920, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get_optref", + "kind": "simple", + "prefix": 62569, + "prefix_str": "F469", + "tlb": "#f469" + }, + "signature": { + "stack_string": "k:Slice D:Cell|Null n:Int -> c:Cell|Null", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell", "Null"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 247, + "function_name": "exec_dict_get_optref" + } + }, + { + "name": "DICTIGETOPTREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key represented by a signed (big-endian) `n`-bit _Integer_ `i` in dictionary `D`. Returns _Null_ if the key `i` is absent from dictionary `D` or if `i` is out of range. Otherwise, returns the found value as a _Cell_ `c`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16017920, + "max": 16018176, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get_optref", + "kind": "simple", + "prefix": 62570, + "prefix_str": "F46A", + "tlb": "#f46a" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> c:Cell|Null", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell", "Null"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 247, + "function_name": "exec_dict_get_optref" + } + }, + { + "name": "DICTUGETOPTREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Looks up key represented by an unsigned (big-endian) `n`-bit _Integer_ `i` in dictionary `D`. Returns _Null_ if the key `i` is absent from dictionary `D` or if `i` is out of range. Otherwise, returns the found value as a _Cell_ `c`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16018176, + "max": 16018432, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_get_optref", + "kind": "simple", + "prefix": 62571, + "prefix_str": "F46B", + "tlb": "#f46b" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> c:Cell|Null", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell", "Null"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 247, + "function_name": "exec_dict_get_optref" + } + }, + { + "name": "DICTSETGETOPTREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value associated with `n`-bit key `k` in dictionary `D` to `c^?` (if `c^?` is _Null_, the key is deleted instead), and returns the resulting dictionary `D'` along with the old value `~c^?` (if the key was absent, returns _Null_).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16018688, + "max": 16018944, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget_optref", + "kind": "simple", + "prefix": 62573, + "prefix_str": "F46D", + "tlb": "#f46d" + }, + "signature": { + "stack_string": "c:Cell|Null k:Slice D:Cell|Null n:Int -> D':Cell|Null c':Cell|Null", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "c'", + "value_types": ["Cell", "Null"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 442, + "function_name": "exec_dict_setget_optref" + } + }, + { + "name": "DICTISETGETOPTREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value corresponding to key represented by a signed `n`-bit _Integer_ `i` in dictionary `D` to `c^?` (if `c^?` is _Null_, then the key is deleted instead), and returns the old value `~c^?` (if the key `i` was absent before, returns _Null_ instead).", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "5", + "condition": "Integer does not fit into `n` bits." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16018944, + "max": 16019200, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget_optref", + "kind": "simple", + "prefix": 62574, + "prefix_str": "F46E", + "tlb": "#f46e" + }, + "signature": { + "stack_string": "c:Cell|Null i:Int D:Cell|Null n:Int -> D':Cell|Null c':Cell|Null", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "c'", + "value_types": ["Cell", "Null"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 442, + "function_name": "exec_dict_setget_optref" + } + }, + { + "name": "DICTUSETGETOPTREF", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the value corresponding to key represented by an unsigned `n`-bit _Integer_ `i` in dictionary `D` to `c^?` (if `c^?` is _Null_, then the key is deleted instead), and returns the old value `~c^?` (if the key `i` was absent before, returns _Null_ instead).", + "tags": [], + "operands": [], + "exit_codes": [ + { + "errno": "5", + "condition": "Integer does not fit into `n` bits." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16019200, + "max": 16019456, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_setget_optref", + "kind": "simple", + "prefix": 62575, + "prefix_str": "F46F", + "tlb": "#f46f" + }, + "signature": { + "stack_string": "c:Cell|Null i:Int D:Cell|Null n:Int -> D':Cell|Null c':Cell|Null", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "c'", + "value_types": ["Cell", "Null"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 442, + "function_name": "exec_dict_setget_optref" + } + }, + { + "name": "SUBDICTGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Constructs a subdictionary consisting of all keys beginning with prefix `k` (represented by a _Slice_, the first data bits of which are used as a key) of length `l` in dictionary `D` of type `HashmapE(n,X)` with `n`-bit keys. On success, returns the new subdictionary of the same type `HashmapE(n,X)` as a _Slice_ `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16036096, + "max": 16036352, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_subdict_get", + "kind": "simple", + "prefix": 62641, + "prefix_str": "F4B1", + "tlb": "#f4b1" + }, + "signature": { + "stack_string": "k:Slice l:Int D:Cell|Null n:Int -> D':Cell|Null", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "l", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 722, + "function_name": "exec_subdict_get" + } + }, + { + "name": "SUBDICTIGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Constructs a subdictionary consisting of all keys beginning with prefix represented by a signed big-endian `l`-bit _Integer_ `x` in dictionary `D` of type `HashmapE(n,X)` with `n`-bit keys. On success, returns the new subdictionary of the same type `HashmapE(n,X)` as a _Slice_ `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16036352, + "max": 16036608, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_subdict_get", + "kind": "simple", + "prefix": 62642, + "prefix_str": "F4B2", + "tlb": "#f4b2" + }, + "signature": { + "stack_string": "x:Int l:Int D:Cell|Null n:Int -> D':Cell|Null", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "l", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 257 + } + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 722, + "function_name": "exec_subdict_get" + } + }, + { + "name": "SUBDICTUGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Constructs a subdictionary consisting of all keys beginning with prefix represented by an unsigned big-endian `l`-bit _Integer_ `x` in dictionary `D` of type `HashmapE(n,X)` with `n`-bit keys. On success, returns the new subdictionary of the same type `HashmapE(n,X)` as a _Slice_ `D'`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16036608, + "max": 16036864, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_subdict_get", + "kind": "simple", + "prefix": 62643, + "prefix_str": "F4B3", + "tlb": "#f4b3" + }, + "signature": { + "stack_string": "x:Int l:Int D:Cell|Null n:Int -> D':Cell|Null", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "l", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 256 + } + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 722, + "function_name": "exec_subdict_get" + } + }, + { + "name": "SUBDICTRPGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Constructs a subdictionary consisting of all keys beginning with prefix `k` (represented by a _Slice_, the first data bits of which are used as a key) in dictionary `D` of type `HashmapE(n,X)` with `n`-bit keys. Removes the common prefix from all keys of the new dictionary `D'`, which becomes of type `HashmapE(n-l,X)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16037120, + "max": 16037376, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_subdict_get", + "kind": "simple", + "prefix": 62645, + "prefix_str": "F4B5", + "tlb": "#f4b5" + }, + "signature": { + "stack_string": "k:Slice l:Int D:Cell|Null n:Int -> D':Cell|Null", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "l", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 722, + "function_name": "exec_subdict_get" + } + }, + { + "name": "SUBDICTIRPGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Constructs a subdictionary consisting of all keys beginning with prefix represented by a signed big-endian `l`-bit _Integer_ `x` in dictionary `D` of type `HashmapE(n,X)` with `n`-bit keys. Removes the common prefix from all keys of the new dictionary `D'`, which becomes of type `HashmapE(n-l,X)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16037376, + "max": 16037632, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_subdict_get", + "kind": "simple", + "prefix": 62646, + "prefix_str": "F4B6", + "tlb": "#f4b6" + }, + "signature": { + "stack_string": "x:Int l:Int D:Cell|Null n:Int -> D':Cell|Null", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "l", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 257 + } + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 722, + "function_name": "exec_subdict_get" + } + }, + { + "name": "SUBDICTURPGET", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Constructs a subdictionary consisting of all keys beginning with prefix represented by an unsigned big-endian `l`-bit _Integer_ `x` in dictionary `D` of type `HashmapE(n,X)` with `n`-bit keys. Removes the common prefix from all keys of the new dictionary `D'`, which becomes of type `HashmapE(n-l,X)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16037632, + "max": 16037888, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_subdict_get", + "kind": "simple", + "prefix": 62647, + "prefix_str": "F4B7", + "tlb": "#f4b7" + }, + "signature": { + "stack_string": "x:Int l:Int D:Cell|Null n:Int -> D':Cell|Null", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "l", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 256 + } + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "D'", + "value_types": ["Cell", "Null"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 722, + "function_name": "exec_subdict_get" + } + }, + { + "name": "THROWANY", + "category": "exception", + "sub_category": "", + "description": { + "short": "Throws an exception with error code `num` and parameter set to zero. Parameter represents the additional information passed to the exception handler.", + "long": "", + "tags": ["exception_handling", "throw", "control_flow"], + "operands": [], + "other_implementations": [ + { + "exact": false, + "instructions": ["PUSHINT_4 0", "SWAP", "THROWARGANY"] + } + ], + "gas": [ + { + "value": 76, + "description": "For exception throw" + } + ] + }, + "layout": { + "min": 15921152, + "max": 15921408, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_throw_any", + "kind": "simple", + "prefix": 62192, + "prefix_str": "F2F0", + "tlb": "#f2f0" + }, + "effects": ["AlwaysThrow"], + "signature": { + "stack_string": "num:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "num", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1153, + "function_name": "exec_throw_any" + } + }, + { + "name": "THROWARGANY", + "category": "exception", + "sub_category": "", + "description": { + "short": "Throws an exception with error code `num` and parameter set to `x`. Parameter represents the additional information passed to the exception handler.", + "long": "", + "tags": ["exception_handling", "throw", "control_flow"], + "operands": [], + "other_implementations": [ + { + "exact": false, + "instructions": ["PUSHCTR c2", "JMPXARGS 2"] + } + ], + "gas": [ + { + "value": 76, + "description": "For exception throw" + } + ] + }, + "layout": { + "min": 15921408, + "max": 15921664, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_throw_any", + "kind": "simple", + "prefix": 62193, + "prefix_str": "F2F1", + "tlb": "#f2f1" + }, + "effects": ["AlwaysThrow"], + "signature": { + "stack_string": "x:Int num:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "num", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1153, + "function_name": "exec_throw_any" + } + }, + { + "name": "THROWANYIFNOT", + "category": "exception", + "sub_category": "", + "description": { + "short": "Throws an exception with error code `num` and parameter set to zero only if `cond` is EQUAL to 0. Parameter represents the additional information passed to the exception handler.", + "long": "", + "tags": ["exception_handling", "throw", "control_flow"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "If no exception was thrown" + }, + { + "value": 76, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 15922176, + "max": 15922432, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_throw_any", + "kind": "simple", + "prefix": 62196, + "prefix_str": "F2F4", + "tlb": "#f2f4" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "num:Int cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "num", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1153, + "function_name": "exec_throw_any" + } + }, + { + "name": "THROWARGANYIFNOT", + "category": "exception", + "sub_category": "", + "description": { + "short": "Throws an exception with error code `num` and parameter set to `x` taken from the stack only if `cond` is EQUAL to 0. Parameter represents the additional information passed to the exception handler.", + "long": "", + "tags": ["exception_handling", "throw", "control_flow"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "If no exception was thrown" + }, + { + "value": 76, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 15922432, + "max": 15922688, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_throw_any", + "kind": "simple", + "prefix": 62197, + "prefix_str": "F2F5", + "tlb": "#f2f5" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "x:Int num:Int cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "num", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1153, + "function_name": "exec_throw_any" + } + }, + { + "name": "DICTGETNEXT", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the minimal key `k'` in dictionary `D` that is lexicographically greater than `k`, and returns `k'` (represented by a _Slice_) along with associated value `x'` (also represented by a _Slice_).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16020480, + "max": 16020736, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getnear", + "kind": "simple", + "prefix": 62580, + "prefix_str": "F474", + "tlb": "#f474" + }, + "signature": { + "stack_string": "k:Slice D:Cell|Null n:Int -> (∅ 0)|(x2:Slice k2:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x2", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k2", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 523, + "function_name": "exec_dict_getnear" + } + }, + { + "name": "DICTGETNEXTEQ", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the minimal key `k'` in dictionary `D` that is lexicographically greater than or equal to `k`, and returns `k'` (represented by a _Slice_) along with associated value `x'` (also represented by a _Slice_).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16020736, + "max": 16020992, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getnear", + "kind": "simple", + "prefix": 62581, + "prefix_str": "F475", + "tlb": "#f475" + }, + "signature": { + "stack_string": "k:Slice D:Cell|Null n:Int -> (∅ 0)|(x2:Slice k2:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x2", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k2", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 523, + "function_name": "exec_dict_getnear" + } + }, + { + "name": "DICTGETPREV", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the maximal key `k'` in dictionary `D` that is lexicographically smaller than `k`, and returns `k'` (represented by a _Slice_) along with associated value `x'` (also represented by a _Slice_).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16020992, + "max": 16021248, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getnear", + "kind": "simple", + "prefix": 62582, + "prefix_str": "F476", + "tlb": "#f476" + }, + "signature": { + "stack_string": "k:Slice D:Cell|Null n:Int -> (∅ 0)|(x2:Slice k2:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x2", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k2", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 523, + "function_name": "exec_dict_getnear" + } + }, + { + "name": "DICTGETPREVEQ", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Computes the maximal key `k'` in dictionary `D` that is lexicographically smaller than or equal to `k`, and returns `k'` (represented by a _Slice_) along with associated value `x'` (also represented by a _Slice_).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16021248, + "max": 16021504, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getnear", + "kind": "simple", + "prefix": 62583, + "prefix_str": "F477", + "tlb": "#f477" + }, + "signature": { + "stack_string": "k:Slice D:Cell|Null n:Int -> (∅ 0)|(x2:Slice k2:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "k", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x2", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "k2", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 523, + "function_name": "exec_dict_getnear" + } + }, + { + "name": "DICTIGETNEXT", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Interprets all keys in dictionary `D` as big-endian signed `n`-bit integers, computes the minimal key `i'` that is larger than _Integer_ `i` (which does not necessarily fit into `n` bits), and returns `i'` along with associated value `x'` (represented by a _Slice_).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16021504, + "max": 16021760, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getnear", + "kind": "simple", + "prefix": 62584, + "prefix_str": "F478", + "tlb": "#f478" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (∅ 0)|(x2:Slice i2:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x2", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i2", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 523, + "function_name": "exec_dict_getnear" + } + }, + { + "name": "DICTIGETNEXTEQ", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Interprets all keys in dictionary `D` as big-endian signed `n`-bit integers, computes the minimal key `i'` that is larger than or equal to _Integer_ `i` (which does not necessarily fit into `n` bits), and returns `i'` along with associated value `x'` (represented by a _Slice_).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16021760, + "max": 16022016, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getnear", + "kind": "simple", + "prefix": 62585, + "prefix_str": "F479", + "tlb": "#f479" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (∅ 0)|(x2:Slice i2:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x2", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i2", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 523, + "function_name": "exec_dict_getnear" + } + }, + { + "name": "DICTIGETPREV", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Interprets all keys in dictionary `D` as big-endian signed `n`-bit integers, computes the maximal key `i'` that is smaller than _Integer_ `i` (which does not necessarily fit into `n` bits), and returns `i'` along with associated value `x'` (represented by a _Slice_).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16022016, + "max": 16022272, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getnear", + "kind": "simple", + "prefix": 62586, + "prefix_str": "F47A", + "tlb": "#f47a" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (∅ 0)|(x2:Slice i2:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x2", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i2", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 523, + "function_name": "exec_dict_getnear" + } + }, + { + "name": "DICTIGETPREVEQ", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Interprets all keys in dictionary `D` as big-endian signed `n`-bit integers, computes the maximal key `i'` that is smaller than or equal to _Integer_ `i` (which does not necessarily fit into `n` bits), and returns `i'` along with associated value `x'` (represented by a _Slice_).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16022272, + "max": 16022528, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getnear", + "kind": "simple", + "prefix": 62587, + "prefix_str": "F47B", + "tlb": "#f47b" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (∅ 0)|(x2:Slice i2:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x2", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i2", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 523, + "function_name": "exec_dict_getnear" + } + }, + { + "name": "DICTUGETNEXT", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Interprets all keys in dictionary `D` as big-endian unsigned `n`-bit integers, computes the minimal key `i'` that is larger than _Integer_ `i` (which does not necessarily fit into `n` bits, and is not necessarily non-negative), and returns `i'` along with associated value `x'` (represented by a _Slice_).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16022528, + "max": 16022784, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getnear", + "kind": "simple", + "prefix": 62588, + "prefix_str": "F47C", + "tlb": "#f47c" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (∅ 0)|(x2:Slice i2:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x2", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i2", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 523, + "function_name": "exec_dict_getnear" + } + }, + { + "name": "DICTUGETNEXTEQ", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Interprets all keys in dictionary `D` as big-endian unsigned `n`-bit integers, computes the minimal key `i'` that is larger than or equal to _Integer_ `i` (which does not necessarily fit into `n` bits, and is not necessarily non-negative), and returns `i'` along with associated value `x'` (represented by a _Slice_).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16022784, + "max": 16023040, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getnear", + "kind": "simple", + "prefix": 62589, + "prefix_str": "F47D", + "tlb": "#f47d" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (∅ 0)|(x2:Slice i2:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x2", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i2", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 523, + "function_name": "exec_dict_getnear" + } + }, + { + "name": "DICTUGETPREV", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Interprets all keys in dictionary `D` as big-endian unsigned `n`-bit integers, computes the maximal key `i'` that is smaller than _Integer_ `i` (which does not necessarily fit into `n` bits, and is not necessarily non-negative), and returns `i'` along with associated value `x'` (represented by a _Slice_).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16023040, + "max": 16023296, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getnear", + "kind": "simple", + "prefix": 62590, + "prefix_str": "F47E", + "tlb": "#f47e" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (∅ 0)|(x2:Slice i2:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x2", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i2", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 523, + "function_name": "exec_dict_getnear" + } + }, + { + "name": "DICTUGETPREVEQ", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "", + "long": "Interprets all keys in dictionary `D` as big-endian unsigned `n`-bit integers, computes the maximal key `i'` that is smaller than or equal to _Integer_ `i` (which does not necessarily fit into `n` bits, and is not necessarily non-negative), and returns `i'` along with associated value `x'` (represented by a _Slice_).", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16023296, + "max": 16023552, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dict_getnear", + "kind": "simple", + "prefix": 62591, + "prefix_str": "F47F", + "tlb": "#f47f" + }, + "signature": { + "stack_string": "i:Int D:Cell|Null n:Int -> (∅ 0)|(x2:Slice i2:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "i", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "D", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "n", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x2", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "i2", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 523, + "function_name": "exec_dict_getnear" + } + }, + { + "name": "ADDINT", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "", + "long": "Adds `x` from stack and `y` from arguments and pushes the result back onto the stack.", + "tags": [], + "operands": ["y"], + "exit_codes": [ + { + "errno": "4", + "condition": "Top element is a `NaN`." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 10878976, + "max": 10944512, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "int", + "len": 8, + "range": { + "min": "-128", + "max": "127" + } + } + ] + }, + "exec": "exec_add_tinyint8(_1, _2, false)", + "kind": "fixed", + "prefix": 166, + "prefix_str": "A6", + "tlb": "#a6 y: int8" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x + y", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 213, + "function_name": "exec_add_tinyint8" + } + }, + { + "name": "MULINT", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "", + "long": "Multiplies `x` from stack and `y` from arguments and pushes the result back onto the stack.", + "tags": [], + "operands": ["y"], + "exit_codes": [ + { + "errno": "4", + "condition": "Top element is a `NaN`." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 10944512, + "max": 11010048, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "int", + "len": 8, + "range": { + "min": "-128", + "max": "127" + } + } + ] + }, + "exec": "exec_mul_tinyint8(_1, _2, false)", + "kind": "fixed", + "prefix": 167, + "prefix_str": "A7", + "tlb": "#a7 y: int8" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x * y", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 222, + "function_name": "exec_mul_tinyint8" + } + }, + { + "name": "QADDINT", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "", + "long": "Adds `x` from stack and `y` from arguments and pushes the result back onto the stack. If stack element is a `NaN`, returns `NaN`.", + "tags": [], + "operands": ["y"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12035584, + "max": 12035840, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "int", + "len": 8, + "range": { + "min": "-128", + "max": "127" + } + } + ] + }, + "exec": "exec_add_tinyint8(_1, _2, true)", + "kind": "fixed", + "prefix": 47014, + "prefix_str": "B7A6", + "tlb": "#b7a6 y: int8" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x + y", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 213, + "function_name": "exec_add_tinyint8" + } + }, + { + "name": "QMULINT", + "category": "arithmetic", + "sub_category": "add_mul", + "description": { + "short": "", + "long": "Multiplies `x` from stack and `y` from arguments and pushes the result back onto the stack. If stack element is a `NaN`, returns `NaN`.", + "tags": [], + "operands": ["y"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12035840, + "max": 12036096, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "int", + "len": 8, + "range": { + "min": "-128", + "max": "127" + } + } + ] + }, + "exec": "exec_mul_tinyint8(_1, _2, true)", + "kind": "fixed", + "prefix": 47015, + "prefix_str": "B7A7", + "tlb": "#b7a7 y: int8" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "presentation": "x * y", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 222, + "function_name": "exec_mul_tinyint8" + } + }, + { + "name": "EQINT", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` from stack and `y` from arguments for equality and returns `-1` if equal and `0` otherwise.", + "long": "", + "tags": [], + "operands": ["y"], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12582912, + "max": 12648448, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "int", + "len": 8, + "range": { + "min": "-128", + "max": "127" + } + } + ] + }, + "exec": "exec_cmp_int(_1, _2, 0x878, false, 'EQ')", + "kind": "fixed", + "prefix": 192, + "prefix_str": "C0", + "tlb": "#c0 y: int8" + }, + "signature": { + "stack_string": "x:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 992, + "function_name": "exec_cmp_int" + } + }, + { + "name": "LESSINT", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` from stack and `y` from arguments for less than and returns `-1` if true and `0` otherwise.", + "long": "", + "tags": [], + "operands": ["y"], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12648448, + "max": 12713984, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "int", + "len": 8, + "range": { + "min": "-128", + "max": "127" + } + } + ] + }, + "exec": "exec_cmp_int(_1, _2, 0x887, false, 'LESS')", + "kind": "fixed", + "prefix": 193, + "prefix_str": "C1", + "tlb": "#c1 y: int8" + }, + "signature": { + "stack_string": "x:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 992, + "function_name": "exec_cmp_int" + } + }, + { + "name": "GTINT", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` from stack and `y` from arguments for greater than and returns `-1` if true and `0` otherwise.", + "long": "", + "tags": [], + "operands": ["y"], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12713984, + "max": 12779520, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "int", + "len": 8, + "range": { + "min": "-128", + "max": "127" + } + } + ] + }, + "exec": "exec_cmp_int(_1, _2, 0x788, false, 'GT')", + "kind": "fixed", + "prefix": 194, + "prefix_str": "C2", + "tlb": "#c2 y: int8" + }, + "signature": { + "stack_string": "x:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 992, + "function_name": "exec_cmp_int" + } + }, + { + "name": "NEQINT", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` from stack and `y` from arguments for inequality and returns `-1` if true and `0` otherwise.", + "long": "", + "tags": [], + "operands": ["y"], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 1 element." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12779520, + "max": 12845056, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "int", + "len": 8, + "range": { + "min": "-128", + "max": "127" + } + } + ] + }, + "exec": "exec_cmp_int(_1, _2, 0x787, false, 'NEQ')", + "kind": "fixed", + "prefix": 195, + "prefix_str": "C3", + "tlb": "#c3 y: int8" + }, + "signature": { + "stack_string": "x:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 992, + "function_name": "exec_cmp_int" + } + }, + { + "name": "QEQINT", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` from stack and `y` from arguments for equality and returns `-1` if equal and `0` otherwise. Returns `NaN` if operand is `NaN`.", + "long": "Compares integer from stack with argument for equality and returns `-1` if equal and `0` otherwise. If the operand is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": ["y"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12042240, + "max": 12042496, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "int", + "len": 8, + "range": { + "min": "-128", + "max": "127" + } + } + ] + }, + "exec": "exec_cmp_int(_1, _2, 0x878, true, 'QEQ')", + "kind": "fixed", + "prefix": 47040, + "prefix_str": "B7C0", + "tlb": "#b7c0 y: int8" + }, + "signature": { + "stack_string": "x:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 992, + "function_name": "exec_cmp_int" + } + }, + { + "name": "QLESSINT", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` from stack and `y` from arguments for less than and returns `-1` if true and `0` otherwise. Returns `NaN` if operand is `NaN`.", + "long": "Compares integer from stack with argument for less than and returns `-1` if true and `0` otherwise. If the operand is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": ["y"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12042496, + "max": 12042752, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "int", + "len": 8, + "range": { + "min": "-128", + "max": "127" + } + } + ] + }, + "exec": "exec_cmp_int(_1, _2, 0x887, true, 'QLESS')", + "kind": "fixed", + "prefix": 47041, + "prefix_str": "B7C1", + "tlb": "#b7c1 y: int8" + }, + "signature": { + "stack_string": "x:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 992, + "function_name": "exec_cmp_int" + } + }, + { + "name": "QGTINT", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` from stack and `y` from arguments for greater than and returns `-1` if true and `0` otherwise. Returns `NaN` if operand is `NaN`.", + "long": "Compares integer from stack with argument for greater than and returns `-1` if true and `0` otherwise. If the operand is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": ["y"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12042752, + "max": 12043008, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "int", + "len": 8, + "range": { + "min": "-128", + "max": "127" + } + } + ] + }, + "exec": "exec_cmp_int(_1, _2, 0x788, true, 'QGT')", + "kind": "fixed", + "prefix": 47042, + "prefix_str": "B7C2", + "tlb": "#b7c2 y: int8" + }, + "signature": { + "stack_string": "x:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 992, + "function_name": "exec_cmp_int" + } + }, + { + "name": "QNEQINT", + "category": "arithmetic", + "sub_category": "int_cmp", + "description": { + "short": "Compares `x` from stack and `y` from arguments for inequality and returns `-1` if true and `0` otherwise. Returns `NaN` if operand is `NaN`.", + "long": "Compares integer from stack with argument for inequality and returns `-1` if true and `0` otherwise. If the operand is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": ["y"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12043008, + "max": 12043264, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "int", + "len": 8, + "range": { + "min": "-128", + "max": "127" + } + } + ] + }, + "exec": "exec_cmp_int(_1, _2, 0x787, true, 'QNEQ')", + "kind": "fixed", + "prefix": 47043, + "prefix_str": "B7C3", + "tlb": "#b7c3 y: int8" + }, + "signature": { + "stack_string": "x:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 992, + "function_name": "exec_cmp_int" + } + }, + { + "name": "PUSHPOW2DEC", + "category": "arithmetic", + "sub_category": "int_const", + "description": { + "short": "", + "long": "Pushes `(2 ^ x) - 1`.", + "tags": [], + "operands": ["x"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 8650752, + "max": 8716288, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_push_pow2dec", + "kind": "fixed", + "prefix": 132, + "prefix_str": "84", + "tlb": "#84 x: (## 8)" + }, + "signature": { + "stack_string": "∅ -> result:Int", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 129, + "function_name": "exec_push_pow2dec" + } + }, + { + "name": "PUSHNEGPOW2", + "category": "arithmetic", + "sub_category": "int_const", + "description": { + "short": "", + "long": "Pushes `-2 ^ x`.", + "tags": [], + "operands": ["x"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 8716288, + "max": 8781824, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_push_negpow2", + "kind": "fixed", + "prefix": 133, + "prefix_str": "85", + "tlb": "#85 x: (## 8)" + }, + "signature": { + "stack_string": "∅ -> result:Int", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 139, + "function_name": "exec_push_negpow2" + } + }, + { + "name": "FITS", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "", + "long": "Checks whether `x` is a `width`-bit signed integer (i.e., whether `-2 ^ width <= x < 2 ^ width`).", + "tags": [], + "operands": ["width"], + "exit_codes": [ + { + "errno": "4", + "condition": "Integer does not fit into `width` bits." + } + ], + "gas": [ + { + "value": 26, + "description": "If no exception was thrown" + }, + { + "value": 76, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 11796480, + "max": 11862016, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_fits_tinyint8(_1, _2, false)", + "kind": "fixed", + "prefix": 180, + "prefix_str": "B4", + "tlb": "#b4 width: (## 8)" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "x:Int -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 804, + "function_name": "exec_fits_tinyint8" + } + }, + { + "name": "UFITS", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "", + "long": "Checks whether `x` is a `width`-bit unsigned integer (i.e., whether `0 <= x < 2 ^ width`).", + "tags": [], + "operands": ["width"], + "exit_codes": [ + { + "errno": "4", + "condition": "Integer does not fit into `width` bits." + } + ], + "gas": [ + { + "value": 26, + "description": "If no exception was thrown" + }, + { + "value": 76, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 11862016, + "max": 11927552, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_ufits_tinyint8(_1, _2, false)", + "kind": "fixed", + "prefix": 181, + "prefix_str": "B5", + "tlb": "#b5 width: (## 8)" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "x:Int -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 817, + "function_name": "exec_ufits_tinyint8" + } + }, + { + "name": "QFITS", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "", + "long": "Replaces `x` with a `NaN` if x does not fit into a `width`-bit signed integer, leaves it intact otherwise.", + "tags": [], + "operands": ["width"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12039168, + "max": 12039424, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_fits_tinyint8(_1, _2, true)", + "kind": "fixed", + "prefix": 47028, + "prefix_str": "B7B4", + "tlb": "#b7b4 width: (## 8)" + }, + "signature": { + "stack_string": "x:Int -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 804, + "function_name": "exec_fits_tinyint8" + } + }, + { + "name": "QUFITS", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "", + "long": "Replaces `x` with a `NaN` if x does not fit into a `width`-bit unsigned integer, leaves it intact otherwise.", + "tags": [], + "operands": ["width"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12039424, + "max": 12039680, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_ufits_tinyint8(_1, _2, true)", + "kind": "fixed", + "prefix": 47029, + "prefix_str": "B7B5", + "tlb": "#b7b5 width: (## 8)" + }, + "signature": { + "stack_string": "x:Int -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 817, + "function_name": "exec_ufits_tinyint8" + } + }, + { + "name": "SETCONTCTRMANY", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "Sets multiple control registers in a continuation by a `mask`.", + "long": "Takes a `mask` that describes which control registers of the current continuation should be copied and set in continuation `c`. Returns the modified continuation. This is similar to `SETCONTCTRMANYX` but uses fixed `mask` specified in the instruction.", + "tags": ["continuation", "control"], + "operands": ["mask"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15590144, + "max": 15590400, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_setcont_ctr_many", + "version": 9, + "kind": "fixed", + "prefix": 60899, + "prefix_str": "EDE3", + "tlb": "#ede3 mask: (## 8)" + }, + "signature": { + "stack_string": "c:Continuation -> c':Continuation", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c'", + "value_types": ["Continuation"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 926, + "function_name": "exec_setcont_ctr_many" + } + }, + { + "name": "CALLCCARGS", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "_Calls_ continuation `c` with `p` parameters, but unlike `CALLXARGS` which only passes parameters, this instruction also pushes the old value of the current continuation `cc` (along with the top `p` values from the original stack) onto the stack of newly-invoked continuation `c`, setting `cc.nargs` to `r`. This allows the called continuation to later return to the caller with the specified number of return values.", + "tags": [], + "operands": ["p", "r"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14366208, + "max": 14366464, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_callcc_args", + "kind": "fixed", + "prefix": 56118, + "prefix_str": "DB36", + "tlb": "#db36 p: (## 4) r: (## 4)" + }, + "signature": { + "stack_string": "x_1...x_p c:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "array", + "name": "args", + "length_var": "p", + "array_entry": [ + { + "type": "simple", + "name": "arg" + } + ] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 103, + "function_name": "exec_callcc_args" + } + }, + { + "name": "TRYARGS", + "category": "exception", + "sub_category": "", + "description": { + "short": "Executes `body` with `p` top elements from the stack and if it throws an exception, transfers control to `handler`, otherwise copies the top `r` stack elements of the resulting stack of `body` as return values.", + "long": "This instruction is similar to `TRY`, but with `[p] [r] CALLXARGS` internally used instead of `EXECUTE`.\nIn this way, all but the top `p` stack elements will be saved into current continuation's stack, and then restored upon return from either `body` or `handler`, with the top `0 <= r <= 15` values of the resulting stack of `body` or `handler` copied as return values.", + "tags": ["exception_handling", "control_flow"], + "operands": ["p", "r"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15925248, + "max": 15990784, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_try", + "kind": "fixed", + "prefix": 243, + "prefix_str": "F3", + "tlb": "#f3 p: (## 4) r: (## 4)" + }, + "signature": { + "stack_string": "x_1...x_p body:Continuation handler:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "array", + "name": "args", + "length_var": "p", + "array_entry": [ + { + "type": "simple", + "name": "arg" + } + ] + }, + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + }, + { + "type": "simple", + "name": "handler", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + }, + "c1": { + "type": "register", + "index": 1 + }, + "c2": { + "type": "register", + "index": 2 + } + } + }, + "c2": { + "type": "variable", + "var_name": "c'", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + }, + "c1": { + "type": "register", + "index": 1 + }, + "c2": { + "type": "register", + "index": 2 + } + } + }, + "c2": { + "type": "register", + "index": 2 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1186, + "function_name": "exec_try" + } + }, + { + "name": "PLDREFIDX", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads the `n`-th cell reference of _Slice_ `s`.", + "tags": ["slice parsing"], + "operands": ["n"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14109696, + "max": 14110720, + "checkLen": 14, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 2, + "range": { + "min": "0", + "max": "3" + } + } + ] + }, + "exec": "exec_preload_ref_fixed", + "kind": "fixed", + "prefix": 13779, + "prefix_str": "35D3", + "tlb": "#35d3 n: (## 2)" + }, + "signature": { + "stack_string": "s:Slice -> c:Cell", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 988, + "function_name": "exec_preload_ref_fixed" + } + }, + { + "name": "CHASHI", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns `i`-th hash of the cell.", + "tags": [], + "operands": ["n"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14116864, + "max": 14117888, + "checkLen": 14, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 2, + "range": { + "min": "0", + "max": "3" + } + } + ] + }, + "exec": "exec_cell_hash_i(_1, _2, false)", + "version": 6, + "kind": "fixed", + "prefix": 13786, + "prefix_str": "35DA", + "tlb": "#35da n: (## 2)" + }, + "signature": { + "stack_string": "cell:Cell -> hash:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cell", + "value_types": ["Cell"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "hash", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1420, + "function_name": "exec_cell_hash_i" + } + }, + { + "name": "CDEPTHI", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Returns `i`-th depth of the cell.", + "tags": [], + "operands": ["n"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14117888, + "max": 14118912, + "checkLen": 14, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 2, + "range": { + "min": "0", + "max": "3" + } + } + ] + }, + "exec": "exec_cell_depth_i(_1, _2, false)", + "version": 6, + "kind": "fixed", + "prefix": 13787, + "prefix_str": "35DB", + "tlb": "#35db n: (## 2)" + }, + "signature": { + "stack_string": "cell:Cell -> depth:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cell", + "value_types": ["Cell"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "depth", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1438, + "function_name": "exec_cell_depth_i" + } + }, + { + "name": "JMPDICT", + "category": "continuation", + "sub_category": "continuation_dict_jump", + "description": { + "short": "", + "long": "Jumps to the continuation in `c3`, pushing integer `num` as its argument. Essentially it's a jump to method with `num` ID in the dictionary.", + "tags": [], + "related_instructions": ["CALLDICT"], + "operands": ["num"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHINT_16 [num]", "PUSHCTR c3", "JMPX"] + } + ], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15810560, + "max": 15826944, + "checkLen": 10, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 14, + "range": { + "min": "0", + "max": "16383" + } + } + ] + }, + "exec": "exec_jmpdict", + "kind": "fixed", + "prefix": 965, + "prefix_str": "3C5", + "tlb": "#3c5 num: (## 14)" + }, + "signature": { + "stack_string": "∅ -> num:Int", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 3 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "num", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "register", + "index": 3 + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1106, + "function_name": "exec_jmpdict" + } + }, + { + "name": "PREPAREDICT", + "category": "continuation", + "sub_category": "continuation_dict_jump", + "description": { + "short": "Prepares the continuation in `c3` for execution along with the integer `num` as an argument. Essentially it's a preparation for method call with `num` ID in the dictionary.", + "long": "This instruction is useful if you want to call continuation with `CALLXARGS` or `CALLCC` instead of `EXECUTE` as `CALLDICT` does.", + "tags": [], + "related_instructions": ["CALLDICT"], + "operands": ["num"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHINT_16 [num]", "PUSHCTR c3"] + } + ], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15826944, + "max": 15843328, + "checkLen": 10, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 14, + "range": { + "min": "0", + "max": "16383" + } + } + ] + }, + "exec": "exec_preparedict", + "kind": "fixed", + "prefix": 966, + "prefix_str": "3C6", + "tlb": "#3c6 num: (## 14)" + }, + "signature": { + "stack_string": "∅ -> num:Int c:Continuation", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 3 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "num", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1113, + "function_name": "exec_preparedict" + } + }, + { + "name": "THROWARG", + "category": "exception", + "sub_category": "", + "description": { + "short": "Throws an exception with exit code `x` taken from the stack.", + "long": "", + "tags": ["exception_handling", "throw", "control_flow"], + "operands": ["num"], + "gas": [ + { + "value": 34, + "description": "If no exception was thrown" + }, + { + "value": 84, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 15910912, + "max": 15912960, + "checkLen": 13, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 11, + "range": { + "min": "0", + "max": "2047" + } + } + ] + }, + "exec": "exec_throw_arg_fixed(_1, _2, 0x7ff, 0)", + "kind": "fixed", + "prefix": 7769, + "prefix_str": "1E59", + "tlb": "#1e59 num: (## 11)" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "x:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1140, + "function_name": "exec_throw_arg_fixed" + } + }, + { + "name": "THROWARGIF", + "category": "exception", + "sub_category": "", + "description": { + "short": "Conditionally throws an exception with error code `x` taken from stack if `cond` is NOT EQUAL to 0.", + "long": "", + "tags": ["exception_handling", "throw", "control_flow"], + "operands": ["num"], + "gas": [ + { + "value": 34, + "description": "If no exception was thrown" + }, + { + "value": 84, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 15915008, + "max": 15917056, + "checkLen": 13, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 11, + "range": { + "min": "0", + "max": "2047" + } + } + ] + }, + "exec": "exec_throw_arg_fixed(_1, _2, 0x7ff, 3)", + "kind": "fixed", + "prefix": 7771, + "prefix_str": "1E5B", + "tlb": "#1e5b num: (## 11)" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "x:Int cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1140, + "function_name": "exec_throw_arg_fixed" + } + }, + { + "name": "THROWARGIFNOT", + "category": "exception", + "sub_category": "", + "description": { + "short": "Conditionally throws an exception with error code `x` taken from stack if `cond` is EQUAL to 0.", + "long": "", + "tags": ["exception_handling", "throw", "control_flow"], + "operands": ["num"], + "gas": [ + { + "value": 34, + "description": "If no exception was thrown" + }, + { + "value": 84, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 15919104, + "max": 15921152, + "checkLen": 13, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 11, + "range": { + "min": "0", + "max": "2047" + } + } + ] + }, + "exec": "exec_throw_arg_fixed(_1, _2, 0x7ff, 2)", + "kind": "fixed", + "prefix": 7773, + "prefix_str": "1E5D", + "tlb": "#1e5d num: (## 11)" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "x:Int cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1140, + "function_name": "exec_throw_arg_fixed" + } + }, + { + "name": "JMPXARGS", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "_Jumps_ to continuation `c`, passing only the top `p` values from the current stack to it, the remainder of the current stack is discarded.", + "tags": [], + "operands": ["p"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14356480, + "max": 14360576, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_jmpx_args", + "kind": "fixed", + "prefix": 3505, + "prefix_str": "DB1", + "tlb": "#db1 p: (## 4)" + }, + "signature": { + "stack_string": "x_1...x_p c:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "array", + "name": "args", + "length_var": "p", + "array_entry": [ + { + "type": "simple", + "name": "arg" + } + ] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 59, + "function_name": "exec_jmpx_args" + } + }, + { + "name": "RETARGS", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "_Returns_ to `c0`, with `r` return values taken from the current stack.", + "tags": [], + "operands": ["r"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14360576, + "max": 14364672, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_ret_args", + "kind": "fixed", + "prefix": 3506, + "prefix_str": "DB2", + "tlb": "#db2 r: (## 4)" + }, + "signature": { + "stack_string": "x_1...x_r -> ∅", + "inputs": { + "stack": [ + { + "type": "array", + "name": "args", + "length_var": "r", + "array_entry": [ + { + "type": "simple", + "name": "arg" + } + ] + } + ], + "registers": [ + { + "type": "constant", + "index": 0 + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "register", + "index": 0 + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 71, + "function_name": "exec_ret_args" + } + }, + { + "name": "RETURNARGS", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Leaves only the top `p` values in the current stack (somewhat similarly to `ONLYTOPX`), with all the unused bottom values not discarded, but saved into continuation `c0` in the same way as `SETCONTARGS` does.", + "tags": [], + "operands": ["p"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15532032, + "max": 15536128, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_return_args", + "kind": "fixed", + "prefix": 3792, + "prefix_str": "ED0", + "tlb": "#ed0 p: (## 4)" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 722, + "function_name": "exec_return_args" + } + }, + { + "name": "BLKDROP", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Removes the top `i` elements from the stack. Equivalent to `DROP` performed `i` times.", + "tags": ["stack"], + "operands": ["i"], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `i` elements." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 6225920, + "max": 6230016, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_blkdrop", + "kind": "fixed", + "prefix": 1520, + "prefix_str": "5F0", + "tlb": "#5f0 i: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 371, + "function_name": "exec_blkdrop" + } + }, + { + "name": "TUPLE", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Creates a new _Tuple_ from the first `n` values from the stack.", + "tags": [], + "operands": ["n"], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "PUSHINT_4 3" + }, + { + "instruction": "TUPLE 3", + "comment": "Creates a tuple (1,2,3) from the top 3 elements" + } + ], + "stack": { + "input": ["1", "2", "3"], + "output": ["(1, 2, 3)"] + } + } + ], + "gas": [ + { + "value": 26, + "description": "For 0 elements tuple" + }, + { + "value": 27, + "description": "For 1 element tuple" + }, + { + "value": 28, + "description": "For 2 elements tuple" + }, + { + "value": 29, + "description": "For 3 elements tuple" + }, + { + "value": 30, + "description": "For 4 elements tuple" + }, + { + "value": 31, + "description": "For 5 elements tuple" + }, + { + "value": 32, + "description": "For 6 elements tuple" + }, + { + "value": 33, + "description": "For 7 elements tuple" + }, + { + "value": 34, + "description": "For 8 elements tuple" + }, + { + "value": 35, + "description": "For 9 elements tuple" + }, + { + "value": 37, + "description": "For 11 elements tuple" + }, + { + "value": 38, + "description": "For 12 elements tuple" + }, + { + "value": 39, + "description": "For 13 elements tuple" + }, + { + "value": 40, + "description": "For 14 elements tuple" + }, + { + "value": 41, + "description": "For 15 elements tuple" + } + ] + }, + "layout": { + "min": 7274496, + "max": 7278592, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_mktuple", + "kind": "fixed", + "prefix": 1776, + "prefix_str": "6F0", + "tlb": "#6f0 n: (## 4)" + }, + "effects": ["Tuple"], + "signature": { + "stack_string": "x_1...x_n -> t:Tuple", + "inputs": { + "stack": [ + { + "type": "array", + "name": "tuple_elements", + "length_var": "n", + "array_entry": [ + { + "type": "simple", + "name": "x" + } + ] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 88, + "function_name": "exec_mktuple" + } + }, + { + "name": "INDEX", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Returns the `k`-th element of a _Tuple_ `t`.", + "tags": [], + "operands": ["k"], + "exit_codes": [ + { + "errno": "7", + "condition": "Top element is not a Tuple." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "PUSHINT_4 3" + }, + { + "instruction": "TUPLE 3", + "comment": "Creates a tuple (1,2,3)" + }, + { + "instruction": "INDEX 1", + "comment": "Returns the element at index 1 (which is 2)" + } + ], + "stack": { + "input": ["(1,2,3)"], + "output": ["2"] + } + }, + { + "instructions": [ + { + "instruction": "PUSHINT_16 123", + "comment": "Push an integer (not a tuple)" + }, + { + "instruction": "INDEX 0", + "comment": "Try to get element at index 0, but the value is not a tuple" + } + ], + "exit_code": 7, + "stack": { + "input": ["123"], + "output": ["123"] + } + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7278592, + "max": 7282688, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_tuple_index", + "kind": "fixed", + "prefix": 1777, + "prefix_str": "6F1", + "tlb": "#6f1 k: (## 4)" + }, + "signature": { + "stack_string": "t:Tuple -> x:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 106, + "function_name": "exec_tuple_index" + } + }, + { + "name": "UNTUPLE", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Unpacks a _Tuple_ `t=(x_1,...,x_n)` of length equal to `n`.", + "tags": [], + "operands": ["n"], + "exit_codes": [ + { + "errno": "7", + "condition": "Top element is not a Tuple." + }, + { + "errno": "7", + "condition": "Tuple length is not equal to `n`." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "PUSHINT_4 3" + }, + { + "instruction": "TUPLE 3", + "comment": "Creates a tuple (1,2,3)" + }, + { + "instruction": "UNTUPLE 3", + "comment": "Unpacks the tuple into its 3 elements" + } + ], + "stack": { + "input": ["(1,2,3)"], + "output": ["1", "2", "3"] + } + }, + { + "instructions": [ + { + "instruction": "PUSHINT_16 123", + "comment": "Push an integer (not a tuple)" + }, + { + "instruction": "UNTUPLE 3", + "comment": "Try to unpack a non-tuple value" + } + ], + "exit_code": 7, + "stack": { + "input": ["123"], + "output": ["123"] + } + }, + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "TUPLE 2", + "comment": "Creates a tuple (1,2) with 2 elements" + }, + { + "instruction": "UNTUPLE 3", + "comment": "Try to unpack a tuple with 2 elements as if it had 3 elements" + } + ], + "exit_code": 7, + "stack": { + "input": ["(1,2)"], + "output": ["(1,2)"] + } + } + ], + "gas": [ + { + "value": 26, + "description": "For 0 elements tuple" + }, + { + "value": 27, + "description": "For 1 element tuple" + }, + { + "value": 28, + "description": "For 2 elements tuple" + }, + { + "value": 29, + "description": "For 3 elements tuple" + }, + { + "value": 30, + "description": "For 4 elements tuple" + }, + { + "value": 31, + "description": "For 5 elements tuple" + }, + { + "value": 32, + "description": "For 6 elements tuple" + }, + { + "value": 33, + "description": "For 7 elements tuple" + }, + { + "value": 34, + "description": "For 8 elements tuple" + }, + { + "value": 35, + "description": "For 9 elements tuple" + }, + { + "value": 37, + "description": "For 11 elements tuple" + }, + { + "value": 38, + "description": "For 12 elements tuple" + }, + { + "value": 39, + "description": "For 13 elements tuple" + }, + { + "value": 40, + "description": "For 14 elements tuple" + }, + { + "value": 41, + "description": "For 15 elements tuple" + } + ] + }, + "layout": { + "min": 7282688, + "max": 7286784, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_untuple", + "kind": "fixed", + "prefix": 1778, + "prefix_str": "6F2", + "tlb": "#6f2 n: (## 4)" + }, + "effects": ["Tuple"], + "signature": { + "stack_string": "t:Tuple -> x_1...x_n", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "array", + "name": "tuple_elements", + "length_var": "n", + "array_entry": [ + { + "type": "simple", + "name": "x" + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 158, + "function_name": "exec_untuple" + } + }, + { + "name": "UNPACKFIRST", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Unpacks first `k` elements of a _Tuple_ `t`.", + "tags": [], + "operands": ["k"], + "exit_codes": [ + { + "errno": "7", + "condition": "Tuple length is less than `k`." + } + ], + "gas": [ + { + "value": 26, + "description": "For 0 elements tuple" + }, + { + "value": 27, + "description": "For 1 element tuple" + }, + { + "value": 28, + "description": "For 2 elements tuple" + }, + { + "value": 29, + "description": "For 3 elements tuple" + }, + { + "value": 30, + "description": "For 4 elements tuple" + }, + { + "value": 31, + "description": "For 5 elements tuple" + }, + { + "value": 32, + "description": "For 6 elements tuple" + }, + { + "value": 33, + "description": "For 7 elements tuple" + }, + { + "value": 34, + "description": "For 8 elements tuple" + }, + { + "value": 35, + "description": "For 9 elements tuple" + }, + { + "value": 37, + "description": "For 11 elements tuple" + }, + { + "value": 38, + "description": "For 12 elements tuple" + }, + { + "value": 39, + "description": "For 13 elements tuple" + }, + { + "value": 40, + "description": "For 14 elements tuple" + }, + { + "value": 41, + "description": "For 15 elements tuple" + } + ] + }, + "layout": { + "min": 7286784, + "max": 7290880, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_untuple_first", + "kind": "fixed", + "prefix": 1779, + "prefix_str": "6F3", + "tlb": "#6f3 k: (## 4)" + }, + "effects": ["Tuple"], + "signature": { + "stack_string": "t:Tuple -> x_1...x_k", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "array", + "name": "tuple_elements", + "length_var": "k", + "array_entry": [ + { + "type": "simple", + "name": "x" + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 175, + "function_name": "exec_untuple_first" + } + }, + { + "name": "EXPLODE", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Unpacks a _Tuple_ `t=(x_1,...,x_$tuple_len)` and returns its `length`, but only if `length <= $tuple_len <= 15`.", + "tags": [], + "operands": ["length"], + "exit_codes": [ + { + "errno": "7", + "condition": "Tuple length is greater than `tuple_len` or greater than 15." + } + ], + "gas": [ + { + "value": 26, + "description": "For 0 elements tuple" + }, + { + "value": 27, + "description": "For 1 element tuple" + }, + { + "value": 28, + "description": "For 2 elements tuple" + }, + { + "value": 29, + "description": "For 3 elements tuple" + }, + { + "value": 30, + "description": "For 4 elements tuple" + }, + { + "value": 31, + "description": "For 5 elements tuple" + }, + { + "value": 32, + "description": "For 6 elements tuple" + }, + { + "value": 33, + "description": "For 7 elements tuple" + }, + { + "value": 34, + "description": "For 8 elements tuple" + }, + { + "value": 35, + "description": "For 9 elements tuple" + }, + { + "value": 37, + "description": "For 11 elements tuple" + }, + { + "value": 38, + "description": "For 12 elements tuple" + }, + { + "value": 39, + "description": "For 13 elements tuple" + }, + { + "value": 40, + "description": "For 14 elements tuple" + }, + { + "value": 41, + "description": "For 15 elements tuple" + } + ] + }, + "layout": { + "min": 7290880, + "max": 7294976, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_explode_tuple", + "kind": "fixed", + "prefix": 1780, + "prefix_str": "6F4", + "tlb": "#6f4 length: (## 4)" + }, + "effects": ["Tuple"], + "signature": { + "stack_string": "t:Tuple -> x_1...x_length length:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "array", + "name": "tuple_elements", + "length_var": "length", + "array_entry": [ + { + "type": "simple", + "name": "x" + } + ] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 196, + "function_name": "exec_explode_tuple" + } + }, + { + "name": "SETINDEX", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Sets the `i`-th component of _Tuple_ `t` to `x`.", + "tags": [], + "operands": ["i"], + "exit_codes": [ + { + "errno": "7", + "condition": "Index `k` is greater than or equal to tuple length." + } + ], + "gas": [ + { + "value": 26, + "description": "For 0 elements tuple" + }, + { + "value": 27, + "description": "For 1 element tuple" + }, + { + "value": 28, + "description": "For 2 elements tuple" + }, + { + "value": 29, + "description": "For 3 elements tuple" + }, + { + "value": 30, + "description": "For 4 elements tuple" + }, + { + "value": 31, + "description": "For 5 elements tuple" + }, + { + "value": 32, + "description": "For 6 elements tuple" + }, + { + "value": 33, + "description": "For 7 elements tuple" + }, + { + "value": 34, + "description": "For 8 elements tuple" + }, + { + "value": 35, + "description": "For 9 elements tuple" + }, + { + "value": 37, + "description": "For 11 elements tuple" + }, + { + "value": 38, + "description": "For 12 elements tuple" + }, + { + "value": 39, + "description": "For 13 elements tuple" + }, + { + "value": 40, + "description": "For 14 elements tuple" + }, + { + "value": 41, + "description": "For 15 elements tuple" + } + ] + }, + "layout": { + "min": 7294976, + "max": 7299072, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_tuple_set_index", + "kind": "fixed", + "prefix": 1781, + "prefix_str": "6F5", + "tlb": "#6f5 i: (## 4)" + }, + "effects": ["Tuple"], + "signature": { + "stack_string": "t:Tuple x:Any -> t2:Tuple", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + }, + { + "type": "simple", + "name": "x" + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "t2", + "value_types": ["Tuple"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 222, + "function_name": "exec_tuple_set_index" + } + }, + { + "name": "INDEXQ", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Returns the `i`-th element of a _Tuple_ `t`. If `t` is _Null_ or `i` is greater than tuple length, returns a _Null_.", + "tags": [], + "operands": ["i"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7299072, + "max": 7303168, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_tuple_quiet_index", + "kind": "fixed", + "prefix": 1782, + "prefix_str": "6F6", + "tlb": "#6f6 i: (## 4)" + }, + "signature": { + "stack_string": "t:Tuple|Null -> x:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple", "Null"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 124, + "function_name": "exec_tuple_quiet_index" + } + }, + { + "name": "SETINDEXQ", + "category": "tuple", + "sub_category": "", + "description": { + "short": "Sets the `i`-th component of _Tuple_ `t` to `x`. If `i` is bigger than tuple length, extends the tuple with Nulls first.", + "long": "If `|t| <= i`, first extends the original _Tuple_ to length `n'=i+1` by setting all new components to _Null_. If the original value of `t` is _Null_, treats it as an empty _Tuple_. If `i` is _Null_ and either `|t| <= i` or `t` is _Null_, then always returns `t'=t` and does not consume tuple creation gas.", + "tags": [], + "operands": ["i"], + "exit_codes": [ + { + "errno": "7", + "condition": "Top element is neither a Tuple nor Null." + } + ], + "gas": [ + { + "value": 26, + "description": "For 0 elements tuple" + }, + { + "value": 27, + "description": "For 1 element tuple" + }, + { + "value": 28, + "description": "For 2 elements tuple" + }, + { + "value": 29, + "description": "For 3 elements tuple" + }, + { + "value": 30, + "description": "For 4 elements tuple" + }, + { + "value": 31, + "description": "For 5 elements tuple" + }, + { + "value": 32, + "description": "For 6 elements tuple" + }, + { + "value": 33, + "description": "For 7 elements tuple" + }, + { + "value": 34, + "description": "For 8 elements tuple" + }, + { + "value": 35, + "description": "For 9 elements tuple" + }, + { + "value": 37, + "description": "For 11 elements tuple" + }, + { + "value": 38, + "description": "For 12 elements tuple" + }, + { + "value": 39, + "description": "For 13 elements tuple" + }, + { + "value": 40, + "description": "For 14 elements tuple" + }, + { + "value": 41, + "description": "For 15 elements tuple" + } + ] + }, + "layout": { + "min": 7303168, + "max": 7307264, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_tuple_quiet_set_index", + "kind": "fixed", + "prefix": 1783, + "prefix_str": "6F7", + "tlb": "#6f7 i: (## 4)" + }, + "effects": ["Tuple"], + "signature": { + "stack_string": "t:Tuple|Null x:Any -> t2:Tuple|Null", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple", "Null"] + }, + { + "type": "simple", + "name": "x" + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "t2", + "value_types": ["Tuple", "Null"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 251, + "function_name": "exec_tuple_quiet_set_index" + } + }, + { + "name": "XC2PU", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Performs a double exchange (`s(i) s(j) XCHG2`) followed by pushing a value (`s(k) PUSH`).", + "tags": ["stack"], + "operands": ["i", "j", "k"], + "other_implementations": [ + { + "exact": true, + "instructions": ["XCHG2 s(i) s(j)", "PUSH s(k)"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `max(i,j,k) + 2` elements." + } + ], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5509120, + "max": 5513216, + "checkLen": 12, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_xc2pu", + "kind": "fixed", + "prefix": 1345, + "prefix_str": "541", + "tlb": "#541 i: (## 4) j: (## 4) k: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 215, + "function_name": "exec_xc2pu" + } + }, + { + "name": "XCPU2", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Exchanges `i`-th element with top (`s(i) XCHG_0I`) and pushes two values (`s(j) s(k) PUSH2`).", + "tags": ["stack"], + "operands": ["i", "j", "k"], + "other_implementations": [ + { + "exact": true, + "instructions": ["XCHG_0I s(i)", "PUSH2 s(j) s(k)"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `max(i,j,k+1) + 1` elements." + } + ], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5517312, + "max": 5521408, + "checkLen": 12, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_xcpu2", + "kind": "fixed", + "prefix": 1347, + "prefix_str": "543", + "tlb": "#543 i: (## 4) j: (## 4) k: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 238, + "function_name": "exec_xcpu2" + } + }, + { + "name": "PUSH3", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Pushes three values from different stack positions (`PUSH s(i)`, `PUSH2 s(j+1) s(k+1)`).", + "tags": ["stack"], + "operands": ["i", "j", "k"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSH s(i)", "PUSH2 s(j+1) s(k+1)"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `max(i,j,k) + 1` elements." + } + ], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5533696, + "max": 5537792, + "checkLen": 12, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_push3", + "kind": "fixed", + "prefix": 1351, + "prefix_str": "547", + "tlb": "#547 i: (## 4) j: (## 4) k: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 286, + "function_name": "exec_push3" + } + }, + { + "name": "XCHG2", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Performs two stack element exchanges in sequence (`XCHG_0I s(i)`, `XCHG_0I s(j)`).", + "tags": ["stack"], + "operands": ["i", "j"], + "other_implementations": [ + { + "exact": true, + "instructions": ["XCHG_0I s(i)", "XCHG_0I s(j)"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `max(i,j) + 2` elements." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5242880, + "max": 5308416, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_xchg2", + "kind": "fixed", + "prefix": 80, + "prefix_str": "50", + "tlb": "#50 i: (## 4) j: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 163, + "function_name": "exec_xchg2" + } + }, + { + "name": "XCPU", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Exchanges `i`-th element with top (`XCHG_0I s(i)`) and pushes `j`-th element (`PUSH s(j)`).", + "tags": ["stack"], + "operands": ["i", "j"], + "other_implementations": [ + { + "exact": true, + "instructions": ["XCHG_0I s(i)", "PUSH s(j)"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `max(i,j) + 1` elements." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5308416, + "max": 5373952, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_xcpu", + "kind": "fixed", + "prefix": 81, + "prefix_str": "51", + "tlb": "#51 i: (## 4) j: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 173, + "function_name": "exec_xcpu" + } + }, + { + "name": "PUSH2", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Pushes two values from `i`-th and `j`-th positions (`PUSH s(i)`, `PUSH s(j+1)`).", + "tags": ["stack"], + "operands": ["i", "j"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSH s(i)", "PUSH s(j+1)"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `max(i,j+1) + 1` elements." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5439488, + "max": 5505024, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_push2", + "kind": "fixed", + "prefix": 83, + "prefix_str": "53", + "tlb": "#53 i: (## 4) j: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 194, + "function_name": "exec_push2" + } + }, + { + "name": "PUXC", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Pushes `i`-th element, swaps it, and exchanges with `j`-th element (`PUSH s(i)`, `SWAP`, `XCHG_0I s(j)`).", + "tags": ["stack"], + "operands": ["i", "j"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSH s(i)", "SWAP", "XCHG_0I s(j)"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `max(i,j) + 1` elements." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5373952, + "max": 5439488, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "delta", + "delta": -1, + "arg": { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + } + ] + }, + "exec": "exec_puxc", + "kind": "fixed", + "prefix": 82, + "prefix_str": "52", + "tlb": "#52 i: (## 4) j: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 183, + "function_name": "exec_puxc" + } + }, + { + "name": "XCPUXC", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Exchanges second with `i`-th element, then performs PUXC with `j` and `k-1` (`XCHG_1I s(i)`, `PUXC s(j) s(k-1)`).", + "tags": ["stack"], + "operands": ["i", "j", "k"], + "other_implementations": [ + { + "exact": true, + "instructions": ["XCHG_1I s1 s(i)", "PUXC s(j) s(k-1)"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `max(i,j,k) + 1` elements." + } + ], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5513216, + "max": 5517312, + "checkLen": 12, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "delta", + "delta": -1, + "arg": { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + } + ] + }, + "exec": "exec_xcpuxc", + "kind": "fixed", + "prefix": 1346, + "prefix_str": "542", + "tlb": "#542 i: (## 4) j: (## 4) k: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 226, + "function_name": "exec_xcpuxc" + } + }, + { + "name": "PUXC2", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Pushes `i`-th element, exchanges with third, then performs XCHG2 with `j` and `k` (`PUSH s(i)`, `XCHG_0I s2`, `XCHG2 s(j) s(k)`).", + "tags": ["stack"], + "operands": ["i", "j", "k"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSH s(i)", "XCHG_0I s2", "XCHG2 s(j) s(k)"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `max(i,j,k) + 2` elements." + } + ], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5521408, + "max": 5525504, + "checkLen": 12, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "delta", + "delta": -1, + "arg": { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + }, + { + "$": "delta", + "delta": -1, + "arg": { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + } + ] + }, + "exec": "exec_puxc2", + "kind": "fixed", + "prefix": 1348, + "prefix_str": "544", + "tlb": "#544 i: (## 4) j: (## 4) k: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 249, + "function_name": "exec_puxc2" + } + }, + { + "name": "PUXCPU", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Performs PUXC with `i` and `j-1`, then pushes `k`-th element (`PUXC s(i) s(j-1)`, `PUSH s(k)`).", + "tags": ["stack"], + "operands": ["i", "j", "k"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUXC s(i) s(j-1)", "PUSH s(k)"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `max(i,j,k) + 1` elements." + } + ], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5525504, + "max": 5529600, + "checkLen": 12, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "delta", + "delta": -1, + "arg": { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + }, + { + "$": "delta", + "delta": -1, + "arg": { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + } + ] + }, + "exec": "exec_puxcpu", + "kind": "fixed", + "prefix": 1349, + "prefix_str": "545", + "tlb": "#545 i: (## 4) j: (## 4) k: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 261, + "function_name": "exec_puxcpu" + } + }, + { + "name": "PU2XC", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Pushes `i`-th element, swaps it, then performs PUXC with `j` and `k-1` (`PUSH s(i)`, `SWAP`, `PUXC s(j) s(k-1)`).", + "tags": ["stack"], + "operands": ["i", "j", "k"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSH s(i)", "SWAP", "PUXC s(j) s(k-1)"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `max(i,j,k) + 1` elements." + } + ], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5529600, + "max": 5533696, + "checkLen": 12, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "delta", + "delta": -1, + "arg": { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + }, + { + "$": "delta", + "delta": -2, + "arg": { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + } + ] + }, + "exec": "exec_pu2xc", + "kind": "fixed", + "prefix": 1350, + "prefix_str": "546", + "tlb": "#546 i: (## 4) j: (## 4) k: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 273, + "function_name": "exec_pu2xc" + } + }, + { + "name": "BLKSWAP", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Permutes two blocks `s[j+i+1] ... s[j+1]` and `s(j) ... s0`.", + "tags": ["stack"], + "operands": ["i", "j"], + "other_implementations": [ + { + "exact": false, + "instructions": [ + "REVERSE [i+1] [j+1]", + "REVERSE [j+1] 0", + "REVERSE [i+j+2] 0" + ] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `i + j + 2` elements." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5570560, + "max": 5636096, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + }, + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + } + ] + }, + "exec": "exec_blkswap", + "kind": "fixed", + "prefix": 85, + "prefix_str": "55", + "tlb": "#55 i: (## 4) j: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 299, + "function_name": "exec_blkswap" + } + }, + { + "name": "REVERSE", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Reverses the order of `s[j+i+1] ... s(j)`.", + "tags": ["stack"], + "operands": ["i", "j"], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `i + j + 2` elements." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 6160384, + "max": 6225920, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 2, + "arg": { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + }, + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_reverse", + "kind": "fixed", + "prefix": 94, + "prefix_str": "5E", + "tlb": "#5e i: (## 4) j: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 362, + "function_name": "exec_reverse" + } + }, + { + "name": "SETCONTARGS", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Pushes `r` values `x_1...x_r` into the stack of (a copy of) the continuation `c`, starting with `x_1`. When `n` is 15 (-1 in Fift notation), does nothing with `c.nargs`. For other values of `n`, sets `c.nargs` to the final size of the stack of `c'` plus `n`. In other words, transforms `c` into a _closure_ or a _partially applied function_, with `n` arguments missing.", + "tags": [], + "operands": ["r", "n"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15466496, + "max": 15532032, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "delta", + "delta": -1, + "arg": { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + } + ] + }, + "exec": "exec_setcontargs", + "kind": "fixed", + "prefix": 236, + "prefix_str": "EC", + "tlb": "#ec r: (## 4) n: (## 4)" + }, + "signature": { + "stack_string": "x_1...x_r c:Continuation -> c':Continuation", + "inputs": { + "stack": [ + { + "type": "array", + "name": "args", + "length_var": "r", + "array_entry": [ + { + "type": "simple", + "name": "x" + } + ] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c'", + "value_types": ["Continuation"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 665, + "function_name": "exec_setcontargs" + } + }, + { + "name": "BLESSARGS", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "Transforms a _Slice_ into a simple ordinary continuation and sets `r` arguments and `n` missing arguments.", + "long": "The value of `n` is represented inside the instruction by the 4-bit integer `n mod 16`.", + "tags": [], + "operands": ["r", "n"], + "other_implementations": [ + { + "exact": true, + "instructions": ["BLESS", "SETCONTARGS [r] [n]"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15597568, + "max": 15663104, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "delta", + "delta": -1, + "arg": { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + } + ] + }, + "exec": "exec_bless_args", + "kind": "fixed", + "prefix": 238, + "prefix_str": "EE", + "tlb": "#ee r: (## 4) n: (## 4)" + }, + "signature": { + "stack_string": "x_1...x_r s:Slice -> c:Continuation", + "inputs": { + "stack": [ + { + "type": "array", + "name": "args", + "length_var": "r", + "array_entry": [ + { + "type": "simple", + "name": "x" + } + ] + }, + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 759, + "function_name": "exec_bless_args" + } + }, + { + "name": "STIR", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "Stores a signed `width`-bit integer `x` into _Builder_ `b` and returns the resulting _Builder_ `b'`.", + "long": "", + "tags": ["builder building"], + "operands": ["width"], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "5", + "condition": "Integer is too large to fit into `c` bits." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + }, + { + "errno": "7", + "condition": "Second element is not a Builder." + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["SWAP", "STI [width]"] + } + ], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13568512, + "max": 13568768, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_store_int_fixed", + "kind": "fixed", + "prefix": 53002, + "prefix_str": "CF0A", + "tlb": "#cf0a width: (## 8)" + }, + "signature": { + "stack_string": "b:Builder x:Int -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"], + "mutations": [ + { + "length": { + "amount_arg": 0 + } + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 622, + "function_name": "exec_store_int_fixed" + } + }, + { + "name": "STUR", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "Stores an unsigned `width`-bit integer `x` into _Builder_ `b` and returns the resulting _Builder_ `b'`.", + "long": "", + "tags": ["builder building"], + "operands": ["width"], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "5", + "condition": "Integer is too large to fit into `c` bits." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + }, + { + "errno": "7", + "condition": "Second element is not a Builder." + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["SWAP", "STU [width]"] + } + ], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13568768, + "max": 13569024, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_store_int_fixed", + "kind": "fixed", + "prefix": 53003, + "prefix_str": "CF0B", + "tlb": "#cf0b width: (## 8)" + }, + "signature": { + "stack_string": "b:Builder x:Int -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"], + "mutations": [ + { + "length": { + "amount_arg": 0 + } + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 622, + "function_name": "exec_store_int_fixed" + } + }, + { + "name": "STIQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores a signed `width`-bit integer `x` into _Builder_ `b` and returns the resulting _Builder_ `b'`. This is a quiet version of `STI` which means that instead of throwing an exception, it pushes a status flag to the stack: -1 if there is no space in `b`, 0 if the operation succeeds.", + "tags": ["builder building"], + "operands": ["c"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13569024, + "max": 13569280, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_store_int_fixed", + "kind": "fixed", + "prefix": 53004, + "prefix_str": "CF0C", + "tlb": "#cf0c c: (## 8)" + }, + "signature": { + "stack_string": "x:Int b:Builder -> (b':Builder 0)|(x:Int b:Builder -1)|(x:Int b:Builder 1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + { + "value": 1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 622, + "function_name": "exec_store_int_fixed" + } + }, + { + "name": "STUQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores an unsigned `width`-bit integer `x` into _Builder_ `b` and returns the resulting _Builder_ `b'`. This is a quiet version of `STU` which means that instead of throwing an exception, it pushes a status flag to the stack: -1 if there is no space in `b`, 0 if the operation succeeds.", + "tags": ["builder building"], + "operands": ["c"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13569280, + "max": 13569536, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_store_int_fixed", + "kind": "fixed", + "prefix": 53005, + "prefix_str": "CF0D", + "tlb": "#cf0d c: (## 8)" + }, + "signature": { + "stack_string": "x:Int b:Builder -> (b':Builder 0)|(x:Int b:Builder -1)|(x:Int b:Builder 1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + { + "value": 1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 622, + "function_name": "exec_store_int_fixed" + } + }, + { + "name": "STIRQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores a signed `width`-bit integer `x` into _Builder_ `b` and returns the resulting _Builder_ `b'`. This is a quiet version of `STIR` which means that instead of throwing an exception, it pushes a status flag to the stack: -1 if there is no space in `b`, 0 if the operation succeeds.", + "tags": ["builder building"], + "operands": ["c"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13569536, + "max": 13569792, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_store_int_fixed", + "kind": "fixed", + "prefix": 53006, + "prefix_str": "CF0E", + "tlb": "#cf0e c: (## 8)" + }, + "signature": { + "stack_string": "b:Builder x:Int -> (b':Builder 0)|(b:Builder x:Int -1)|(b:Builder x:Int 1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + { + "value": 1, + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 622, + "function_name": "exec_store_int_fixed" + } + }, + { + "name": "STURQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores an unsigned `width`-bit integer `x` into _Builder_ `b` and returns the resulting _Builder_ `b'`. This is a quiet version of `STUR` which means that instead of throwing an exception, it pushes a status flag to the stack: -1 if there is no space in `b`, 0 if the operation succeeds.", + "tags": ["builder building"], + "operands": ["c"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13569792, + "max": 13570048, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_store_int_fixed", + "kind": "fixed", + "prefix": 53007, + "prefix_str": "CF0F", + "tlb": "#cf0f c: (## 8)" + }, + "signature": { + "stack_string": "b:Builder x:Int -> (b':Builder 0)|(b:Builder x:Int -1)|(b:Builder x:Int 1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + { + "value": 1, + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 622, + "function_name": "exec_store_int_fixed" + } + }, + { + "name": "PLDI", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads a signed `width`-bit integer from _Slice_ `s`.", + "tags": ["slice parsing", "preload"], + "operands": ["width"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14092800, + "max": 14093056, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_load_int_fixed2", + "kind": "fixed", + "prefix": 55050, + "prefix_str": "D70A", + "tlb": "#d70a width: (## 8)" + }, + "signature": { + "stack_string": "s:Slice -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1102, + "function_name": "exec_load_int_fixed2" + } + }, + { + "name": "PLDU", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads an unsigned `width`-bit integer from `s`.", + "tags": ["slice parsing", "preload"], + "operands": ["width"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14093056, + "max": 14093312, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_load_int_fixed2", + "kind": "fixed", + "prefix": 55051, + "prefix_str": "D70B", + "tlb": "#d70b width: (## 8)" + }, + "signature": { + "stack_string": "s:Slice -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1102, + "function_name": "exec_load_int_fixed2" + } + }, + { + "name": "LDIQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads a signed `width`-bit integer `x` from _Slice_ `s` and pushes loaded value on stack along with _Slice_ with remainder data. This is a quiet version of `LDI` which means that instead of throwing an exception, it pushes a status flag to the stack: 0 if the operation fails, -1 if the operation succeeds.", + "tags": ["slice parsing"], + "operands": ["width"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14093312, + "max": 14093568, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_load_int_fixed2", + "kind": "fixed", + "prefix": 55052, + "prefix_str": "D70C", + "tlb": "#d70c width: (## 8)" + }, + "signature": { + "stack_string": "s:Slice -> (s:Slice 0)|(x:Int s':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1102, + "function_name": "exec_load_int_fixed2" + } + }, + { + "name": "LDUQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads an unsigned `width`-bit integer `x` from _Slice_ `s` and pushes loaded value on stack along with _Slice_ with remainder data. This is a quiet version of `LDU` which means that instead of throwing an exception, it pushes a status flag to the stack: 0 if the operation fails, -1 if the operation succeeds.", + "tags": ["slice parsing"], + "operands": ["width"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14093568, + "max": 14093824, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_load_int_fixed2", + "kind": "fixed", + "prefix": 55053, + "prefix_str": "D70D", + "tlb": "#d70d width: (## 8)" + }, + "signature": { + "stack_string": "s:Slice -> (s:Slice 0)|(x:Int s':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1102, + "function_name": "exec_load_int_fixed2" + } + }, + { + "name": "PLDIQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads a signed `width`-bit integer from _Slice_ `s`. This is a quiet version of `PLDI` which means that instead of throwing an exception, it pushes a status flag to the stack: 0 if the operation fails, -1 if the operation succeeds.", + "tags": ["slice parsing", "preload"], + "operands": ["width"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14093824, + "max": 14094080, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_load_int_fixed2", + "kind": "fixed", + "prefix": 55054, + "prefix_str": "D70E", + "tlb": "#d70e width: (## 8)" + }, + "signature": { + "stack_string": "s:Slice -> (∅ 0)|(x:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1102, + "function_name": "exec_load_int_fixed2" + } + }, + { + "name": "PLDUQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads an unsigned `width`-bit integer from `s`. This is a quiet version of `PLDU` which means that instead of throwing an exception, it pushes a status flag to the stack: 0 if the operation fails, -1 if the operation succeeds.", + "tags": ["slice parsing", "preload"], + "operands": ["width"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14094080, + "max": 14094336, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_load_int_fixed2", + "kind": "fixed", + "prefix": 55055, + "prefix_str": "D70F", + "tlb": "#d70f width: (## 8)" + }, + "signature": { + "stack_string": "s:Slice -> (∅ 0)|(x:Int -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1102, + "function_name": "exec_load_int_fixed2" + } + }, + { + "name": "PLDUZ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads the first `32 * (c + 1)` bits of _Slice_ `s` into an unsigned integer `x`. If `s` is shorter than necessary, missing bits are assumed to be zero. This operation is intended to be used along with `IFBITJMP` and similar instructions.", + "tags": ["slice parsing", "preload"], + "operands": ["c"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14094336, + "max": 14096384, + "checkLen": 13, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "plduzArg", + "range": { + "min": "0", + "max": "7" + } + } + ] + }, + "exec": "exec_preload_uint_fixed_0e", + "kind": "fixed", + "prefix": 6882, + "prefix_str": "1AE2", + "tlb": "#1ae2 i: (## 3)" + }, + "signature": { + "stack_string": "s:Slice -> s:Slice x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1119, + "function_name": "exec_preload_uint_fixed_0e" + } + }, + { + "name": "PLDSLICE", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads the first `width` bits of `s` as `loaded`.", + "tags": ["slice parsing", "preload"], + "operands": ["width"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14097664, + "max": 14097920, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_load_slice_fixed2", + "kind": "fixed", + "prefix": 55069, + "prefix_str": "D71D", + "tlb": "#d71d width: (## 8)" + }, + "signature": { + "stack_string": "s:Slice -> loaded:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "loaded", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1149, + "function_name": "exec_load_slice_fixed2" + } + }, + { + "name": "LDSLICEQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Cuts the next `width` bits of `s` into a separate _Slice_ `loaded`. This is a quiet version of `LDSLICE` which means that instead of throwing an exception, it pushes a status flag to the stack: 0 if the operation fails, -1 if the operation succeeds.", + "tags": ["slice parsing"], + "operands": ["width"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14097920, + "max": 14098176, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_load_slice_fixed2", + "kind": "fixed", + "prefix": 55070, + "prefix_str": "D71E", + "tlb": "#d71e width: (## 8)" + }, + "signature": { + "stack_string": "s:Slice -> (s:Slice 0)|(loaded:Slice s':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "loaded", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1149, + "function_name": "exec_load_slice_fixed2" + } + }, + { + "name": "PLDSLICEQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Preloads the first `width` bits of `s` as `loaded`. This is a quiet version of `PLDSLICE` which means that instead of throwing an exception, it pushes a status flag to the stack: 0 if the operation fails, -1 if the operation succeeds.", + "tags": ["slice parsing", "preload"], + "operands": ["width"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14098176, + "max": 14098432, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_load_slice_fixed2", + "kind": "fixed", + "prefix": 55071, + "prefix_str": "D71F", + "tlb": "#d71f width: (## 8)" + }, + "signature": { + "stack_string": "s:Slice -> (∅ 0)|(loaded:Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "loaded", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1149, + "function_name": "exec_load_slice_fixed2" + } + }, + { + "name": "IFBITJMP", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `i`-th bit is set in integer `x`, jumps to `body`, otherwise does nothing.", + "long": "If condition is met, performs `JMPX` on `body` continuation. Value `x` remains on the stack and available in `body` continuation. The remainder of the current continuation is discarded which means that after `body` completes, control will not return to instruction immediately following the `IFBITJMP`. Instead, it will return to the instruction immediately following the instruction that started current continuation. If this continuation is default `quit`, the program will exit with code 0.", + "tags": [], + "operands": ["i"], + "exit_codes": [ + { + "errno": "4", + "condition": "If `x` is a `NaN`." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 0b001000" + }, + { + "instruction": "PUSHCONT {\n PUSHINT_4 1\n ADD // sum up 4 and 1\n // implicit exit from the continuation\n // and since grand continuation is default `quit`\n // the program will exit with code 0\n}", + "is_main": true + }, + { + "instruction": "IFBITJMP 3", + "comment": "Check 4th bit of 0b001000", + "is_main": true + }, + { + "instruction": "PUSHINT_LONG 999", + "comment": "This will never be executed" + } + ], + "stack": { + "input": ["Continuation", "8"], + "output": ["5"] + } + } + ], + "docs_links": [ + { + "name": "JMP vs. EXECUTE", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/manual-handling-and-jmp-vs-execute/" + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14909440, + "max": 14917632, + "checkLen": 11, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 5, + "range": { + "min": "0", + "max": "31" + } + } + ] + }, + "exec": "exec_if_bit_jmp", + "kind": "fixed", + "prefix": 1820, + "prefix_str": "71C", + "tlb": "#71c i: (## 5)" + }, + "signature": { + "stack_string": "x:Int body:Continuation -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 437, + "function_name": "exec_if_bit_jmp" + } + }, + { + "name": "IFNBITJMP", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `i`-th bit is NOT set in integer `x`, jumps to `body`, otherwise does nothing.", + "long": "If condition is met, performs `JMPX` on `body` continuation. Value `x` remains on the stack and available in `body` continuation. The remainder of the current continuation is discarded which means that after `body` completes, control will not return to instruction immediately following the `IFNBITJMP`. Instead, it will return to the instruction immediately following the instruction that started current continuation. If this continuation is default `quit`, the program will exit with code 0.", + "tags": [], + "operands": ["i"], + "exit_codes": [ + { + "errno": "4", + "condition": "If `x` is a `NaN`." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 0b001000" + }, + { + "instruction": "PUSHCONT {\n PUSHINT_4 1\n ADD // sum up 4 and 1\n // implicit exit from the continuation\n // and since grand continuation is default `quit`\n // the program will exit with code 0\n}", + "is_main": true + }, + { + "instruction": "IFNBITJMP 2", + "comment": "Check 3rd bit of 0b001000", + "is_main": true + }, + { + "instruction": "PUSHINT_LONG 999", + "comment": "This will never be executed" + } + ], + "stack": { + "input": ["Continuation", "8"], + "output": ["5"] + } + } + ], + "docs_links": [ + { + "name": "JMP vs. EXECUTE", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/manual-handling-and-jmp-vs-execute/" + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14917632, + "max": 14925824, + "checkLen": 11, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 5, + "range": { + "min": "0", + "max": "31" + } + } + ] + }, + "exec": "exec_if_bit_jmp", + "kind": "fixed", + "prefix": 1821, + "prefix_str": "71D", + "tlb": "#71d i: (## 5)" + }, + "signature": { + "stack_string": "x:Int body:Continuation -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 437, + "function_name": "exec_if_bit_jmp" + } + }, + { + "name": "INDEX2", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Returns `t[i][j]`.", + "tags": [], + "operands": ["i", "j"], + "exit_codes": [ + { + "errno": "7", + "condition": "Element at index i is not a Tuple." + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["INDEX [i]", "INDEX [j]"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7319552, + "max": 7323648, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 2, + "range": { + "min": "0", + "max": "3" + } + }, + { + "$": "uint", + "len": 2, + "range": { + "min": "0", + "max": "3" + } + } + ] + }, + "exec": "exec_tuple_index2", + "kind": "fixed", + "prefix": 1787, + "prefix_str": "6FB", + "tlb": "#6fb i: (## 2) j: (## 2)" + }, + "signature": { + "stack_string": "t:Tuple -> x:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 320, + "function_name": "exec_tuple_index2" + } + }, + { + "name": "INDEX3", + "category": "tuple", + "sub_category": "", + "description": { + "short": "", + "long": "Returns `t[i][j][k]`.", + "tags": [], + "operands": ["i", "j", "k"], + "exit_codes": [ + { + "errno": "7", + "condition": "Element at index i is not a Tuple." + }, + { + "errno": "7", + "condition": "Element at index j of t[i] is not a Tuple." + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["INDEX2 [i] [j]", "INDEX [k]"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7323648, + "max": 7340032, + "checkLen": 10, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 2, + "range": { + "min": "0", + "max": "3" + } + }, + { + "$": "uint", + "len": 2, + "range": { + "min": "0", + "max": "3" + } + }, + { + "$": "uint", + "len": 2, + "range": { + "min": "0", + "max": "3" + } + } + ] + }, + "exec": "exec_tuple_index3", + "kind": "fixed", + "prefix": 447, + "prefix_str": "1BF", + "tlb": "#1bf i: (## 2) j: (## 2) k: (## 2)" + }, + "signature": { + "stack_string": "t:Tuple -> x:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "t", + "value_types": ["Tuple"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tupleops.cpp", + "line_number": 340, + "function_name": "exec_tuple_index3" + } + }, + { + "name": "PUSHPOW2", + "category": "arithmetic", + "sub_category": "int_const", + "description": { + "short": "Quietly pushes `2 ^ x`.", + "long": "Note that `2^256` is a `NaN`.", + "tags": [], + "operands": ["x"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 8585216, + "max": 8650496, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_push_pow2", + "kind": "fixed-range", + "prefix": 33536, + "prefix_str": "8300", + "tlb": "#83 x: (## 8)" + }, + "signature": { + "stack_string": "∅ -> result:Int", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 110, + "function_name": "exec_push_pow2" + } + }, + { + "name": "BLKPUSH", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Performs `PUSH s(j)` `i` times.", + "tags": ["stack"], + "operands": ["i", "j"], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `j + 1` elements." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 6230016, + "max": 6291456, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "1", + "max": "15" + } + }, + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_blkpush", + "kind": "fixed-range", + "prefix": 24336, + "prefix_str": "5F10", + "tlb": "#5f i: (## 4) { 1 <= i } j: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 389, + "function_name": "exec_blkpush" + } + }, + { + "name": "BLKDROP2", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Drops `i` stack elements under the top `j` elements.", + "tags": ["stack"], + "operands": ["i", "j"], + "other_implementations": [ + { + "exact": true, + "instructions": ["REVERSE [i+j] 0", "BLKDROP [i]", "REVERSE [j] 0"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `i + j` elements." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7081984, + "max": 7143424, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_blkdrop2", + "kind": "fixed-range", + "prefix": 27664, + "prefix_str": "6C10", + "tlb": "#6c i: (## 4) j: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 380, + "function_name": "exec_blkdrop2" + } + }, + { + "name": "GETGLOB", + "category": "globals", + "sub_category": "", + "description": { + "short": "", + "long": "Returns the `i`-th global variable.", + "tags": [], + "operands": ["i"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHCTR c7", "INDEXQ [i]"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16269568, + "max": 16277504, + "checkLen": 11, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 5, + "range": { + "min": "0", + "max": "31" + } + } + ] + }, + "exec": "exec_get_global", + "kind": "fixed-range", + "prefix": 63553, + "prefix_str": "F841", + "tlb": "#7c2 i: (## 5)" + }, + "signature": { + "stack_string": "∅ -> x:Any", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 215, + "function_name": "exec_get_global" + } + }, + { + "name": "SETGLOB", + "category": "globals", + "sub_category": "", + "description": { + "short": "", + "long": "Assigns `x` from the stack to the `i`-th global variable.", + "tags": [], + "operands": ["i"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHCTR c7", "SWAP", "SETINDEXQ [i]", "POPCTR c7"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16277760, + "max": 16285696, + "checkLen": 11, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 5, + "range": { + "min": "0", + "max": "31" + } + } + ] + }, + "exec": "exec_set_global", + "kind": "fixed-range", + "prefix": 63585, + "prefix_str": "F861", + "tlb": "#7c3 i: (## 5)" + }, + "signature": { + "stack_string": "x:Any -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x" + } + ], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 245, + "function_name": "exec_set_global" + } + }, + { + "name": "GETPARAM", + "category": "config", + "sub_category": "", + "description": { + "short": "", + "long": "Returns the `i`-th parameter from the _Tuple_ provided at `c7`.", + "tags": [], + "operands": ["i"], + "exit_codes": [ + { + "errno": "7", + "condition": "Value in `c7` is not a Tuple." + }, + { + "errno": "5", + "condition": "Index `i` is greater than or equal to tuple from `c7` length." + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHCTR c7", "INDEX 0", "INDEX [i]"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16261120, + "max": 16261888, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_get_var_param", + "kind": "fixed-range", + "prefix": 63520, + "prefix_str": "F820", + "tlb": "#f82 i: (## 4)" + }, + "signature": { + "stack_string": "∅ -> x:Any", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 152, + "function_name": "exec_get_var_param" + } + }, + { + "name": "PUSHREF", + "category": "cell", + "sub_category": "cell_const", + "description": { + "short": "", + "long": "Pushes the reference `ref` onto the stack.\n_Details:_ Pushes the first reference of `cc.code` onto the stack as a _Cell_ (and removes this reference from the current continuation).", + "tags": [], + "operands": ["c"], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 8912896, + "max": 8978432, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "refCodeSlice" + } + ] + }, + "exec": "(_1, _2, _3, _4) => exec_push_ref(_1, _2, 0, _4)", + "kind": "ext", + "prefix": 136, + "prefix_str": "88", + "tlb": "#88 c: ^Cell" + }, + "signature": { + "stack_string": "∅ -> result:Cell", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Cell"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 32, + "function_name": "exec_push_ref" + } + }, + { + "name": "PUSHREFSLICE", + "category": "cell", + "sub_category": "cell_const", + "description": { + "short": "", + "long": "Pushes the reference `ref` onto the stack and converts the pushed cell into a _Slice_.", + "tags": [], + "operands": ["c"], + "gas": [ + { + "value": 118, + "description": "If cell is loaded for the first time" + }, + { + "value": 43, + "description": "If cell is already loaded" + } + ] + }, + "layout": { + "min": 8978432, + "max": 9043968, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "refCodeSlice" + } + ] + }, + "exec": "(_1, _2, _3, _4) => exec_push_ref(_1, _2, 1, _4)", + "kind": "ext", + "prefix": 137, + "prefix_str": "89", + "tlb": "#89 c: ^Cell" + }, + "effects": ["CellLoad"], + "signature": { + "stack_string": "∅ -> result:Slice", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 32, + "function_name": "exec_push_ref" + } + }, + { + "name": "PUSHREFCONT", + "category": "cell", + "sub_category": "cell_const", + "description": { + "short": "", + "long": "Pushes the reference `ref` onto the stack and converts the pushed cell into a _Continuation_.", + "tags": [], + "operands": ["c"], + "gas": [ + { + "value": 118, + "description": "If cell is loaded for the first time" + }, + { + "value": 43, + "description": "If cell is already loaded" + } + ] + }, + "layout": { + "min": 9043968, + "max": 9109504, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "refCodeSlice" + } + ] + }, + "exec": "(_1, _2, _3, _4) => exec_push_ref(_1, _2, 2, _4)", + "kind": "ext", + "prefix": 138, + "prefix_str": "8A", + "tlb": "#8a c: ^Cell" + }, + "effects": ["CellLoad"], + "signature": { + "stack_string": "∅ -> result:Continuation", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Continuation"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 32, + "function_name": "exec_push_ref" + } + }, + { + "name": "CALLREF", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "Calls the continuation stored in cell reference `ref`.", + "tags": [], + "operands": ["ref"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHREFCONT [ref]", "EXECUTE"] + } + ], + "gas": [ + { + "value": 126, + "description": "If cell is loaded for the first time" + }, + { + "value": 51, + "description": "If cell is already loaded" + } + ] + }, + "layout": { + "min": 14367744, + "max": 14368000, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "refCodeSlice" + } + ] + }, + "exec": "(_1, _2, _3, _4) => exec_do_with_ref(_1, _2, _4, (st, cont) => st.call((cont)), 'CALLREF')", + "kind": "ext", + "prefix": 56124, + "prefix_str": "DB3C", + "tlb": "#db3c ref: ^Cell" + }, + "effects": ["CellLoad"], + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "ref", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 152, + "function_name": "exec_do_with_ref" + } + }, + { + "name": "JMPREF", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "Jumps to the continuation stored in cell reference `ref`.", + "tags": [], + "operands": ["ref"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHREFCONT [ref]", "JMPX"] + } + ], + "gas": [ + { + "value": 126, + "description": "If cell is loaded for the first time" + }, + { + "value": 51, + "description": "If cell is already loaded" + } + ] + }, + "layout": { + "min": 14368000, + "max": 14368256, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "refCodeSlice" + } + ] + }, + "exec": "(_1, _2, _3, _4) => exec_do_with_ref(_1, _2, _4, (st, cont) => st.jump((cont)), 'JMPREF')", + "kind": "ext", + "prefix": 56125, + "prefix_str": "DB3D", + "tlb": "#db3d ref: ^Cell" + }, + "effects": ["CellLoad"], + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "ref" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 152, + "function_name": "exec_do_with_ref" + } + }, + { + "name": "JMPREFDATA", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "Jumps to the continuation stored in cell reference `ref`, converting the remainder of the current continuation into a _Slice_ before pushing it onto the stack of `ref`.", + "tags": [], + "operands": ["ref"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHREFCONT [ref]", "JMPXDATA"] + } + ], + "gas": [ + { + "value": 126, + "description": "If cell is loaded for the first time" + }, + { + "value": 51, + "description": "If cell is already loaded" + } + ] + }, + "layout": { + "min": 14368256, + "max": 14368512, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "refCodeSlice" + } + ] + }, + "exec": "(_1, _2, _3, _4) => exec_do_with_ref(_1, _2, _4, (st, cont) => { st.push_code(); return st.jump((cont)) }, 'JMPREFDATA')", + "kind": "ext", + "prefix": 56126, + "prefix_str": "DB3E", + "tlb": "#db3e ref: ^Cell" + }, + "effects": ["CellLoad"], + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "ref" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 152, + "function_name": "exec_do_with_ref" + } + }, + { + "name": "IFREF", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `cond` is non-zero, executes `body` stored in code cell reference, otherwise does nothing.", + "long": "If condition is met, load reference from the current code cell, transforms it to a _Slice_ and then to an ordinary _Continuation_ and finally transfers execution to it. After the body is executed, execution will return to the next instruction after the `IFREF`. When condition is not met, reference is not loaded, so instruction does not consume extra gas for cell loading.", + "tags": [], + "operands": ["body"], + "exit_codes": [ + { + "errno": "4", + "condition": "If `cond` is a `NaN`." + } + ], + "other_implementations": [ + { + "exact": false, + "instructions": ["PUSHREFCONT [body]", "IF"] + } + ], + "docs_links": [ + { + "name": "JMP vs. EXECUTE", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/manual-handling-and-jmp-vs-execute/" + } + ], + "gas": [ + { + "value": 26, + "description": "If reference Cell is already loaded" + }, + { + "value": 126, + "description": "If cell is loaded for the first time" + }, + { + "value": 51, + "description": "If cell is already loaded" + } + ] + }, + "layout": { + "min": 14876672, + "max": 14876928, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "refCodeSlice" + } + ] + }, + "exec": "(_1, _2, _3, _4) => exec_do_with_cell(1, _2, _4, (st, cell) => st.get_stack().pop_bool() ? st.call(st.ref_to_cont((cell))) : 0, 'IFREF')", + "kind": "ext", + "prefix": 58112, + "prefix_str": "E300", + "tlb": "#e300 body: ^Cell" + }, + "effects": ["ImplicitJumpRef", "CellLoad"], + "signature": { + "stack_string": "cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 163, + "function_name": "exec_do_with_cell" + } + }, + { + "name": "IFNOTREF", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `cond` is zero, executes `body` stored in code cell reference, otherwise does nothing.", + "long": "If condition is met, load reference from the current code cell, transforms it to a _Slice_ and then to an ordinary _Continuation_ and finally transfers execution to it. After the body is executed, execution will return to the next instruction after the `IFNOTREF`. When condition is not met, reference is not loaded, so instruction does not consume extra gas for cell loading.", + "tags": [], + "operands": ["body"], + "exit_codes": [ + { + "errno": "4", + "condition": "If `cond` is a `NaN`." + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHREFCONT [body]", "IFNOT"] + } + ], + "docs_links": [ + { + "name": "JMP vs. EXECUTE", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/manual-handling-and-jmp-vs-execute/" + } + ], + "gas": [ + { + "value": 26, + "description": "If reference Cell is already loaded" + }, + { + "value": 126, + "description": "If cell is loaded for the first time" + }, + { + "value": 51, + "description": "If cell is already loaded" + } + ] + }, + "layout": { + "min": 14876928, + "max": 14877184, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "refCodeSlice" + } + ] + }, + "exec": "(_1, _2, _3, _4) => exec_do_with_cell(1, _2, _4, (st, cell) => st.get_stack().pop_bool() ? 0 : st.call(st.ref_to_cont((cell))), 'IFNOTREF')", + "kind": "ext", + "prefix": 58113, + "prefix_str": "E301", + "tlb": "#e301 body: ^Cell" + }, + "effects": ["ImplicitJumpRef", "CellLoad"], + "signature": { + "stack_string": "cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 163, + "function_name": "exec_do_with_cell" + } + }, + { + "name": "IFJMPREF", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `cond` is non-zero, jumps to `body` stored in code cell reference, otherwise does nothing.", + "long": "If condition is met, load reference from the current code cell, transforms it to a _Slice_ and then to an ordinary _Continuation_ and finally jumps to it. The remainder of the current continuation is discarded which means that after `body` completes, control will not return to instruction immediately following the `IFJMPREF`. Instead, it will return to the instruction immediately following the instruction that started current continuation. If this continuation is default `quit`, the program will exit with code 0. When condition is not met, reference is not loaded, so instruction does not consume extra gas for cell loading.", + "tags": [], + "operands": ["body"], + "exit_codes": [ + { + "errno": "4", + "condition": "If `cond` is a `NaN`." + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHREFCONT [body]", "IFJMP"] + } + ], + "docs_links": [ + { + "name": "JMP vs. EXECUTE", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/manual-handling-and-jmp-vs-execute/" + } + ], + "gas": [ + { + "value": 26, + "description": "If reference Cell is already loaded" + }, + { + "value": 126, + "description": "If cell is loaded for the first time" + }, + { + "value": 51, + "description": "If cell is already loaded" + } + ] + }, + "layout": { + "min": 14877184, + "max": 14877440, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "refCodeSlice" + } + ] + }, + "exec": "(_1, _2, _3, _4) => exec_do_with_cell(1, _2, _4, (st, cell) => st.get_stack().pop_bool() ? st.jump(st.ref_to_cont((cell))) : 0, 'IFJMPREF')", + "kind": "ext", + "prefix": 58114, + "prefix_str": "E302", + "tlb": "#e302 body: ^Cell" + }, + "effects": ["ImplicitJumpRef", "CellLoad"], + "signature": { + "stack_string": "cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 163, + "function_name": "exec_do_with_cell" + } + }, + { + "name": "IFNOTJMPREF", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `cond` is zero, jumps to `body` stored in code cell reference, otherwise does nothing.", + "long": "If condition is met, load reference from the current code cell, transforms it to a _Slice_ and then to an ordinary _Continuation_ and finally jumps to it. The remainder of the current continuation is discarded which means that after `body` completes, control will not return to instruction immediately following the `IFNOTJMPREF`. Instead, it will return to the instruction immediately following the instruction that started current continuation. If this continuation is default `quit`, the program will exit with code 0. When condition is not met, reference is not loaded, so instruction does not consume extra gas for cell loading.", + "tags": [], + "operands": ["body"], + "exit_codes": [ + { + "errno": "4", + "condition": "If `cond` is a `NaN`." + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHREFCONT [body]", "IFNOTJMP"] + } + ], + "docs_links": [ + { + "name": "JMP vs. EXECUTE", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/manual-handling-and-jmp-vs-execute/" + } + ], + "gas": [ + { + "value": 26, + "description": "If reference Cell is already loaded" + }, + { + "value": 126, + "description": "If cell is loaded for the first time" + }, + { + "value": 51, + "description": "If cell is already loaded" + } + ] + }, + "layout": { + "min": 14877440, + "max": 14877696, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "refCodeSlice" + } + ] + }, + "exec": "(_1, _2, _3, _4) => exec_do_with_cell(1, _2, _4, (st, cell) => st.get_stack().pop_bool() ? 0 : st.jump(st.ref_to_cont((cell))), 'IFNOTJMPREF')", + "kind": "ext", + "prefix": 58115, + "prefix_str": "E303", + "tlb": "#e303 body: ^Cell" + }, + "effects": ["ImplicitJumpRef", "CellLoad"], + "signature": { + "stack_string": "cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 163, + "function_name": "exec_do_with_cell" + } + }, + { + "name": "IFREFELSE", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `cond` is non-zero, executes the continuation stored in cell reference `body`, otherwise executes `else` continuation from the stack.", + "long": "If condition is met, load reference from the current code cell, transforms it to a _Slice_ and then to an ordinary _Continuation_ and finally transfers execution to it. Otherwise, performs `EXECUTE` on `else` continuation. After either body is executed, execution will return to the next instruction after the `IFREFELSE`. When condition is not met, reference for `body` is not loaded, so instruction does not consume extra gas for cell loading.", + "tags": [], + "operands": ["body"], + "exit_codes": [ + { + "errno": "4", + "condition": "If `cond` is a `NaN`." + } + ], + "other_implementations": [ + { + "exact": false, + "instructions": ["PUSHREFCONT [body]", "SWAP", "IFELSE"] + } + ], + "docs_links": [ + { + "name": "JMP vs. EXECUTE", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/manual-handling-and-jmp-vs-execute/" + } + ], + "gas": [ + { + "value": 26, + "description": "If reference Cell is already loaded" + }, + { + "value": 126, + "description": "If cell is loaded for the first time" + }, + { + "value": 51, + "description": "If cell is already loaded" + } + ] + }, + "layout": { + "min": 14880000, + "max": 14880256, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "refCodeSlice" + } + ] + }, + "exec": "(_1, _2, _3, _4) => exec_ifelse_ref(_1, _2, _4, true)", + "kind": "ext", + "prefix": 58125, + "prefix_str": "E30D", + "tlb": "#e30d body: ^Cell" + }, + "effects": ["ImplicitJumpRef", "CellLoad"], + "signature": { + "stack_string": "cond:Int else:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "else", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + }, + { + "type": "variable", + "var_name": "c'", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 174, + "function_name": "exec_ifelse_ref" + } + }, + { + "name": "IFELSEREF", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `cond` is non-zero, executes `body` from the stack, otherwise executes the continuation stored in cell reference `else`.", + "long": "If condition is met, performs `EXECUTE` on `body` continuation. Otherwise, load reference from the current code cell, transforms it to a _Slice_ and then to an ordinary _Continuation_ and finally transfers execution to it. After either body is executed, execution will return to the next instruction after the `IFELSEREF`. When condition is met, reference for `else` is not loaded, so instruction does not consume extra gas for cell loading.", + "tags": [], + "operands": ["else"], + "exit_codes": [ + { + "errno": "4", + "condition": "If `cond` is a `NaN`." + } + ], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHREFCONT [else]", "IFELSE"] + } + ], + "docs_links": [ + { + "name": "JMP vs. EXECUTE", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/manual-handling-and-jmp-vs-execute/" + } + ], + "gas": [ + { + "value": 26, + "description": "If reference Cell is already loaded" + }, + { + "value": 126, + "description": "If cell is loaded for the first time" + }, + { + "value": 51, + "description": "If cell is already loaded" + } + ] + }, + "layout": { + "min": 14880256, + "max": 14880512, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "refCodeSlice" + } + ] + }, + "exec": "(_1, _2, _3, _4) => exec_ifelse_ref(_1, _2, _4, false)", + "kind": "ext", + "prefix": 58126, + "prefix_str": "E30E", + "tlb": "#e30e else: ^Cell" + }, + "effects": ["ImplicitJumpRef", "CellLoad"], + "signature": { + "stack_string": "cond:Int body:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "body", + "value_types": ["Continuation"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + }, + { + "type": "variable", + "var_name": "c'", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 174, + "function_name": "exec_ifelse_ref" + } + }, + { + "name": "IFREFELSEREF", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `cond` is non-zero, executes the continuation stored in cell reference `body`, otherwise executes the continuation stored in cell reference `else`.", + "long": "If condition is met, load first reference from the current code cell, transforms it to a _Slice_ and then to an ordinary _Continuation_ and finally transfers execution to it. Otherwise, load second reference from the current code cell, transforms it to a _Slice_ and then to an ordinary _Continuation_ and finally transfers execution to it. After either body is executed, execution will return to the next instruction after the `IFREFELSEREF`.", + "tags": [], + "exit_codes": [ + { + "errno": "4", + "condition": "If `cond` is a `NaN`." + } + ], + "operands": ["body", "else"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHREFCONT [body]", "PUSHREFCONT [else]", "IFELSE"] + } + ], + "docs_links": [ + { + "name": "JMP vs. EXECUTE", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/manual-handling-and-jmp-vs-execute/" + } + ], + "gas": [ + { + "value": 126, + "description": "If cell is loaded for the first time" + }, + { + "value": 51, + "description": "If cell is already loaded" + } + ] + }, + "layout": { + "min": 14880512, + "max": 14880768, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "refCodeSlice" + }, + { + "$": "refCodeSlice" + } + ] + }, + "exec": "exec_ifref_elseref", + "kind": "ext", + "prefix": 58127, + "prefix_str": "E30F", + "tlb": "#e30f body: ^Cell else: ^Cell" + }, + "effects": ["CellLoad"], + "signature": { + "stack_string": "cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c1", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + }, + { + "type": "variable", + "var_name": "c'", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 193, + "function_name": "exec_ifref_elseref" + } + }, + { + "name": "IFBITJMPREF", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `i`-th bit is set in integer `x`, jumps to `body` stored in code cell reference, otherwise does nothing.", + "long": "If condition is met, load reference from the current code cell, transforms it to a _Slice_ and then to an ordinary _Continuation_ and finally jumps to it. Value `x` remains on the stack and available in `body` continuation. The remainder of the current continuation is discarded which means that after `body` completes, control will not return to instruction immediately following the `IFBITJMPREF`. Instead, it will return to the instruction immediately following the instruction that started current continuation. If this continuation is default `quit`, the program will exit with code 0. When condition is not met, reference is not loaded, so instruction does not consume extra gas for cell loading.", + "tags": [], + "operands": ["i", "body"], + "exit_codes": [ + { + "errno": "4", + "condition": "If `x` is a `NaN`." + } + ], + "docs_links": [ + { + "name": "JMP vs. EXECUTE", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/manual-handling-and-jmp-vs-execute/" + } + ], + "gas": [ + { + "value": 26, + "description": "If reference Cell is already loaded" + }, + { + "value": 126, + "description": "If cell is loaded for the first time" + }, + { + "value": 51, + "description": "If cell is already loaded" + } + ] + }, + "layout": { + "min": 14925824, + "max": 14934016, + "checkLen": 11, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 5, + "range": { + "min": "0", + "max": "31" + } + }, + { + "$": "refCodeSlice" + } + ] + }, + "exec": "exec_if_bit_jmpref", + "kind": "ext", + "prefix": 1822, + "prefix_str": "71E", + "tlb": "#71e i: (## 5) body: ^Cell" + }, + "effects": ["ImplicitJumpRef", "CellLoad"], + "signature": { + "stack_string": "x:Int -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 459, + "function_name": "exec_if_bit_jmpref" + } + }, + { + "name": "IFNBITJMPREF", + "category": "continuation", + "sub_category": "continuation_cond", + "description": { + "short": "If `i`-th bit is NOT set in integer `x`, jumps to `body` stored in code cell reference, otherwise does nothing.", + "long": "If condition is met, load reference from the current code cell, transforms it to a _Slice_ and then to an ordinary _Continuation_ and finally jumps to it. Value `x` remains on the stack and available in `body` continuation. The remainder of the current continuation is discarded which means that after `body` completes, control will not return to instruction immediately following the `IFNBITJMPREF`. Instead, it will return to the instruction immediately following the instruction that started current continuation. If this continuation is default `quit`, the program will exit with code 0. When condition is not met, reference is not loaded, so instruction does not consume extra gas for cell loading.", + "tags": [], + "operands": ["i", "body"], + "exit_codes": [ + { + "errno": "4", + "condition": "If `x` is a `NaN`." + } + ], + "docs_links": [ + { + "name": "JMP vs. EXECUTE", + "url": "https://txtracer.ton.org/spec/doc/book/continuations/manual-handling-and-jmp-vs-execute/" + } + ], + "gas": [ + { + "value": 26, + "description": "If reference Cell is already loaded" + }, + { + "value": 126, + "description": "If cell is loaded for the first time" + }, + { + "value": 51, + "description": "If cell is already loaded" + } + ] + }, + "layout": { + "min": 14934016, + "max": 14942208, + "checkLen": 11, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 5, + "range": { + "min": "0", + "max": "31" + } + }, + { + "$": "refCodeSlice" + } + ] + }, + "exec": "exec_if_bit_jmpref", + "kind": "ext", + "prefix": 1823, + "prefix_str": "71F", + "tlb": "#71f i: (## 5) body: ^Cell" + }, + "effects": ["ImplicitJumpRef", "CellLoad"], + "signature": { + "stack_string": "x:Int -> x:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c" + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 459, + "function_name": "exec_if_bit_jmpref" + } + }, + { + "name": "DICTPUSHCONST", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "Pushes a non-empty constant dictionary `d` (as a `Cell^?`) along with its `key_len`, stored as a part of the instruction. An empty dictionary can be pushed by a `PUSHNULL` instruction instead.", + "long": "The dictionary itself is created from the first of remaining references of the current continuation. In this way, the complete `DICTPUSHCONST` instruction can be obtained by first serializing `xF4A4_`, then the non-empty dictionary itself (one `1` bit and a `Cell` reference), and then the unsigned 10-bit integer `key_len` (as if by a `STU 10` instruction).", + "tags": [], + "operands": ["d", "key_len"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16032768, + "max": 16033792, + "checkLen": 14, + "skipLen": 24, + "args": { + "$": "dictpush" + }, + "exec": "exec_push_const_dict", + "kind": "fixed", + "prefix": 15657, + "prefix_str": "3D29", + "tlb": "#3d29 d: ^Cell key_len: (## 10)" + }, + "signature": { + "stack_string": "∅ -> d:Cell|Null key_len:Int", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "d", + "value_types": ["Cell", "Null"] + }, + { + "type": "simple", + "name": "key_len", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 620, + "function_name": "exec_push_const_dict" + } + }, + { + "name": "PFXDICTSWITCH", + "category": "dictionary", + "sub_category": "", + "description": { + "short": "Performs prefix dictionary lookup and control transfer.", + "long": "Looks up a `prefix` in dictionary `D` and if found, jumps to the corresponding continuation. Similar to `PFXDICTGETJMP` but with predefined dictionary and key length.", + "tags": ["dictionary", "prefix", "control"], + "operands": ["d", "key_len"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16034816, + "max": 16035840, + "checkLen": 14, + "skipLen": 24, + "args": { + "$": "dictpush" + }, + "exec": "exec_const_pfx_dict_switch", + "kind": "fixed", + "prefix": 15659, + "prefix_str": "3D2B", + "tlb": "#3d2b d: ^Cell key_len: (## 10)" + }, + "signature": { + "stack_string": "prefix:Slice -> (prefix:Slice 0)", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "prefix", + "value_types": ["Slice"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "is_found", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "prefix", + "value_types": ["Slice"] + } + ] + } + ] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/dictops.cpp", + "line_number": 692, + "function_name": "exec_const_pfx_dict_switch" + } + }, + { + "name": "SDBEGINSX", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Checks whether `s` begins with (the data bits of) `search`, and removes `search` from `s` on success. On failure throws a cell deserialization exception. Primitive `SDPFXREV` can be considered a quiet version of `SDBEGINSX`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14099968, + "max": 14100224, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_slice_begins_with(_1, false)", + "kind": "simple", + "prefix": 55078, + "prefix_str": "D726", + "tlb": "#d726" + }, + "signature": { + "stack_string": "s:Slice search:Slice -> s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "search", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1215, + "function_name": "exec_slice_begins_with" + } + }, + { + "name": "SDBEGINSXQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Checks whether `s` begins with (the data bits of) `search`, and removes `search` from `s` on success. This is a quiet version of `SDBEGINSX` which means it pushes a status flag onto the stack: 0 if `s` does not begin with `search`, -1 if it does.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14100224, + "max": 14100480, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_slice_begins_with(_1, true)", + "kind": "simple", + "prefix": 55079, + "prefix_str": "D727", + "tlb": "#d727" + }, + "signature": { + "stack_string": "s:Slice search:Slice -> (s:Slice 0)|(s':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "search", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1215, + "function_name": "exec_slice_begins_with" + } + }, + { + "name": "SDBEGINS", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Checks whether `s` begins with constant bitstring `search` of length `8x+3` (with continuation bit assumed), where `0 <= x <= 127`, and removes `search` from `s` on success.", + "tags": [], + "operands": ["search"], + "exit_codes": [ + { + "errno": "6", + "condition": "Not enough data bits for a SDBEGINS instruction." + }, + { + "errno": "9", + "condition": "Slice does not begin with expected data bits." + } + ], + "gas": [ + { + "value": 31, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14100480, + "max": 14101504, + "checkLen": 14, + "skipLen": 21, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "slice", + "refs": { + "$": "refs", + "count": 0 + }, + "bits": { + "$": "uint", + "len": 7, + "range": { + "min": "0", + "max": "127" + } + }, + "pad": 3 + } + ] + }, + "exec": "exec_slice_begins_with_const", + "kind": "ext", + "prefix": 13770, + "prefix_str": "35CA", + "tlb": "#35ca bits: (## 7) data: ((8 * bits + 3) * Bit)" + }, + "signature": { + "stack_string": "s:Slice -> s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1222, + "function_name": "exec_slice_begins_with_const" + } + }, + { + "name": "SDBEGINSQ", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Checks whether `s` begins with constant bitstring `search` of length `8x+3` (with continuation bit assumed), where `0 <= x <= 127`, and removes `search` from `s` on success. This is a quiet version of `SDBEGINS` which means it pushes a status flag onto the stack: 0 if `s` does not begin with `search`, -1 if it does.", + "tags": [], + "operands": ["search"], + "gas": [ + { + "value": 31, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14101504, + "max": 14102528, + "checkLen": 14, + "skipLen": 21, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "slice", + "refs": { + "$": "refs", + "count": 0 + }, + "bits": { + "$": "uint", + "len": 7, + "range": { + "min": "0", + "max": "127" + } + }, + "pad": 3 + } + ] + }, + "exec": "exec_slice_begins_with_const", + "kind": "ext", + "prefix": 13771, + "prefix_str": "35CB", + "tlb": "#35cb bits: (## 7) data: ((8 * bits + 3) * Bit)" + }, + "signature": { + "stack_string": "s:Slice -> (s:Slice 0)|(s':Slice -1) status:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "conditional", + "name": "status", + "match": [ + { + "value": 0, + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + { + "value": -1, + "stack": [ + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + ] + }, + { + "type": "simple", + "name": "status", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1222, + "function_name": "exec_slice_begins_with_const" + } + }, + { + "name": "STREFCONST", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Pushes the reference `c` and stores it into _Builder_.", + "tags": ["builder building"], + "operands": ["c"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHREF [c]", "STREFR"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13574144, + "max": 13574400, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "refCodeSlice" + } + ] + }, + "exec": "exec_store_const_ref", + "kind": "ext-range", + "prefix": 53024, + "prefix_str": "CF20", + "tlb": "#cf20 c: ^Cell" + }, + "signature": { + "stack_string": "b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 647, + "function_name": "exec_store_const_ref" + } + }, + { + "name": "STREF2CONST", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores two constant references `c1` and `c2` into _Builder_.", + "tags": ["builder building"], + "operands": ["c1", "c2"], + "other_implementations": [ + { + "exact": true, + "instructions": ["STREFCONST {} // c1", "STREFCONST {} // c2"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13574400, + "max": 13574656, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "refCodeSlice" + }, + { + "$": "refCodeSlice" + } + ] + }, + "exec": "exec_store_const_ref", + "kind": "ext-range", + "prefix": 53025, + "prefix_str": "CF21", + "tlb": "#cf21 c1: ^Cell c2: ^Cell" + }, + "signature": { + "stack_string": "b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 647, + "function_name": "exec_store_const_ref" + } + }, + { + "name": "THROWANYIF", + "category": "exception", + "sub_category": "", + "description": { + "short": "Throws an exception with error code `num` and parameter set to zero only if `cond` is NOT EQUAL to 0. Parameter represents the additional information passed to the exception handler.", + "long": "", + "tags": ["exception_handling", "throw", "control_flow"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "If no exception was thrown" + }, + { + "value": 76, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 15921664, + "max": 15921920, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_throw_any", + "kind": "simple", + "prefix": 62194, + "prefix_str": "F2F2", + "tlb": "#f2f2" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "num:Int cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "num", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1153, + "function_name": "exec_throw_any" + } + }, + { + "name": "THROWARGANYIF", + "category": "exception", + "sub_category": "", + "description": { + "short": "Throws an exception with error code `num` and parameter set to `x` taken from the stack only if `cond` is NOT EQUAL to 0. Parameter represents the additional information passed to the exception handler.", + "long": "", + "tags": ["exception_handling", "throw", "control_flow"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "If no exception was thrown" + }, + { + "value": 76, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 15921920, + "max": 15922176, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_throw_any", + "kind": "simple", + "prefix": 62195, + "prefix_str": "F2F3", + "tlb": "#f2f3" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "x:Int num:Int cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "num", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1153, + "function_name": "exec_throw_any" + } + }, + { + "name": "DEBUGSTR", + "category": "debug", + "sub_category": "", + "description": { + "short": "", + "long": "Outputs passed string to debug logs.", + "tags": [], + "operands": ["s"], + "examples": [ + { + "instructions": [ + { + "instruction": "", + "comment": "Outputs \"hello world\" to logs" + }, + { + "instruction": "DEBUGSTR \"hello world\"", + "comment": "" + } + ], + "stack": { + "input": [], + "output": [] + } + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16707584, + "max": 16711680, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "debugstr" + } + ] + }, + "exec": "exec_dummy_debug_str", + "kind": "ext", + "prefix": 4079, + "prefix_str": "FEF", + "tlb": "#fef bits: (## 4) data: ((8 * bits + 8) * Bit)" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/debugops.cpp", + "line_number": 41, + "function_name": "exec_dummy_debug_str" + } + }, + { + "name": "SETCONTCTR", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Stores `x` into the savelist of continuation `c` as `c(i)`, and returns the resulting continuation `c'`. Almost all operations with continuations may be expressed in terms of `SETCONTCTR`, `POPCTR`, and `PUSHCTR`.", + "tags": [], + "operands": ["i"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15556608, + "max": 15558656, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "control", + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_setcont_ctr", + "kind": "fixed-range", + "prefix": 60768, + "prefix_str": "ED60", + "tlb": "#ed6 i: (## 4)" + }, + "signature": { + "stack_string": "x:Any c:Continuation -> c':Continuation", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x" + }, + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c'", + "value_types": ["Continuation"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 807, + "function_name": "exec_setcont_ctr" + } + }, + { + "name": "SETRETCTR", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Stores the value from control register `c(i)` into the savelist of continuation `c0`.", + "tags": [], + "operands": ["i"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHCTR c0", "SETCONTCTR c(i)", "POPCTR c0"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15560704, + "max": 15562752, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "control", + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_setret_ctr", + "kind": "fixed-range", + "prefix": 60784, + "prefix_str": "ED70", + "tlb": "#ed7 i: (## 4)" + }, + "signature": { + "stack_string": "x:Any -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x" + } + ], + "registers": [ + { + "type": "constant", + "index": 0 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 0 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 818, + "function_name": "exec_setret_ctr" + } + }, + { + "name": "SETALTCTR", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Stores the value from control register `c(i)` into the savelist of continuation `c1`.", + "tags": [], + "operands": ["i"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHCTR c1", "SETCONTCTR c(i)", "POPCTR c1"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15564800, + "max": 15566848, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "control", + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_setalt_ctr", + "kind": "fixed-range", + "prefix": 60800, + "prefix_str": "ED80", + "tlb": "#ed8 i: (## 4)" + }, + "signature": { + "stack_string": "x:Any -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x" + } + ], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 827, + "function_name": "exec_setalt_ctr" + } + }, + { + "name": "POPSAVE", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Pops a value from the stack and stores it into control register `c(i)`, but also saves the old value of `c(i)` into continuation `c0`.", + "tags": [], + "operands": ["i"], + "other_implementations": [ + { + "exact": false, + "instructions": ["SAVECTR c(i)", "POPCTR c(i)"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15568896, + "max": 15570944, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "control", + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_popsave_ctr", + "kind": "fixed-range", + "prefix": 60816, + "prefix_str": "ED90", + "tlb": "#ed9 i: (## 4)" + }, + "signature": { + "stack_string": "x:Any -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x" + } + ], + "registers": [ + { + "type": "variable", + "var_name": "i" + }, + { + "type": "constant", + "index": 0 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 0 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 836, + "function_name": "exec_popsave_ctr" + } + }, + { + "name": "SAVECTR", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Saves the current value of `c(i)` into the savelist of continuation `c0`. If an entry for `c(i)` is already present in the savelist of `c0`, nothing is done.", + "tags": [], + "operands": ["i"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHCTR c(i)", "SETRETCTR c(i)"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15572992, + "max": 15575040, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "control", + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_save_ctr", + "kind": "fixed-range", + "prefix": 60832, + "prefix_str": "EDA0", + "tlb": "#eda i: (## 4)" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [ + { + "type": "variable", + "var_name": "i" + }, + { + "type": "constant", + "index": 0 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 0 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 853, + "function_name": "exec_save_ctr" + } + }, + { + "name": "SAVEALTCTR", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Similar to `SAVECTR c(i)`, but saves the current value of `c(i)` into the savelist of `c1`, not `c0`.", + "tags": [], + "operands": ["i"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15577088, + "max": 15579136, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "control", + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_savealt_ctr", + "kind": "fixed-range", + "prefix": 60848, + "prefix_str": "EDB0", + "tlb": "#edb i: (## 4)" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [ + { + "type": "variable", + "var_name": "i" + }, + { + "type": "constant", + "index": 1 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 1 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 873, + "function_name": "exec_savealt_ctr" + } + }, + { + "name": "SAVEBOTHCTR", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Saves the current value of `c(i)` into the savelist of both `c0` and `c1`.", + "tags": [], + "operands": ["i"], + "other_implementations": [ + { + "exact": true, + "instructions": ["SAVECTR c(i)", "SAVEALTCTR c(i)"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15581184, + "max": 15583232, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "control", + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_saveboth_ctr", + "kind": "fixed-range", + "prefix": 60864, + "prefix_str": "EDC0", + "tlb": "#edc i: (## 4)" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [ + { + "type": "variable", + "var_name": "i" + }, + { + "type": "constant", + "index": 0 + }, + { + "type": "constant", + "index": 1 + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 0 + }, + { + "type": "constant", + "index": 1 + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 882, + "function_name": "exec_saveboth_ctr" + } + }, + { + "name": "RUNVM", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "Runs child VM with `code` and stack `x_1...x_n`. Returns the resulting stack `x'_1...x'_m` and exitcode. Other arguments and return values are enabled by flags.", + "long": "Flags:\n\n- **+1** — same_c3 (set c3 to code)\n- **+2** — push_0 (push an implicit 0 before running the code); only works with +1 enabled\n- **+4** — load c4 (persistent data) from stack and return its final value\n- **+8** — load gas limit from stack and return consumed gas\n- **+16** — load c7 (smart-contract context)\n- **+32** — return c5 (actions)\n- **+64** — pop hard gas limit (enabled by ACCEPT) from stack as well\n- **+128** — isolated gas consumption (separate set of visited cells, reset chksgn counter)\n- **+256** — pop number N, return exactly N values from stack (only if res=0 or 1; if not enough then res=stk_und)", + "tags": [], + "operands": ["flags"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14368768, + "max": 14372864, + "checkLen": 12, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "runvmArg" + } + ] + }, + "exec": "exec_runvm", + "version": 4, + "kind": "fixed", + "prefix": 3508, + "prefix_str": "DB4", + "tlb": "#db4 flags: (## 12)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 272, + "function_name": "exec_runvm" + } + }, + { + "name": "2SWAP", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Swaps two pairs of stack elements like `2 2 BLKSWAP` or `s3 s2 XCHG2`.", + "tags": ["stack"], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["BLKSWAP 2 2"] + }, + { + "exact": true, + "instructions": ["XCHG2 s3 s2"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 4 elements." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5898240, + "max": 5963776, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_2swap", + "kind": "simple", + "prefix": 90, + "prefix_str": "5A", + "tlb": "#5a" + }, + "signature": { + "stack_string": "z:Any y:Any x:Any k:Any -> x:Any k:Any z:Any y:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "z", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Any"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 326, + "function_name": "exec_2swap" + } + }, + { + "name": "2DROP", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Removes top two elements from the stack.", + "tags": ["stack"], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["DROP", "DROP"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5963776, + "max": 6029312, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_2drop", + "kind": "simple", + "prefix": 91, + "prefix_str": "5B", + "tlb": "#5b" + }, + "signature": { + "stack_string": "y:Any x:Any -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 335, + "function_name": "exec_2drop" + } + }, + { + "name": "2DUP", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Duplicates top two stack elements.", + "tags": ["stack"], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSH2 s1 s0"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "DUP2", + "comment": "Duplicates the top two elements (1,2) and pushes them onto the stack" + } + ], + "stack": { + "input": ["1", "2"], + "output": ["1", "2", "1", "2"] + } + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 6029312, + "max": 6094848, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_2dup", + "kind": "simple", + "prefix": 92, + "prefix_str": "5C", + "tlb": "#5c" + }, + "signature": { + "stack_string": "y:Any x:Any -> y:Any x:Any y:Any x:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 344, + "function_name": "exec_2dup" + } + }, + { + "name": "2OVER", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Copies third and fourth stack elements to the top.", + "tags": ["stack"], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSH2 s3 s2"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 4 elements." + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 6094848, + "max": 6160384, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_2over", + "kind": "simple", + "prefix": 93, + "prefix_str": "5D", + "tlb": "#5d" + }, + "signature": { + "stack_string": "z:Any y:Any x:Any k:Any -> z:Any y:Any x:Any k:Any z:Any y:Any", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "z", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Any"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "z", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "k", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Any"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Any"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 353, + "function_name": "exec_2over" + } + }, + { + "name": "ADDRSHIFT#MOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor((x+w)/2^t)` and `r=(x+w)-q*2^t`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11087872, + "max": 11088128, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shrmod(_1, _2, 2)", + "version": 4, + "kind": "fixed", + "prefix": 43312, + "prefix_str": "A930", + "tlb": "#a930 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int w:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "ADDRSHIFTR#MOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round((x+w)/2^t)` and `r=(x+w)-q*2^t`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11088128, + "max": 11088384, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shrmod(_1, _2, 2)", + "version": 4, + "kind": "fixed", + "prefix": 43313, + "prefix_str": "A931", + "tlb": "#a931 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int w:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "ADDRSHIFTC#MOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil((x+w)/2^t)` and `r=(x+w)-q*2^t`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11088384, + "max": 11088640, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shrmod(_1, _2, 2)", + "version": 4, + "kind": "fixed", + "prefix": 43314, + "prefix_str": "A932", + "tlb": "#a932 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int w:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "RSHIFT#", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = floor(x / 2 ^ t)`", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11088896, + "max": 11089152, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43316, + "prefix_str": "A934", + "tlb": "#a934 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "RSHIFTR#", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = round(x / 2^t)`", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11089152, + "max": 11089408, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43317, + "prefix_str": "A935", + "tlb": "#a935 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "RSHIFTC#", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = ceil(x / 2^t)`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11089408, + "max": 11089664, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43318, + "prefix_str": "A936", + "tlb": "#a936 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "MODPOW2#", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x % (2^t)`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11089920, + "max": 11090176, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43320, + "prefix_str": "A938", + "tlb": "#a938 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "MODPOW2R#", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x % (2^t)`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11090176, + "max": 11090432, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43321, + "prefix_str": "A939", + "tlb": "#a939 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "MODPOW2C#", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x % (2^t)`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11090432, + "max": 11090688, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43322, + "prefix_str": "A93A", + "tlb": "#a93a t: (## 8)" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "RSHIFT#MOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor(x/2^t)` and `r=x-q*2^t`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11090944, + "max": 11091200, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43324, + "prefix_str": "A93C", + "tlb": "#a93c t: (## 8)" + }, + "signature": { + "stack_string": "x:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "RSHIFTR#MOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round(x/2^t)` and `r=x-q*2^t`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11091200, + "max": 11091456, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43325, + "prefix_str": "A93D", + "tlb": "#a93d t: (## 8)" + }, + "signature": { + "stack_string": "x:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "RSHIFTC#MOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil(x/2^t)` and `r=x-q*2^t`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11091456, + "max": 11091712, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43326, + "prefix_str": "A93E", + "tlb": "#a93e t: (## 8)" + }, + "signature": { + "stack_string": "x:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "MULADDRSHIFT#MOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor((xy+w)/2^t)` and `r=(xy+w)-q*2^t`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11120640, + "max": 11120896, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_mulshrmod(_1, _2, 2)", + "version": 4, + "kind": "fixed", + "prefix": 43440, + "prefix_str": "A9B0", + "tlb": "#a9b0 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int w:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULADDRSHIFTR#MOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round((xy+w)/2^t)` and `r=(xy+w)-q*2^t`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11120896, + "max": 11121152, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_mulshrmod(_1, _2, 2)", + "version": 4, + "kind": "fixed", + "prefix": 43441, + "prefix_str": "A9B1", + "tlb": "#a9b1 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int w:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULADDRSHIFTC#MOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil((xy+w)/2^t)` and `r=(xy+w)-q*2^t`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11121152, + "max": 11121408, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_mulshrmod(_1, _2, 2)", + "version": 4, + "kind": "fixed", + "prefix": 43442, + "prefix_str": "A9B2", + "tlb": "#a9b2 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int w:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULRSHIFT#", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = (x * y) >> t`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11121664, + "max": 11121920, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_mulshrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43444, + "prefix_str": "A9B4", + "tlb": "#a9b4 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULRSHIFTR#", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = round(x*y/2^t)`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11121920, + "max": 11122176, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_mulshrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43445, + "prefix_str": "A9B5", + "tlb": "#a9b5 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULRSHIFTC#", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = ceil(x*y/2^t)`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11122176, + "max": 11122432, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_mulshrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43446, + "prefix_str": "A9B6", + "tlb": "#a9b6 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULMODPOW2#", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x*y mod 2^t`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11122688, + "max": 11122944, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_mulshrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43448, + "prefix_str": "A9B8", + "tlb": "#a9b8 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULMODPOW2R#", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x*y mod 2^t`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11122944, + "max": 11123200, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_mulshrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43449, + "prefix_str": "A9B9", + "tlb": "#a9b9 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULMODPOW2C#", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = x*y mod 2^t`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11123200, + "max": 11123456, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_mulshrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43450, + "prefix_str": "A9BA", + "tlb": "#a9ba t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULRSHIFT#MOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor(x*y/2^t)` and `r=xy-q*2^t`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11123712, + "max": 11123968, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_mulshrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43452, + "prefix_str": "A9BC", + "tlb": "#a9bc t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULRSHIFTR#MOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round(x*y/2^t)` and `r=xy-q*2^t`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11123968, + "max": 11124224, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_mulshrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43453, + "prefix_str": "A9BD", + "tlb": "#a9bd t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "MULRSHIFTC#MOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil(x*y/2^t)` and `r=xy-q*2^t`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11124224, + "max": 11124480, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_mulshrmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43454, + "prefix_str": "A9BE", + "tlb": "#a9be t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 497, + "function_name": "exec_mulshrmod" + } + }, + { + "name": "LSHIFT#ADDDIVMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor((x*2^t+w)/z)` and `r=(x*2^t+w)-zq`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11128832, + "max": 11129088, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shldivmod(_1, _2, 2)", + "version": 4, + "kind": "fixed", + "prefix": 43472, + "prefix_str": "A9D0", + "tlb": "#a9d0 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFT#ADDDIVMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round((x*2^t+w)/z)` and `r=(x*2^t+w)-zq`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11129088, + "max": 11129344, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shldivmod(_1, _2, 2)", + "version": 4, + "kind": "fixed", + "prefix": 43473, + "prefix_str": "A9D1", + "tlb": "#a9d1 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFT#ADDDIVMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil((x*2^t+w)/z)` and `r=(x*2^t+w)-zq`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11129344, + "max": 11129600, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shldivmod(_1, _2, 2)", + "version": 4, + "kind": "fixed", + "prefix": 43474, + "prefix_str": "A9D2", + "tlb": "#a9d2 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int w:Int z:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "w", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "z", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFT#DIV", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = floor(2^t*x/y)`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11129856, + "max": 11130112, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shldivmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43476, + "prefix_str": "A9D4", + "tlb": "#a9d4 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFT#DIVR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = round(2^t*x/y)`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11130112, + "max": 11130368, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shldivmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43477, + "prefix_str": "A9D5", + "tlb": "#a9d5 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFT#DIVC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = ceil(2^t*x/y)`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11130368, + "max": 11130624, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shldivmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43478, + "prefix_str": "A9D6", + "tlb": "#a9d6 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFT#MOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = 2^t*x mod y`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11130880, + "max": 11131136, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shldivmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43480, + "prefix_str": "A9D8", + "tlb": "#a9d8 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFT#MODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = 2^t*x mod y`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11131136, + "max": 11131392, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shldivmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43481, + "prefix_str": "A9D9", + "tlb": "#a9d9 t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFT#MODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = 2^t*x mod y`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11131392, + "max": 11131648, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shldivmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43482, + "prefix_str": "A9DA", + "tlb": "#a9da t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFT#DIVMOD", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=floor(2^t*x/y)` and `r=2^t*x-q*y`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11131904, + "max": 11132160, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shldivmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43484, + "prefix_str": "A9DC", + "tlb": "#a9dc t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFT#DIVMODR", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=round(2^t*x/y)` and `r=2^t*x-q*y`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11132160, + "max": 11132416, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shldivmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43485, + "prefix_str": "A9DD", + "tlb": "#a9dd t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "LSHIFT#DIVMODC", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `q=ceil(2^t*x/y)` and `r=2^t*x-q*y`.", + "tags": [], + "operands": ["t"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11132416, + "max": 11132672, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_shldivmod(_1, _2, 2)", + "kind": "fixed", + "prefix": 43486, + "prefix_str": "A9DE", + "tlb": "#a9de t: (## 8)" + }, + "signature": { + "stack_string": "x:Int y:Int -> q:Int r:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "q", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "r", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 595, + "function_name": "exec_shldivmod" + } + }, + { + "name": "HASHEXT", + "category": "crypto", + "sub_category": "crypto_common", + "description": { + "short": "", + "long": "Calculates and returns hash of the concatenation of slices or builders `s_1`...`s_length`.\n\nHash ID can be one of the following:\n- `0` - **SHA256** (1/33 gas per byte)\n- `1` - **SHA512** (1/16 gas per byte)\n- `2` - **BLAKE2B** (1/19 gas per byte)\n- `3` - **KECCAK256** (1/11 gas per byte)\n- `4` - **KECCAK512** (1/6 gas per byte)", + "tags": [], + "operands": ["hash_id"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16319488, + "max": 16319744, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "hash" + } + ] + }, + "exec": "exec_hash_ext", + "version": 4, + "kind": "fixed", + "prefix": 63748, + "prefix_str": "F904", + "tlb": "#f904 hash_id: (## 8)" + }, + "signature": { + "stack_string": "x_1...x_length length:Int -> hash:Int", + "inputs": { + "stack": [ + { + "type": "array", + "name": "tuple_elements", + "length_var": "length", + "array_entry": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice", "Builder"] + } + ] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "hash", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 652, + "function_name": "exec_hash_ext" + } + }, + { + "name": "HASHEXTR", + "category": "crypto", + "sub_category": "crypto_common", + "description": { + "short": "", + "long": "Calculates and returns hash of the concatenation of slices or builders `s_1`...`s_length` in reverse order.\n\nHash ID can be one of the following:\n- `0` - **SHA256** (1/33 gas per byte)\n- `1` - **SHA512** (1/16 gas per byte)\n- `2` - **BLAKE2B** (1/19 gas per byte)\n- `3` - **KECCAK256** (1/11 gas per byte)\n- `4` - **KECCAK512** (1/6 gas per byte)", + "tags": [], + "operands": ["hash_id"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16319744, + "max": 16320000, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "hash" + } + ] + }, + "exec": "exec_hash_ext", + "version": 4, + "kind": "fixed", + "prefix": 63749, + "prefix_str": "F905", + "tlb": "#f905 hash_id: (## 8)" + }, + "signature": { + "stack_string": "x_1...x_length length:Int -> hash:Int", + "inputs": { + "stack": [ + { + "type": "array", + "name": "tuple_elements", + "length_var": "length", + "array_entry": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice", "Builder"] + } + ] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "hash", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 652, + "function_name": "exec_hash_ext" + } + }, + { + "name": "HASHEXTA", + "category": "crypto", + "sub_category": "crypto_common", + "description": { + "short": "", + "long": "Calculates hash of the concatenation of slices (or builders) `s_1`...`s_length` and appends the resulting hash to a builder `b`.\n\nHash ID can be one of the following:\n- `0` - **SHA256** (1/33 gas per byte)\n- `1` - **SHA512** (1/16 gas per byte)\n- `2` - **BLAKE2B** (1/19 gas per byte)\n- `3` - **KECCAK256** (1/11 gas per byte)\n- `4` - **KECCAK512** (1/6 gas per byte)", + "tags": [], + "operands": ["hash_id"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16320000, + "max": 16320256, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "hash" + } + ] + }, + "exec": "exec_hash_ext", + "version": 4, + "kind": "fixed", + "prefix": 63750, + "prefix_str": "F906", + "tlb": "#f906 hash_id: (## 8)" + }, + "signature": { + "stack_string": "b:Builder x_1...x_length length:Int -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "array", + "name": "tuple_elements", + "length_var": "length", + "array_entry": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice", "Builder"] + } + ] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 652, + "function_name": "exec_hash_ext" + } + }, + { + "name": "HASHEXTAR", + "category": "crypto", + "sub_category": "crypto_common", + "description": { + "short": "", + "long": "Calculates and returns hash of the concatenation of slices or builders `s_1`...`s_length` in reverse order and appends the resulting hash to a builder `b`.\n\nHash ID can be one of the following:\n- `0` - **SHA256** (1/33 gas per byte)\n- `1` - **SHA512** (1/16 gas per byte)\n- `2` - **BLAKE2B** (1/19 gas per byte)\n- `3` - **KECCAK256** (1/11 gas per byte)\n- `4` - **KECCAK512** (1/6 gas per byte)", + "tags": [], + "operands": ["hash_id"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16320256, + "max": 16320512, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "hash" + } + ] + }, + "exec": "exec_hash_ext", + "version": 4, + "kind": "fixed", + "prefix": 63751, + "prefix_str": "F907", + "tlb": "#f907 hash_id: (## 8)" + }, + "signature": { + "stack_string": "b:Builder x_1...x_length length:Int -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "array", + "name": "tuple_elements", + "length_var": "length", + "array_entry": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice", "Builder"] + } + ] + }, + { + "type": "simple", + "name": "length", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 652, + "function_name": "exec_hash_ext" + } + }, + { + "name": "STREF", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores a reference to _Cell_ `c` into _Builder_ `b`.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13369344, + "max": 13434880, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_ref(_1, false)", + "kind": "simple", + "prefix": 204, + "prefix_str": "CC", + "tlb": "#cc" + }, + "signature": { + "stack_string": "c:Cell b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 415, + "function_name": "exec_store_ref" + } + }, + { + "name": "STREF_ALT", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores a reference to _Cell_ `c` into _Builder_ `b`. This is a longer encoding of `STREF`.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13570048, + "max": 13570304, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_ref(_1, false)", + "kind": "simple", + "prefix": 53008, + "prefix_str": "CF10", + "tlb": "#cf10" + }, + "signature": { + "stack_string": "c:Cell b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Cell"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 415, + "function_name": "exec_store_ref" + } + }, + { + "name": "STSLICE", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores _Slice_ `s` into _Builder_ `b`.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13500416, + "max": 13565952, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_slice(_1, false)", + "kind": "simple", + "prefix": 206, + "prefix_str": "CE", + "tlb": "#ce" + }, + "signature": { + "stack_string": "s:Slice b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"], + "mutations": [ + { + "length": { + "stack_amount_arg": 1 + } + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 507, + "function_name": "exec_store_slice" + } + }, + { + "name": "STSLICE_ALT", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores _Slice_ `s` into _Builder_ `b`. This is a longer encoding of `STSLICE`.", + "tags": ["builder building"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13570560, + "max": 13570816, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_store_slice(_1, false)", + "kind": "simple", + "prefix": 53010, + "prefix_str": "CF12", + "tlb": "#cf12" + }, + "signature": { + "stack_string": "s:Slice b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"], + "mutations": [ + { + "length": { + "stack_amount_arg": 1 + } + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 507, + "function_name": "exec_store_slice" + } + }, + { + "name": "XCHG3", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Performs `s2 s(i) XCHG`, `s1 s(j) XCHG`, and finally `s(k) XCHG_0I`.", + "tags": ["stack"], + "operands": ["i", "j", "k"], + "related_instructions": ["XCHG3_ALT"], + "other_implementations": [ + { + "exact": true, + "instructions": ["XCHG_IJ s2 s(i)", "XCHG_0I s(j)", "XCHG_0I s(k)"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `max(i,j,k) + 3` elements." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 4194304, + "max": 5242880, + "checkLen": 4, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_xchg3", + "kind": "fixed", + "prefix": 4, + "prefix_str": "4", + "tlb": "#4 i: (## 4) j: (## 4) k: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 204, + "function_name": "exec_xchg3" + } + }, + { + "name": "XCHG3_ALT", + "category": "stack", + "sub_category": "", + "description": { + "short": "", + "long": "Performs `s2 s(i) XCHG`, `s1 s(j) XCHG`, and finally `s(k) XCHG_0I`. This is a long form of `XCHG3`.", + "tags": ["stack"], + "operands": ["i", "j", "k"], + "related_instructions": ["XCHG3"], + "other_implementations": [ + { + "exact": false, + "instructions": ["XCHG_IJ s2 s(i)", "XCHG_0I s(j)", "XCHG_0I s(k)"] + } + ], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than `max(i,j,k) + 3` elements." + } + ], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5505024, + "max": 5509120, + "checkLen": 12, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_xchg3", + "kind": "fixed", + "prefix": 1344, + "prefix_str": "540", + "tlb": "#540 i: (## 4) j: (## 4) k: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 204, + "function_name": "exec_xchg3" + } + }, + { + "name": "STI", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "Stores a signed `width`-bit integer `x` into _Builder_ `b` and returns the resulting _Builder_ `b'`.", + "long": "", + "tags": ["builder building"], + "operands": ["width"], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "5", + "condition": "Integer is too large to fit into `c` bits." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + }, + { + "errno": "7", + "condition": "Second element is not a Builder." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13238272, + "max": 13303808, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_store_int(_1, _2, true)", + "kind": "fixed", + "prefix": 202, + "prefix_str": "CA", + "tlb": "#ca width: (## 8)" + }, + "signature": { + "stack_string": "x:Int b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"], + "mutations": [ + { + "length": { + "amount_arg": 0 + } + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 407, + "function_name": "exec_store_int" + } + }, + { + "name": "STI_ALT", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "Stores a signed `width`-bit integer `x` into _Builder_ `b` and returns the resulting _Builder_ `b'`. A longer version of `[width] STI`.", + "long": "", + "tags": ["builder building"], + "operands": ["width"], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "5", + "condition": "Integer is too large to fit into `c` bits." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + }, + { + "errno": "7", + "condition": "Second element is not a Builder." + } + ], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13568000, + "max": 13568256, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_store_int_fixed", + "kind": "fixed", + "prefix": 53000, + "prefix_str": "CF08", + "tlb": "#cf08 width: (## 8)" + }, + "signature": { + "stack_string": "x:Int b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"], + "mutations": [ + { + "length": { + "amount_arg": 0 + } + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 622, + "function_name": "exec_store_int_fixed" + } + }, + { + "name": "STU", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "Stores an unsigned `width`-bit integer `x` into _Builder_ `b` and returns the resulting _Builder_ `b'`.", + "long": "", + "tags": ["builder building"], + "operands": ["width"], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "5", + "condition": "Integer is too large to fit into `c` bits." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + }, + { + "errno": "7", + "condition": "Second element is not a Builder." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13303808, + "max": 13369344, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_store_int(_1, _2, false)", + "kind": "fixed", + "prefix": 203, + "prefix_str": "CB", + "tlb": "#cb width: (## 8)" + }, + "signature": { + "stack_string": "x:Int b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"], + "mutations": [ + { + "length": { + "amount_arg": 0 + } + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 407, + "function_name": "exec_store_int" + } + }, + { + "name": "STU_ALT", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "Stores an unsigned `width`-bit integer `x` into _Builder_ `b` and returns the resulting _Builder_ `b'`. A longer version of `[width] STU`.", + "long": "", + "tags": ["builder building"], + "operands": ["width"], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "5", + "condition": "Integer is too large to fit into `c` bits." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + }, + { + "errno": "7", + "condition": "Second element is not a Builder." + } + ], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13568256, + "max": 13568512, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_store_int_fixed", + "kind": "fixed", + "prefix": 53001, + "prefix_str": "CF09", + "tlb": "#cf09 width: (## 8)" + }, + "signature": { + "stack_string": "x:Int b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"], + "mutations": [ + { + "length": { + "amount_arg": 0 + } + } + ] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 622, + "function_name": "exec_store_int_fixed" + } + }, + { + "name": "LDI", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "Loads a signed `width`-bit integer `x` from _Slice_ `s` and pushes loaded value on stack along with _Slice_ with remainder data.", + "long": "", + "tags": ["slice parsing"], + "operands": ["width"], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + }, + { + "errno": "7", + "condition": "Second element is not a Slice." + }, + { + "errno": "9", + "condition": "Slice doesn't contain enough bits." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 -1" + }, + { + "instruction": "NEWC" + }, + { + "instruction": "STI 4", + "comment": "store -1 as signed 4-bit number" + }, + { + "instruction": "ENDC" + }, + { + "instruction": "CTOS", + "comment": "convert Cell to Slice" + }, + { + "instruction": "LDI 4", + "comment": "load previously stored 4-bit number" + } + ], + "stack": { + "input": ["Slice{-1}"], + "output": ["Slice{empty}", "-1"] + } + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13762560, + "max": 13828096, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_load_int_fixed(_1, _2, 0)", + "kind": "fixed", + "prefix": 210, + "prefix_str": "D2", + "tlb": "#d2 width: (## 8)" + }, + "signature": { + "stack_string": "s:Slice -> x:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 981, + "function_name": "exec_load_int_fixed" + } + }, + { + "name": "LDI_ALT", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads a signed `width`-bit integer `x` from _Slice_ `s` and pushes loaded value on stack along with _Slice_ with remainder data. This is a longer encoding of `LDI`.", + "tags": ["slice parsing"], + "operands": ["width"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14092288, + "max": 14092544, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_load_int_fixed2", + "kind": "fixed", + "prefix": 55048, + "prefix_str": "D708", + "tlb": "#d708 width: (## 8)" + }, + "signature": { + "stack_string": "s:Slice -> x:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1102, + "function_name": "exec_load_int_fixed2" + } + }, + { + "name": "LDU", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "Loads an unsigned `width`-bit integer `x` from _Slice_ `s` and pushes loaded value on stack along with _Slice_ with remainder data.", + "long": "", + "tags": ["slice parsing"], + "operands": ["width"], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack contains less than 2 elements." + }, + { + "errno": "7", + "condition": "Top element is not an Int." + }, + { + "errno": "7", + "condition": "Second element is not a Slice." + }, + { + "errno": "9", + "condition": "Slice doesn't contain enough bits." + } + ], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 10" + }, + { + "instruction": "NEWC" + }, + { + "instruction": "STU 4", + "comment": "store 10 as unsigned 4-bit number" + }, + { + "instruction": "ENDC" + }, + { + "instruction": "CTOS", + "comment": "convert Cell to Slice" + }, + { + "instruction": "LDU 4", + "comment": "load previously stored 4-bit number" + } + ], + "stack": { + "input": ["Slice{10}"], + "output": ["Slice{empty}", "10"] + } + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13828096, + "max": 13893632, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_load_int_fixed(_1, _2, 1)", + "kind": "fixed", + "prefix": 211, + "prefix_str": "D3", + "tlb": "#d3 width: (## 8)" + }, + "signature": { + "stack_string": "s:Slice -> x:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 981, + "function_name": "exec_load_int_fixed" + } + }, + { + "name": "LDU_ALT", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Loads an unsigned `width`-bit integer `x` from _Slice_ `s` and pushes loaded value on stack along with _Slice_ with remainder data. This is a longer encoding of `LDU`.", + "tags": ["slice parsing"], + "operands": ["width"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14092544, + "max": 14092800, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_load_int_fixed2", + "kind": "fixed", + "prefix": 55049, + "prefix_str": "D709", + "tlb": "#d709 width: (## 8)" + }, + "signature": { + "stack_string": "s:Slice -> x:Int s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1102, + "function_name": "exec_load_int_fixed2" + } + }, + { + "name": "LDSLICE", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Cuts the next `count` bits of `s` into a separate _Slice_ `loaded`.", + "tags": ["slice parsing"], + "operands": ["count"], + "exit_codes": [ + { + "errno": "9", + "condition": "Slice does not contain enough bits." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14024704, + "max": 14090240, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_load_slice_fixed", + "kind": "fixed", + "prefix": 214, + "prefix_str": "D6", + "tlb": "#d6 count: (## 8)" + }, + "signature": { + "stack_string": "s:Slice -> loaded:Slice s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "loaded", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1084, + "function_name": "exec_load_slice_fixed" + } + }, + { + "name": "LDSLICE_ALT", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "", + "long": "Cuts the next `c + 1` bits of `s` into a separate _Slice_ `loaded`. This is a longer encoding of `LDSLICE`.", + "tags": ["slice parsing"], + "operands": ["c"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14097408, + "max": 14097664, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_load_slice_fixed2", + "kind": "fixed", + "prefix": 55068, + "prefix_str": "D71C", + "tlb": "#d71c c: (## 8)" + }, + "signature": { + "stack_string": "s:Slice -> loaded:Slice s':Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "loaded", + "value_types": ["Slice"] + }, + { + "type": "simple", + "name": "s'", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 1149, + "function_name": "exec_load_slice_fixed2" + } + }, + { + "name": "LSHIFT_VAR", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "", + "long": "Shift the top element of the stack left by a number of bits equal to the second element of the stack.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11272192, + "max": 11337728, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_lshift(_1, false)", + "kind": "simple", + "prefix": 172, + "prefix_str": "AC", + "tlb": "#ac" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "range": { + "min": 0, + "max": 1023 + }, + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 740, + "function_name": "exec_lshift" + } + }, + { + "name": "LSHIFT", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "", + "long": "Shift the top element of the stack left by `c` bits.", + "tags": [], + "operands": ["c"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11141120, + "max": 11206656, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_lshift_tinyint8(_1, _2, false)", + "kind": "fixed", + "prefix": 170, + "prefix_str": "AA", + "tlb": "#aa c: (## 8)" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 722, + "function_name": "exec_lshift_tinyint8" + } + }, + { + "name": "QLSHIFT_VAR", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "Shift the top element of the stack left by a number of bits equal to the second element of the stack. Returns `NaN` if any operand is `NaN`.", + "long": "Shift the top element of the stack left by a number of bits equal to the second element of the stack. If any of the operands is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12037120, + "max": 12037376, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_lshift(_1, true)", + "kind": "simple", + "prefix": 47020, + "prefix_str": "B7AC", + "tlb": "#b7ac" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 740, + "function_name": "exec_lshift" + } + }, + { + "name": "QLSHIFT", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "Shift the top element of the stack left by `c` bits. Returns `NaN` if operand is `NaN`.", + "long": "Shift the top element of the stack left by `c` bits. If the operand is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": ["c"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036608, + "max": 12036864, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_lshift_tinyint8(_1, _2, true)", + "kind": "fixed", + "prefix": 47018, + "prefix_str": "B7AA", + "tlb": "#b7aa c: (## 8)" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 722, + "function_name": "exec_lshift_tinyint8" + } + }, + { + "name": "BCHKBITS_VAR", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Checks whether `x` bits can be stored into `b`. If there is no space for `x` more bits in `b`, throws an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "If no exception was thrown" + }, + { + "value": 76, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 13580544, + "max": 13580800, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_builder_chk_bits_refs(_1, 1)", + "kind": "simple", + "prefix": 53049, + "prefix_str": "CF39", + "tlb": "#cf39" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "b:Builder x:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 737, + "function_name": "exec_builder_chk_bits_refs" + } + }, + { + "name": "BCHKBITS", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Checks whether `count` bits can be stored into `b`.", + "tags": [], + "operands": ["count"], + "gas": [ + { + "value": 34, + "description": "If no exception was thrown" + }, + { + "value": 84, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 13580288, + "max": 13580544, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_builder_chk_bits(_1, _2, false)", + "kind": "fixed", + "prefix": 53048, + "prefix_str": "CF38", + "tlb": "#cf38 count: (## 8)" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "b:Builder -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 723, + "function_name": "exec_builder_chk_bits" + } + }, + { + "name": "BCHKBITSQ_VAR", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Checks whether `x` bits can be stored into `b`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13581568, + "max": 13581824, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_builder_chk_bits_refs(_1, 5)", + "kind": "simple", + "prefix": 53053, + "prefix_str": "CF3D", + "tlb": "#cf3d" + }, + "signature": { + "stack_string": "b:Builder x:Int -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + }, + { + "type": "simple", + "name": "x", + "value_types": ["Int"], + "range": { + "min": 0, + "max": 1023 + } + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 737, + "function_name": "exec_builder_chk_bits_refs" + } + }, + { + "name": "BCHKBITSQ", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Checks whether `count` bits can be stored into `b`.", + "tags": [], + "operands": ["count"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13581312, + "max": 13581568, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_builder_chk_bits(_1, _2, true)", + "kind": "fixed", + "prefix": 53052, + "prefix_str": "CF3C", + "tlb": "#cf3c count: (## 8)" + }, + "signature": { + "stack_string": "b:Builder -> result:Bool", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Bool"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 723, + "function_name": "exec_builder_chk_bits" + } + }, + { + "name": "RSHIFT_VAR", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "", + "long": "Shift the top element of the stack right by a number of bits equal to the second element of the stack.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11337728, + "max": 11403264, + "checkLen": 8, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_rshift(_1, false)", + "kind": "simple", + "prefix": 173, + "prefix_str": "AD", + "tlb": "#ad" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "range": { + "min": 0, + "max": 1023 + }, + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 749, + "function_name": "exec_rshift" + } + }, + { + "name": "RSHIFT", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "", + "long": "Shift the top element of the stack right by `c` bits.", + "tags": [], + "operands": ["c"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11206656, + "max": 11272192, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_rshift_tinyint8(_1, _2, false)", + "kind": "fixed", + "prefix": 171, + "prefix_str": "AB", + "tlb": "#ab c: (## 8)" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 731, + "function_name": "exec_rshift_tinyint8" + } + }, + { + "name": "RSHIFT_ALT", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = floor(x / 2^y)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 11084800, + "max": 11085056, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 0)", + "kind": "simple", + "prefix": 43300, + "prefix_str": "A924", + "tlb": "#a924" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "QRSHIFT_VAR", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "Shift the top element of the stack right by a number of bits equal to the second element of the stack. Returns `NaN` if any operand is `NaN`.", + "long": "Shift the top element of the stack right by a number of bits equal to the second element of the stack. If any of the operands is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12037376, + "max": 12037632, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "(_1) => exec_rshift(_1, true)", + "kind": "simple", + "prefix": 47021, + "prefix_str": "B7AD", + "tlb": "#b7ad" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 749, + "function_name": "exec_rshift" + } + }, + { + "name": "QRSHIFT", + "category": "arithmetic", + "sub_category": "shift_logic", + "description": { + "short": "Shift the top element of the stack right by `c` bits. Returns `NaN` if operand is `NaN`.", + "long": "Shift the top element of the stack right by `c` bits. If the operand is `NaN`, returns `NaN` instead of throwing an exception.", + "tags": [], + "operands": ["c"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036864, + "max": 12037120, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_rshift_tinyint8(_1, _2, true)", + "kind": "fixed", + "prefix": 47019, + "prefix_str": "B7AB", + "tlb": "#b7ab c: (## 8)" + }, + "signature": { + "stack_string": "x:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 731, + "function_name": "exec_rshift_tinyint8" + } + }, + { + "name": "QRSHIFT_ALT", + "category": "arithmetic", + "sub_category": "div", + "description": { + "short": "", + "long": "Calculates `result = floor(x / 2^y)`.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 12036388, + "max": 12036389, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_shrmod(_1, _2, 1)", + "kind": "simple", + "prefix": 12036388, + "prefix_str": "B7A924", + "tlb": "#b7a924" + }, + "signature": { + "stack_string": "x:Int y:Int -> result:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + }, + { + "type": "simple", + "name": "y", + "value_types": ["Int"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 336, + "function_name": "exec_shrmod" + } + }, + { + "name": "CALLDICT", + "category": "continuation", + "sub_category": "continuation_dict_jump", + "description": { + "short": "", + "long": "Calls the continuation in `c3`, pushing integer `num` into its stack as an argument. Essentially it's a call to method with `num` ID in the dictionary.", + "tags": [], + "related_instructions": ["CALLDICT_LONG"], + "operands": ["num"], + "other_implementations": [ + { + "exact": true, + "instructions": ["PUSHINT_16 [num]", "PUSHCTR c3", "EXECUTE"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15728640, + "max": 15794176, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + ] + }, + "exec": "exec_calldict_short", + "kind": "fixed", + "prefix": 240, + "prefix_str": "F0", + "tlb": "#f0 num: (## 8)" + }, + "signature": { + "stack_string": "∅ -> num:Int", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 3 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "num", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "register", + "index": 3, + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1092, + "function_name": "exec_calldict_short" + } + }, + { + "name": "CALLDICT_LONG", + "category": "continuation", + "sub_category": "continuation_dict_jump", + "description": { + "short": "", + "long": "Calls the continuation in `c3`, pushing integer `num` with extended range into its stack as an argument. Essentially it's a call to method with `num` ID in the dictionary.", + "tags": [], + "related_instructions": ["CALLDICT"], + "operands": ["num"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15794176, + "max": 15810560, + "checkLen": 10, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 14, + "range": { + "min": "0", + "max": "16383" + } + } + ] + }, + "exec": "exec_calldict", + "kind": "fixed", + "prefix": 964, + "prefix_str": "3C4", + "tlb": "#3c4 num: (## 14)" + }, + "signature": { + "stack_string": "∅ -> num:Int", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 3 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "num", + "value_types": ["Int"] + } + ] + } + }, + "control_flow": { + "branches": [ + { + "type": "register", + "index": 3, + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1099, + "function_name": "exec_calldict" + } + }, + { + "name": "THROW_SHORT", + "category": "exception", + "sub_category": "", + "description": { + "short": "Throws an exception with error code `num`.", + "long": "", + "tags": ["exception_handling", "throw", "control_flow"], + "operands": ["num"], + "gas": [ + { + "value": 76, + "description": "For exception throw" + } + ] + }, + "layout": { + "min": 15859712, + "max": 15876096, + "checkLen": 10, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 6, + "range": { + "min": "0", + "max": "63" + } + } + ] + }, + "exec": "exec_throw_fixed(_1, _2, 63, 0)", + "kind": "fixed", + "prefix": 968, + "prefix_str": "3C8", + "tlb": "#3c8 num: (## 6)" + }, + "effects": ["AlwaysThrow"], + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1130, + "function_name": "exec_throw_fixed" + } + }, + { + "name": "THROW", + "category": "exception", + "sub_category": "", + "description": { + "short": "Throws an exception with error code `num`.", + "long": "", + "tags": ["exception_handling", "throw", "control_flow"], + "operands": ["num"], + "gas": [ + { + "value": 84, + "description": "For exception throw" + } + ] + }, + "layout": { + "min": 15908864, + "max": 15910912, + "checkLen": 13, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 11, + "range": { + "min": "0", + "max": "2047" + } + } + ] + }, + "exec": "exec_throw_fixed(_1, _2, 0x7ff, 0)", + "kind": "fixed", + "prefix": 7768, + "prefix_str": "1E58", + "tlb": "#1e58 num: (## 11)" + }, + "effects": ["AlwaysThrow"], + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1130, + "function_name": "exec_throw_fixed" + } + }, + { + "name": "THROWIF_SHORT", + "category": "exception", + "sub_category": "", + "description": { + "short": "Conditionally throws an exception with error code `num` if `cond` is NOT EQUAL to 0.", + "long": "", + "tags": ["exception_handling", "throw", "control_flow"], + "operands": ["num"], + "gas": [ + { + "value": 26, + "description": "If no exception was thrown" + }, + { + "value": 76, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 15876096, + "max": 15892480, + "checkLen": 10, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 6, + "range": { + "min": "0", + "max": "63" + } + } + ] + }, + "exec": "exec_throw_fixed(_1, _2, 63, 3)", + "kind": "fixed", + "prefix": 969, + "prefix_str": "3C9", + "tlb": "#3c9 num: (## 6)" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1130, + "function_name": "exec_throw_fixed" + } + }, + { + "name": "THROWIF", + "category": "exception", + "sub_category": "", + "description": { + "short": "Conditionally throws an exception with error code `num` if `cond` is NOT EQUAL to 0.", + "long": "", + "tags": ["exception_handling", "throw", "control_flow"], + "operands": ["num"], + "gas": [ + { + "value": 34, + "description": "If no exception was thrown" + }, + { + "value": 84, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 15912960, + "max": 15915008, + "checkLen": 13, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 11, + "range": { + "min": "0", + "max": "2047" + } + } + ] + }, + "exec": "exec_throw_fixed(_1, _2, 0x7ff, 3)", + "kind": "fixed", + "prefix": 7770, + "prefix_str": "1E5A", + "tlb": "#1e5a num: (## 11)" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1130, + "function_name": "exec_throw_fixed" + } + }, + { + "name": "THROWIFNOT_SHORT", + "category": "exception", + "sub_category": "", + "description": { + "short": "Conditionally throws an exception with error code `num` if `cond` is EQUAL to 0.", + "long": "", + "tags": ["exception_handling", "throw", "control_flow"], + "operands": ["num"], + "gas": [ + { + "value": 26, + "description": "If no exception was thrown" + }, + { + "value": 76, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 15892480, + "max": 15908864, + "checkLen": 10, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 6, + "range": { + "min": "0", + "max": "63" + } + } + ] + }, + "exec": "exec_throw_fixed(_1, _2, 63, 2)", + "kind": "fixed", + "prefix": 970, + "prefix_str": "3CA", + "tlb": "#3ca num: (## 6)" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1130, + "function_name": "exec_throw_fixed" + } + }, + { + "name": "THROWIFNOT", + "category": "exception", + "sub_category": "", + "description": { + "short": "Conditionally throws an exception with error code `num` if `cond` is EQUAL to 0.", + "long": "", + "tags": ["exception_handling", "throw", "control_flow"], + "operands": ["num"], + "gas": [ + { + "value": 34, + "description": "If no exception was thrown" + }, + { + "value": 84, + "description": "If exception is thrown" + } + ] + }, + "layout": { + "min": 15917056, + "max": 15919104, + "checkLen": 13, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 11, + "range": { + "min": "0", + "max": "2047" + } + } + ] + }, + "exec": "exec_throw_fixed(_1, _2, 0x7ff, 2)", + "kind": "fixed", + "prefix": 7772, + "prefix_str": "1E5C", + "tlb": "#1e5c num: (## 11)" + }, + "effects": ["CanThrow"], + "signature": { + "stack_string": "cond:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "cond", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1130, + "function_name": "exec_throw_fixed" + } + }, + { + "name": "PUSHINT_4", + "category": "arithmetic", + "sub_category": "int_const", + "description": { + "short": "Pushes tiny signed integer `x` onto the stack. Note that the instruction does not have the usual 4-bit range for the argument, but `-5 <= x <= 10`!", + "long": "", + "tags": [], + "operands": ["i"], + "exit_codes": [], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 7340032, + "max": 8388608, + "checkLen": 4, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "tinyInt", + "range": { + "min": "-5", + "max": "10" + } + } + ] + }, + "exec": "exec_push_tinyint4", + "kind": "fixed", + "prefix": 7, + "prefix_str": "7", + "tlb": "#7 i: (## 4)" + }, + "signature": { + "stack_string": "∅ -> x:Int", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 31, + "function_name": "exec_push_tinyint4" + } + }, + { + "name": "PUSHINT_8", + "category": "arithmetic", + "sub_category": "int_const", + "description": { + "short": "Pushes small 8-bit signed integer `x` onto the stack.", + "long": "", + "tags": [], + "operands": ["x"], + "exit_codes": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 8388608, + "max": 8454144, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "int", + "len": 8, + "range": { + "min": "-128", + "max": "127" + } + } + ] + }, + "exec": "exec_push_tinyint8", + "kind": "fixed", + "prefix": 128, + "prefix_str": "80", + "tlb": "#80 x: int8" + }, + "signature": { + "stack_string": "∅ -> x:Int", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 46, + "function_name": "exec_push_tinyint8" + } + }, + { + "name": "PUSHINT_16", + "category": "arithmetic", + "sub_category": "int_const", + "description": { + "short": "Pushes 16-bit signed integer `x` onto the stack.", + "long": "", + "tags": [], + "operands": ["x"], + "exit_codes": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 8454144, + "max": 8519680, + "checkLen": 8, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "int", + "len": 16, + "range": { + "min": "-32768", + "max": "32767" + } + } + ] + }, + "exec": "exec_push_smallint", + "kind": "fixed", + "prefix": 129, + "prefix_str": "81", + "tlb": "#81 x: int16" + }, + "signature": { + "stack_string": "∅ -> x:Int", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 61, + "function_name": "exec_push_smallint" + } + }, + { + "name": "PUSHINT_LONG", + "category": "arithmetic", + "sub_category": "int_const", + "description": { + "short": "Pushes big signed integer `x`.", + "long": "", + "tags": [], + "operands": ["x"], + "exit_codes": [], + "gas": [ + { + "value": 23, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 8519680, + "max": 8583168, + "checkLen": 8, + "skipLen": 13, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "largeInt", + "range": { + "min": "-237142198758023568227473377297792835283496928595231875152809132048206089502588928", + "max": "237142198758023568227473377297792835283496928595231875152809132048206089502588927" + } + } + ] + }, + "exec": "exec_push_int", + "kind": "ext-range", + "prefix": 4160, + "prefix_str": "1040", + "tlb": "#82 len: (## 5) data: (int (8 * l + 19))" + }, + "signature": { + "stack_string": "∅ -> x:Int", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/arithops.cpp", + "line_number": 76, + "function_name": "exec_push_int" + } + }, + { + "name": "XCHG_0I_LONG", + "category": "stack", + "sub_category": "", + "description": { + "short": "Interchanges top element with element at index `i`.", + "long": "This instruction is equivalent to `XCHG_0I` except that it operates on a integer value with bigger range.", + "tags": ["stack"], + "operands": ["i"], + "exit_codes": [ + { + "errno": "2", + "condition": "Count of elements on the stack is less or equal to `i`" + } + ], + "related_instructions": ["XCHG_0I"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 1114112, + "max": 1179648, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 8, + "range": { + "min": "1", + "max": "255" + } + } + ] + }, + "exec": "exec_xchg0_l", + "kind": "fixed", + "prefix": 17, + "prefix_str": "11", + "tlb": "#11 i: (## 8) { 1 <= i }" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 52, + "function_name": "exec_xchg0_l" + } + }, + { + "name": "XCHG_0I", + "category": "stack", + "sub_category": "", + "description": { + "short": "Interchanges top element with element at index `i`.", + "long": "", + "tags": ["stack"], + "operands": ["i"], + "exit_codes": [ + { + "errno": "2", + "condition": "Count of elements on the stack is less or equal to `i`" + } + ], + "related_instructions": ["XCHG_0I_LONG"], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "PUSHINT_4 3" + }, + { + "instruction": "XCHG_0I s2", + "comment": "Swaps top element (3) with element at index 2 (1)" + } + ], + "stack": { + "input": ["1", "2", "3"], + "output": ["3", "2", "1"] + } + }, + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "XCHG_0I s5", + "comment": "Trying to swap with an element at index 5, which doesn't exist" + } + ], + "exit_code": 2, + "stack": { + "input": ["1", "2"], + "output": ["1", "2"] + } + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 131072, + "max": 1048576, + "checkLen": 4, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "1", + "max": "15" + } + } + ] + }, + "exec": "exec_xchg0", + "kind": "fixed-range", + "prefix": 2, + "prefix_str": "2", + "tlb": "#0 i: (## 4) { 1 <= i }" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 43, + "function_name": "exec_xchg0" + } + }, + { + "name": "XCHG_IJ", + "category": "stack", + "sub_category": "", + "description": { + "short": "Interchanges elements at indices `i` and `j`.", + "long": "", + "tags": ["stack"], + "operands": ["i", "j"], + "exit_codes": [ + { + "errno": "2", + "condition": "Count of elements on the stack is less or equal to `i` or `j`" + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 1048576, + "max": 1114112, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "xchgArgs", + "range": { + "min": "1", + "max": "16" + } + }, + "exec": "exec_xchg", + "kind": "fixed", + "prefix": 16, + "prefix_str": "10", + "tlb": "#10 i: (## 4) j: (## 4) { 1 <= i } { i + 1 <= j }" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 61, + "function_name": "exec_xchg" + } + }, + { + "name": "XCHG_1I", + "category": "stack", + "sub_category": "", + "description": { + "short": "Interchanges second element with element at index `i`.", + "long": "", + "tags": ["stack"], + "operands": ["i"], + "exit_codes": [ + { + "errno": "2", + "condition": "Stack is empty." + }, + { + "errno": "2", + "condition": "Count of elements on the stack is less or equal to `i`" + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 1179648, + "max": 2097152, + "checkLen": 4, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "s1" + }, + { + "$": "stack", + "len": 4, + "range": { + "min": "2", + "max": "15" + } + } + ] + }, + "exec": "exec_xchg1", + "kind": "fixed-range", + "prefix": 18, + "prefix_str": "12", + "tlb": "#1 i: (## 4) { 2 <= i }" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 83, + "function_name": "exec_xchg1" + } + }, + { + "name": "DUMPSTK", + "category": "debug", + "sub_category": "", + "description": { + "short": "Dumps the entire contents of the stack to debug logs.", + "long": "Outputs the entire contents of the stack to debug logs without modifying the stack. Useful for debugging and stack inspection.", + "tags": ["debug", "stack"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16646144, + "max": 16646400, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dump_stack", + "kind": "simple", + "prefix": 65024, + "prefix_str": "FE00", + "tlb": "#fe00" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/debugops.cpp", + "line_number": 71, + "function_name": "exec_dump_stack" + } + }, + { + "name": "DEBUG", + "category": "debug", + "sub_category": "", + "description": { + "short": "Base instruction for debugging purposes.", + "long": "- With `i=0` and `j=0` this instruction outputs the entire stack as `DUMPSTK`.\n\n- With `i=1` and `j=4` this instruction outputs the string taken from the top of the stack as `STRDUMP`.\n\n- With `i=2` and any `j` this instruction dumps a slice with length divisible by 8 from `j`-th element of the stack as a string as `DUMP`.", + "tags": [], + "operands": ["i", "j"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16646400, + "max": 16651264, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + ] + }, + "exec": "exec_dummy_debug", + "kind": "fixed-range", + "prefix": 65025, + "prefix_str": "FE01", + "tlb": "#fe i: (## 8)" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/debugops.cpp", + "line_number": 35, + "function_name": "exec_dummy_debug" + } + }, + { + "name": "STRDUMP", + "category": "debug", + "sub_category": "", + "description": { + "short": "Dumps slice value as a UTF-8 encoded string to debug logs.", + "long": "Takes a string value as a slice from the stack and outputs it to debug logs. The string is interpreted as a UTF-8 encoded text.", + "tags": ["debug", "string"], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16651264, + "max": 16651520, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_dump_string", + "kind": "simple", + "prefix": 65044, + "prefix_str": "FE14", + "tlb": "#fe14" + }, + "signature": { + "stack_string": "str:Slice -> str:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "str", + "value_types": ["Slice"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "str", + "value_types": ["Slice"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/debugops.cpp", + "line_number": 108, + "function_name": "exec_dump_string" + } + }, + { + "name": "DEBUG_1", + "category": "debug", + "sub_category": "", + "description": { + "short": "", + "long": "Padding instruction that does nothing.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16651520, + "max": 16654336, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + ] + }, + "exec": "exec_dummy_debug", + "kind": "fixed-range", + "prefix": 65045, + "prefix_str": "FE15", + "tlb": "#fe i: (## 8)" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/debugops.cpp", + "line_number": 35, + "function_name": "exec_dummy_debug" + } + }, + { + "name": "DUMP", + "category": "debug", + "sub_category": "", + "description": { + "short": "Dumps a `i`-th value from stack to debug logs.", + "long": "Takes a value from the stack at position `i` and outputs it to debug logs. The value is formatted according to its type.", + "tags": ["debug", "stack"], + "operands": ["i"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16654336, + "max": 16658432, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_dump_value", + "kind": "fixed", + "prefix": 4066, + "prefix_str": "FE2", + "tlb": "#fe2 i: (## 4)" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/debugops.cpp", + "line_number": 91, + "function_name": "exec_dump_value" + } + }, + { + "name": "DEBUG_2", + "category": "debug", + "sub_category": "", + "description": { + "short": "", + "long": "Padding instruction that does nothing.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16658432, + "max": 16707584, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + ] + }, + "exec": "exec_dummy_debug", + "kind": "fixed-range", + "prefix": 65072, + "prefix_str": "FE30", + "tlb": "#fe i: (## 8)" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/debugops.cpp", + "line_number": 35, + "function_name": "exec_dummy_debug" + } + }, + { + "name": "PUSHCTR", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Pushes the current value of control register `c(i)`. If the control register is not supported in the current codepage, or if it does not have a value, throws an exception.", + "tags": [], + "operands": ["i"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15548416, + "max": 15550464, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "control", + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_push_ctr", + "kind": "fixed-range", + "prefix": 60736, + "prefix_str": "ED40", + "tlb": "#ed4 i: (## 4)" + }, + "signature": { + "stack_string": "∅ -> x:Any", + "inputs": { + "stack": [], + "registers": [ + { + "type": "variable", + "var_name": "i" + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "x" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 765, + "function_name": "exec_push_ctr" + } + }, + { + "name": "PUSH", + "category": "stack", + "sub_category": "", + "description": { + "short": "Copy value of `s(i)` and pushes it onto the stack.", + "long": "", + "tags": ["stack"], + "operands": ["i"], + "exit_codes": [ + { + "errno": "2", + "condition": "Count of elements on the stack is less or equal to `i`" + } + ], + "related_instructions": ["PUSH_LONG"], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "PUSH s1", + "comment": "Pushes 1 onto the stack." + } + ], + "stack": { + "input": ["1", "2"], + "output": ["1", "2", "1"] + } + }, + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "PUSH s10", + "comment": "Trying to push a value from" + }, + { + "instruction": " ", + "comment": "an index that is out of bounds." + } + ], + "exit_code": 2, + "stack": { + "input": ["1", "2"], + "output": ["1", "2"] + } + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 2228224, + "max": 3145728, + "checkLen": 4, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_push", + "kind": "fixed-range", + "prefix": 34, + "prefix_str": "22", + "tlb": "#2 i: (## 4)" + }, + "signature": { + "stack_string": "∅ -> value:Any", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "value", + "value_types": ["Any"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 109, + "function_name": "exec_push" + } + }, + { + "name": "PUSH_LONG", + "category": "stack", + "sub_category": "", + "description": { + "short": "Copy value of `s(i)` and pushes it onto the stack.", + "long": "Copy value of `s(i)` and pushes it onto the stack. This instruction is equivalent to `PUSH` except that it operates on a integer value with bigger range.", + "tags": ["stack"], + "operands": ["i"], + "exit_codes": [ + { + "errno": "2", + "condition": "Count of elements on the stack is less or equal to `i`" + } + ], + "related_instructions": ["PUSH"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5636096, + "max": 5701632, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + ] + }, + "exec": "exec_push_l", + "kind": "fixed", + "prefix": 86, + "prefix_str": "56", + "tlb": "#56 i: (## 8)" + }, + "signature": { + "stack_string": "∅ -> value:Any", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "value", + "value_types": ["Any"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 118, + "function_name": "exec_push_l" + } + }, + { + "name": "POPCTR", + "category": "continuation", + "sub_category": "continuation_change", + "description": { + "short": "", + "long": "Pops a value `x` from the stack and stores it into control register `c(i)`, if supported in the current codepage. Notice that if a control register accepts only values of a specific type, a type-checking exception may occur.", + "tags": [], + "operands": ["i"], + "exit_codes": [ + { + "errno": "7", + "condition": "Invalid value type for control register." + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 15552512, + "max": 15554560, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "control", + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_pop_ctr", + "kind": "fixed-range", + "prefix": 60752, + "prefix_str": "ED50", + "tlb": "#ed5 i: (## 4)" + }, + "signature": { + "stack_string": "x:Any -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "x" + } + ] + }, + "outputs": { + "stack": [], + "registers": [ + { + "type": "variable", + "var_name": "i" + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 794, + "function_name": "exec_pop_ctr" + } + }, + { + "name": "POP", + "category": "stack", + "sub_category": "", + "description": { + "short": "Removes the top element from the stack and stores it in `s(i)`. If `i` equal to 0, POP is effectively a `DROP`, i.e. the top element is removed from the stack.", + "long": "", + "tags": ["stack"], + "operands": ["i"], + "exit_codes": [ + { + "errno": "2", + "condition": "Count of elements on the stack is less or equal to `i`" + } + ], + "related_instructions": ["POP_LONG"], + "examples": [ + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "PUSHINT_4 2" + }, + { + "instruction": "PUSHINT_4 3" + }, + { + "instruction": "POP s2", + "comment": "Removes top element (3) and stores it in position s2, replacing the value 1" + } + ], + "stack": { + "input": ["1", "2", "3"], + "output": ["3", "2"] + } + }, + { + "instructions": [ + { + "instruction": "PUSHINT_4 1" + }, + { + "instruction": "POP s3", + "comment": "Trying to pop to an index that is out of bounds" + } + ], + "exit_code": 2, + "stack": { + "input": ["1"], + "output": ["1"] + } + } + ], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 3276800, + "max": 4194304, + "checkLen": 4, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_pop", + "kind": "fixed-range", + "prefix": 50, + "prefix_str": "32", + "tlb": "#3 i: (## 4)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 143, + "function_name": "exec_pop" + } + }, + { + "name": "POP_LONG", + "category": "stack", + "sub_category": "", + "description": { + "short": "Removes the top element from the stack and stores it in `s(i).`", + "long": "Removes the top element from the stack and stores it in `s(i)`. If `i` equal to 0, `POP_LONG` is effectively a `DROP`, i.e. the top element is removed from the stack. This instruction is equivalent to `POP` except that it operates on a integer value with bigger range.", + "tags": ["stack"], + "operands": ["i"], + "exit_codes": [ + { + "errno": "2", + "condition": "Count of elements on the stack is less or equal to `i`" + } + ], + "related_instructions": ["POP"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 5701632, + "max": 5767168, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "stack", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + ] + }, + "exec": "exec_pop_l", + "kind": "fixed", + "prefix": 87, + "prefix_str": "57", + "tlb": "#57 i: (## 8)" + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/stackops.cpp", + "line_number": 152, + "function_name": "exec_pop_l" + } + }, + { + "name": "CALLXARGS", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "_Calls_ continuation `c` with `p` parameters, expecting an arbitrary number of return values.", + "tags": [], + "operands": ["p"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14352384, + "max": 14356480, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "minusOne" + } + ] + }, + "exec": "exec_callx_args_p", + "kind": "fixed", + "prefix": 3504, + "prefix_str": "DB0", + "tlb": "#db0 p: (## 4) j: (## 4)" + }, + "signature": { + "stack_string": "x_1...x_p c:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "array", + "name": "args", + "length_var": "p", + "array_entry": [ + { + "type": "simple", + "name": "arg" + } + ] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ], + "registers": [] + } + }, + "control_flow": { + "branches": [ + { + "type": "variable", + "var_name": "c", + "save": { + "c0": { + "type": "cc", + "save": { + "c0": { + "type": "register", + "index": 0 + } + } + } + } + } + ] + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 46, + "function_name": "exec_callx_args_p" + } + }, + { + "name": "CALLXARGS_1", + "category": "continuation", + "sub_category": "continuation_jump", + "description": { + "short": "", + "long": "_Calls_ continuation `c` with `p` parameters and expecting `r` return values.", + "tags": [], + "operands": ["p", "r"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 14286848, + "max": 14352384, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_callx_args", + "kind": "fixed", + "prefix": 218, + "prefix_str": "DA", + "tlb": "#da p: (## 4) r: (## 4)" + }, + "signature": { + "stack_string": "x_1...x_p c:Continuation -> ∅", + "inputs": { + "stack": [ + { + "type": "array", + "name": "args", + "length_var": "p", + "array_entry": [ + { + "type": "simple", + "name": "arg" + } + ] + }, + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ], + "registers": [] + }, + "outputs": { + "stack": [], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 39, + "function_name": "exec_callx_args" + } + }, + { + "name": "PUSHSLICE", + "category": "cell", + "sub_category": "cell_const", + "description": { + "short": "Pushes the `slice` onto the stack.", + "long": "Pushes the slice `slice` onto the stack.\n_Details:_ Pushes the (prefix) subslice of `cc.code` consisting of its first `8x+4` bits and no references (i.e., essentially a bitstring), where `0 <= x <= 15`.\nA completion tag is assumed, meaning that all trailing zeroes and the last binary one (if present) are removed from this bitstring.\nIf the original bitstring consists only of zeroes, an empty slice will be pushed.", + "tags": [], + "operands": ["slice"], + "gas": [ + { + "value": 22, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 9109504, + "max": 9175040, + "checkLen": 8, + "skipLen": 12, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "slice", + "refs": { + "$": "refs", + "count": 0 + }, + "bits": { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + }, + "pad": 4 + } + ] + }, + "exec": "exec_push_slice", + "kind": "ext", + "prefix": 139, + "prefix_str": "8B", + "tlb": "#8b bits: (## 4) data: ((8 * bits + 4) * Bit)" + }, + "signature": { + "stack_string": "∅ -> result:Slice", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 117, + "function_name": "exec_push_slice" + } + }, + { + "name": "PUSHSLICE_REFS", + "category": "cell", + "sub_category": "cell_const", + "description": { + "short": "", + "long": "Pushes the `slice` onto the stack.\n_Details:_ Pushes the (prefix) subslice of `cc.code` consisting of its first `1 <= r+1 <= 4` references and up to first `8xx+1` bits of data, with `0 <= xx <= 31`.\nA completion tag is also assumed.", + "tags": [], + "operands": ["slice"], + "gas": [ + { + "value": 25, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 9175040, + "max": 9240576, + "checkLen": 8, + "skipLen": 15, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "slice", + "refs": { + "$": "delta", + "delta": 1, + "arg": { + "$": "uint", + "len": 2, + "range": { + "min": "0", + "max": "3" + } + } + }, + "bits": { + "$": "uint", + "len": 5, + "range": { + "min": "0", + "max": "31" + } + }, + "pad": 1 + } + ] + }, + "exec": "exec_push_slice_r", + "kind": "ext", + "prefix": 140, + "prefix_str": "8C", + "tlb": "#8c r: (## 2) bits: (## 5) refs: ((r + 1) * ^Cell) data: ((8 * bits + 1) * Bit)" + }, + "signature": { + "stack_string": "∅ -> result:Slice", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 129, + "function_name": "exec_push_slice_r" + } + }, + { + "name": "PUSHSLICE_LONG", + "category": "cell", + "sub_category": "cell_const", + "description": { + "short": "Pushes the `slice` onto the stack.", + "long": "Pushes the `slice` onto the stack.\n_Details:_ Pushes the subslice of `cc.code` consisting of `0 <= r <= 4` references and up to `8xx+6` bits of data, with `0 <= xx <= 127`.\nA completion tag is assumed.", + "tags": [], + "operands": ["slice"], + "gas": [ + { + "value": 28, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 9240576, + "max": 9281536, + "checkLen": 8, + "skipLen": 18, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "slice", + "refs": { + "$": "uint", + "len": 3, + "range": { + "min": "0", + "max": "7" + } + }, + "bits": { + "$": "uint", + "len": 7, + "range": { + "min": "0", + "max": "127" + } + }, + "pad": 6 + } + ] + }, + "exec": "exec_push_slice_r2", + "kind": "ext-range", + "prefix": 144384, + "prefix_str": "23400", + "tlb": "#8d r: (## 3) bits: (## 7) refs: (r * ^Cell) data: ((8 * bits + 6) * Bit)" + }, + "signature": { + "stack_string": "∅ -> result:Slice", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 147, + "function_name": "exec_push_slice_r2" + } + }, + { + "name": "PUSHCONT", + "category": "cell", + "sub_category": "cell_const", + "description": { + "short": "Pushes a continuation onto the stack.", + "long": "Fetches a simple ordinary continuation from the current code slice and pushes it onto the stack. The length of the continuation is at most 127 * 8 bits and 3 references.", + "tags": ["stack", "continuation"], + "operands": ["c"], + "exit_codes": [], + "related_instructions": ["PUSHCONT_SHORT"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 9306112, + "max": 9437184, + "checkLen": 7, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "codeSlice", + "refs": { + "$": "uint", + "len": 2, + "range": { + "min": "0", + "max": "3" + } + }, + "bits": { + "$": "uint", + "len": 7, + "range": { + "min": "0", + "max": "127" + } + } + } + ] + }, + "exec": "exec_push_cont", + "kind": "ext", + "prefix": 71, + "prefix_str": "47", + "tlb": "#47 r: (## 2) bits: (## 7) refs: (r * ^Cell) data: ((8 * bits) * Bit)" + }, + "signature": { + "stack_string": "∅ -> result:Continuation", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "result", + "value_types": ["Continuation"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 165, + "function_name": "exec_push_cont" + } + }, + { + "name": "PUSHCONT_SHORT", + "category": "cell", + "sub_category": "cell_const", + "description": { + "short": "Pushes a short continuation onto the stack.", + "long": "Fetches a simple ordinary continuation from the current code slice and pushes it onto the stack. The length of the continuation is at most 15 * 8 bits.", + "tags": ["stack", "continuation"], + "operands": ["c"], + "exit_codes": [], + "related_instructions": ["PUSHCONT"], + "gas": [ + { + "value": 18, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 9437184, + "max": 10485760, + "checkLen": 4, + "skipLen": 8, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "inlineCodeSlice", + "bits": { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + } + ] + }, + "exec": "exec_push_cont_simple", + "kind": "ext", + "prefix": 9, + "prefix_str": "9", + "tlb": "#9 bits:(## 4) c: ((8 * bits) * Bit)" + }, + "signature": { + "stack_string": "∅ -> c:Continuation", + "outputs": { + "stack": [ + { + "type": "simple", + "name": "c", + "value_types": ["Continuation"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 204, + "function_name": "exec_push_cont_simple" + } + }, + { + "name": "STSLICECONST", + "category": "cell", + "sub_category": "cell_serialize", + "description": { + "short": "", + "long": "Stores a constant subslice `sss`.\n_Details:_ `sss` consists of `0 <= x <= 3` references and up to `8y+2` data bits, with `0 <= y <= 7`. Completion bit is assumed.\nNote that the assembler can replace `STSLICECONST` with `PUSHSLICE` `STSLICER` if the slice is too big.", + "tags": ["builder building"], + "operands": ["s"], + "gas": [ + { + "value": 24, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13598720, + "max": 13631488, + "checkLen": 9, + "skipLen": 14, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "slice", + "refs": { + "$": "uint", + "len": 2, + "range": { + "min": "0", + "max": "3" + } + }, + "bits": { + "$": "uint", + "len": 3, + "range": { + "min": "0", + "max": "7" + } + }, + "pad": 2 + } + ] + }, + "exec": "exec_store_const_slice", + "kind": "ext", + "prefix": 415, + "prefix_str": "19F", + "tlb": "#19f r: (## 2) bits: (## 3) refs: (r * ^Cell) data: ((8 * bits + 2) * Bit)" + }, + "signature": { + "stack_string": "b:Builder -> b':Builder", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "b'", + "value_types": ["Builder"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 776, + "function_name": "exec_store_const_slice" + } + }, + { + "name": "SETCP", + "category": "codepage", + "sub_category": "", + "description": { + "short": "", + "long": "Selects TVM codepage `0 <= num < 240`. If the codepage is not supported, throws an invalid opcode exception.", + "tags": [], + "operands": ["num"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16711680, + "max": 16773120, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + ] + }, + "exec": "exec_set_cp", + "kind": "fixed-range", + "prefix": 65280, + "prefix_str": "FF00", + "tlb": "#ff num: (## 8)" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1237, + "function_name": "exec_set_cp" + } + }, + { + "name": "SETCPX", + "category": "codepage", + "sub_category": "", + "description": { + "short": "", + "long": "Selects codepage `num` with `num` from the top of the stack. If the codepage is not supported, throws an invalid opcode exception.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16773120, + "max": 16773376, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_set_cp_any", + "kind": "simple", + "prefix": 65520, + "prefix_str": "FFF0", + "tlb": "#fff0" + }, + "signature": { + "stack_string": "num:Int -> ∅", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "num", + "value_types": ["Int"], + "range": { + "min": -32768, + "max": 32768 + } + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1243, + "function_name": "exec_set_cp_any" + } + }, + { + "name": "SETCP_SHORT", + "category": "codepage", + "sub_category": "", + "description": { + "short": "", + "long": "Selects TVM codepage `num` for `-256 <= num <= -1`. Negative codepages `-13...-1` are reserved for restricted versions of TVM needed to validate runs of TVM in other codepages. Negative codepage `-14` is reserved for experimental codepages, not necessarily compatible between different TVM implementations, and should be disabled in the production versions of TVM.", + "tags": [], + "operands": ["num"], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16773376, + "max": 16777216, + "checkLen": 8, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "delta", + "delta": -256, + "arg": { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + } + ] + }, + "exec": "exec_set_cp", + "kind": "fixed-range", + "prefix": 65521, + "prefix_str": "FFF1", + "tlb": "#ff num: (## 8)" + }, + "signature": { + "stack_string": "∅ -> ∅", + "inputs": { + "stack": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/contops.cpp", + "line_number": 1237, + "function_name": "exec_set_cp" + } + }, + { + "name": "GETPARAMLONG", + "category": "config", + "sub_category": "", + "description": { + "short": "Gets a parameter from the c7 tuple with extended range.", + "long": "Same as `i GETPARAM`, but `i` is in range `[0..254]`.", + "tags": [], + "operands": ["i"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16285952, + "max": 16285969, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + ] + }, + "exec": "exec_get_var_param_long", + "version": 11, + "kind": "fixed-range", + "prefix": 16285952, + "prefix_str": "F88100", + "tlb": "#f881 i: (## 8)" + }, + "signature": { + "stack_string": "∅ -> param_value:Any", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "param_value", + "value_types": ["Any"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 158, + "function_name": "exec_get_var_param_long" + } + }, + { + "name": "INMSGPARAMS", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns the tuple with inbound message parameters.", + "long": "Returns the 17th element of the c7 tuple, which contains inbound message parameters. The tuple includes: bounce (boolean), bounced (boolean), src_addr (slice), fwd_fee (int), created_lt (int), created_at (int), orig_value (int), value (int), value_extra (cell or null), state_init (cell or null). For external messages, tick-tock transactions and get methods: bounce, bounced, fwd_fee, created_lt, created_at, orig_value, value are 0, value_extra is null. For tick-tock transactions and get methods: src_addr is addr_none.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16285969, + "max": 16285970, + "checkLen": 24, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_param", + "version": 11, + "kind": "simple", + "prefix": 16285969, + "prefix_str": "F88111", + "tlb": "#f88111" + }, + "signature": { + "stack_string": "∅ -> msg_params:Tuple", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "msg_params", + "value_types": ["Tuple"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 143, + "function_name": "exec_get_param" + } + }, + { + "name": "GETPARAMLONG2", + "category": "config", + "sub_category": "", + "description": { + "short": "Gets a parameter from the c7 tuple with extended range.", + "long": "Same as `i GETPARAM`, but `i` is in range `[0..254]`.", + "tags": [], + "operands": ["i"], + "gas": [ + { + "value": 34, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16285970, + "max": 16286207, + "checkLen": 16, + "skipLen": 24, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 8, + "range": { + "min": "0", + "max": "255" + } + } + ] + }, + "exec": "exec_get_var_param_long", + "version": 11, + "kind": "fixed-range", + "prefix": 16285970, + "prefix_str": "F88112", + "tlb": "#f881 i: (## 8)" + }, + "signature": { + "stack_string": "∅ -> param_value:Any", + "inputs": { + "stack": [], + "registers": [ + { + "type": "constant", + "index": 7 + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "param_value", + "value_types": ["Any"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 158, + "function_name": "exec_get_var_param_long" + } + }, + { + "name": "INMSG_BOUNCE", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns the bounce field from the inbound message parameters.", + "long": "Alias for `0 INMSGPARAM`. Returns the `bounce` field (boolean) from the inbound message parameters tuple.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16289792, + "max": 16290048, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_in_msg_param", + "version": 11, + "kind": "simple", + "prefix": 63632, + "prefix_str": "F890", + "tlb": "#f890" + }, + "signature": { + "stack_string": "∅ -> bounce:Bool", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "bounce", + "value_types": ["Bool"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 164, + "function_name": "exec_get_in_msg_param" + } + }, + { + "name": "INMSG_BOUNCED", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns the bounced field from the inbound message parameters.", + "long": "Alias for `1 INMSGPARAM`. Returns the `bounced` field (boolean) from the inbound message parameters tuple.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16290048, + "max": 16290304, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_in_msg_param", + "version": 11, + "kind": "simple", + "prefix": 63633, + "prefix_str": "F891", + "tlb": "#f891" + }, + "signature": { + "stack_string": "∅ -> bounced:Bool", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "bounced", + "value_types": ["Bool"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 164, + "function_name": "exec_get_in_msg_param" + } + }, + { + "name": "INMSG_SRC", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns the source address from the inbound message parameters.", + "long": "Alias for `2 INMSGPARAM`. Returns the `src_addr` field (slice) from the inbound message parameters tuple. For tick-tock transactions and get methods, this is addr_none.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16290304, + "max": 16290560, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_in_msg_param", + "version": 11, + "kind": "simple", + "prefix": 63634, + "prefix_str": "F892", + "tlb": "#f892" + }, + "signature": { + "stack_string": "∅ -> src:Slice", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "src", + "value_types": ["Slice"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 164, + "function_name": "exec_get_in_msg_param" + } + }, + { + "name": "INMSG_FWDFEE", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns the forward fee from the inbound message parameters.", + "long": "Alias for `3 INMSGPARAM`. Returns the `fwd_fee` field (int) from the inbound message parameters tuple. For external messages, tick-tock transactions and get methods, this is 0.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16290560, + "max": 16290816, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_in_msg_param", + "version": 11, + "kind": "simple", + "prefix": 63635, + "prefix_str": "F893", + "tlb": "#f893" + }, + "signature": { + "stack_string": "∅ -> fwd_fee:Int", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "fwd_fee", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 164, + "function_name": "exec_get_in_msg_param" + } + }, + { + "name": "INMSG_LT", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns the logical time from the inbound message parameters.", + "long": "Alias for `4 INMSGPARAM`. Returns the `created_lt` field (int) from the inbound message parameters tuple. For external messages, tick-tock transactions and get methods, this is 0.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16290816, + "max": 16291072, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_in_msg_param", + "version": 11, + "kind": "simple", + "prefix": 63636, + "prefix_str": "F894", + "tlb": "#f894" + }, + "signature": { + "stack_string": "∅ -> created_lt:Int", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "created_lt", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 164, + "function_name": "exec_get_in_msg_param" + } + }, + { + "name": "INMSG_UTIME", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns the creation time from the inbound message parameters.", + "long": "Alias for `5 INMSGPARAM`. Returns the `created_at` field (int) from the inbound message parameters tuple. For external messages, tick-tock transactions and get methods, this is 0.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16291072, + "max": 16291328, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_in_msg_param", + "version": 11, + "kind": "simple", + "prefix": 63637, + "prefix_str": "F895", + "tlb": "#f895" + }, + "signature": { + "stack_string": "∅ -> created_at:Int", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "created_at", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 164, + "function_name": "exec_get_in_msg_param" + } + }, + { + "name": "INMSG_ORIGVALUE", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns the original value from the inbound message parameters.", + "long": "Alias for `6 INMSGPARAM`. Returns the `orig_value` field (int) from the inbound message parameters tuple. This is sometimes different from the value in `INCOMINGVALUE` and TVM stack because of storage fees. For external messages, tick-tock transactions and get methods, this is 0.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16291328, + "max": 16291584, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_in_msg_param", + "version": 11, + "kind": "simple", + "prefix": 63638, + "prefix_str": "F896", + "tlb": "#f896" + }, + "signature": { + "stack_string": "∅ -> orig_value:Int", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "orig_value", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 164, + "function_name": "exec_get_in_msg_param" + } + }, + { + "name": "INMSG_VALUE", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns the value from the inbound message parameters.", + "long": "Alias for `7 INMSGPARAM`. Returns the `value` field (int) from the inbound message parameters tuple. This is the same as in `INCOMINGVALUE` and TVM stack. For external messages, tick-tock transactions and get methods, this is 0.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16291584, + "max": 16291840, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_in_msg_param", + "version": 11, + "kind": "simple", + "prefix": 63639, + "prefix_str": "F897", + "tlb": "#f897" + }, + "signature": { + "stack_string": "∅ -> value:Int", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "value", + "value_types": ["Int"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 164, + "function_name": "exec_get_in_msg_param" + } + }, + { + "name": "INMSG_VALUEEXTRA", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns the extra value from the inbound message parameters.", + "long": "Alias for `8 INMSGPARAM`. Returns the `value_extra` field (cell or null) from the inbound message parameters tuple. This is the same as in `INCOMINGVALUE`. For external messages, tick-tock transactions and get methods, this is null.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16291840, + "max": 16292096, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_in_msg_param", + "version": 11, + "kind": "simple", + "prefix": 63640, + "prefix_str": "F898", + "tlb": "#f898" + }, + "signature": { + "stack_string": "∅ -> value_extra:Cell|Null", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "value_extra", + "value_types": ["Cell", "Null"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 164, + "function_name": "exec_get_in_msg_param" + } + }, + { + "name": "INMSG_STATEINIT", + "category": "config", + "sub_category": "", + "description": { + "short": "Returns the state init from the inbound message parameters.", + "long": "Alias for `9 INMSGPARAM`. Returns the `state_init` field (cell or null) from the inbound message parameters tuple.", + "tags": [], + "operands": [], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16292096, + "max": 16292352, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_get_in_msg_param", + "version": 11, + "kind": "simple", + "prefix": 63641, + "prefix_str": "F899", + "tlb": "#f899" + }, + "signature": { + "stack_string": "∅ -> state_init:Cell|Null", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "state_init", + "value_types": ["Cell", "Null"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 164, + "function_name": "exec_get_in_msg_param" + } + }, + { + "name": "INMSGPARAM", + "category": "config", + "sub_category": "", + "description": { + "short": "", + "long": "Returns a specific parameter from the inbound message parameters tuple.", + "tags": [], + "operands": ["x"], + "other_implementations": [ + { + "exact": true, + "instructions": ["INMSGPARAMS", "INDEX [x]"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16292352, + "max": 16293888, + "checkLen": 12, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [ + { + "$": "uint", + "len": 4, + "range": { + "min": "0", + "max": "15" + } + } + ] + }, + "exec": "exec_get_var_in_msg_param", + "version": 11, + "kind": "fixed-range", + "prefix": 63642, + "prefix_str": "F89A", + "tlb": "#f89 x: (## 4)" + }, + "signature": { + "stack_string": "∅ -> param_value:Any", + "inputs": { + "stack": [], + "registers": [] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "param_value", + "value_types": ["Any"] + } + ], + "registers": [] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 176, + "function_name": "exec_get_var_in_msg_param" + } + }, + { + "name": "BTOS", + "category": "cell", + "sub_category": "cell_deserialize", + "description": { + "short": "Converts a _Builder_ into a _Slice_.", + "long": "This instruction is equivalent to `ENDC`, `CTOS` without extra gas for intermediate Cell creation.", + "tags": [], + "operands": [], + "exit_codes": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["ENDC", "CTOS"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 13586432, + "max": 13586688, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_builder_to_slice", + "version": 12, + "kind": "simple", + "prefix": 53072, + "prefix_str": "CF50", + "tlb": "#cf50" + }, + "signature": { + "stack_string": "b:Builder -> s:Slice", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "s", + "value_types": ["Slice"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/cellops.cpp", + "line_number": 767, + "function_name": "exec_builder_to_slice" + } + }, + { + "name": "HASHBU", + "category": "crypto", + "sub_category": "crypto_common", + "description": { + "short": "", + "long": "Computes the hash of a _Builder_ `b` and returns it as a 256-bit unsigned integer `hash`. The result is the same as if an ordinary cell containing only data and references from `b` had been created and its hash computed by `HASHCU`.", + "tags": [], + "operands": [], + "other_implementations": [ + { + "exact": true, + "instructions": ["ENDC", "HASHCU"] + } + ], + "gas": [ + { + "value": 26, + "description": "Base gas consumption" + } + ] + }, + "layout": { + "min": 16324096, + "max": 16324352, + "checkLen": 16, + "skipLen": 16, + "args": { + "$": "simpleArgs", + "children": [] + }, + "exec": "exec_compute_hash", + "version": 12, + "kind": "simple", + "prefix": 63766, + "prefix_str": "F916", + "tlb": "#f916" + }, + "signature": { + "stack_string": "b:Builder -> hash:Int", + "inputs": { + "stack": [ + { + "type": "simple", + "name": "b", + "value_types": ["Builder"] + } + ] + }, + "outputs": { + "stack": [ + { + "type": "simple", + "name": "hash", + "value_types": ["Int"] + } + ] + } + }, + "implementation": { + "commit_hash": "4ebd7412c52248360464c2df5f434c8aaa3edfe1", + "file_path": "crypto/vm/tonops.cpp", + "line_number": 612, + "function_name": "exec_compute_hash" + } + } + ], + "fift_instructions": [ + { + "name": "-ROT", + "actual_name": "ROTREV" + }, + { + "name": "-ROLL", + "actual_name": "BLKSWAP", + "arguments": ["$args[0]", 1], + "description": "Permutes two blocks of stack elements, moving the top element to a specified position" + }, + { + "name": "FALSE", + "actual_name": "PUSHINT_4", + "arguments": [0], + "description": "Pushes integer 0 onto the stack, representing boolean false" + }, + { + "name": "TRUE", + "actual_name": "PUSHINT_4", + "arguments": [-1], + "description": "Pushes integer -1 onto the stack, representing boolean true" + }, + { + "name": "ONE", + "actual_name": "PUSHINT_4", + "arguments": [1], + "description": "Pushes integer 1 onto the stack" + }, + { + "name": "TWO", + "actual_name": "PUSHINT_4", + "arguments": [2], + "description": "Pushes integer 2 onto the stack" + }, + { + "name": "TEN", + "actual_name": "PUSHINT_4", + "arguments": [10], + "description": "Pushes integer 10 onto the stack" + }, + { + "name": "FIRST", + "actual_name": "INDEX", + "arguments": [0], + "description": "Returns the first element (index 0) of a tuple" + }, + { + "name": "SECOND", + "actual_name": "INDEX", + "arguments": [1], + "description": "Returns the second element (index 1) of a tuple" + }, + { + "name": "THIRD", + "actual_name": "INDEX", + "arguments": [2], + "description": "Returns the third element (index 2) of a tuple" + }, + { + "name": "PUSHROOT", + "actual_name": "PUSHCTR", + "arguments": [4], + "description": "Pushes the root cell (control register 4) onto the stack" + }, + { + "name": "POPROOT", + "actual_name": "POPCTR", + "arguments": [4], + "description": "Pops a value from the stack into the root cell (control register 4)" + }, + { + "name": "SKIPOPTREF", + "actual_name": "SKIPDICT", + "description": "Skips a dictionary or any cell or null in the slice, used for optional references" + }, + { + "name": "LDOPTREF", + "actual_name": "LDDICT", + "description": "Loads a dictionary or any cell or null from the slice as an optional reference" + }, + { + "name": "PLDOPTREF", + "actual_name": "PLDDICT", + "description": "Preloads a dictionary or any cell or null from the slice as an optional reference" + }, + { + "name": "STOPTREF", + "actual_name": "STDICT", + "description": "Stores a dictionary or any cell or null in the builder as an optional reference" + }, + { + "name": "PLDREF", + "actual_name": "PLDREFIDX", + "arguments": [0], + "description": "Preloads the first optional reference from the slice" + }, + { + "name": "SETCONTMANY", + "actual_name": "SETCONTCTRMANY" + }, + { + "name": "LDVARUINT16", + "actual_name": "LDGRAMS" + }, + { + "name": "STVARUINT16", + "actual_name": "STGRAMS" + }, + { + "name": "NIL", + "actual_name": "TUPLE", + "arguments": [0], + "description": "Creates a tuple of zero elements" + }, + { + "name": "SINGLE", + "actual_name": "TUPLE", + "arguments": [1], + "description": "Creates a tuple of one element from the top stack value" + }, + { + "name": "PAIR", + "actual_name": "TUPLE", + "arguments": [2], + "description": "Creates a tuple of two elements from the top two stack values" + }, + { + "name": "TRIPLE", + "actual_name": "TUPLE", + "arguments": [3], + "description": "Creates a tuple of three elements from the top three stack values" + }, + { + "name": "CONS", + "actual_name": "TUPLE", + "arguments": [2], + "description": "Creates a tuple of two elements (cons cell) from the top two stack values" + }, + { + "name": "2ROT", + "actual_name": "BLKSWAP", + "arguments": [1, 3], + "description": "Rotates three pairs of stack elements" + }, + { + "name": "ROT2", + "actual_name": "BLKSWAP", + "arguments": [1, 3], + "description": "Alternative name for 2ROT, rotates three pairs of stack elements" + }, + { + "name": "PUSHX", + "actual_name": "PICK" + }, + { + "name": "-ROLLX", + "actual_name": "ROLLREV" + }, + { + "name": "NULL", + "actual_name": "PUSHNULL" + }, + { + "name": "ZERO", + "actual_name": "PUSHINT_4", + "arguments": [0], + "description": "Pushes integer 0 onto the stack" + }, + { + "name": "CHKTUPLE", + "actual_name": "UNPACKFIRST", + "arguments": [0], + "description": "Checks whether `t` is a _Tuple_. If not, throws a type check exception" + }, + { + "name": "SETFIRST", + "actual_name": "SETINDEX", + "arguments": [0], + "description": "Sets the first component of _Tuple_ `t` to `x` and returns the resulting _Tuple_ `t'`" + }, + { + "name": "SETSECOND", + "actual_name": "SETINDEX", + "arguments": [1], + "description": "Sets the second component of _Tuple_ `t` to `x` and returns the resulting _Tuple_ `t'`" + }, + { + "name": "SETTHIRD", + "actual_name": "SETINDEX", + "arguments": [2], + "description": "Sets the third component of _Tuple_ `t` to `x` and returns the resulting _Tuple_ `t'`" + }, + { + "name": "SETFIRSTQ", + "actual_name": "SETINDEXQ", + "arguments": [0], + "description": "Sets the first component of _Tuple_ `t` to `x` and returns the resulting _Tuple_ `t'`" + }, + { + "name": "SETSECONDQ", + "actual_name": "SETINDEXQ", + "arguments": [1], + "description": "Sets the second component of _Tuple_ `t` to `x` and returns the resulting _Tuple_ `t'`" + }, + { + "name": "SETTHIRDQ", + "actual_name": "SETINDEXQ", + "arguments": [2], + "description": "Sets the third component of _Tuple_ `t` to `x` and returns the resulting _Tuple_ `t'`" + }, + { + "name": "UNCONS", + "actual_name": "UNTUPLE", + "arguments": [2], + "description": "Unpacks a tuple (cons cell) into its two components" + }, + { + "name": "UNPAIR", + "actual_name": "UNTUPLE", + "arguments": [2], + "description": "Unpacks a tuple of two elements into its components" + }, + { + "name": "CARQ", + "actual_name": "INDEXQ", + "arguments": [0], + "description": "Returns the first element of a tuple if it exists, or null if not or the tuple is null" + }, + { + "name": "CADR", + "actual_name": "INDEX2", + "description": "Returns `t[1][0]`", + "arguments": [1, 0] + }, + { + "name": "CDDR", + "actual_name": "INDEX2", + "description": "Returns `t[1][1]`", + "arguments": [1, 1] + }, + { + "name": "CADDR", + "actual_name": "INDEX3", + "description": "Returns `t[1][1][0]`", + "arguments": [1, 1, 0] + }, + { + "name": "CDDDR", + "actual_name": "INDEX3", + "description": "Returns `t[1][1][1]`", + "arguments": [1, 1, 1] + }, + { + "name": "FIRSTQ", + "actual_name": "INDEXQ", + "arguments": [1], + "description": "Returns the first element of a tuple if it exists, or null if not or the tuple is null" + }, + { + "name": "CDRQ", + "actual_name": "INDEXQ", + "arguments": [1], + "description": "Returns the second element of a tuple if it exists, or null if not or the tuple is null" + }, + { + "name": "SECONDQ", + "actual_name": "INDEXQ", + "arguments": [1], + "description": "Returns the second element of a tuple if it exists, or null if not or the tuple is null" + }, + { + "name": "COMMA", + "actual_name": "TPUSH" + }, + { + "name": "INTSORT2", + "actual_name": "MINMAX" + }, + { + "name": "BCONCAT", + "actual_name": "STBR" + }, + { + "name": "BCONCATQ", + "actual_name": "STBRQ" + }, + { + "name": "CALLX", + "actual_name": "EXECUTE" + }, + { + "name": "RETTRUE", + "actual_name": "RET" + }, + { + "name": "RETFALSE", + "actual_name": "RETALT" + }, + { + "name": "BRANCH", + "actual_name": "RETBOOL" + }, + { + "name": "COMPOSALT", + "actual_name": "BOOLOR" + }, + { + "name": "COMPOS", + "actual_name": "BOOLAND" + }, + { + "name": "ISZERO", + "actual_name": "EQINT", + "arguments": [0], + "description": "Checks whether an integer is zero" + }, + { + "name": "ISNEG", + "actual_name": "LESSINT", + "arguments": [0], + "description": "Checks whether an integer is negative" + }, + { + "name": "ISNNEG", + "actual_name": "GTINT", + "arguments": [-1], + "description": "Checks whether an integer is non-negative" + }, + { + "name": "ISNPOS", + "actual_name": "LESSINT", + "arguments": [1], + "description": "Checks whether an integer is non-positive" + }, + { + "name": "ISPOS", + "actual_name": "LESSINT", + "arguments": [0], + "description": "Checks whether an integer is positive" + }, + { + "name": "LEQINT", + "actual_name": "LESSINT", + "arguments": ["$args[0] + 1"], + "description": "Checks if an integer is less than or equal to a given value" + }, + { + "name": "GEQINT", + "actual_name": "GTINT", + "arguments": ["$args[0] - 1"], + "description": "Checks if an integer is greater than or equal to a given value" + }, + { + "name": "ADDCONST", + "actual_name": "ADDINT", + "arguments": ["- $args[0]"], + "description": "Adds a constant value to an integer" + }, + { + "name": "SUBCONST", + "actual_name": "ADDINT", + "arguments": ["- $args[0]"], + "description": "Subtracts a constant value from an integer" + }, + { + "name": "SUBINT", + "actual_name": "ADDINT", + "arguments": ["- $args[0]"], + "description": "Subtracts one integer from another" + }, + { + "name": "CHKBOOL", + "actual_name": "FITS", + "arguments": [1], + "description": "Checks whether `x` is a \"boolean value\" (i.e., either 0 or -1)" + }, + { + "name": "CHKBIT", + "actual_name": "UFITS", + "arguments": [1], + "description": "Checks whether `x` is a binary digit (i.e., 0 or 1)" + }, + { + "name": "STZERO", + "actual_name": "STSLICECONST", + "arguments": ["b{0}"], + "description": "Stores one binary zero" + }, + { + "name": "STONE", + "actual_name": "STSLICECONST", + "arguments": ["b{1}"], + "description": "Stores one binary one" + }, + { + "name": "SLICE", + "actual_name": "PUSHSLICE" + }, + { + "name": "CONT", + "actual_name": "PUSHCONT" + }, + { + "name": "CALL", + "actual_name": "CALLDICT" + }, + { + "name": "JMP", + "actual_name": "JMPDICT" + }, + { + "name": "PREPARE", + "actual_name": "PREPAREDICT" + }, + { + "name": "INLINECALL", + "actual_name": "none", + "description": "Instead of a call instruction, the function is inlined into the code" + }, + { + "name": "INLINECALLDICT", + "actual_name": "none", + "description": "Instead of a call instruction, the function is inlined into the code" + }, + { + "name": "PFXDICTCONSTGETJMP", + "actual_name": "PFXDICTSWITCH" + }, + { + "name": "PUSHINT", + "actual_name": "PUSHINT_LONG", + "description": "Pushes integer `num` onto the stack." + }, + { + "name": "INT", + "actual_name": "PUSHINT_LONG", + "description": "Pushes integer `num` onto the stack." + }, + { + "name": "INTX", + "actual_name": "PUSHINT_LONG", + "description": "Pushes integer `num` onto the stack." + }, + { + "name": "NEWDICT", + "actual_name": "PUSHNULL", + "description": "Creates a new empty dictionary which is a null value" + }, + { + "name": "DICTEMPTY", + "actual_name": "ISNULL", + "description": "Checks whether dictionary is empty, i.e. is null" + }, + { + "name": "STDICTS", + "actual_name": "STSLICE", + "description": "Stores the dictionary represented as a slice into _Builder_ `b`" + }, + { + "name": "SETNUMARGS", + "actual_name": "SETCONTARGS", + "arguments": [0, "$args[1]"], + "description": "Sets the number of arguments for a continuation" + }, + { + "name": "BLESSNUMARGS", + "actual_name": "BLESSARGS", + "arguments": [0, "$args[1]"], + "description": "Blesses a continuation with a specified number of arguments" + }, + { + "name": "DUMPTOSFMT", + "actual_name": "DEBUGSTR" + }, + { + "name": "LOGSTR", + "actual_name": "DEBUGSTR" + }, + { + "name": "PRINTSTR", + "actual_name": "DEBUGSTR" + }, + { + "name": "SAVEBOTH", + "actual_name": "SAVEBOTHCTR" + }, + { + "name": "SAVEALT", + "actual_name": "SAVEALTCTR" + }, + { + "name": "SAVE", + "actual_name": "SAVECTR" + }, + { + "name": "SETCONT", + "actual_name": "SETCONTCTR" + }, + { + "name": "POPCTRSAVE", + "actual_name": "POPSAVE" + }, + { + "name": "HASHEXT_SHA256", + "actual_name": "HASHEXT", + "arguments": [0], + "description": "Calculates and returns `SHA-256` hash of the concatenation of slices or builders `s_1`...`s_length`" + }, + { + "name": "HASHEXT_SHA512", + "actual_name": "HASHEXT", + "arguments": [1], + "description": "Calculates and returns `SHA-512` hash of the concatenation of slices or builders `s_1`...`s_length`" + }, + { + "name": "HASHEXT_BLAKE2B", + "actual_name": "HASHEXT", + "arguments": [2], + "description": "Calculates and returns `BLAKE2B` hash of the concatenation of slices or builders `s_1`...`s_length`" + }, + { + "name": "HASHEXT_KECCAK256", + "actual_name": "HASHEXT", + "arguments": [3], + "description": "Calculates and returns `KECCAK-256` hash of the concatenation of slices or builders `s_1`...`s_length`" + }, + { + "name": "HASHEXT_KECCAK512", + "actual_name": "HASHEXT", + "arguments": [4], + "description": "Calculates and returns `KECCAK-512` hash of the concatenation of slices or builders `s_1`...`s_length`" + }, + { + "name": "HASHEXTR_SHA256", + "actual_name": "HASHEXTR", + "arguments": [0], + "description": "Calculates and returns ` SHA-256` hash of the concatenation of slices or builders `s_1`...`s_length` in reverse order" + }, + { + "name": "HASHEXTR_SHA512", + "actual_name": "HASHEXTR", + "arguments": [1], + "description": "Calculates and returns ` SHA-512` hash of the concatenation of slices or builders `s_1`...`s_length` in reverse order" + }, + { + "name": "HASHEXTR_BLAKE2B", + "actual_name": "HASHEXTR", + "arguments": [2], + "description": "Calculates and returns ` BLAKE2B` hash of the concatenation of slices or builders `s_1`...`s_length` in reverse order" + }, + { + "name": "HASHEXTR_KECCAK256", + "actual_name": "HASHEXTR", + "arguments": [3], + "description": "Calculates and returns ` KECCAK-256` hash of the concatenation of slices or builders `s_1`...`s_length` in reverse order" + }, + { + "name": "HASHEXTR_KECCAK512", + "actual_name": "HASHEXTR", + "arguments": [4], + "description": "Calculates and returns ` KECCAK-512` hash of the concatenation of slices or builders `s_1`...`s_length` in reverse order" + }, + { + "name": "HASHEXTA_SHA256", + "actual_name": "HASHEXTA", + "arguments": [0], + "description": "Calculates `SHA-256` hash of the concatenation of slices (or builders) `s_1`...`s_length` and appends the resulting hash to a builder `b`" + }, + { + "name": "HASHEXTA_SHA512", + "actual_name": "HASHEXTA", + "arguments": [1], + "description": "Calculates `SHA-512` hash of the concatenation of slices (or builders) `s_1`...`s_length` and appends the resulting hash to a builder `b`" + }, + { + "name": "HASHEXTA_BLAKE2B", + "actual_name": "HASHEXTA", + "arguments": [2], + "description": "Calculates `BLAKE2B` hash of the concatenation of slices (or builders) `s_1`...`s_length` and appends the resulting hash to a builder `b`" + }, + { + "name": "HASHEXTA_KECCAK256", + "actual_name": "HASHEXTA", + "arguments": [3], + "description": "Calculates `KECCAK-256` hash of the concatenation of slices (or builders) `s_1`...`s_length` and appends the resulting hash to a builder `b`" + }, + { + "name": "HASHEXTA_KECCAK512", + "actual_name": "HASHEXTA", + "arguments": [4], + "description": "Calculates `KECCAK-512` hash of the concatenation of slices (or builders) `s_1`...`s_length` and appends the resulting hash to a builder `b`" + }, + { + "name": "HASHEXTAR_SHA256", + "actual_name": "HASHEXTAR", + "arguments": [0], + "description": "Calculates and returns `SHA-256` hash of the concatenation of slices or builders `s_1`...`s_length` in reverse order and appends the resulting hash to a builder `b`" + }, + { + "name": "HASHEXTAR_SHA512", + "actual_name": "HASHEXTAR", + "arguments": [1], + "description": "Calculates and returns `SHA-512` hash of the concatenation of slices or builders `s_1`...`s_length` in reverse order and appends the resulting hash to a builder `b`" + }, + { + "name": "HASHEXTAR_BLAKE2B", + "actual_name": "HASHEXTAR", + "arguments": [2], + "description": "Calculates and returns `BLAKE2B` hash of the concatenation of slices or builders `s_1`...`s_length` in reverse order and appends the resulting hash to a builder `b`" + }, + { + "name": "HASHEXTAR_KECCAK256", + "actual_name": "HASHEXTAR", + "arguments": [3], + "description": "Calculates and returns `KECCAK-256` hash of the concatenation of slices or builders `s_1`...`s_length` in reverse order and appends the resulting hash to a builder `b`" + }, + { + "name": "HASHEXTAR_KECCAK512", + "actual_name": "HASHEXTAR", + "arguments": [4], + "description": "Calculates and returns `KECCAK-512` hash of the concatenation of slices or builders `s_1`...`s_length` in reverse order and appends the resulting hash to a builder `b`" + } + ] +} diff --git a/server/src/languages/fift/asm/types.ts b/server/src/languages/fift/asm/types.ts index 03e88423..3ee98fb3 100644 --- a/server/src/languages/fift/asm/types.ts +++ b/server/src/languages/fift/asm/types.ts @@ -1,88 +1,44 @@ // SPDX-License-Identifier: MIT -// Copyright © 2025 TON Studio -import * as path from "node:path" - -import {pathToFileURL} from "node:url" - +// Copyright © 2025 TON Core import {Node as SyntaxNode} from "web-tree-sitter" -import {globalVFS, readFileVFS} from "@server/vfs/files-adapter" - -export interface AsmInstruction { - readonly mnemonic: string - readonly doc: { - readonly opcode: string - readonly stack: string - readonly category: string - readonly description: string - readonly gas: string - readonly fift: string - readonly fift_examples: { - readonly fift: string - readonly description: string - }[] - } - readonly since_version: number - readonly alias_info?: AsmAlias -} - -export interface AsmAlias { - readonly mnemonic: string - readonly alias_of: string - readonly doc_fift?: string - readonly doc_stack?: string - readonly description?: string - readonly operands: Record -} - -export interface AsmData { - readonly instructions: AsmInstruction[] - readonly aliases: AsmAlias[] -} - -let data: AsmData | null = null +import type { + FiftInstruction, + GasConsumptionEntry, + Instruction, + Specification, +} from "./specification-schema.ts" -export async function asmData(): Promise { - if (data !== null) { - return data - } +import tvmSpecData from "./tvm-specification.json" - const filePath = path.join(__dirname, "asm.json") - const content = await readFileVFS(globalVFS, filePathToUri(filePath)) - if (content === undefined) return {instructions: [], aliases: []} - data = JSON.parse(content) as AsmData - return data +export interface AsmInstruction { + readonly name: string + readonly instruction: Instruction + readonly fiftInstruction?: FiftInstruction } -export const filePathToUri = (filePath: string): string => { - const url = pathToFileURL(filePath).toString() - return url.replace(/c:/g, "c%3A").replace(/d:/g, "d%3A") +export function instructionSpecification(): Specification { + return tvmSpecData as unknown as Specification } -export async function findInstruction( - name: string, - args: SyntaxNode[] = [], -): Promise { - const data = await asmData() +export function findInstruction(name: string, args: SyntaxNode[] = []): AsmInstruction | undefined { + const data = instructionSpecification() const realName = adjustName(name, args) - const instruction = data.instructions.find(i => i.mnemonic === realName) + const instruction = data.instructions.find(i => i.name === realName) if (instruction) { - return instruction + return {name: realName, instruction} } - const alias = data.aliases.find(i => i.mnemonic === name) - if (alias) { - const instruction = data.instructions.find(i => i.mnemonic === alias.alias_of) + const fiftInstruction = data.fift_instructions.find(i => i.name === realName) + if (fiftInstruction) { + const instruction = data.instructions.find(i => i.name === fiftInstruction.actual_name) if (instruction) { - return { - ...instruction, - alias_info: alias, - } + return {name: realName, instruction, fiftInstruction} } } - return null + return undefined } function adjustName(name: string, args: SyntaxNode[]): string { @@ -117,11 +73,36 @@ function adjustName(name: string, args: SyntaxNode[]): string { return name } -export function getStackPresentation(rawStack: string | undefined): string { - if (!rawStack) return "" - const trimmedStack = rawStack.trim() - const prefix = trimmedStack.startsWith("-") ? "∅ " : "" - const suffix = trimmedStack.endsWith("-") ? " ∅" : "" - const stack = prefix + rawStack.replace("-", "→") + suffix - return `(${stack})` +export function formatGasRanges(gasCosts: readonly GasConsumptionEntry[] | undefined): string { + if (!gasCosts || gasCosts.length === 0) { + return "N/A" + } + + const formula = gasCosts.find(it => it.formula !== undefined) + const nonFormulaCosts = gasCosts.filter(it => it.formula === undefined) + + if (nonFormulaCosts.length === 0 && formula?.formula !== undefined) { + return formula.formula + } + const numericValues = nonFormulaCosts.map(it => it.value) + const sortedCosts = [...numericValues].sort((a, b) => a - b) + + const resultParts: string[] = [] + let startIndex = 0 + + for (let i = 0; i < sortedCosts.length; i++) { + if (i === sortedCosts.length - 1 || sortedCosts[i + 1] !== sortedCosts[i] + 1) { + if (startIndex === i) { + resultParts.push(sortedCosts[i].toString()) + } else { + resultParts.push(`${sortedCosts[startIndex]}-${sortedCosts[i]}`) + } + startIndex = i + 1 + } + } + const baseGas = resultParts.filter(it => it !== "36").join(" | ") + if (formula) { + return `${baseGas} + ${formula.formula}` + } + return baseGas } diff --git a/server/src/languages/fift/documentation/asm_documentation.ts b/server/src/languages/fift/documentation/asm_documentation.ts index c4d1ef2a..bb3640cd 100644 --- a/server/src/languages/fift/documentation/asm_documentation.ts +++ b/server/src/languages/fift/documentation/asm_documentation.ts @@ -1,50 +1,50 @@ // SPDX-License-Identifier: MIT // Copyright © 2025 TON Studio -import {AsmInstruction, getStackPresentation} from "@server/languages/fift/asm/types" - -function formatOperands(operands: Record): string { - return Object.entries(operands) - .map(([_, value]) => value.toString()) - .join(" ") -} +import {AsmInstruction, formatGasRanges} from "@server/languages/fift/asm/types" export function generateAsmDoc(instruction: AsmInstruction): string | null { - const stackInfo = instruction.doc.stack - ? `- Stack (top is on the right): \`${getStackPresentation(instruction.doc.stack)}\`` + const stackInfo = instruction.instruction.signature?.stack_string + ? `- Stack (top is on the right): \`${instruction.instruction.signature.stack_string.replace("->", "→")}\`` : "" - const gas = instruction.doc.gas.length > 0 ? instruction.doc.gas : `unknown` + const gas = formatGasRanges(instruction.instruction.description.gas ?? []) + + const rawShort = instruction.instruction.description.short + const rawLong = instruction.instruction.description.long + + const short = rawShort === "" ? rawLong : rawShort + const details = short === rawLong ? "" : rawLong + const args = instruction.instruction.description.operands.map(it => `[${it}]`).join(" ") const actualInstructionDescription = [ "```", - instruction.mnemonic, + instruction.name + " " + args, "```", stackInfo, `- Gas: \`${gas}\``, + `- Opcode: \`${instruction.instruction.layout.prefix_str}\``, "", - instruction.doc.description, + short, "", + details ? "**Details:**\n\n" + details : "", "", ] - if (instruction.alias_info) { - const operandsStr = formatOperands(instruction.alias_info.operands) + " " - const aliasInfoDescription = ` (alias of ${operandsStr}${instruction.alias_info.alias_of})` - - const alias = instruction.alias_info - const stackInfo = alias.doc_stack - ? `- Stack (top is on the right): \`${getStackPresentation(alias.doc_stack)}\`` - : "" + if (instruction.fiftInstruction) { + const operandsStr = instruction.fiftInstruction.arguments + .map(arg => arg.toString()) + .join(" ") + const fiftInfoDescription = ` alias of ${instruction.fiftInstruction.actual_name} ${operandsStr}` return [ "```", - alias.mnemonic + aliasInfoDescription, + instruction.fiftInstruction.actual_name + fiftInfoDescription, "```", - stackInfo, "", - alias.description ?? "", + instruction.fiftInstruction.description ?? "", "", "---", + "", "Aliased instruction info:", "", ...actualInstructionDescription, diff --git a/server/src/languages/fift/documentation/documentation.ts b/server/src/languages/fift/documentation/documentation.ts index 07f49c16..9cfc7e95 100644 --- a/server/src/languages/fift/documentation/documentation.ts +++ b/server/src/languages/fift/documentation/documentation.ts @@ -9,13 +9,14 @@ import {generateAsmDoc} from "@server/languages/fift/documentation/asm_documenta const CODE_FENCE = "```" +// eslint-disable-next-line @typescript-eslint/require-await export async function generateFiftDocFor(node: SyntaxNode, file: FiftFile): Promise { const def = FiftReference.resolve(node, file) if (def) { return `${CODE_FENCE}fift\n${def.parent?.text}\n${CODE_FENCE}` } - const instr = await findInstruction(node.text, []) + const instr = findInstruction(node.text, []) if (!instr) return null const doc = generateAsmDoc(instr) diff --git a/server/src/languages/fift/inlays/collect.ts b/server/src/languages/fift/inlays/collect.ts index ce039aad..3bfc039c 100644 --- a/server/src/languages/fift/inlays/collect.ts +++ b/server/src/languages/fift/inlays/collect.ts @@ -4,11 +4,12 @@ import type {InlayHint} from "vscode-languageserver" import {InlayHintKind} from "vscode-languageserver-types" -import {AsyncRecursiveVisitor} from "@server/visitor/visitor" +import {RecursiveVisitor} from "@server/visitor/visitor" import {FiftFile} from "@server/languages/fift/psi/FiftFile" -import {findInstruction} from "@server/languages/fift/asm/types" +import {findInstruction, formatGasRanges} from "@server/languages/fift/asm/types" import {instructionPresentation} from "@server/languages/fift/asm/gas" +// eslint-disable-next-line @typescript-eslint/require-await export async function provideFiftInlayHints( file: FiftFile, gasFormat: string, @@ -18,16 +19,15 @@ export async function provideFiftInlayHints( ): Promise { const result: InlayHint[] = [] - await AsyncRecursiveVisitor.visit(file.rootNode, async (n): Promise => { + RecursiveVisitor.visit(file.rootNode, (n): boolean => { if (n.type === "identifier" && settings.showGasConsumption) { - const instruction = await findInstruction(n.text) + const instruction = findInstruction(n.text) if (!instruction) return true - const presentation = instructionPresentation( - instruction.doc.gas, - instruction.doc.stack, - gasFormat, - ) + const gas = formatGasRanges(instruction.instruction.description.gas) + const stack = instruction.instruction.signature?.stack_string ?? "" + + const presentation = instructionPresentation(gas, stack, gasFormat) result.push({ kind: InlayHintKind.Type, diff --git a/tsconfig.json b/tsconfig.json index 600d7d9a..20b916d9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,6 +16,7 @@ "noPropertyAccessFromIndexSignature": false, // "noUnusedParameters": true, "skipLibCheck": true, + "resolveJsonModule": true, "baseUrl": ".", "paths": { "@server/*": ["server/src/*"],