diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000000..5875174896
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "3rd/tvm-spec"]
+ path = 3rd/tvm-spec
+ url = https://github.com/ton-community/tvm-spec.git
diff --git a/3rd/tvm-spec b/3rd/tvm-spec
new file mode 160000
index 0000000000..59ec1a2154
--- /dev/null
+++ b/3rd/tvm-spec
@@ -0,0 +1 @@
+Subproject commit 59ec1a2154aa4f8038f33b031dbf488313fae129
diff --git a/README.md b/README.md
index 875d5e629a..8f61ee202a 100644
--- a/README.md
+++ b/README.md
@@ -54,7 +54,12 @@ Use Gitpod (a free, online VS code-like IDE) for contributing. It will launch a
### Local (default way)
-1. Download repository from GitHub
+1. Download repository from GitHub with its submodules
+
+ ```
+ git clone --recursive https://github.com/ton-community/ton-docs.git
+ ```
+
2. Install last version [NodeJS LTS](https://nodejs.org/en/download/) to run local build
3. Open Terminal in project directory
4. Install dependencies with command:
diff --git a/cspell.json b/cspell.json
index 44093ca3e2..71f143c679 100644
--- a/cspell.json
+++ b/cspell.json
@@ -335,6 +335,6 @@
"sidebars",
"i18n",
".husky",
- "warnings.txt"
+ "3rd/*"
]
}
diff --git a/docs/v3/documentation/smart-contracts/message-management/messages-and-transactions.mdx b/docs/v3/documentation/smart-contracts/message-management/messages-and-transactions.mdx
index f1daa82fb3..f46730c8d6 100644
--- a/docs/v3/documentation/smart-contracts/message-management/messages-and-transactions.mdx
+++ b/docs/v3/documentation/smart-contracts/message-management/messages-and-transactions.mdx
@@ -7,7 +7,7 @@ TON is an asynchronous blockchain with a complex structure very different from o
## What is a message?
-A message is a packet of data sent between actors (users, applications, smart contracts). It typically contains information instructing the receiver on what action to perform, such as updating storage or sending a new message.
+A message is a packet of data exchanged between actors (users, applications, or smart contracts). It typically contains information instructing the receiver on what action to perform, such as updating storage or sending a new message.
@@ -21,7 +21,7 @@ A message is a packet of data sent between actors (users, applications, smart co
-Working with this type of communication is reminiscent of launching a satellite into space. We know the message we've formed, but after its launch, it is necessary to conduct separate observation to find out what results we will obtain.
+Working with this type of communication is reminiscent of launching a satellite into space. While we know the message we've created, observation after launch is required to determine the outcome.
@@ -30,9 +30,9 @@ Working with this type of communication is reminiscent of launching a satellite
A transaction in TON consists of the following:
- the incoming message that initially triggers the contract (special ways to trigger exist)
- contract actions caused by the incoming message, such as an update to the contract's storage (optional)
-- outgoing generated messages that are sent to other actors (optional)
+- outgoing messages generated and sent to other actors (optional)
->Technically, a contract can be triggered through special functions such as [Tick-Tock](/v3/documentation/data-formats/tlb/transaction-layout#tick-tock), but this function more used for internal TON Blockchain core contracts.
+>Technically, a contract can be triggered through special functions such as [Tick-Tock](/v3/documentation/data-formats/tlb/transaction-layout#tick-tock), but this function is more used for internal TON Blockchain core contracts.
>Not every transaction results in outgoing messages or updates to the contract's storage — this depends on the actions defined by the contract's code.
@@ -52,7 +52,7 @@ If we look at Ethereum or almost any other synchronous blockchain, each transact
In an asynchronous system you can't get a response from the destination smart contract in the same transaction. A contract call may take a few blocks to be processed, depending on the length of the route between source and destination.
-To achieve the infinite sharding paradigm, it is necessary to ensure full parallelization, which means that the execution of each transactions is independent of every other. Therefore, instead of transactions which affect and change the state of many contracts at one time, each transaction in TON is only executed on a single smart contract and smart contracts communicate through messages. That way, smart contracts can only interact with each other by calling their functions with special messages and getting a response to them via other messages later.
+Achieving the infinite sharding paradigm requires full parallelization, ensuring that each transaction executes independently of others. Therefore, instead of transactions which affect and change the state of many contracts at one time, each transaction in TON is only executed on a single smart contract and smart contracts communicate through messages. That way, smart contracts can only interact with each other by calling their functions with special messages and getting a response to them via other messages later.
:::info
More detailed and accurate description on the [Transaction Layout](/v3/documentation/data-formats/tlb/transaction-layout) page.
diff --git a/docs/v3/documentation/smart-contracts/overview.mdx b/docs/v3/documentation/smart-contracts/overview.mdx
index 19d862cfd3..5771a2773f 100644
--- a/docs/v3/documentation/smart-contracts/overview.mdx
+++ b/docs/v3/documentation/smart-contracts/overview.mdx
@@ -168,6 +168,19 @@ Tact by Example
+### 📗 Tolk
+
+A new language for writing smart contracts in TON. Think of Tolk as the "**next‑generation FunC**"
+
+:::caution
+Under active development.
+:::
+
+
+
+Tolk Overview
+
+
### 📕 Fift (advanced)
diff --git a/docs/v3/documentation/smart-contracts/transaction-fees/fees.md b/docs/v3/documentation/smart-contracts/transaction-fees/fees.md
index 0b1832888b..c541920139 100644
--- a/docs/v3/documentation/smart-contracts/transaction-fees/fees.md
+++ b/docs/v3/documentation/smart-contracts/transaction-fees/fees.md
@@ -103,7 +103,7 @@ Saving 1 MB of data for one year on TON will cost 6.01 TON. Note that you usuall
### Is it possible to send a gasless transaction?
-At present, this opportunity is not available. We are actively working on its development. Please stay tuned for updates.
+In TON, gasless transactions are possible using [wallet v5](/v3/documentation/smart-contracts/contracts-specs/wallet-contracts#preparing-for-gasless-transactions) a relayer that pays the gas fee for transaction.
### How to calculation?
diff --git a/docs/v3/guidelines/dapps/apis-sdks/overview.md b/docs/v3/guidelines/dapps/apis-sdks/overview.md
new file mode 100644
index 0000000000..db3f80b32a
--- /dev/null
+++ b/docs/v3/guidelines/dapps/apis-sdks/overview.md
@@ -0,0 +1,36 @@
+# Overview
+
+The purpose of this article is to help you choose the right tools for application development in TON ecosystem.
+
+## TMA development
+
+* Use [Mini Apps SDKs](/v3/guidelines/dapps/tma/overview#mini-apps-sdks) for [Telegram Mini Apps](/v3/guidelines/dapps/tma/overview) development.
+* Choose [JS/TS-based SDK](/v3/guidelines/dapps/apis-sdks/sdk#typescript--javascript) for interacting with TON blockchain.
+
+## DApps development
+
+* Use Tolk, FunC or Tact [programming languages](/v3/documentation/smart-contracts/overview#programming-languages) for TON blockchain smart contracts development for your [DApp](/v3/guidelines/dapps/overview) if needed.
+* To interacts with TON blockchain and process its data choose listed [SDK](/v3/guidelines/dapps/apis-sdks/sdk). One of the most popular languages for this purpose are:
+ * [JS/TS](/v3/guidelines/dapps/apis-sdks/sdk#typescript--javascript)
+ * [Go](/v3/guidelines/dapps/apis-sdks/sdk#go)
+ * [Python](/v3/guidelines/dapps/apis-sdks/sdk#python)
+* To integrate user authentication with their TON Wallets (also payments processing logic) into your DApp use [TON Connect](/v3/guidelines/ton-connect/overview).
+
+## TON Statistics analyzer
+
+You may need fast interaction with TON blockchain or collect and analyze its data. For these purposes it may be helpful to run your own [Ton Node](/v3/documentation/infra/nodes/node-types).
+
+* [Liteserver Node](/v3/guidelines/nodes/running-nodes/liteserver-node) - just for interaction with blockchain.
+* [Archive Node](/v3/guidelines/nodes/running-nodes/archive-node) - collecting extended historical data of a blockchain.
+
+Use SDKs with native [ADNL](/v3/documentation/network/protocols/adnl/adnl-tcp) support:
+* [Go](https://github.com/xssnick/tonutils-go)
+* [Python](https://github.com/yungwine/pytoniq)
+
+
+## See Also
+
+* [SDKs](/v3/guidelines/dapps/apis-sdks/sdk)
+* [TMA Tutorials](/v3/guidelines/dapps/tma/tutorials/step-by-step-guide)
+* [TON Connect Tutorials](/v3/guidelines/ton-connect/guidelines/how-ton-connect-works)
+* [Payments Processing](/v3/guidelines/dapps/asset-processing/payments-processing)
diff --git a/docs/v3/guidelines/dapps/cookbook.mdx b/docs/v3/guidelines/dapps/cookbook.mdx
index 01a62884d3..cae9783c71 100644
--- a/docs/v3/guidelines/dapps/cookbook.mdx
+++ b/docs/v3/guidelines/dapps/cookbook.mdx
@@ -442,7 +442,7 @@ async def main():
}
await wallet.transfer(**transfer)
- await client.close_all()
+ await provider.close_all()
asyncio.run(main())
```
@@ -606,7 +606,7 @@ async def main():
stack=[begin_cell().store_address(USER_ADDRESS).end_cell().begin_parse()])
jetton_wallet = result_stack[0].load_address()
print(f"Jetton wallet address for {USER_ADDRESS}: {jetton_wallet.to_str(1, 1, 1)}")
- await provider.close_all()
+ await provider.close_all()
asyncio.run(main())
```
@@ -862,7 +862,7 @@ async def main():
.end_cell())
await wallet.transfer(destination=USER_JETTON_WALLET, amount=int(0.05*1e9), body=transfer_cell)
- await provider.close_all()
+ await provider.close_all()
asyncio.run(main())
```
diff --git a/docs/v3/guidelines/nodes/node-maintenance-and-security.md b/docs/v3/guidelines/nodes/node-maintenance-and-security.md
index 023a58c078..a9403aa411 100644
--- a/docs/v3/guidelines/nodes/node-maintenance-and-security.md
+++ b/docs/v3/guidelines/nodes/node-maintenance-and-security.md
@@ -7,35 +7,30 @@ This document assumes that a validator is installed using the configuration and
## Maintenance
### Database grooming
-TON Node/Validator keeps it's database within the path specified by `--db` flag of `validator-engine`, usually `/var/ton-work/db`, this directory is created and managed by the node but it is recommended to perform a database grooming/cleanup task once a month to remove some artifacts.
+TON Node keeps its database within the path specified by `--db` flag of `validator-engine`, usually `/var/ton-work/db`. To reduce the database size, you can decrease the TTL (time-to-live) of some stored data.
-:::caution Do not forget to stop validator process
-You **must** stop the validator process before performing the steps outlined below, failure to do that will likely cause database corruption.
-:::
+Current TTL values can be found in the node service file (default path is `/etc/systemd/system/validator.service`). If you use MyTonCtrl you can use command `installer status`. If some of the values are not set, then the default values are used.
-The procedure takes ~5 minutes to complete and will not cause major service disruption.
+### archive-ttl
-#### Switch to root
-```sh
-sudo -s
-```
-#### Stop validator service
-```sh
-systemctl stop validator
-```
-#### Verify that validator is not running
-```sh
-systemctl status validator
-```
-#### Perform database cleanup
-```sh
-find /var/ton-work/db -name 'LOG.old*' -exec rm {} +
+`archive-ttl` is a parameter that defines the time-to-live for the blocks. The default value is 604800 seconds (7 days). You can decrease this value to reduce the database size.
+
+```bash
+MyTonCtrl> installer set_node_argument --archive-ttl
```
-#### Start validator service
-```sh
-systemctl start validator
+
+If you don't use MyTonCtrl then you can edit the node service file.
+
+### state-ttl
+
+`state-ttl` is a parameter that defines the time-to-live for the blocks states. The default value is 86400 seconds (24 hours). You can decrease this value to reduce the database size, but for validators it's highly recommended to use the default value (keep the flag unset).
+Also, this value should be more than length of the validation period (the value can be found in [15th config param](https://docs.ton.org/v3/documentation/network/configs/blockchain-configs#param-15)).
+
+```bash
+MyTonCtrl> installer set_node_argument --state-ttl
```
-Verify that the validator process is running by analysing the processes and log. Validator should re-sync with the network within a few minutes.
+
+If you don't use MyTonCtrl then you can edit the node service file.
### Backups
The easiest and most efficient way to backup the validator is to copy crucial node configuration files, keys and mytonctrl settings:
diff --git a/docs/v3/guidelines/smart-contracts/howto/wallet.md b/docs/v3/guidelines/smart-contracts/howto/wallet.md
index 1dd3db315d..de06ed2a49 100644
--- a/docs/v3/guidelines/smart-contracts/howto/wallet.md
+++ b/docs/v3/guidelines/smart-contracts/howto/wallet.md
@@ -519,7 +519,7 @@ import { TonClient } from '@ton/ton';
import { mnemonicToWalletKey } from '@ton/crypto';
const client = new TonClient({
- endpoint: "https://toncenter.com/api/v2/jsonRPC",
+ endpoint: "https://toncenter.com/api/v2/jsonRPC", // you can replace it on https://testnet.toncenter.com/api/v2/jsonRPC for testnet
apiKey: "put your api key" // you can get an api key from @tonapibot bot in Telegram
});
@@ -1026,7 +1026,13 @@ log.Println("Contract address:", contractAddress.String()) // Output contract ad
-Using the State Init, we can now build the message and send it to the blockchain. To carry out this process **a minimum wallet balance of 0.1 TON** (the balance can be less, but this amount is guaranteed to be sufficient) is required. To accomplish this, we’ll need to run the code mentioned earlier in the tutorial, get the correct wallet address and send 0.1 TON to this address.
+Using the State Init, we can now build the message and send it to the blockchain.
+
+:::warning
+ To carry out this process, **a minimum wallet balance of 0.1 TON** is required (the balance can be less, but this amount is guaranteed to be sufficient). To accomplish this, we’ll need to run the code mentioned earlier in the tutorial, obtain the correct wallet address, and send 0.1 TON to this address. Alternatively, you can send this sum manually via your wallet app before sending the deployment message itself.
+
+ Deployment by external messages is presented here mostly for educational purposes; in practice, it's much more convenient to [deploy smart contracts via Wallets](/v3/guidelines/smart-contracts/howto/wallet#contract-deployment-via-wallet), which will be described later.
+:::
Let’s start with building the message similar to the one we built **in the previous section**:
diff --git a/i18n/zh-CN/docusaurus-plugin-content-docs/current/develop/dapps/cookbook.md b/i18n/zh-CN/docusaurus-plugin-content-docs/current/develop/dapps/cookbook.md
index 3d0016556a..5cf540df31 100644
--- a/i18n/zh-CN/docusaurus-plugin-content-docs/current/develop/dapps/cookbook.md
+++ b/i18n/zh-CN/docusaurus-plugin-content-docs/current/develop/dapps/cookbook.md
@@ -330,7 +330,7 @@ async def main():
await wallet.transfer(destination=DESTINATION_ADDRESS, amount=int(0.05*1e9), body="转账示例内容")
- await client.close_all()
+ await provider.close_all()
asyncio.run(main())
```
@@ -444,7 +444,7 @@ async def main():
stack=[begin_cell().store_address(USER_ADDRESS).end_cell().begin_parse()])
jetton_wallet = result_stack[0].load_address()
print(f"用户{USER_ADDRESS}的Jetton钱包地址: {jetton_wallet.to_str(1, 1, 1)}")
- await provider.close_all()
+ await provider.close_all()
asyncio.run(main())
```
@@ -597,7 +597,7 @@ async def main():
.end_cell())
await wallet.transfer(destination=USER_JETTON_WALLET, amount=int(0.05*1e9), body=transfer_cell)
- await client.close_all()
+ await provider.close_all()
asyncio.run(main())
```
diff --git a/navbar.js b/navbar.js
index ad6a4e4577..895ad6378c 100644
--- a/navbar.js
+++ b/navbar.js
@@ -121,7 +121,7 @@ module.exports = {
label: 'Telegram Mini Apps (TMAs)',
},
{
- to: 'v3/guidelines/dapps/apis-sdks/sdk',
+ to: 'v3/guidelines/dapps/apis-sdks/overview',
label: 'APIs and SDKs',
},
{
diff --git a/sidebars/guidelines.js b/sidebars/guidelines.js
index edf56d5828..158e7f10be 100644
--- a/sidebars/guidelines.js
+++ b/sidebars/guidelines.js
@@ -112,6 +112,7 @@ module.exports = [
type: 'category',
label: 'APIs and SDKs',
items: [
+ 'v3/guidelines/dapps/apis-sdks/overview',
'v3/guidelines/dapps/apis-sdks/sdk',
'v3/guidelines/dapps/apis-sdks/api-types',
'v3/guidelines/dapps/apis-sdks/ton-http-apis',
diff --git a/src/data/opcodes/cp0.json b/src/data/opcodes/cp0.json
deleted file mode 100644
index b12cc9b09b..0000000000
--- a/src/data/opcodes/cp0.json
+++ /dev/null
@@ -1,34422 +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": []
- }
- ]
- },
- "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": []
- }
- ]
- },
- "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": []
- }
- ]
- },
- "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/src/data/opcodes/index.ts b/src/data/opcodes/index.ts
index 3a91e106a3..2733d6bb23 100644
--- a/src/data/opcodes/index.ts
+++ b/src/data/opcodes/index.ts
@@ -10,7 +10,7 @@ import exceptionOpcodes from './exceptions.json';
import miscellaneousOpcodes from './miscellaneous.json';
import stackManipulationOpcodes from './stack_manipulation.json';
import tupleOpcodes from './tuple.json';
-import cp0 from './cp0.json';
+import cp0 from '../../../3rd/tvm-spec/cp0.json';
type Opcode = {
name: string;