TVM Instructions
This information is very lowlevel and could be hard to understand for newcomers. So feel free to read about it later.
Introduction
This document provides a list of TVM instructions along with their opcodes and mnemonics.
TVM.pdf concept document for TON Virtual Machine (may include outdated information).
Fift is a stackbased programming language designed to manage TON smart contracts. The Fift assembler is a Fift library that converts mnemonics of TVM instructions into their binary representation.
A description of Fift, including an introduction to the Fift assembler, can be found here.
This document specifies the corresponding mnemonic for each instruction.
Note the following:
 Fift is a stackbased language, therefore all the arguments of any instruction are written before it (e.g.
5 PUSHINT
,s0 s4 XCHG
).  Stack registers are denoted by
s0, s1, ..., s15
. Other stack registers (up to 255) are denoted byi s()
(e.g.100 s()
).  Control registers are denoted by
c0, c1, ..., c15
.
Gas prices
The gas price of each instruction is specified in this document. The basic gas price of an instruction is 10 + b
, where b
is the instruction length in bits. Some operations have additional fees:
 Parsing cells: Transforming a cell into a slice costs 100 gas units if the cell is loading for the first time and 25 for subsequent loads during the same transaction. For such instructions, two gas prices are specified (e.g.
CTOS
:118/43
).  Cell creation: 500 gas units.
 Throwing exceptions: 50 gas units. In this document the exception fee is only specified for an instruction if its primary purpose is to throw (e.g.
THROWIF
,FITS
). If the instruction only throws in some cases, two gas prices are specified (e.g.FITS
:26/76
).  Tuple creation: 1 gas unit for every tuple element.
 Implicit jumps: 10 gas units for an implicit jump, 5 gas units for an implicit back jump. This fee is not a part of any instruction.
 Moving stack elements between continuations: 1 gas unit per element, however moving the first 32 elements is free.
Quick search
A full machinereadable list of TVM instructions is available here.
Each section of TVM Instructions includes a builtin search component for finding opcodes specific to that section as well.
On this page, however, the search covers all existing opcodes, providing a comprehensive search option across the entire opcode range.
Feel free to use the search field below to find a specific instruction:
 Overview
 Stack Manipulation
 Tuple, List and Null
 Constants and Literals
 Arithmetic Operations
 Data Comparison
 Cell Manipulation
 Continuation and Control Flow
 Exception Generation and Handling
 Dictionary Manipulation
 Applicationspecific Primitives
 Miscellaneous
 Aliases
Opcode  Fift syntax  Stack  Description  Gas 

00  NOP    Does nothing.  18 
0i  s[i] XCHG0 
 Interchanges s0 with s[i] , 1 <= i <= 15 .  18 
10ij  s[i] s[j] XCHG 
 Interchanges s[i] with s[j] , 1 <= i < j <= 15 .  26 
11ii  s0 [ii] s() XCHG 
 Interchanges s0 with s[ii] , 0 <= ii <= 255 .  26 
1i  s1 s[i] XCHG 
 Interchanges s1 with s[i] , 2 <= i <= 15 .  18 
2i  s[i] PUSH 
 Pushes a copy of the old s[i] into the stack.  18 
3i  s[i] POP 
 Pops the old s0 value into the old s[i] .  18 
4ijk  s[i] s[j] s[k] XCHG3 
 Equivalent to s2 s[i] XCHG s1 s[j] XCHG s[k] XCHG0 .  26 
50ij  s[i] s[j] XCHG2 
 Equivalent to s1 s[i] XCHG s[j] XCHG0 .  26 
51ij  s[i] s[j] XCPU 
 Equivalent to s[i] XCHG0 s[j] PUSH .  26 
52ij  s[i] s[j1] PUXC 
 Equivalent to s[i] PUSH SWAP s[j] XCHG0 .  26 
53ij  s[i] s[j] PUSH2 
 Equivalent to s[i] PUSH s[j+1] PUSH .  26 
540ijk  s[i] s[j] s[k] XCHG3_l 
 Long form of XCHG3 .  34 
541ijk  s[i] s[j] s[k] XC2PU 
 Equivalent to s[i] s[j] XCHG2 s[k] PUSH .  34 
542ijk  s[i] s[j] s[k1] XCPUXC 
 Equivalent to s1 s[i] XCHG s[j] s[k1] PUXC .  34 
543ijk  s[i] s[j] s[k] XCPU2 
 Equivalent to s[i] XCHG0 s[j] s[k] PUSH2 .  34 
544ijk  s[i] s[j1] s[k1] PUXC2 
 Equivalent to s[i] PUSH s2 XCHG0 s[j] s[k] XCHG2 .  34 
545ijk  s[i] s[j1] s[k1] PUXCPU 
 Equivalent to s[i] s[j1] PUXC s[k] PUSH .  34 
546ijk  s[i] s[j1] s[k2] PU2XC 
 Equivalent to s[i] PUSH SWAP s[j] s[k1] PUXC .  34 
547ijk  s[i] s[j] s[k] PUSH3 
 Equivalent to s[i] PUSH s[j+1] s[k+1] PUSH2 .  34 
55ij  [i+1] [j+1] BLKSWAP 
 Permutes two blocks  26 
56ii  [ii] s() PUSH 
 Pushes a copy of the old  26 
57ii  [ii] s() POP 
 Pops the old  26 
58  ROT  a b c  b c a  Equivalent to 1 2 BLKSWAP or to s2 s1 XCHG2 .  18 
59  ROTREV
ROT  a b c  c a b  Equivalent to 2 1 BLKSWAP or to s2 s2 XCHG2 .  18 
5A  SWAP2
2SWAP  a b c d  c d a b  Equivalent to 2 2 BLKSWAP or to s3 s2 XCHG2 .  18 
5B  DROP2
2DROP  a b   Equivalent to DROP DROP .  18 
5C  DUP2
2DUP  a b  a b a b  Equivalent to s1 s0 PUSH2 .  18 
5D  OVER2
2OVER  a b c d  a b c d a b  Equivalent to s3 s2 PUSH2 .  18 
5Eij  [i+2] [j] REVERSE 
 Reverses the order of s[j+i+1] ... s[j] .  26 
5F0i  [i] BLKDROP 
 Equivalent to DROP performed i times.  26 
5Fij  [i] [j] BLKPUSH 
 Equivalent to  26 
60  PICK
PUSHX 
 Pops integer i from the stack, then performs s[i] PUSH .  18 
61  ROLLX 
 Pops integer i from the stack, then performs 1 [i] BLKSWAP .  18 
62  ROLLX
ROLLREVX 
 Pops integer i from the stack, then performs [i] 1 BLKSWAP .  18 
63  BLKSWX 
 Pops integers i ,j from the stack, then performs [i] [j] BLKSWAP .  18 
64  REVX 
 Pops integers i ,j from the stack, then performs [i] [j] REVERSE .  18 
65  DROPX 
 Pops integer i from the stack, then performs [i] BLKDROP .  18 
66  TUCK  a b  b a b  Equivalent to SWAP OVER or to s1 s1 XCPU .  18 
67  XCHGX 
 Pops integer i from the stack, then performs s[i] XCHG .  18 
68  DEPTH   depth  Pushes the current depth of the stack.  18 
69  CHKDEPTH  i   Pops integer i from the stack, then checks whether there are at least i elements, generating a stack underflow exception otherwise.  18/58 
6A  ONLYTOPX 
 Pops integer i from the stack, then removes all but the top i elements.  18 
6B  ONLYX 
 Pops integer i from the stack, then leaves only the bottom i elements. Approximately equivalent to DEPTH SWAP SUB DROPX .  18 
6Cij  [i] [j] BLKDROP2 
 Drops  26 
6D  NULL
PUSHNULL   null  Pushes the only value of type Null.  18 
6E  ISNULL  x  ?  Checks whether x is a Null, and returns 1 or 0 accordingly.  18 
6F0n  [n] TUPLE  x_1 ... x_n  t  Creates a new Tuple  26+n 
6F1k  [k] INDEX  t  x  Returns the  26 
6F2n  [n] UNTUPLE  t  x_1 ... x_n  Unpacks a Tuple  26+n 
6F3k  [k] UNPACKFIRST  t  x_1 ... x_k  Unpacks first  26+k 
6F4n  [n] EXPLODE  t  x_1 ... x_m m  Unpacks a Tuple t=(x_1,...,x_m) and returns its length m , but only if m <= n <= 15 . Otherwise throws a type check exception.  26+m 
6F5k  [k] SETINDEX  t x  t'  Computes Tuple  26+t 
6F6k  [k] INDEXQ  t  x  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 .  26 
6F7k  [k] SETINDEXQ  t x  t'  Sets the  26+t' 
6F80  TUPLEVAR  x_1 ... x_n n  t  Creates a new Tuple t of length n similarly to TUPLE , but with 0 <= n <= 255 taken from the stack.  26+n 
6F81  INDEXVAR  t k  x  Similar to k INDEX , but with 0 <= k <= 254 taken from the stack.  26 
6F82  UNTUPLEVAR  t n  x_1 ... x_n  Similar to n UNTUPLE , but with 0 <= n <= 255 taken from the stack.  26+n 
6F83  UNPACKFIRSTVAR  t n  x_1 ... x_n  Similar to n UNPACKFIRST , but with 0 <= n <= 255 taken from the stack.  26+n 
6F84  EXPLODEVAR  t n  x_1 ... x_m m  Similar to n EXPLODE , but with 0 <= n <= 255 taken from the stack.  26+m 
6F85  SETINDEXVAR  t x k  t'  Similar to k SETINDEX , but with 0 <= k <= 254 taken from the stack.  26+t' 
6F86  INDEXVARQ  t k  x  Similar to n INDEXQ , but with 0 <= k <= 254 taken from the stack.  26 
6F87  SETINDEXVARQ  t x k  t'  Similar to k SETINDEXQ , but with 0 <= k <= 254 taken from the stack.  26+t' 
6F88  TLEN  t  n  Returns the length of a Tuple.  26 
6F89  QTLEN  t  n or 1  Similar to TLEN , but returns 1 if t is not a Tuple.  26 
6F8A  ISTUPLE  t  ?  Returns 1 or 0 depending on whether t is a Tuple.  26 
6F8B  LAST  t  x  Returns the last element of a nonempty Tuple t .  26 
6F8C  TPUSH
COMMA  t x  t'  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.  26+t' 
6F8D  TPOP  t  t' x  Detaches the last element x=x_n from a nonempty Tuple t=(x_1,...,x_n) , and returns both the resulting Tuple t'=(x_1,...,x_{n1}) and the original last element x .  26+t' 
6FA0  NULLSWAPIF  x  x or null x  Pushes a Null under the topmost Integer x , but only if x!=0 .  26 
6FA1  NULLSWAPIFNOT  x  x or null x  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 .  26 
6FA2  NULLROTRIF  x y  x y or null x y  Pushes a Null under the second stack entry from the top, but only if the topmost Integer y is nonzero.  26 
6FA3  NULLROTRIFNOT  x y  x y or null x y  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 .  26 
6FA4  NULLSWAPIF2  x  x or null null x  Pushes two nulls under the topmost Integer  26 
6FA5  NULLSWAPIFNOT2  x  x or null null x  Pushes two nulls under the topmost Integer  26 
6FA6  NULLROTRIF2  x y  x y or null null x y  Pushes two nulls under the second stack entry from the top, but only if the topmost Integer  26 
6FA7  NULLROTRIFNOT2  x y  x y or null null x y  Pushes two nulls under the second stack entry from the top, but only if the topmost Integer  26 
6FBij  [i] [j] INDEX2  t  x  Recovers  26 
6FE_ijk  [i] [j] [k] INDEX3  t  x  Recovers  26 
7i  [x] PUSHINT
[x] INT   x  Pushes integer  18 
80xx  [xx] PUSHINT
[xx] INT   xx  Pushes integer xx . 128 <= xx <= 127 .  26 
81xxxx  [xxxx] PUSHINT
[xxxx] INT   xxxx  Pushes integer xxxx . 2^15 <= xx < 2^15 .  34 
82lxxx  [xxx] PUSHINT
[xxx] INT   xxx  Pushes integer  23 
83xx  [xx+1] PUSHPOW2   2^(xx+1)  (Quietly) pushes  26 
83FF  PUSHNAN   NaN  Pushes a NaN .  26 
84xx  [xx+1] PUSHPOW2DEC   2^(xx+1)1  Pushes 2^(xx+1)1 for 0 <= xx <= 255 .  26 
85xx  [xx+1] PUSHNEGPOW2   2^(xx+1)  Pushes 2^(xx+1) for 0 <= xx <= 255 .  26 
88  [ref] PUSHREF   c  Pushes the reference  18 
89  [ref] PUSHREFSLICE   s  Similar to PUSHREF , but converts the cell into a Slice.  118/43 
8A  [ref] PUSHREFCONT   cont  Similar to PUSHREFSLICE , but makes a simple ordinary Continuation out of the cell.  118/43 
8Bxsss  [slice] PUSHSLICE
[slice] SLICE   s  Pushes the slice  22 
8Crxxssss  [slice] PUSHSLICE
[slice] SLICE   s  Pushes the slice  25 
8Drxxsssss  [slice] PUSHSLICE
[slice] SLICE   s  Pushes the slice  28 
8F_rxxcccc  [builder] PUSHCONT
[builder] CONT   c  Pushes a continuation made from  26 
9xccc  [builder] PUSHCONT
[builder] CONT   c  Pushes a continuation made from  18 
A0  ADD  x y  x+y  18  
A1  SUB  x y  xy  18  
A2  SUBR  x y  yx  Equivalent to SWAP SUB .  18 
A3  NEGATE  x  x  Equivalent to  18 
A4  INC  x  x+1  Equivalent to 1 ADDCONST .  18 
A5  DEC  x  x1  Equivalent to 1 ADDCONST .  18 
A6cc  [cc] ADDCONST
[cc] ADDINT
[cc] SUBCONST
[cc] SUBINT  x  x+cc  128 <= cc <= 127 .  26 
A7cc  [cc] MULCONST
[cc] MULINT  x  x*cc  128 <= cc <= 127 .  26 
A8  MUL  x y  x*y  18  
A900  ADDDIVMOD  x w z  q=floor((x+w)/z) r=(x+w)zq  26  
A901  ADDDIVMODR  x w z  q=round((x+w)/z) r=(x+w)zq  26  
A902  ADDDIVMODC  x w y  q=ceil((x+w)/z) r=(x+w)zq  26  
A904  DIV  x y  q  q=floor(x/y) , r=xy*q  26 
A905  DIVR  x y  q'  q'=round(x/y) , r'=xy*q'  26 
A906  DIVC  x y  q''  q''=ceil(x/y) , r''=xy*q''  26 
A908  MOD  x y  r  26  
A909  MODR  x y  r  26  
A90A  MODC  x y  r  26  
A90C  DIVMOD  x y  q r  26  
A90D  DIVMODR  x y  q' r'  26  
A90E  DIVMODC  x y  q'' r''  26  
A920  ADDRSHIFTMOD  x w z  q=floor((x+w)/2^z) r=(x+w)q*2^z  26  
A921  ADDRSHIFTMODR  x w z  q=round((x+w)/2^z) r=(x+w)q*2^z  26  
A922  ADDRSHIFTMODC  x w z  q=ceil((x+w)/2^z) r=(x+w)q*2^z  26  
A925  RSHIFTR  x y  round(x/2^y)  26  
A926  RSHIFTC  x y  ceil(x/2^y)  26  
A928  MODPOW2  x y  x mod 2^y  26  
A929  MODPOW2R  x y  x mod 2^y  26  
A92A  MODPOW2C  x y  x mod 2^y  26  
A92C  RSHIFTMOD  x y  q=floor(x/2^y) r=xq*2^y  26  
A92D  RSHIFTMODR  x y  q=round(x/2^y) r=xq*2^y  26  
A92E  RSHIFTMODC  x y  q=ceil(x/2^y) r=xq*2^y  26  
A930tt  [tt+1] ADDRSHIFT#MOD  x w  q=floor((x+w)/2^(tt+1)) r=(x+w)q*2^(tt+1)  34  
A931tt  [tt+1] ADDRSHIFTR#MOD  x w  q=round((x+w)/2^(tt+1)) r=(x+w)q*2^(tt+1)  34  
A932tt  [tt+1] ADDRSHIFTC#MOD  x w  q=round((x+w)/2^(tt+1)) r=(x+w)q*2^(tt+1)  34  
A935tt  [tt+1] RSHIFTR#  x  round(x/2^(tt+1))  34  
A936tt  [tt+1] RSHIFTC#  x  ceil(x/2^(tt+1))  34  
A938tt  [tt+1] MODPOW2#  x  x mod 2^(tt+1)  34  
A939tt  [tt+1] MODPOW2R#  x  x mod 2^(tt+1)  34  
A93Att  [tt+1] MODPOW2C#  x  x mod 2^(tt+1)  34  
A93Ctt  [tt+1] RSHIFT#MOD  x  q=floor(x/2^(tt+1)) r=xq*2^(tt+1)  34  
A93Dtt  [tt+1] RSHIFTR#MOD  x  q=round(x/2^(tt+1)) r=xq*2^(tt+1)  34  
A93Ett  [tt+1] RSHIFTC#MOD  x  q=ceil(x/2^(tt+1)) r=xq*2^(tt+1)  34  
A980  MULADDDIVMOD  x y w z  q=floor((xy+w)/z) r=(xy+w)zq  26  
A981  MULADDDIVMODR  x y w z  q=round((xy+w)/z) r=(xy+w)zq  26  
A982  MULADDDIVMODC  x y w z  q=ceil((xy+w)/z) r=(xy+w)zq  26  
A984  MULDIV  x y z  q  q=floor(x*y/z)  26 
A985  MULDIVR  x y z  q'  q'=round(x*y/z)  26 
A986  MULDIVC  x y z  q'  q'=ceil(x*y/z)  26 
A988  MULMOD  x y z  x*y mod z  26  
A989  MULMODR  x y z  x*y mod z  26  
A98A  MULMODC  x y z  x*y mod z  26  
A98C  MULDIVMOD  x y z  q r  q=floor(x*y/z) , r=x*yz*q  26 
A98D  MULDIVMODR  x y z  q r  q=round(x*y/z) , r=x*yz*q  26 
A98E  MULDIVMODC  x y z  q r  q=ceil(x*y/z) , r=x*yz*q  26 
A9A0  MULADDRSHIFTMOD  x y w z  q=floor((xy+w)/2^z) r=(xy+w)q*2^z  26  
A9A1  MULADDRSHIFTRMOD  x y w z  q=round((xy+w)/2^z) r=(xy+w)q*2^z  26  
A9A2  MULADDRSHIFTCMOD  x y w z  q=ceil((xy+w)/2^z) r=(xy+w)q*2^z  26  
A9A4  MULRSHIFT  x y z  floor(x*y/2^z)  0 <= z <= 256  26 
A9A5  MULRSHIFTR  x y z  round(x*y/2^z)  0 <= z <= 256  26 
A9A6  MULRSHIFTC  x y z  ceil(x*y/2^z)  0 <= z <= 256  26 
A9A8  MULMODPOW2_VAR  x y z  x*y mod 2^z  26  
A9A9  MULMODPOW2R_VAR  x y z  x*y mod 2^z  26  
A9AA  MULMODPOW2C_VAR  x y z  x*y mod 2^z  26  
A9AC  MULRSHIFTMOD_VAR  x y z  q=floor(x*y/2^z) r=xyq*2^z  26  
A9AD  MULRSHIFTRMOD_VAR  x y z  q=round(x*y/2^z) r=xyq*2^z  26  
A9AE  MULRSHIFTCMOD_VAR  x y z  q=ceil(x*y/2^z) r=xyq*2^z  26  
A9B0tt  [tt+1] MULADDRSHIFT#MOD  x y w  q=floor((xy+w)/2^z) r=(xy+w)q*2^z  34  
A9B1tt  [tt+1] MULADDRSHIFTR#MOD  x y w  q=round((xy+w)/2^z) r=(xy+w)q*2^z  34  
A9B2tt  [tt+1] MULADDRSHIFTC#MOD  x y w  q=ceil((xy+w)/2^z) r=(xy+w)q*2^z  34  
A9B4tt  [tt+1] MULRSHIFT#  x y  floor(x*y/2^(tt+1))  34  
A9B5tt  [tt+1] MULRSHIFTR#  x y  round(x*y/2^(tt+1))  34  
A9B6tt  [tt+1] MULRSHIFTC#  x y  ceil(x*y/2^(tt+1))  34  
A9B8tt  [tt+1] MULMODPOW2#  x y  x*y mod 2^(tt+1)  34  
A9B9tt  [tt+1] MULMODPOW2R#  x y  x*y mod 2^(tt+1)  34  
A9BAtt  [tt+1] MULMODPOW2C#  x y  x*y mod 2^(tt+1)  34  
A9BC  MULRSHIFT#MOD  x y  q=floor(x*y/2^(tt+1)) r=xyq*2^(tt+1)  34  
A9BD  MULRSHIFTR#MOD  x y  q=round(x*y/2^(tt+1)) r=xyq*2^(tt+1)  34  
A9BE  MULRSHIFTC#MOD  x y  q=ceil(x*y/2^(tt+1)) r=xyq*2^(tt+1)  34  
A9C0  LSHIFTADDDIVMOD  x w z y  q=floor((x*2^y+w)/z) r=(x*2^y+w)zq  26  
A9C1  LSHIFTADDDIVMODR  x w z y  q=round((x*2^y+w)/z) r=(x*2^y+w)zq  26  
A9C2  LSHIFTADDDIVMODC  x w z y  q=round((x*2^y+w)/z) r=(x*2^y+w)zq  26  
A9C4  LSHIFTDIV  x y z  floor(2^z*x/y)  0 <= z <= 256  26 
A9C5  LSHIFTDIVR  x y z  round(2^z*x/y)  0 <= z <= 256  26 
A9C6  LSHIFTDIVC  x y z  ceil(2^z*x/y)  0 <= z <= 256  26 
A9C8  LSHIFTMOD  x y z  2^z*x mod y  26  
A9C9  LSHIFTMODR  x y z  2^z*x mod y  26  
A9CA  LSHIFTMODC  x y z  2^z*x mod y  26  
A9CC  LSHIFTDIVMOD  x y z  q=floor(2^z*x/y) r=2^z*xq*y  26  
A9CD  LSHIFTDIVMODR  x y z  q=round(2^z*x/y) r=2^z*xq*y  26  
A9CE  LSHIFTDIVMODC  x y z  q=ceil(2^z*x/y) r=2^z*xq*y  26  
A9D0tt  [tt+1] LSHIFT#ADDDIVMOD  x w z  q=floor((x*2^y+w)/z) r=(x*2^y+w)zq  34  
A9D1tt  [tt+1] LSHIFT#ADDDIVMODR  x w z  q=round((x*2^y+w)/z) r=(x*2^y+w)zq  34  
A9D2tt  [tt+1] LSHIFT#ADDDIVMODC  x w z  q=ceil((x*2^y+w)/z) r=(x*2^y+w)zq  34  
A9D4tt  [tt+1] LSHIFT#DIV  x y  floor(2^(tt+1)*x/y)  34  
A9D5tt  [tt+1] LSHIFT#DIVR  x y  round(2^(tt+1)*x/y)  34  
A9D6tt  [tt+1] LSHIFT#DIVC  x y  ceil(2^(tt+1)*x/y)  26  
A9D8tt  [tt+1] LSHIFT#MOD  x y  2^(tt+1)*x mod y  34  
A9D9tt  [tt+1] LSHIFT#MODR  x y  2^(tt+1)*x mod y  34  
A9DAtt  [tt+1] LSHIFT#MODC  x y  2^(tt+1)*x mod y  34  
A9DCtt  [tt+1] LSHIFT#DIVMOD  x y  q=floor(2^(tt+1)*x/y) r=2^(tt+1)*xq*y  34  
A9DDtt  [tt+1] LSHIFT#DIVMODR  x y  q=round(2^(tt+1)*x/y) r=2^(tt+1)*xq*y  34  
A9DEtt  [tt+1] LSHIFT#DIVMODC  x y  q=ceil(2^(tt+1)*x/y) r=2^(tt+1)*xq*y  34  
AAcc  [cc+1] LSHIFT#  x  x*2^(cc+1)  0 <= cc <= 255  26 
ABcc  [cc+1] RSHIFT#  x  floor(x/2^(cc+1))  0 <= cc <= 255  18 
AC  LSHIFT  x y  x*2^y  0 <= y <= 1023  18 
AD  RSHIFT  x y  floor(x/2^y)  0 <= y <= 1023  18 
AE  POW2  y  2^y 
 18 
B0  AND  x y  x&y  Bitwise and of two signed integers x and y , signextended to infinity.  18 
B1  OR  x y  xy  Bitwise or of two integers.  18 
B2  XOR  x y  x xor y  Bitwise xor of two integers.  18 
B3  NOT  x  ~x  Bitwise not of an integer.  26 
B4cc  [cc+1] FITS  x  x  Checks whether  26/76 
B5cc  [cc+1] UFITS  x  x  Checks whether x is a cc+1 bit unsigned integer for 0 <= cc <= 255 (i.e., whether 0 <= x < 2^(cc+1) ).  26/76 
B600  FITSX  x c  x  Checks whether x is a c bit signed integer for 0 <= c <= 1023 .  26/76 
B601  UFITSX  x c  x  Checks whether x is a c bit unsigned integer for 0 <= c <= 1023 .  26/76 
B602  BITSIZE  x  c  Computes smallest c >= 0 such that x fits into a c bit signed integer (2^(c1) <= c < 2^(c1) ).  26 
B603  UBITSIZE  x  c  Computes smallest c >= 0 such that x fits into a c bit unsigned integer (0 <= x < 2^c ), or throws a range check exception.  26 
B608  MIN  x y  x or y  Computes the minimum of two integers x and y .  26 
B609  MAX  x y  x or y  Computes the maximum of two integers x and y .  26 
B60A  MINMAX
INTSORT2  x y  x y or y x  Sorts two integers. Quiet version of this operation returns two NaN s if any of the arguments are NaN s.  26 
B60B  ABS  x  x  Computes the absolute value of an integer x .  26 
B7A0  QADD  x y  x+y  26  
B7A1  QSUB  x y  xy  26  
B7A2  QSUBR  x y  yx  26  
B7A3  QNEGATE  x  x  26  
B7A4  QINC  x  x+1  26  
B7A5  QDEC  x  x1  26  
B7A8  QMUL  x y  x*y  26  
B7A900  QADDDIVMOD  x w z  q=floor((x+w)/z) r=(x+w)zq  34  
B7A901  QADDDIVMODR  x w z  q=round((x+w)/z) r=(x+w)zq  34  
B7A902  QADDDIVMODC  x w y  q=ceil((x+w)/z) r=(x+w)zq  34  
B7A904  QDIV  x y  q  Division returns NaN if y=0 .  34 
B7A905  QDIVR  x y  q'  34  
B7A906  QDIVC  x y  q''  34  
B7A908  QMOD  x y  r  34  
B7A909  QMODR  x y  r  34  
B7A90A  QMODC  x y  r  34  
B7A90C  QDIVMOD  x y  q r  34  
B7A90D  QDIVMODR  x y  q' r'  34  
B7A90E  QDIVMODC  x y  q'' r''  34  
B7A920  QADDRSHIFTMOD  x w z  q=floor((x+w)/2^z) r=(x+w)q*2^z  34  
B7A921  QADDRSHIFTMODR  x w z  q=round((x+w)/2^z) r=(x+w)q*2^z  34  
B7A922  QADDRSHIFTMODC  x w z  q=ceil((x+w)/2^z) r=(x+w)q*2^z  34  
B7A925  QRSHIFTR  x y  round(x/2^y)  34  
B7A926  QRSHIFTC  x y  ceil(x/2^y)  34  
B7A928  QMODPOW2  x y  x mod 2^y  34  
B7A929  QMODPOW2R  x y  x mod 2^y  34  
B7A92A  QMODPOW2C  x y  x mod 2^y  34  
B7A92C  QRSHIFTMOD  x y  q=floor(x/2^y) r=xq*2^y  34  
B7A92D  QRSHIFTMODR  x y  q=round(x/2^y) r=xq*2^y  34  
B7A92E  QRSHIFTMODC  x y  q=ceil(x/2^y) r=xq*2^y  34  
B7A930tt  [tt+1] QADDRSHIFT#MOD  x w  q=floor((x+w)/2^(tt+1)) r=(x+w)q*2^(tt+1)  42  
B7A931tt  [tt+1] QADDRSHIFTR#MOD  x w  q=round((x+w)/2^(tt+1)) r=(x+w)q*2^(tt+1)  42  
B7A932tt  [tt+1] QADDRSHIFTC#MOD  x w  q=round((x+w)/2^(tt+1)) r=(x+w)q*2^(tt+1)  42  
B7A935tt  [tt+1] QRSHIFTR#  x  round(x/2^(tt+1))  42  
B7A936tt  [tt+1] QRSHIFTC#  x  ceil(x/2^(tt+1))  42  
B7A938tt  [tt+1] QMODPOW2#  x  x mod 2^(tt+1)  42  
B7A939tt  [tt+1] QMODPOW2R#  x  x mod 2^(tt+1)  42  
B7A93Att  [tt+1] QMODPOW2C#  x  x mod 2^(tt+1)  42  
A93Ctt  [tt+1] QRSHIFT#MOD  x  q=floor(x/2^(tt+1)) r=xq*2^(tt+1)  42  
A93Dtt  [tt+1] QRSHIFTR#MOD  x  q=round(x/2^(tt+1)) r=xq*2^(tt+1)  42  
B7A93Ett  [tt+1] QRSHIFTC#MOD  x  q=ceil(x/2^(tt+1)) r=xq*2^(tt+1)  42  
B7A980  QMULADDDIVMOD  x y w z  q=floor((xy+w)/z) r=(xy+w)zq  34  
B7A981  QMULADDDIVMODR  x y w z  q=round((xy+w)/z) r=(xy+w)zq  34  
B7A982  QMULADDDIVMODC  x y w z  q=ceil((xy+w)/z) r=(xy+w)zq  34  
B7A984  QMULDIV  x y z  q  q=floor(x*y/z)  34 
B7A985  QMULDIVR  x y z  q'  34  
B7A986  QMULDIVC  x y z  q'  q'=ceil(x*y/z)  34 
B7A988  QMULMOD  x y z  x*y mod z  34  
B7A989  QMULMODR  x y z  x*y mod z  34  
B7A98A  QMULMODC  x y z  x*y mod z  34  
B7A98C  QMULDIVMOD  x y z  q r  34  
B7A98D  QMULDIVMODR  x y z  q r  q=round(x*y/z) , r=x*yz*q  34 
B7A98E  QMULDIVMODC  x y z  q r  q=ceil(x*y/z) , r=x*yz*q  34 
B7A9A0  QMULADDRSHIFTMOD  x y w z  q=floor((xy+w)/2^z) r=(xy+w)q*2^z  34  
B7A9A1  QMULADDRSHIFTRMOD  x y w z  q=round((xy+w)/2^z) r=(xy+w)q*2^z  34  
B7A9A2  QMULADDRSHIFTCMOD  x y w z  q=ceil((xy+w)/2^z) r=(xy+w)q*2^z  34  
B7A9A4  QMULRSHIFT  x y z  floor(x*y/2^z)  0 <= z <= 256  34 
B7A9A5  QMULRSHIFTR  x y z  round(x*y/2^z)  0 <= z <= 256  34 
B7A9A6  QMULRSHIFTC  x y z  ceil(x*y/2^z)  0 <= z <= 256  34 
B7A9A8  QMULMODPOW2_VAR  x y z  x*y mod 2^z  34  
B7A9A9  QMULMODPOW2R_VAR  x y z  x*y mod 2^z  34  
B7A9AA  QMULMODPOW2C_VAR  x y z  x*y mod 2^z  34  
B7A9AC  QMULRSHIFTMOD_VAR  x y z  q=floor(x*y/2^z) r=xyq*2^z  34  
B7A9AD  QMULRSHIFTRMOD_VAR  x y z  q=round(x*y/2^z) r=xyq*2^z  34  
B7A9AE  QMULRSHIFTCMOD_VAR  x y z  q=ceil(x*y/2^z) r=xyq*2^z  34  
B7A9B0tt  [tt+1] QMULADDRSHIFT#MOD  x y w  q=floor((xy+w)/2^z) r=(xy+w)q*2^z  42  
B7A9B1tt  [tt+1] QMULADDRSHIFTR#MOD  x y w  q=round((xy+w)/2^z) r=(xy+w)q*2^z  42  
B7A9B2tt  [tt+1] QMULADDRSHIFTC#MOD  x y w  q=ceil((xy+w)/2^z) r=(xy+w)q*2^z  42  
B7A9B4tt  [tt+1] QMULRSHIFT#  x y  floor(x*y/2^(tt+1))  42  
B7A9B5tt  [tt+1] QMULRSHIFTR#  x y  round(x*y/2^(tt+1))  42  
B7A9B6tt  [tt+1] QMULRSHIFTC#  x y  ceil(x*y/2^(tt+1))  42  
B7A9B8tt  [tt+1] QMULMODPOW2#  x y  x*y mod 2^(tt+1)  42  
B7A9B9tt  [tt+1] QMULMODPOW2R#  x y  x*y mod 2^(tt+1)  42  
B7A9BAtt  [tt+1] QMULMODPOW2C#  x y  x*y mod 2^(tt+1)  42  
B7A9BC  QMULRSHIFT#MOD  x y  q=floor(x*y/2^(tt+1)) r=xyq*2^(tt+1)  42  
B7A9BD  QMULRSHIFTR#MOD  x y  q=round(x*y/2^(tt+1)) r=xyq*2^(tt+1)  42  
B7A9BE  QMULRSHIFTC#MOD  x y  q=ceil(x*y/2^(tt+1)) r=xyq*2^(tt+1)  42  
B7A9C0  QLSHIFTADDDIVMOD  x w z y  q=floor((x*2^y+w)/z) r=(x*2^y+w)zq  34  
B7A9C1  QLSHIFTADDDIVMODR  x w z y  q=round((x*2^y+w)/z) r=(x*2^y+w)zq  34  
B7A9C2  QLSHIFTADDDIVMODC  x w z y  q=round((x*2^y+w)/z) r=(x*2^y+w)zq  34  
B7A9C4  QLSHIFTDIV  x y z  floor(2^z*x/y)  0 <= z <= 256  34 
B7A9C5  QLSHIFTDIVR  x y z  round(2^z*x/y)  0 <= z <= 256  34 
B7A9C6  QLSHIFTDIVC  x y z  ceil(2^z*x/y)  0 <= z <= 256  34 
B7A9C8  QLSHIFTMOD  x y z  2^z*x mod y  34  
B7A9C9  QLSHIFTMODR  x y z  2^z*x mod y  34  
B7A9CA  QLSHIFTMODC  x y z  2^z*x mod y  34  
B7A9CC  QLSHIFTDIVMOD  x y z  q=floor(2^z*x/y) r=2^z*xq*y  34  
B7A9CD  QLSHIFTDIVMODR  x y z  q=round(2^z*x/y) r=2^z*xq*y  34  
B7A9CE  QLSHIFTDIVMODC  x y z  q=ceil(2^z*x/y) r=2^z*xq*y  34  
B7A9D0tt  [tt+1] QLSHIFT#ADDDIVMOD  x w z  q=floor((x*2^(tt+1)+w)/z) r=(x*2^(tt+1)+w)zq  42  
B7A9D1tt  [tt+1] QLSHIFT#ADDDIVMODR  x w z  q=round((x*2^(tt+1)+w)/z) r=(x*2^(tt+1)+w)zq  42  
B7A9D2tt  [tt+1] QLSHIFT#ADDDIVMODC  x w z  q=ceil((x*2^(tt+1)+w)/z) r=(x*2^(tt+1)+w)zq  42  
B7A9D4tt  [tt+1] QLSHIFT#DIV  x y  floor(2^(tt+1)*x/y)  42  
B7A9D5tt  [tt+1] QLSHIFT#DIVR  x y  round(2^(tt+1)*x/y)  42  
B7A9D6tt  [tt+1] QLSHIFT#DIVC  x y  ceil(2^(tt+1)*x/y)  34  
B7A9D8tt  [tt+1] QLSHIFT#MOD  x y  2^(tt+1)*x mod y  42  
B7A9D9tt  [tt+1] LSHIFT#MODR  x y  2^(tt+1)*x mod y  42  
B7A9DAtt  [tt+1] QLSHIFT#MODC  x y  2^(tt+1)*x mod y  42  
B7A9DCtt  [tt+1] QLSHIFT#DIVMOD  x y  q=floor(2^(tt+1)*x/y) r=2^(tt+1)*xq*y  42  
B7A9DDtt  [tt+1] QLSHIFT#DIVMODR  x y  q=round(2^(tt+1)*x/y) r=2^(tt+1)*xq*y  42  
B7A9DEtt  [tt+1] QLSHIFT#DIVMODC  x y  q=ceil(2^(tt+1)*x/y) r=2^(tt+1)*xq*y  42  
B7AAcc  [cc+1] QLSHIFT#  x  x*2^(cc+1)  0 <= cc <= 255  34 
B7ABcc  [cc+1] RSHIFT#  x  floor(x/2^(cc+1))  0 <= cc <= 255  26 
B7AC  QLSHIFT  x y  x*2^y  26  
B7AD  QRSHIFT  x y  floor(x/2^y)  26  
B7AE  QPOW2  y  2^y  26  
B7B0  QAND  x y  x&y  26  
B7B1  QOR  x y  xy  26  
B7B2  QXOR  x y  x xor y  26  
B7B3  QNOT  x  ~x  26  
B7B4cc  [cc+1] QFITS  x  x  Replaces x with a NaN if x is not a cc+1 bit signed integer, leaves it intact otherwise.  34 
B7B5cc  [cc+1] QUFITS  x  x  Replaces x with a NaN if x is not a cc+1 bit unsigned integer, leaves it intact otherwise.  34 
B7B600  QFITSX  x c  x  Replaces x with a NaN if x is not a cbit signed integer, leaves it intact otherwise.  34 
B7B601  QUFITSX  x c  x  Replaces x with a NaN if x is not a cbit unsigned integer, leaves it intact otherwise.  34 
B8  SGN  x  sgn(x)  Computes the sign of an integer  18 
B9  LESS  x y  x<y  Returns 1 if x<y , 0 otherwise.  18 
BA  EQUAL  x y  x=y  Returns 1 if x=y , 0 otherwise.  18 
BB  LEQ  x y  x<=y  18  
BC  GREATER  x y  x>y  18  
BD  NEQ  x y  x!=y  Equivalent to EQUAL NOT .  18 
BE  GEQ  x y  x>=y  Equivalent to LESS NOT .  18 
BF  CMP  x y  sgn(xy)  Computes the sign of  18 
C0yy  [yy] EQINT  x  x=yy  Returns  26 
C1yy  [yy] LESSINT
[yy1] LEQINT  x  x<yy  Returns  26 
C2yy  [yy] GTINT
[yy+1] GEQINT  x  x>yy  Returns  26 
C3yy  [yy] NEQINT  x  x!=yy  Returns  26 
C4  ISNAN  x  x=NaN  Checks whether x is a NaN .  18 
C5  CHKNAN  x  x  Throws an arithmetic overflow exception if x is a NaN .  18/68 
C700  SEMPTY  s  ?  Checks whether a Slice s is empty (i.e., contains no bits of data and no cell references).  26 
C701  SDEMPTY  s  ?  Checks whether Slice s has no bits of data.  26 
C702  SREMPTY  s  ?  Checks whether Slice s has no references.  26 
C703  SDFIRST  s  ?  Checks whether the first bit of Slice s is a one.  26 
C704  SDLEXCMP  s s'  x  Compares the data of s lexicographically with the data of s' , returning 1 , 0, or 1 depending on the result.  26 
C705  SDEQ  s s'  ?  Checks whether the data parts of s and s' coincide, equivalent to SDLEXCMP ISZERO .  26 
C708  SDPFX  s s'  ?  Checks whether s is a prefix of s' .  26 
C709  SDPFXREV  s s'  ?  Checks whether s' is a prefix of s , equivalent to SWAP SDPFX .  26 
C70A  SDPPFX  s s'  ?  Checks whether s is a proper prefix of s' (i.e., a prefix distinct from s' ).  26 
C70B  SDPPFXREV  s s'  ?  Checks whether s' is a proper prefix of s .  26 
C70C  SDSFX  s s'  ?  Checks whether s is a suffix of s' .  26 
C70D  SDSFXREV  s s'  ?  Checks whether s' is a suffix of s .  26 
C70E  SDPSFX  s s'  ?  Checks whether s is a proper suffix of s' .  26 
C70F  SDPSFXREV  s s'  ?  Checks whether s' is a proper suffix of s .  26 
C710  SDCNTLEAD0  s  n  Returns the number of leading zeroes in s .  26 
C711  SDCNTLEAD1  s  n  Returns the number of leading ones in s .  26 
C712  SDCNTTRAIL0  s  n  Returns the number of trailing zeroes in s .  26 
C713  SDCNTTRAIL1  s  n  Returns the number of trailing ones in s .  26 
C8  NEWC   b  Creates a new empty Builder.  18 
C9  ENDC  b  c  Converts a Builder into an ordinary Cell.  518 
CAcc  [cc+1] STI  x b  b'  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.  26 
CBcc  [cc+1] STU  x b  b'  Stores an unsigned cc+1 bit integer x into Builder b . In all other respects it is similar to STI .  26 
CC  STREF  c b  b'  Stores a reference to Cell c into Builder b .  18 
CD  STBREFR
ENDCST  b b''  b  Equivalent to ENDC SWAP STREF .  518 
CE  STSLICE  s b  b'  Stores Slice s into Builder b .  18 
CF00  STIX  x b l  b'  Stores a signed l bit integer x into b for 0 <= l <= 257 .  26 
CF01  STUX  x b l  b'  Stores an unsigned l bit integer x into b for 0 <= l <= 256 .  26 
CF02  STIXR  b x l  b'  Similar to STIX , but with arguments in a different order.  26 
CF03  STUXR  b x l  b'  Similar to STUX , but with arguments in a different order.  26 
CF04  STIXQ  x b l  x b f or b' 0  A quiet version of  26 
CF05  STUXQ  x b l  x b f or b' 0  A quiet version of STUX .  26 
CF06  STIXRQ  b x l  b x f or b' 0  A quiet version of STIXR .  26 
CF07  STUXRQ  b x l  b x f or b' 0  A quiet version of STUXR .  26 
CF08cc  [cc+1] STI_l  x b  b'  A longer version of [cc+1] STI .  34 
CF09cc  [cc+1] STU_l  x b  b'  A longer version of [cc+1] STU .  34 
CF0Acc  [cc+1] STIR  b x  b'  Equivalent to SWAP [cc+1] STI .  34 
CF0Bcc  [cc+1] STUR  b x  b'  Equivalent to SWAP [cc+1] STU .  34 
CF0Ccc  [cc+1] STIQ  x b  x b f or b' 0  A quiet version of STI .  34 
CF0Dcc  [cc+1] STUQ  x b  x b f or b' 0  A quiet version of STU .  34 
CF0Ecc  [cc+1] STIRQ  b x  b x f or b' 0  A quiet version of STIR .  34 
CF0Fcc  [cc+1] STURQ  b x  b x f or b' 0  A quiet version of STUR .  34 
CF10  STREF_l  c b  b'  A longer version of STREF .  26 
CF11  STBREF  b' b  b''  Equivalent to SWAP STBREFR .  526 
CF12  STSLICE_l  s b  b'  A longer version of STSLICE .  26 
CF13  STB  b' b  b''  Appends all data from Builder b' to Builder b .  26 
CF14  STREFR  b c  b'  Equivalent to SWAP STREF .  26 
CF15  STBREFR_l  b b'  b''  A longer encoding of STBREFR .  526 
CF16  STSLICER  b s  b'  Equivalent to SWAP STSLICE .  26 
CF17  STBR
BCONCAT  b b'  b''  Concatenates two builders.
Equivalent to  26 
CF18  STREFQ  c b  c b 1 or b' 0  Quiet version of STREF .  26 
CF19  STBREFQ  b' b  b' b 1 or b'' 0  Quiet version of STBREF .  526 
CF1A  STSLICEQ  s b  s b 1 or b' 0  Quiet version of STSLICE .  26 
CF1B  STBQ  b' b  b' b 1 or b'' 0  Quiet version of STB .  26 
CF1C  STREFRQ  b c  b c 1 or b' 0  Quiet version of STREFR .  26 
CF1D  STBREFRQ  b b'  b b' 1 or b'' 0  Quiet version of STBREFR .  526 
CF1E  STSLICERQ  b s  b s 1 or b'' 0  Quiet version of STSLICER .  26 
CF1F  STBRQ
BCONCATQ  b b'  b b' 1 or b'' 0  Quiet version of STBR .  26 
CF20  [ref] STREFCONST  b  b'  Equivalent to PUSHREF STREFR .  26 
CF21  [ref] [ref] STREF2CONST  b  b'  Equivalent to STREFCONST STREFCONST .  26 
CF23  ENDXC  b x  c  If  526 
CF28  STILE4  x b  b'  Stores a littleendian signed 32bit integer.  26 
CF29  STULE4  x b  b'  Stores a littleendian unsigned 32bit integer.  26 
CF2A  STILE8  x b  b'  Stores a littleendian signed 64bit integer.  26 
CF2B  STULE8  x b  b'  Stores a littleendian unsigned 64bit integer.  26 
CF30  BDEPTH  b  x  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 .  26 
CF31  BBITS  b  x  Returns the number of data bits already stored in Builder b .  26 
CF32  BREFS  b  y  Returns the number of cell references already stored in b .  26 
CF33  BBITREFS  b  x y  Returns the numbers of both data bits and cell references in b .  26 
CF35  BREMBITS  b  x'  Returns the number of data bits that can still be stored in b .  26 
CF36  BREMREFS  b  y'  Returns the number of references that can still be stored in b .  26 
CF37  BREMBITREFS  b  x' y'  Returns the numbers of both data bits and references that can still be stored in b .  26 
CF38cc  [cc+1] BCHKBITS#  b   Checks whether cc+1 bits can be stored into b , where 0 <= cc <= 255 .  34/84 
CF39  BCHKBITS  b x   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.  26/76 
CF3A  BCHKREFS  b y   Checks whether y references can be stored into b , 0 <= y <= 7 .  26/76 
CF3B  BCHKBITREFS  b x y   Checks whether x bits and y references can be stored into b , 0 <= x <= 1023 , 0 <= y <= 7 .  26/76 
CF3Ccc  [cc+1] BCHKBITSQ#  b  ?  Checks whether cc+1 bits can be stored into b , where 0 <= cc <= 255 .  34 
CF3D  BCHKBITSQ  b x  ?  Checks whether x bits can be stored into b , 0 <= x <= 1023 .  26 
CF3E  BCHKREFSQ  b y  ?  Checks whether y references can be stored into b , 0 <= y <= 7 .  26 
CF3F  BCHKBITREFSQ  b x y  ?  Checks whether x bits and y references can be stored into b , 0 <= x <= 1023 , 0 <= y <= 7 .  26 
CF40  STZEROES  b n  b'  Stores n binary zeroes into Builder b .  26 
CF41  STONES  b n  b'  Stores n binary ones into Builder b .  26 
CF42  STSAME  b n x  b'  Stores n binary x es (0 <= x <= 1 ) into Builder b .  26 
CFC0_xysss  [slice] STSLICECONST  b  b'  Stores a constant subslice  24 
D0  CTOS  c  s  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.  118/43 
D1  ENDS  s   Removes a Slice s from the stack, and throws an exception if it is not empty.  18/68 
D2cc  [cc+1] LDI  s  x s'  Loads (i.e., parses) a signed cc+1 bit integer x from Slice s , and returns the remainder of s as s' .  26 
D3cc  [cc+1] LDU  s  x s'  Loads an unsigned cc+1 bit integer x from Slice s .  26 
D4  LDREF  s  c s'  Loads a cell reference c from s .  18 
D5  LDREFRTOS  s  s' s''  Equivalent to LDREF SWAP CTOS .  118/43 
D6cc  [cc+1] LDSLICE  s  s'' s'  Cuts the next cc+1 bits of s into a separate Slice s'' .  26 
D700  LDIX  s l  x s'  Loads a signed l bit (0 <= l <= 257 ) integer x from Slice s , and returns the remainder of s as s' .  26 
D701  LDUX  s l  x s'  Loads an unsigned l bit integer x from (the first l bits of) s , with 0 <= l <= 256 .  26 
D702  PLDIX  s l  x  Preloads a signed l bit integer from Slice s , for 0 <= l <= 257 .  26 
D703  PLDUX  s l  x  Preloads an unsigned l bit integer from s , for 0 <= l <= 256 .  26 
D704  LDIXQ  s l  x s' 1 or s 0  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.  26 
D705  LDUXQ  s l  x s' 1 or s 0  Quiet version of LDUX .  26 
D706  PLDIXQ  s l  x 1 or 0  Quiet version of PLDIX .  26 
D707  PLDUXQ  s l  x 1 or 0  Quiet version of PLDUX .  26 
D708cc  [cc+1] LDI_l  s  x s'  A longer encoding for LDI .  34 
D709cc  [cc+1] LDU_l  s  x s'  A longer encoding for LDU .  34 
D70Acc  [cc+1] PLDI  s  x  Preloads a signed cc+1 bit integer from Slice s .  34 
D70Bcc  [cc+1] PLDU  s  x  Preloads an unsigned cc+1 bit integer from s .  34 
D70Ccc  [cc+1] LDIQ  s  x s' 1 or s 0  A quiet version of LDI .  34 
D70Dcc  [cc+1] LDUQ  s  x s' 1 or s 0  A quiet version of LDU .  34 
D70Ecc  [cc+1] PLDIQ  s  x 1 or 0  A quiet version of PLDI .  34 
D70Fcc  [cc+1] PLDUQ  s  x 1 or 0  A quiet version of PLDU .  34 
D714_c  [32(c+1)] PLDUZ  s  s x  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.  26 
D718  LDSLICEX  s l  s'' s'  Loads the first 0 <= l <= 1023 bits from Slice s into a separate Slice s'' , returning the remainder of s as s' .  26 
D719  PLDSLICEX  s l  s''  Returns the first 0 <= l <= 1023 bits of s as s'' .  26 
D71A  LDSLICEXQ  s l  s'' s' 1 or s 0  A quiet version of LDSLICEX .  26 
D71B  PLDSLICEXQ  s l  s' 1 or 0  A quiet version of LDSLICEXQ .  26 
D71Ccc  [cc+1] LDSLICE_l  s  s'' s'  A longer encoding for LDSLICE .  34 
D71Dcc  [cc+1] PLDSLICE  s  s''  Returns the first 0 < cc+1 <= 256 bits of s as s'' .  34 
D71Ecc  [cc+1] LDSLICEQ  s  s'' s' 1 or s 0  A quiet version of LDSLICE .  34 
D71Fcc  [cc+1] PLDSLICEQ  s  s'' 1 or 0  A quiet version of PLDSLICE .  34 
D720  SDCUTFIRST  s l  s'  Returns the first 0 <= l <= 1023 bits of s . It is equivalent to PLDSLICEX .  26 
D721  SDSKIPFIRST  s l  s'  Returns all but the first 0 <= l <= 1023 bits of s . It is equivalent to LDSLICEX NIP .  26 
D722  SDCUTLAST  s l  s'  Returns the last 0 <= l <= 1023 bits of s .  26 
D723  SDSKIPLAST  s l  s'  Returns all but the last 0 <= l <= 1023 bits of s .  26 
D724  SDSUBSTR  s l l'  s'  Returns 0 <= l' <= 1023 bits of s starting from offset 0 <= l <= 1023 , thus extracting a bit substring out of the data of s .  26 
D726  SDBEGINSX  s s'  s''  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 .  26 
D727  SDBEGINSXQ  s s'  s'' 1 or s 0  A quiet version of SDBEGINSX .  26 
D72A_xsss  [slice] SDBEGINS  s  s''  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.  31 
D72E_xsss  [slice] SDBEGINSQ  s  s'' 1 or s 0  A quiet version of SDBEGINS .  31 
D730  SCUTFIRST  s l r  s'  Returns the first 0 <= l <= 1023 bits and first 0 <= r <= 4 references of s .  26 
D731  SSKIPFIRST  s l r  s'  Returns all but the first l bits of s and r references of s .  26 
D732  SCUTLAST  s l r  s'  Returns the last 0 <= l <= 1023 data bits and last 0 <= r <= 4 references of s .  26 
D733  SSKIPLAST  s l r  s'  Returns all but the last l bits of s and r references of s .  26 
D734  SUBSLICE  s l r l' r'  s'  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.  26 
D736  SPLIT  s l r  s' s''  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'' .  26 
D737  SPLITQ  s l r  s' s'' 1 or s 0  A quiet version of SPLIT .  26 
D739  XCTOS  c  s ?  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 . 

D73A  XLOAD  c  c'  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. 

D73B  XLOADQ  c  c' 1 or c 0  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. 

D741  SCHKBITS  s l   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.  26/76 
D742  SCHKREFS  s r   Checks whether there are at least r references in Slice s .  26/76 
D743  SCHKBITREFS  s l r   Checks whether there are at least l data bits and r references in Slice s .  26/76 
D745  SCHKBITSQ  s l  ?  Checks whether there are at least l data bits in Slice s .  26 
D746  SCHKREFSQ  s r  ?  Checks whether there are at least r references in Slice s .  26 
D747  SCHKBITREFSQ  s l r  ?  Checks whether there are at least l data bits and r references in Slice s .  26 
D748  PLDREFVAR  s n  c  Returns the n th cell reference of Slice s for 0 <= n <= 3 .  26 
D749  SBITS  s  l  Returns the number of data bits in Slice s .  26 
D74A  SREFS  s  r  Returns the number of references in Slice s .  26 
D74B  SBITREFS  s  l r  Returns both the number of data bits and the number of references in s .  26 
D74E_n  [n] PLDREFIDX  s  c  Returns the n th cell reference of Slice s , where 0 <= n <= 3 .  26 
D750  LDILE4  s  x s'  Loads a littleendian signed 32bit integer.  26 
D751  LDULE4  s  x s'  Loads a littleendian unsigned 32bit integer.  26 
D752  LDILE8  s  x s'  Loads a littleendian signed 64bit integer.  26 
D753  LDULE8  s  x s'  Loads a littleendian unsigned 64bit integer.  26 
D754  PLDILE4  s  x  Preloads a littleendian signed 32bit integer.  26 
D755  PLDULE4  s  x  Preloads a littleendian unsigned 32bit integer.  26 
D756  PLDILE8  s  x  Preloads a littleendian signed 64bit integer.  26 
D757  PLDULE8  s  x  Preloads a littleendian unsigned 64bit integer.  26 
D758  LDILE4Q  s  x s' 1 or s 0  Quietly loads a littleendian signed 32bit integer.  26 
D759  LDULE4Q  s  x s' 1 or s 0  Quietly loads a littleendian unsigned 32bit integer.  26 
D75A  LDILE8Q  s  x s' 1 or s 0  Quietly loads a littleendian signed 64bit integer.  26 
D75B  LDULE8Q  s  x s' 1 or s 0  Quietly loads a littleendian unsigned 64bit integer.  26 
D75C  PLDILE4Q  s  x 1 or 0  Quietly preloads a littleendian signed 32bit integer.  26 
D75D  PLDULE4Q  s  x 1 or 0  Quietly preloads a littleendian unsigned 32bit integer.  26 
D75E  PLDILE8Q  s  x 1 or 0  Quietly preloads a littleendian signed 64bit integer.  26 
D75F  PLDULE8Q  s  x 1 or 0  Quietly preloads a littleendian unsigned 64bit integer.  26 
D760  LDZEROES  s  n s'  Returns the count n of leading zero bits in s , and removes these bits from s .  26 
D761  LDONES  s  n s'  Returns the count n of leading one bits in s , and removes these bits from s .  26 
D762  LDSAME  s x  n s'  Returns the count n of leading bits equal to 0 <= x <= 1 in s , and removes these bits from s .  26 
D764  SDEPTH  s  x  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 .  26 
D765  CDEPTH  c  x  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.  26 
D766  CLEVEL  cell  level  Returns level of the cell.  26 
D767  CLEVELMASK  cell  level_mask  Returns level mask of the cell.  26 
D76A_  [i] CHASHI  cell  hash  Returns i th hash of the cell.  26 
D76E_  [i] CDEPTHI  cell  depth  Returns i th depth of the cell.  26 
D770  CHASHIX  cell i  hash  Returns i th hash of the cell.  26 
D771  CDEPTHIX  cell i  depth  Returns i th depth of the cell.  26 
D8  EXECUTE
CALLX  c   Calls, or executes, continuation c .  18 
D9  JMPX  c   Jumps, or transfers control, to continuation  18 
DApr  [p] [r] CALLXARGS  c   Calls continuation  26 
DB0p  [p] 1 CALLXARGS  c   Calls continuation c with 0 <= p <= 15 parameters, expecting an arbitrary number of return values.  26 
DB1p  [p] JMPXARGS  c   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).  26 
DB2r  [r] RETARGS 
 Returns to c0 , with 0 <= r <= 15 return values taken from the current stack.  26 
DB30  RET
RETTRUE 
 Returns to the continuation at  26 
DB31  RETALT
RETFALSE 
 Returns to the continuation at  26 
DB32  BRANCH
RETBOOL  f   Performs RETTRUE if integer f!=0 , or RETFALSE if f=0 .  26 
DB34  CALLCC  c   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 ).  26 
DB35  JMPXDATA  c   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 .  26 
DB36pr  [p] [r] CALLCCARGS  c   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 newlyinvoked continuation c , setting cc.nargs to 1 <= r <= 14 .  34 
DB38  CALLXVARARGS  c p r   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 .  26 
DB39  RETVARARGS  p r   Similar to RETARGS .  26 
DB3A  JMPXVARARGS  c p r   Similar to JMPXARGS .  26 
DB3B  CALLCCVARARGS  c p r   Similar to CALLCCARGS .  26 
DB3C  [ref] CALLREF 
 Equivalent to PUSHREFCONT CALLX .  126/51 
DB3D  [ref] JMPREF 
 Equivalent to PUSHREFCONT JMPX .  126/51 
DB3E  [ref] JMPREFDATA 
 Equivalent to PUSHREFCONT JMPXDATA .  126/51 
DB3F  RETDATA 
 Equivalent to c0 PUSHCTR JMPXDATA . In this way, the remainder of the current continuation is converted into a Slice and returned to the caller.  26 
DB4fff  flags RUNVM  x_1 ... x_n n code [r] [c4] [c7] [g_l] [g_m]  x'_1 ... x'_m exitcode [data'] [c4'] [c5] [g_c]  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. 

DB50  RUNVMX  x_1 ... x_n n code [r] [c4] [c7] [g_l] [g_m] flags  x'_1 ... x'_m exitcode [data'] [c4'] [c5] [g_c]  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. 

DC  IFRET
IFNOT:  f   Performs a RET , but only if integer f is nonzero. If f is a NaN , throws an integer overflow exception.  18 
DD  IFNOTRET
IF:  f   Performs a RET , but only if integer f is zero.  18 
DE  IF  f c   Performs EXECUTE for c (i.e., executes c ), but only if integer f is nonzero. Otherwise simply discards both values.  18 
DF  IFNOT  f c   Executes continuation c , but only if integer f is zero. Otherwise simply discards both values.  18 
E0  IFJMP  f c   Jumps to c (similarly to JMPX ), but only if f is nonzero.  18 
E1  IFNOTJMP  f c   Jumps to c (similarly to JMPX ), but only if f is zero.  18 
E2  IFELSE  f c c'   If integer f is nonzero, executes c , otherwise executes c' . Equivalent to CONDSELCHK EXECUTE .  18 
E300  [ref] IFREF  f   Equivalent to  26/126/51 
E301  [ref] IFNOTREF  f   Equivalent to PUSHREFCONT IFNOT .  26/126/51 
E302  [ref] IFJMPREF  f   Equivalent to PUSHREFCONT IFJMP .  26/126/51 
E303  [ref] IFNOTJMPREF  f   Equivalent to PUSHREFCONT IFNOTJMP .  26/126/51 
E304  CONDSEL  f x y  x or y  If integer f is nonzero, 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 .  26 
E305  CONDSELCHK  f x y  x or y  Same as CONDSEL , but first checks whether x and y have the same type.  26 
E308  IFRETALT  f   Performs RETALT if integer f!=0 .  26 
E309  IFNOTRETALT  f   Performs RETALT if integer f=0 .  26 
E30D  [ref] IFREFELSE  f c   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.  26/126/51 
E30E  [ref] IFELSEREF  f c   Equivalent to PUSHREFCONT IFELSE .  26/126/51 
E30F  [ref] [ref] IFREFELSEREF  f   Equivalent to PUSHREFCONT PUSHREFCONT IFELSE .  126/51 
E39_n  [n] IFBITJMP  x c  x  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.  26 
E3B_n  [n] IFNBITJMP  x c  x  Jumps to c if bit 0 <= n <= 31 is not set in integer x .  26 
E3D_n  [ref] [n] IFBITJMPREF  x  x  Performs a JMPREF if bit 0 <= n <= 31 is set in integer x .  126/51 
E3F_n  [ref] [n] IFNBITJMPREF  x  x  Performs a JMPREF if bit 0 <= n <= 31 is not set in integer x .  126/51 
E4  REPEAT  n c   Executes continuation  18 
E5  REPEATEND
REPEAT:  n   Similar to REPEAT , but it is applied to the current continuation cc .  18 
E6  UNTIL  c   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.  18 
E7  UNTILEND
UNTIL:    Similar to UNTIL , but executes the current continuation cc in a loop. When the loop exit condition is satisfied, performs a RET .  18 
E8  WHILE  c' c   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 nonzero, executes c , and then begins a new iteration.  18 
E9  WHILEEND  c'   Similar to WHILE , but uses the current continuation cc as the loop body.  18 
EA  AGAIN  c   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 ).  18 
EB  AGAINEND
AGAIN:    Similar to AGAIN , but performed with respect to the current continuation cc .  18 
E314  REPEATBRK  n c   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.  26 
E315  REPEATENDBRK  n   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 .  26 
E316  UNTILBRK  c   Similar to UNTIL , but also modifies c1 in the same way as REPEATBRK .  26 
E317  UNTILENDBRK
UNTILBRK:    Equivalent to SAMEALTSAVE UNTILEND .  26 
E318  WHILEBRK  c' c   Similar to WHILE , but also modifies c1 in the same way as REPEATBRK .  26 
E319  WHILEENDBRK  c   Equivalent to SAMEALTSAVE WHILEEND .  26 
E31A  AGAINBRK  c   Similar to AGAIN , but also modifies c1 in the same way as REPEATBRK .  26 
E31B  AGAINENDBRK
AGAINBRK:    Equivalent to SAMEALTSAVE AGAINEND .  26 
ECrn  [r] [n] SETCONTARGS  x_1 x_2...x_r c  c'  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.  26+s'' 
ED0p  [p] RETURNARGS    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.  26+s'' 
ED10  RETURNVARARGS  p   Similar to RETURNARGS , but with Integer 0 <= p <= 255 taken from the stack.  26+s'' 
ED11  SETCONTVARARGS  x_1 x_2...x_r c r n  c'  Similar to SETCONTARGS , but with 0 <= r <= 255 and 1 <= n <= 255 taken from the stack.  26+s'' 
ED12  SETNUMVARARGS  c n  c' 
 26 
ED1E  BLESS  s  c  Transforms a Slice s into a simple ordinary continuation c , with c.code=s and an empty stack and savelist.  26 
ED1F  BLESSVARARGS  x_1...x_r s r n  c  Equivalent to ROT BLESS ROTREV SETCONTVARARGS .  26+s'' 
EErn  [r] [n] BLESSARGS  x_1...x_r s  c 
 26 
ED4i  c[i] PUSHCTR
c[i] PUSH   x  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.  26 
ED5i  c[i] POPCTR
c[i] POP  x   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 typechecking exception may occur.  26 
ED6i  c[i] SETCONT
c[i] SETCONTCTR  x c  c'  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 .  26 
ED7i  c[i] SETRETCTR  x   Equivalent to c0 PUSHCTR c[i] SETCONTCTR c0 POPCTR .  26 
ED8i  c[i] SETALTCTR  x   Equivalent to c1 PUSHCTR c[i] SETCONTCTR c1 POPCTR .  26 
ED9i  c[i] POPSAVE
c[i] POPCTRSAVE  x   Similar to  26 
EDAi  c[i] SAVE
c[i] SAVECTR 
 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 .  26 
EDBi  c[i] SAVEALT
c[i] SAVEALTCTR 
 Similar to c[i] SAVE , but saves the current value of c[i] into the savelist of c1 , not c0 .  26 
EDCi  c[i] SAVEBOTH
c[i] SAVEBOTHCTR 
 Equivalent to c[i] SAVE c[i] SAVEALT .  26 
EDE0  PUSHCTRX  i  x  Similar to  26 
EDE1  POPCTRX  x i   Similar to c[i] POPCTR , but with 0 <= i <= 255 from the stack.  26 
EDE2  SETCONTCTRX  x c i  c'  Similar to c[i] SETCONTCTR , but with 0 <= i <= 255 from the stack.  26 
EDF0  COMPOS
BOOLAND  c c'  c''  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 .  26 
EDF1  COMPOSALT
BOOLOR  c c'  c''  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 .  26 
EDF2  COMPOSBOTH  c c'  c''  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 ''.  26 
EDF3  ATEXIT  c   Sets c0 to compose0(c, c0) . In other words, c will be executed before exiting current subroutine.  26 
EDF4  ATEXITALT  c   Sets c1 to compose1(c, c1) . In other words, c will be executed before exiting current subroutine by its alternative return path.  26 
EDF5  SETEXITALT  c   Sets  26 
EDF6  THENRET  c  c'  Computes compose0(c, c0) .  26 
EDF7  THENRETALT  c  c'  Computes compose0(c, c1)  26 
EDF8  INVERT    Interchanges c0 and c1 .  26 
EDF9  BOOLEVAL  c  ?  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.  26 
EDFA  SAMEALT    Sets c1 to c0 . Equivalent to c0 PUSHCTR c1 POPCTR .  26 
EDFB  SAMEALTSAVE    Sets  26 
F0nn  [nn] CALL
[nn] CALLDICT   nn  Calls the continuation in 

F12_n  [n] CALL
[n] CALLDICT   n  For 0 <= n < 2^14 , an encoding of [n] CALL for larger values of n . 

F16_n  [n] JMP   n  Jumps to the continuation in 

F1A_n  [n] PREPARE
[n] PREPAREDICT   n c  Equivalent to 

F22_n  [n] THROW   0 n  Throws exception  76 
F26_n  [n] THROWIF  f   Throws exception 0 <= n <= 63 with parameter zero only if integer f!=0 .  26/76 
F2A_n  [n] THROWIFNOT  f   Throws exception 0 <= n <= 63 with parameter zero only if integer f=0 .  26/76 
F2C4_n  [n] THROW   0 nn  For 0 <= n < 2^11 , an encoding of [n] THROW for larger values of n .  84 
F2CC_n  [n] THROWARG  x  x nn  Throws exception 0 <= n < 2^11 with parameter x , by copying x and n into the stack of c2 and transferring control to c2 .  84 
F2D4_n  [n] THROWIF  f   For 0 <= n < 2^11 , an encoding of [n] THROWIF for larger values of n .  34/84 
F2DC_n  [n] THROWARGIF  x f   Throws exception 0 <= nn < 2^11 with parameter x only if integer f!=0 .  34/84 
F2E4_n  [n] THROWIFNOT  f   For 0 <= n < 2^11 , an encoding of [n] THROWIFNOT for larger values of n .  34/84 
F2EC_n  [n] THROWARGIFNOT  x f   Throws exception 0 <= n < 2^11 with parameter x only if integer f=0 .  34/84 
F2F0  THROWANY  n  0 n  Throws exception  76 
F2F1  THROWARGANY  x n  x n  Throws exception  76 
F2F2  THROWANYIF  n f   Throws exception 0 <= n < 2^16 with parameter zero only if f!=0 .  26/76 
F2F3  THROWARGANYIF  x n f   Throws exception 0 <= n<2^16 with parameter x only if f!=0 .  26/76 
F2F4  THROWANYIFNOT  n f   Throws exception 0 <= n<2^16 with parameter zero only if f=0 .  26/76 
F2F5  THROWARGANYIFNOT  x n f   Throws exception 0 <= n<2^16 with parameter x only if f=0 .  26/76 
F2FF  TRY  c c'   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 rethrow the exception by THROWANY if it cannot handle it by itself.  26 
F3pr  [p] [r] TRYARGS  c c'   Similar to  26 
F400  STDICT
STOPTREF  D b  b'  Stores dictionary  26 
F401  SKIPDICT
SKIPOPTREF  s  s'  Equivalent to LDDICT NIP .  26 
F402  LDDICTS  s  s' s''  Loads (parses) a (Slicerepresented) dictionary  26 
F403  PLDDICTS  s  s'  Preloads a (Slicerepresented) dictionary  26 
F404  LDDICT
LDOPTREF  s  D s'  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.  26 
F405  PLDDICT
PLDOPTREF  s  D  Preloads a dictionary  26 
F406  LDDICTQ  s  D s' 1 or s 0  A quiet version of LDDICT .  26 
F407  PLDDICTQ  s  D 1 or 0  A quiet version of PLDDICT .  26 
F40A  DICTGET  k D n  x 1 or 0  Looks up key 

F40B  DICTGETREF  k D n  c 1 or 0  Similar to 

F40C  DICTIGET  i D n  x 1 or 0  Similar to DICTGET , but with a signed (bigendian) 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. 

F40D  DICTIGETREF  i D n  c 1 or 0  Combines DICTIGET with DICTGETREF : it uses signed n bit Integer i as a key and returns a Cell instead of a Slice on success. 

F40E  DICTUGET  i D n  x 1 or 0  Similar to DICTIGET , but with unsigned (bigendian) n bit Integer i used as a key. 

F40F  DICTUGETREF  i D n  c 1 or 0  Similar to DICTIGETREF , but with an unsigned n bit Integer key i . 

F412  DICTSET  x k D n  D'  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' . 

F413  DICTSETREF  c k D n  D'  Similar to DICTSET , but with the value set to a reference to Cell c . 

F414  DICTISET  x i D n  D'  Similar to DICTSET , but with the key represented by a (bigendian) signed n bit integer i . If i does not fit into n bits, a range check exception is generated. 

F415  DICTISETREF  c i D n  D'  Similar to DICTSETREF , but with the key a signed n bit integer as in DICTISET . 

F416  DICTUSET  x i D n  D'  Similar to DICTISET , but with i an unsigned n bit integer. 

F417  DICTUSETREF  c i D n  D'  Similar to DICTISETREF , but with i unsigned. 

F41A  DICTSETGET  x k D n  D' y 1 or D' 0  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. 

F41B  DICTSETGETREF  c k D n  D' c' 1 or D' 0  Combines DICTSETREF with DICTGETREF similarly to DICTSETGET . 

F41C  DICTISETGET  x i D n  D' y 1 or D' 0  DICTISETGET , but with i a signed n bit integer. 

F41D  DICTISETGETREF  c i D n  D' c' 1 or D' 0  DICTISETGETREF , but with i a signed n bit integer. 

F41E  DICTUSETGET  x i D n  D' y 1 or D' 0  DICTISETGET , but with i an unsigned n bit integer. 

F41F  DICTUSETGETREF  c i D n  D' c' 1 or D' 0  DICTISETGETREF , but with i an unsigned n bit integer. 

F422  DICTREPLACE  x k D n  D' 1 or D 0  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 . 

F423  DICTREPLACEREF  c k D n  D' 1 or D 0  A Replace counterpart of DICTSETREF . 

F424  DICTIREPLACE  x i D n  D' 1 or D 0  DICTREPLACE , but with i a signed n bit integer. 

F425  DICTIREPLACEREF  c i D n  D' 1 or D 0  DICTREPLACEREF , but with i a signed n bit integer. 

F426  DICTUREPLACE  x i D n  D' 1 or D 0  DICTREPLACE , but with i an unsigned n bit integer. 

F427  DICTUREPLACEREF  c i D n  D' 1 or D 0  DICTREPLACEREF , but with i an unsigned n bit integer. 

F42A  DICTREPLACEGET  x k D n  D' y 1 or D 0  A Replace counterpart of DICTSETGET : on success, also returns the old value associated with the key in question. 

F42B  DICTREPLACEGETREF  c k D n  D' c' 1 or D 0  A Replace counterpart of DICTSETGETREF . 

F42C  DICTIREPLACEGET  x i D n  D' y 1 or D 0  DICTREPLACEGET , but with i a signed n bit integer. 

F42D  DICTIREPLACEGETREF  c i D n  D' c' 1 or D 0  DICTREPLACEGETREF , but with i a signed n bit integer. 

F42E  DICTUREPLACEGET  x i D n  D' y 1 or D 0  DICTREPLACEGET , but with i an unsigned n bit integer. 

F42F  DICTUREPLACEGETREF  c i D n  D' c' 1 or D 0  DICTREPLACEGETREF , but with i an unsigned n bit integer. 

F432  DICTADD  x k D n  D' 1 or D 0  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 . 

F433  DICTADDREF  c k D n  D' 1 or D 0  An Add counterpart of DICTSETREF . 

F434  DICTIADD  x i D n  D' 1 or D 0  DICTADD , but with i a signed n bit integer. 

F435  DICTIADDREF  c i D n  D' 1 or D 0  DICTADDREF , but with i a signed n bit integer. 

F436  DICTUADD  x i D n  D' 1 or D 0  DICTADD , but with i an unsigned n bit integer. 

F437  DICTUADDREF  c i D n  D' 1 or D 0  DICTADDREF , but with i an unsigned n bit integer. 

F43A  DICTADDGET  x k D n  D' 1 or D y 0  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. 

F43B  DICTADDGETREF  c k D n  D' 1 or D c' 0  An Add counterpart of DICTSETGETREF . 

F43C  DICTIADDGET  x i D n  D' 1 or D y 0  DICTADDGET , but with i a signed n bit integer. 

F43D  DICTIADDGETREF  c i D n  D' 1 or D c' 0  DICTADDGETREF , but with i a signed n bit integer. 

F43E  DICTUADDGET  x i D n  D' 1 or D y 0  DICTADDGET , but with i an unsigned n bit integer. 

F43F  DICTUADDGETREF  c i D n  D' 1 or D c' 0  DICTADDGETREF , but with i an unsigned n bit integer. 

F441  DICTSETB  b k D n  D' 
 
F442  DICTISETB  b i D n  D' 
 
F443  DICTUSETB  b i D n  D' 
 
F445  DICTSETGETB  b k D n  D' y 1 or D' 0 
 
F446  DICTISETGETB  b i D n  D' y 1 or D' 0 
 
F447  DICTUSETGETB  b i D n  D' y 1 or D' 0 
 
F449  DICTREPLACEB  b k D n  D' 1 or D 0 
 
F44A  DICTIREPLACEB  b i D n  D' 1 or D 0 
 
F44B  DICTUREPLACEB  b i D n  D' 1 or D 0 
 
F44D  DICTREPLACEGETB  b k D n  D' y 1 or D 0 
 
F44E  DICTIREPLACEGETB  b i D n  D' y 1 or D 0 
 
F44F  DICTUREPLACEGETB  b i D n  D' y 1 or D 0 
 
F451  DICTADDB  b k D n  D' 1 or D 0 
 
F452  DICTIADDB  b i D n  D' 1 or D 0 
 
F453  DICTUADDB  b i D n  D' 1 or D 0 
 
F455  DICTADDGETB  b k D n  D' 1 or D y 0 
 
F456  DICTIADDGETB  b i D n  D' 1 or D y 0 
 
F457  DICTUADDGETB  b i D n  D' 1 or D y 0 
 
F459  DICTDEL  k D n  D' 1 or D 0  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 . 

F45A  DICTIDEL  i D n  D' ?  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''). 

F45B  DICTUDEL  i D n  D' ?  Similar to DICTIDEL , but with i an unsigned n bit integer. 

F462  DICTDELGET  k D n  D' x 1 or D 0  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 . 

F463  DICTDELGETREF  k D n  D' c 1 or D 0  Similar to DICTDELGET , but with LDREF ENDS applied to x on success, so that the value returned c is a Cell. 

F464  DICTIDELGET  i D n  D' x 1 or D 0  DICTDELGET , but with i a signed n bit integer. 

F465  DICTIDELGETREF  i D n  D' c 1 or D 0  DICTDELGETREF , but with i a signed n bit integer. 

F466  DICTUDELGET  i D n  D' x 1 or D 0  DICTDELGET , but with i an unsigned n bit integer. 

F467  DICTUDELGETREF  i D n  D' c 1 or D 0  DICTDELGETREF , but with i an unsigned n bit integer. 

F469  DICTGETOPTREF  k D n  c^?  A variant of DICTGETREF that returns Null instead of the value c^? if the key k is absent from dictionary D . 

F46A  DICTIGETOPTREF  i D n  c^?  DICTGETOPTREF , but with i a signed n bit integer. If the key i is out of range, also returns Null. 

F46B  DICTUGETOPTREF  i D n  c^?  DICTGETOPTREF , but with i an unsigned n bit integer. If the key i is out of range, also returns Null. 

F46D  DICTSETGETOPTREF  c^? k D n  D' ~c^?  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). 

F46E  DICTISETGETOPTREF  c^? i D n  D' ~c^?  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. 

F46F  DICTUSETGETOPTREF  c^? i D n  D' ~c^?  Similar to primitive DICTSETGETOPTREF , but using unsigned n bit Integer i as a key. 

F470  PFXDICTSET  x k D n  D' 1 or D 0 
 
F471  PFXDICTREPLACE  x k D n  D' 1 or D 0 
 
F472  PFXDICTADD  x k D n  D' 1 or D 0 
 
F473  PFXDICTDEL  k D n  D' 1 or D 0 
 
F474  DICTGETNEXT  k D n  x' k' 1 or 0  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). 

F475  DICTGETNEXTEQ  k D n  x' k' 1 or 0  Similar to DICTGETNEXT , but computes the minimal key k' that is lexicographically greater than or equal to k . 

F476  DICTGETPREV  k D n  x' k' 1 or 0  Similar to DICTGETNEXT , but computes the maximal key k' lexicographically smaller than k . 

F477  DICTGETPREVEQ  k D n  x' k' 1 or 0  Similar to DICTGETPREV , but computes the maximal key k' lexicographically smaller than or equal to k . 

F478  DICTIGETNEXT  i D n  x' i' 1 or 0  Similar to DICTGETNEXT , but interprets all keys in dictionary D as bigendian signed n bit integers, and computes the minimal key i' that is larger than Integer i (which does not necessarily fit into n bits). 

F479  DICTIGETNEXTEQ  i D n  x' i' 1 or 0  Similar to DICTGETNEXTEQ , but interprets keys as signed n bit integers. 

F47A  DICTIGETPREV  i D n  x' i' 1 or 0  Similar to DICTGETPREV , but interprets keys as signed n bit integers. 

F47B  DICTIGETPREVEQ  i D n  x' i' 1 or 0  Similar to DICTGETPREVEQ , but interprets keys as signed n bit integers. 

F47C  DICTUGETNEXT  i D n  x' i' 1 or 0  Similar to DICTGETNEXT , but interprets all keys in dictionary D as bigendian 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 nonnegative). 

F47D  DICTUGETNEXTEQ  i D n  x' i' 1 or 0  Similar to DICTGETNEXTEQ , but interprets keys as unsigned n bit integers. 

F47E  DICTUGETPREV  i D n  x' i' 1 or 0  Similar to DICTGETPREV , but interprets keys as unsigned n bit integers. 

F47F  DICTUGETPREVEQ  i D n  x' i' 1 or 0  Similar to DICTGETPREVEQ , but interprets keys a unsigned n bit integers. 

F482  DICTMIN  D n  x k 1 or 0  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 . 

F483  DICTMINREF  D n  c k 1 or 0  Similar to DICTMIN , but returns the only reference in the value as a Cell c . 

F484  DICTIMIN  D n  x i 1 or 0  Similar to DICTMIN , but computes the minimal key i under the assumption that all keys are bigendian signed n bit integers. Notice that the key and value returned may differ from those computed by DICTMIN and DICTUMIN . 

F485  DICTIMINREF  D n  c i 1 or 0  Similar to DICTIMIN , but returns the only reference in the value. 

F486  DICTUMIN  D n  x i 1 or 0  Similar to DICTMIN , but returns the key as an unsigned n bit Integer i . 

F487  DICTUMINREF  D n  c i 1 or 0  Similar to DICTUMIN , but returns the only reference in the value. 

F48A  DICTMAX  D n  x k 1 or 0  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 . 

F48B  DICTMAXREF  D n  c k 1 or 0  Similar to DICTMAX , but returns the only reference in the value. 

F48C  DICTIMAX  D n  x i 1 or 0  Similar to DICTMAX , but computes the maximal key i under the assumption that all keys are bigendian signed n bit integers. Notice that the key and value returned may differ from those computed by DICTMAX and DICTUMAX . 

F48D  DICTIMAXREF  D n  c i 1 or 0  Similar to DICTIMAX , but returns the only reference in the value. 

F48E  DICTUMAX  D n  x i 1 or 0  Similar to DICTMAX , but returns the key as an unsigned n bit Integer i . 

F48F  DICTUMAXREF  D n  c i 1 or 0  Similar to DICTUMAX , but returns the only reference in the value. 

F492  DICTREMMIN  D n  D' x k 1 or D 0  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' . 

F493  DICTREMMINREF  D n  D' c k 1 or D 0  Similar to DICTREMMIN , but returns the only reference in the value as a Cell c . 

F494  DICTIREMMIN  D n  D' x i 1 or D 0  Similar to DICTREMMIN , but computes the minimal key i under the assumption that all keys are bigendian signed n bit integers. Notice that the key and value returned may differ from those computed by DICTREMMIN and DICTUREMMIN . 

F495  DICTIREMMINREF  D n  D' c i 1 or D 0  Similar to DICTIREMMIN , but returns the only reference in the value. 

F496  DICTUREMMIN  D n  D' x i 1 or D 0  Similar to DICTREMMIN , but returns the key as an unsigned n bit Integer i . 

F497  DICTUREMMINREF  D n  D' c i 1 or D 0  Similar to DICTUREMMIN , but returns the only reference in the value. 

F49A  DICTREMMAX  D n  D' x k 1 or D 0  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' . 

F49B  DICTREMMAXREF  D n  D' c k 1 or D 0  Similar to DICTREMMAX , but returns the only reference in the value as a Cell c . 

F49C  DICTIREMMAX  D n  D' x i 1 or D 0  Similar to DICTREMMAX , but computes the minimal key i under the assumption that all keys are bigendian signed n bit integers. Notice that the key and value returned may differ from those computed by DICTREMMAX and DICTUREMMAX . 

F49D  DICTIREMMAXREF  D n  D' c i 1 or D 0  Similar to DICTIREMMAX , but returns the only reference in the value. 

F49E  DICTUREMMAX  D n  D' x i 1 or D 0  Similar to DICTREMMAX , but returns the key as an unsigned n bit Integer i . 

F49F  DICTUREMMAXREF  D n  D' c i 1 or D 0  Similar to DICTUREMMAX , but returns the only reference in the value. 

F4A0  DICTIGETJMP  i D n   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. 

F4A1  DICTUGETJMP  i D n   Similar to DICTIGETJMP , but performs DICTUGET instead of DICTIGET . 

F4A2  DICTIGETEXEC  i D n   Similar to DICTIGETJMP , but with EXECUTE instead of JMPX . 

F4A3  DICTUGETEXEC  i D n   Similar to DICTUGETJMP , but with EXECUTE instead of JMPX . 

F4A6_n  [ref] [n] DICTPUSHCONST   D n  Pushes a nonempty 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 nonempty dictionary itself (one 1 bit and a cell reference), and then the unsigned 10bit integer n (as if by a STU 10 instruction). An empty dictionary can be pushed by a NEWDICT primitive instead.  34 
F4A8  PFXDICTGETQ  s D n  s' x s'' 1 or s 0  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. 

F4A9  PFXDICTGET  s D n  s' x s''  Similar to PFXDICTGET , but throws a cell deserialization failure exception on failure. 

F4AA  PFXDICTGETJMP  s D n  s' s'' or s  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. 

F4AB  PFXDICTGETEXEC  s D n  s' s''  Similar to PFXDICTGETJMP , but EXEC utes the continuation found instead of jumping to it. On failure, throws a cell deserialization exception. 

F4AE_n  [ref] [n] PFXDICTCONSTGETJMP
[ref] [n] PFXDICTSWITCH  s  s' s'' or s  Combines [n] DICTPUSHCONST for 0 <= n <= 1023 with PFXDICTGETJMP . 

F4BC  DICTIGETJMPZ  i D n  i or nothing  A variant of DICTIGETJMP that returns index i on failure. 

F4BD  DICTUGETJMPZ  i D n  i or nothing  A variant of DICTUGETJMP that returns index i on failure. 

F4BE  DICTIGETEXECZ  i D n  i or nothing  A variant of DICTIGETEXEC that returns index i on failure. 

F4BF  DICTUGETEXECZ  i D n  i or nothing  A variant of DICTUGETEXEC that returns index i on failure. 

F4B1  SUBDICTGET  k l D n  D'  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' . 

F4B2  SUBDICTIGET  x l D n  D'  Variant of SUBDICTGET with the prefix represented by a signed bigendian l bit Integer x , where necessarily l <= 257 . 

F4B3  SUBDICTUGET  x l D n  D'  Variant of SUBDICTGET with the prefix represented by an unsigned bigendian l bit Integer x , where necessarily l <= 256 . 

F4B5  SUBDICTRPGET  k l D n  D'  Similar to SUBDICTGET , but removes the common prefix k from all keys of the new dictionary D' , which becomes of type HashmapE(nl,X) . 

F4B6  SUBDICTIRPGET  x l D n  D'  Variant of SUBDICTRPGET with the prefix represented by a signed bigendian l bit Integer x , where necessarily l <= 257 . 

F4B7  SUBDICTURPGET  x l D n  D'  Variant of SUBDICTRPGET with the prefix represented by an unsigned bigendian l bit Integer x , where necessarily l <= 256 . 

F800  ACCEPT    Sets current gas limit  26 
F801  SETGASLIMIT  g   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^631 is equivalent to ACCEPT .  26 
F807  GASCONSUMED   g_c  Returns gas consumed by VM so far (including this instruction).  26 
F80F  COMMIT    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.  26 
F810  RANDU256   x  Generates a new pseudorandom unsigned 256bit Integer x . The algorithm is as follows: if r is the old value of the random seed, considered as a 32byte array (by constructing the bigendian representation of an unsigned 256bit 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 .  26+c7+c1_1 
F811  RAND  y  z  Generates a new pseudorandom integer  26+c7+c1_1 
F814  SETRAND  x   Sets the random seed to unsigned 256bit Integer x .  26+c7+c1_1 
F815  ADDRAND
RANDOMIZE  x   Mixes unsigned 256bit Integer x into the random seed r by setting the random seed to Sha of the concatenation of two 32byte strings: the first with the bigendian representation of the old seed r , and the second with the bigendian representation of x .  26 
F82i  [i] GETPARAM   x  Returns the  26 
F830  CONFIGDICT   D 32  Returns the global configuration dictionary along with its key length (32).
Equivalent to  26 
F832  CONFIGPARAM  i  c 1 or 0  Returns the value of the global configuration parameter with integer index 

F833  CONFIGOPTPARAM  i  c^?  Returns the value of the global configuration parameter with integer index 

F83400  PREVMCBLOCKS   t  Retrives last_mc_blocks part of PrevBlocksInfo from c7 (parameter 13). 

F83401  PREVKEYBLOCK   t  Retrives prev_key_block part of PrevBlocksInfo from c7 (parameter 13). 

F835  GLOBALID   i  Retrieves global_id from 19 network config. 

F836  GETGASFEE  gas_used is_mc  price  Calculates gas fee 

F837  GETSTORAGEFEE  cells bits seconds is_mc  price  Calculates storage fees (only current StoragePrices entry is used). 

F838  GETFORWARDFEE  cells bits is_mc  price  Calculates forward fee. 

F839  GETPRECOMPILEDGAS   x  Returns gas usage for the current contract if it is precompiled, null otherwise. 

F83A  GETORIGINALFWDFEE  fwd_fee is_mc  orig_fwd_fee  Calculate fwd_fee * 2^16 / first_frac . Can be used to get the original fwd_fee of the message. 

F83B  GETGASFEESIMPLE  gas_used is_mc  price  Same as GETGASFEE , but without flat price (just (gas_used * price) / 2^16) . 

F83C  GETFORWARDFEESIMPLE  cells bits is_mc  price  Same as GETFORWARDFEE , but without lump price (just (bits*bit_price + cells*cell_price) / 2^16 ). 

F840  GETGLOBVAR  k  x  Returns the  26 
F85_k  [k] GETGLOB   x  Returns the  26 
F860  SETGLOBVAR  x k   Assigns  26+c7' 
F87_k  [k] SETGLOB  x   Assigns  26+c7' 
F900  HASHCU  c  x  Computes the representation hash of a Cell c and returns it as a 256bit unsigned integer x . Useful for signing and checking signatures of arbitrary entities represented by a tree of cells.  26 
F901  HASHSU  s  x  Computes the hash of a Slice s and returns it as a 256bit 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 .  526 
F902  SHA256U  s  x  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 256bit unsigned integer x .  26 
F90400  HASHEXT_SHA256  s_1 ... s_n n  h  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/33 gas per byte 
F90401  HASHEXT_SHA512  s_1 ... s_n n  h1 h2  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/16 gas per byte 
F90402  HASHEXT_BLAKE2B  s_1 ... s_n n  h1 h2  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/19 gas per byte 
F90403  HASHEXT_KECCAK256  s_1 ... s_n n  h  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/11 gas per byte 
F90404  HASHEXT_KECCAK512  s_1 ... s_n n  h1 h2  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/19 gas per byte 
F90500  HASHEXTR_SHA256  s_n ... s_1 n  h  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/33 gas per byte 
F90501  HASHEXTR_SHA512  s_n ... s_1 n  h1 h2  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/16 gas per byte 
F90502  HASHEXTR_BLAKE2B  s_n ... s_1 n  h1 h2  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/19 gas per byte 
F90503  HASHEXTR_KECCAK256  s_n ... s_1 n  h  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/11 gas per byte 
F90504  HASHEXTR_KECCAK512  s_n ... s_1 n  h1 h2  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/19 gas per byte 
F90600  HASHEXTA_SHA256  b s_1 ... s_n n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/33 gas per byte 
F90601  HASHEXTA_SHA512  b s_1 ... s_n n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/16 gas per byte 
F90602  HASHEXTA_BLAKE2B  b s_1 ... s_n n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/19 gas per byte 
F90603  HASHEXTA_KECCAK256  b s_1 ... s_n n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/11 gas per byte 
F90604  HASHEXTA_KECCAK512  b s_1 ... s_n n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/6 gas per byte 
F90700  HASHEXTAR_SHA256  b s_1 ... s_n n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/33 gas per byte 
F90701  HASHEXTAR_SHA512  b s_n ... s_1 n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/16 gas per byte 
F90702  HASHEXTAR_BLAKE2B  b s_n ... s_1 n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/19 gas per byte 
F90703  HASHEXTAR_KECCAK256  b s_n ... s_1 n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/11 gas per byte 
F90704  HASHEXTAR_KECCAK512  b s_n ... s_1 n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/6 gas per byte 
F910  CHKSIGNU  h s k  ?  Checks the Ed25519signature  26 
F911  CHKSIGNS  d s k  ?  Checks whether s is a valid Ed25519signature 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 256bit number that is actually signed.  26 
F912  ECRECOVER  hash v r s  0 or h x1 x2 1  Recovers public key from signature, identical to Bitcoin/Ethereum operations. Takes 32byte hash as uint256 hash ; 65byte signature as uint8 v and uint256 r , s . Returns 0 on failure, public key and 1 on success. 65byte public key is returned as uint8 h , uint256 x1 , x2 .  1526 
F914  P256_CHKSIGNU  h sig k  ?  Checks seck256r1signature sig of a number h (a 256bit 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 33byte slice (encoded according to Sec. 2.3.4 point 2 of SECG SEC 1). Signature sig is a 64byte slice (two 256bit unsigned integers r and s ).  3526 
F915  P256_CHKSIGNS  d sig k  ?  Checks seck256r1signature sig of data portion of slice d and public key k . Returns 1 on success, 0 on failure. Public key is a 33byte slice (encoded according to Sec. 2.3.4 point 2 of SECG SEC 1). Signature sig is a 64byte slice (two 256bit unsigned integers r and s ).  3526 
F920  RIST255_FROMHASH  h1 h2  x  Deterministically generates a valid point x from a 512bit hash (given as two 256bit integers).  626 
F921  RIST255_VALIDATE  x   Checks that integer x is a valid representation of some curve point. Throws range_chk on error.  226 
F922  RIST255_ADD  x y  x+y  Addition of two points on a curve.  626 
F923  RIST255_SUB  x y  xy  Subtraction of two points on curve.  626 
F924  RIST255_MUL  x n  x*n  Multiplies point x by a scalar n . Any n is valid, including negative.  2026 
F925  RIST255_MULBASE  n  g*n  Multiplies the generator point g by a scalar n . Any n is valid, including negative.  776 
F926  RIST255_PUSHL   l  Pushes integer l=2^252+27742317777372353535851937790883648493, which is the order of the group.  26 
B7F921  RIST255_QVALIDATE  x  0 or 1  Checks that integer x is a valid representation of some curve point. Returns 1 on success and 0 on failure.  234 
B7F922  RIST255_QADD  x y  0 or x+y 1  Addition of two points on a curve. Returns 1 on success and 0 on failure.  634 
B7F923  RIST255_QSUB  x y  0 or xy 1  Subtraction of two points on curve. Returns 1 on success and 0 on failure.  634 
B7F924  RIST255_QMUL  x n  0 or x*n 1  Multiplies point x by a scalar n . Any n is valid, including negative. Returns 1 on success and 0 on failure.  2034 
B7F925  RIST255_QMULBASE  n  0 or g*n 1  Multiplies the generator point g by a scalar n . Any n is valid, including negative.  784 
F93000  BLS_VERIFY  pk msg sgn  bool  Checks BLS signature, return true on success, false otherwise.  61034 
F93001  BLS_AGGREGATE  sig_1 ... sig_n n  sig  Aggregates signatures. n>0 . Throw exception if n=0 or if some sig_i is not a valid signature.  n*43502616 
F93002  BLS_FASTAGGREGATEVERIFY  pk_1 ... pk_n n msg sig  bool  Checks aggregated BLS signature for keys pk_1...pk_n and message msg . Return true on success, false otherwise. Return false if n=0 .  58034+n*3000 
F93003  BLS_AGGREGATEVERIFY  pk_1 msg_1 ... pk_n msg_n n sgn  bool  Checks aggregated BLS signature for keymessage pairs pk_1 msg_1...pk_n msg_n . Return true on success, false otherwise. Return false if n=0 .  38534+n*22500 
F93010  BLS_G1_ADD  x y  x+y  Addition on G1.  3934 
F93011  BLS_G1_SUB  x y  xy  Subtraction on G1.  3934 
F93012  BLS_G1_NEG  x  x  Negation on G1.  784 
F93013  BLS_G1_MUL  x s  x*s  Multiplies G1 point x by scalar s . Any s is valid, including negative.  5234 
F93014  BLS_G1_MULTIEXP  x_1 s_1 ... x_n s_n n  x_1*s_1+...+x_n*s_n  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.  11409+n*630+n/floor(max(log2(n),4))*8820 
F93015  BLS_G1_ZERO   zero  Pushes zero point in G1.  34 
F93016  BLS_MAP_TO_G1  f  x  Converts FP element f to a G1 point.  2384 
F93017  BLS_G1_INGROUP  x  bool  Checks that slice x represents a valid element of G1.  2984 
F93018  BLS_G1_ISZERO  x  bool  Checks that G1 point x is equal to zero.  34 
F93020  BLS_G2_ADD  x y  x+y  Addition on G2.  6134 
F93021  BLS_G2_SUB  x y  xy  Subtraction on G2.  6134 
F93022  BLS_G2_NEG  x  x  Negation on G2.  1584 
F93023  BLS_G2_MUL  x s  x*s  Multiplies G2 point x by scalar s . Any s is valid, including negative.  10584 
F93024  BLS_G2_MULTIEXP  x_1 s_1 ... x_n s_n n  x_1*s_1+...+x_n*s_n  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.  30422+n*1280+n/floor(max(log2(n),4))*22840 
F93025  BLS_G2_ZERO   zero  Pushes zero point in G2.  34 
F93026  BLS_MAP_TO_G2  f  x  Converts FP2 element f to a G2 point.  7984 
F93027  BLS_G2_INGROUP  x  bool  Checks that slice x represents a valid element of G2.  4284 
F93028  BLS_G2_ISZERO  x  bool  Checks that G2 point x is equal to zero.  34 
F93030  BLS_PAIRING  x_1 y_1 ... x_n y_n n  bool  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 .  20034+n*11800 
F93031  BLS_PUSHR   r  Pushes the order of G1 and G2 (approx. 2^255 ).  34 
F940  CDATASIZEQ  c n  x y z 1 or 0  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 depthfirst traversal of this dag, with a hash table of visited cell hashes used to prevent visits of alreadyvisited cells. The total count of visited cells x cannot exceed nonnegative 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 . 

F941  CDATASIZE  c n  x y z  A nonquiet version of CDATASIZEQ that throws a cell overflow exception (8) on failure. 

F942  SDATASIZEQ  s n  x y z 1 or 0  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 . 

F943  SDATASIZE  s n  x y z  A nonquiet version of SDATASIZEQ that throws a cell overflow exception (8) on failure. 

FA00  LDGRAMS
LDVARUINT16  s  x s'  Loads (deserializes) a  26 
FA01  LDVARINT16  s  x s'  Similar to  26 
FA02  STGRAMS
STVARUINT16  b x  b'  Stores (serializes) an Integer x in the range 0...2^1201 into Builder b , and returns the resulting Builder b' . The serialization of x consists of a 4bit unsigned bigendian integer l , which is the smallest integer l>=0 , such that x<2^(8l) , followed by an 8l bit unsigned bigendian representation of x . If x does not belong to the supported range, a range check exception is thrown.  26 
FA03  STVARINT16  b x  b'  Similar to STVARUINT16 , but serializes a signed Integer x in the range 2^119...2^1191 .  26 
FA04  LDVARUINT32  s  x s'  Loads (deserializes) a  26 
FA05  LDVARINT32  s  x s'  Similar to  26 
FA06  STVARUINT32  b x  b'  Stores (serializes) an Integer x in the range 0...2^2481 into Builder b , and returns the resulting Builder b' . The serialization of x consists of a 5bit unsigned bigendian integer l , which is the smallest integer l>=0 , such that x<2^(8l) , followed by an 8l bit unsigned bigendian representation of x . If x does not belong to the supported range, a range check exception is thrown.  26 
FA07  STVARINT32  b x  b'  Similar to STVARUINT32 , but serializes a signed Integer x in the range 2^247...2^2471 .  26 
FA40  LDMSGADDR  s  s' s''  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.  26 
FA41  LDMSGADDRQ  s  s' s'' 1 or s 0  A quiet version of LDMSGADDR : on success, pushes an extra 1 ; on failure, pushes the original s and a zero.  26 
FA42  PARSEMSGADDR  s  t  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.  26 
FA43  PARSEMSGADDRQ  s  t 1 or 0  A quiet version of PARSEMSGADDR : returns a zero on error instead of throwing an exception.  26 
FA44  REWRITESTDADDR  s  x y  Parses Slice s containing a valid MsgAddressInt (usually a msg_addr_std ), applies rewriting from the anycast (if present) to the samelength prefix of the address, and returns both the workchain x and the 256bit address y as integers. If the address is not 256bit, or if s is not a valid serialization of MsgAddressInt , throws a cell deserialization exception.  26 
FA45  REWRITESTDADDRQ  s  x y 1 or 0  A quiet version of primitive REWRITESTDADDR .  26 
FA46  REWRITEVARADDR  s  x s'  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 ).  26 
FA47  REWRITEVARADDRQ  s  x s' 1 or 0  A quiet version of primitive REWRITEVARADDR .  26 
FB00  SENDRAWMSG  c x   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 smartcontract 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 .  526 
FB02  RAWRESERVE  x y   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 bx 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 nonnegative integer, and y must be in the range 0...15 .  526 
FB03  RAWRESERVEX  x D y   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.  526 
FB04  SETCODE  c   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.  526 
FB06  SETLIBCODE  c x   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.  526 
FB07  CHANGELIB  h x   Creates an output action similarly to SETLIBCODE , but instead of the library code accepts its hash as an unsigned 256bit 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.  526 
FB08  SENDMSG  c x  fee  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).  526 
FEij  {i*16+j} DEBUG    26  
FEFnssss  {string} DEBUGSTR
{string} {x} DEBUGSTRI   
 26 
FFnn  [nn] SETCP    Selects TVM codepage 0 <= nn < 240 . If the codepage is not supported, throws an invalid opcode exception.  26 
FFFz  [z16] SETCP    Selects TVM codepage z16 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.  26 
FFF0  SETCPX  c   Selects codepage c with 2^15 <= c < 2^15 passed in the top of the stack.  26 
Opcode  Fift syntax  Stack  Description  Gas 

00  NOP    Does nothing.  18 
0i  s[i] XCHG0 
 Interchanges s0 with s[i] , 1 <= i <= 15 .  18 
10ij  s[i] s[j] XCHG 
 Interchanges s[i] with s[j] , 1 <= i < j <= 15 .  26 
11ii  s0 [ii] s() XCHG 
 Interchanges s0 with s[ii] , 0 <= ii <= 255 .  26 
1i  s1 s[i] XCHG 
 Interchanges s1 with s[i] , 2 <= i <= 15 .  18 
2i  s[i] PUSH 
 Pushes a copy of the old s[i] into the stack.  18 
3i  s[i] POP 
 Pops the old s0 value into the old s[i] .  18 
4ijk  s[i] s[j] s[k] XCHG3 
 Equivalent to s2 s[i] XCHG s1 s[j] XCHG s[k] XCHG0 .  26 
50ij  s[i] s[j] XCHG2 
 Equivalent to s1 s[i] XCHG s[j] XCHG0 .  26 
51ij  s[i] s[j] XCPU 
 Equivalent to s[i] XCHG0 s[j] PUSH .  26 
52ij  s[i] s[j1] PUXC 
 Equivalent to s[i] PUSH SWAP s[j] XCHG0 .  26 
53ij  s[i] s[j] PUSH2 
 Equivalent to s[i] PUSH s[j+1] PUSH .  26 
540ijk  s[i] s[j] s[k] XCHG3_l 
 Long form of XCHG3 .  34 
541ijk  s[i] s[j] s[k] XC2PU 
 Equivalent to s[i] s[j] XCHG2 s[k] PUSH .  34 
542ijk  s[i] s[j] s[k1] XCPUXC 
 Equivalent to s1 s[i] XCHG s[j] s[k1] PUXC .  34 
543ijk  s[i] s[j] s[k] XCPU2 
 Equivalent to s[i] XCHG0 s[j] s[k] PUSH2 .  34 
544ijk  s[i] s[j1] s[k1] PUXC2 
 Equivalent to s[i] PUSH s2 XCHG0 s[j] s[k] XCHG2 .  34 
545ijk  s[i] s[j1] s[k1] PUXCPU 
 Equivalent to s[i] s[j1] PUXC s[k] PUSH .  34 
546ijk  s[i] s[j1] s[k2] PU2XC 
 Equivalent to s[i] PUSH SWAP s[j] s[k1] PUXC .  34 
547ijk  s[i] s[j] s[k] PUSH3 
 Equivalent to s[i] PUSH s[j+1] s[k+1] PUSH2 .  34 
55ij  [i+1] [j+1] BLKSWAP 
 Permutes two blocks  26 
56ii  [ii] s() PUSH 
 Pushes a copy of the old  26 
57ii  [ii] s() POP 
 Pops the old  26 
58  ROT  a b c  b c a  Equivalent to 1 2 BLKSWAP or to s2 s1 XCHG2 .  18 
59  ROTREV
ROT  a b c  c a b  Equivalent to 2 1 BLKSWAP or to s2 s2 XCHG2 .  18 
5A  SWAP2
2SWAP  a b c d  c d a b  Equivalent to 2 2 BLKSWAP or to s3 s2 XCHG2 .  18 
5B  DROP2
2DROP  a b   Equivalent to DROP DROP .  18 
5C  DUP2
2DUP  a b  a b a b  Equivalent to s1 s0 PUSH2 .  18 
5D  OVER2
2OVER  a b c d  a b c d a b  Equivalent to s3 s2 PUSH2 .  18 
5Eij  [i+2] [j] REVERSE 
 Reverses the order of s[j+i+1] ... s[j] .  26 
5F0i  [i] BLKDROP 
 Equivalent to DROP performed i times.  26 
5Fij  [i] [j] BLKPUSH 
 Equivalent to  26 
60  PICK
PUSHX 
 Pops integer i from the stack, then performs s[i] PUSH .  18 
61  ROLLX 
 Pops integer i from the stack, then performs 1 [i] BLKSWAP .  18 
62  ROLLX
ROLLREVX 
 Pops integer i from the stack, then performs [i] 1 BLKSWAP .  18 
63  BLKSWX 
 Pops integers i ,j from the stack, then performs [i] [j] BLKSWAP .  18 
64  REVX 
 Pops integers i ,j from the stack, then performs [i] [j] REVERSE .  18 
65  DROPX 
 Pops integer i from the stack, then performs [i] BLKDROP .  18 
66  TUCK  a b  b a b  Equivalent to SWAP OVER or to s1 s1 XCPU .  18 
67  XCHGX 
 Pops integer i from the stack, then performs s[i] XCHG .  18 
68  DEPTH   depth  Pushes the current depth of the stack.  18 
69  CHKDEPTH  i   Pops integer i from the stack, then checks whether there are at least i elements, generating a stack underflow exception otherwise.  18/58 
6A  ONLYTOPX 
 Pops integer i from the stack, then removes all but the top i elements.  18 
6B  ONLYX 
 Pops integer i from the stack, then leaves only the bottom i elements. Approximately equivalent to DEPTH SWAP SUB DROPX .  18 
6Cij  [i] [j] BLKDROP2 
 Drops  26 
Opcode  Fift syntax  Stack  Description  Gas 

6D  NULL
PUSHNULL   null  Pushes the only value of type Null.  18 
6E  ISNULL  x  ?  Checks whether x is a Null, and returns 1 or 0 accordingly.  18 
6F0n  [n] TUPLE  x_1 ... x_n  t  Creates a new Tuple  26+n 
6F1k  [k] INDEX  t  x  Returns the  26 
6F2n  [n] UNTUPLE  t  x_1 ... x_n  Unpacks a Tuple  26+n 
6F3k  [k] UNPACKFIRST  t  x_1 ... x_k  Unpacks first  26+k 
6F4n  [n] EXPLODE  t  x_1 ... x_m m  Unpacks a Tuple t=(x_1,...,x_m) and returns its length m , but only if m <= n <= 15 . Otherwise throws a type check exception.  26+m 
6F5k  [k] SETINDEX  t x  t'  Computes Tuple  26+t 
6F6k  [k] INDEXQ  t  x  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 .  26 
6F7k  [k] SETINDEXQ  t x  t'  Sets the  26+t' 
6F80  TUPLEVAR  x_1 ... x_n n  t  Creates a new Tuple t of length n similarly to TUPLE , but with 0 <= n <= 255 taken from the stack.  26+n 
6F81  INDEXVAR  t k  x  Similar to k INDEX , but with 0 <= k <= 254 taken from the stack.  26 
6F82  UNTUPLEVAR  t n  x_1 ... x_n  Similar to n UNTUPLE , but with 0 <= n <= 255 taken from the stack.  26+n 
6F83  UNPACKFIRSTVAR  t n  x_1 ... x_n  Similar to n UNPACKFIRST , but with 0 <= n <= 255 taken from the stack.  26+n 
6F84  EXPLODEVAR  t n  x_1 ... x_m m  Similar to n EXPLODE , but with 0 <= n <= 255 taken from the stack.  26+m 
6F85  SETINDEXVAR  t x k  t'  Similar to k SETINDEX , but with 0 <= k <= 254 taken from the stack.  26+t' 
6F86  INDEXVARQ  t k  x  Similar to n INDEXQ , but with 0 <= k <= 254 taken from the stack.  26 
6F87  SETINDEXVARQ  t x k  t'  Similar to k SETINDEXQ , but with 0 <= k <= 254 taken from the stack.  26+t' 
6F88  TLEN  t  n  Returns the length of a Tuple.  26 
6F89  QTLEN  t  n or 1  Similar to TLEN , but returns 1 if t is not a Tuple.  26 
6F8A  ISTUPLE  t  ?  Returns 1 or 0 depending on whether t is a Tuple.  26 
6F8B  LAST  t  x  Returns the last element of a nonempty Tuple t .  26 
6F8C  TPUSH
COMMA  t x  t'  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.  26+t' 
6F8D  TPOP  t  t' x  Detaches the last element x=x_n from a nonempty Tuple t=(x_1,...,x_n) , and returns both the resulting Tuple t'=(x_1,...,x_{n1}) and the original last element x .  26+t' 
6FA0  NULLSWAPIF  x  x or null x  Pushes a Null under the topmost Integer x , but only if x!=0 .  26 
6FA1  NULLSWAPIFNOT  x  x or null x  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 .  26 
6FA2  NULLROTRIF  x y  x y or null x y  Pushes a Null under the second stack entry from the top, but only if the topmost Integer y is nonzero.  26 
6FA3  NULLROTRIFNOT  x y  x y or null x y  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 .  26 
6FA4  NULLSWAPIF2  x  x or null null x  Pushes two nulls under the topmost Integer  26 
6FA5  NULLSWAPIFNOT2  x  x or null null x  Pushes two nulls under the topmost Integer  26 
6FA6  NULLROTRIF2  x y  x y or null null x y  Pushes two nulls under the second stack entry from the top, but only if the topmost Integer  26 
6FA7  NULLROTRIFNOT2  x y  x y or null null x y  Pushes two nulls under the second stack entry from the top, but only if the topmost Integer  26 
6FBij  [i] [j] INDEX2  t  x  Recovers  26 
6FE_ijk  [i] [j] [k] INDEX3  t  x  Recovers  26 
Opcode  Fift syntax  Stack  Description  Gas 

7i  [x] PUSHINT
[x] INT   x  Pushes integer  18 
80xx  [xx] PUSHINT
[xx] INT   xx  Pushes integer xx . 128 <= xx <= 127 .  26 
81xxxx  [xxxx] PUSHINT
[xxxx] INT   xxxx  Pushes integer xxxx . 2^15 <= xx < 2^15 .  34 
82lxxx  [xxx] PUSHINT
[xxx] INT   xxx  Pushes integer  23 
83xx  [xx+1] PUSHPOW2   2^(xx+1)  (Quietly) pushes  26 
83FF  PUSHNAN   NaN  Pushes a NaN .  26 
84xx  [xx+1] PUSHPOW2DEC   2^(xx+1)1  Pushes 2^(xx+1)1 for 0 <= xx <= 255 .  26 
85xx  [xx+1] PUSHNEGPOW2   2^(xx+1)  Pushes 2^(xx+1) for 0 <= xx <= 255 .  26 
88  [ref] PUSHREF   c  Pushes the reference  18 
89  [ref] PUSHREFSLICE   s  Similar to PUSHREF , but converts the cell into a Slice.  118/43 
8A  [ref] PUSHREFCONT   cont  Similar to PUSHREFSLICE , but makes a simple ordinary Continuation out of the cell.  118/43 
8Bxsss  [slice] PUSHSLICE
[slice] SLICE   s  Pushes the slice  22 
8Crxxssss  [slice] PUSHSLICE
[slice] SLICE   s  Pushes the slice  25 
8Drxxsssss  [slice] PUSHSLICE
[slice] SLICE   s  Pushes the slice  28 
8F_rxxcccc  [builder] PUSHCONT
[builder] CONT   c  Pushes a continuation made from  26 
9xccc  [builder] PUSHCONT
[builder] CONT   c  Pushes a continuation made from  18 
Opcode  Fift syntax  Stack  Description  Gas 

A0  ADD  x y  x+y  18  
A1  SUB  x y  xy  18  
A2  SUBR  x y  yx  Equivalent to SWAP SUB .  18 
A3  NEGATE  x  x  Equivalent to  18 
A4  INC  x  x+1  Equivalent to 1 ADDCONST .  18 
A5  DEC  x  x1  Equivalent to 1 ADDCONST .  18 
A6cc  [cc] ADDCONST
[cc] ADDINT
[cc] SUBCONST
[cc] SUBINT  x  x+cc  128 <= cc <= 127 .  26 
A7cc  [cc] MULCONST
[cc] MULINT  x  x*cc  128 <= cc <= 127 .  26 
A8  MUL  x y  x*y  18  
A900  ADDDIVMOD  x w z  q=floor((x+w)/z) r=(x+w)zq  26  
A901  ADDDIVMODR  x w z  q=round((x+w)/z) r=(x+w)zq  26  
A902  ADDDIVMODC  x w y  q=ceil((x+w)/z) r=(x+w)zq  26  
A904  DIV  x y  q  q=floor(x/y) , r=xy*q  26 
A905  DIVR  x y  q'  q'=round(x/y) , r'=xy*q'  26 
A906  DIVC  x y  q''  q''=ceil(x/y) , r''=xy*q''  26 
A908  MOD  x y  r  26  
A909  MODR  x y  r  26  
A90A  MODC  x y  r  26  
A90C  DIVMOD  x y  q r  26  
A90D  DIVMODR  x y  q' r'  26  
A90E  DIVMODC  x y  q'' r''  26  
A920  ADDRSHIFTMOD  x w z  q=floor((x+w)/2^z) r=(x+w)q*2^z  26  
A921  ADDRSHIFTMODR  x w z  q=round((x+w)/2^z) r=(x+w)q*2^z  26  
A922  ADDRSHIFTMODC  x w z  q=ceil((x+w)/2^z) r=(x+w)q*2^z  26  
A925  RSHIFTR  x y  round(x/2^y)  26  
A926  RSHIFTC  x y  ceil(x/2^y)  26  
A928  MODPOW2  x y  x mod 2^y  26  
A929  MODPOW2R  x y  x mod 2^y  26  
A92A  MODPOW2C  x y  x mod 2^y  26  
A92C  RSHIFTMOD  x y  q=floor(x/2^y) r=xq*2^y  26  
A92D  RSHIFTMODR  x y  q=round(x/2^y) r=xq*2^y  26  
A92E  RSHIFTMODC  x y  q=ceil(x/2^y) r=xq*2^y  26  
A930tt  [tt+1] ADDRSHIFT#MOD  x w  q=floor((x+w)/2^(tt+1)) r=(x+w)q*2^(tt+1)  34  
A931tt  [tt+1] ADDRSHIFTR#MOD  x w  q=round((x+w)/2^(tt+1)) r=(x+w)q*2^(tt+1)  34  
A932tt  [tt+1] ADDRSHIFTC#MOD  x w  q=round((x+w)/2^(tt+1)) r=(x+w)q*2^(tt+1)  34  
A935tt  [tt+1] RSHIFTR#  x  round(x/2^(tt+1))  34  
A936tt  [tt+1] RSHIFTC#  x  ceil(x/2^(tt+1))  34  
A938tt  [tt+1] MODPOW2#  x  x mod 2^(tt+1)  34  
A939tt  [tt+1] MODPOW2R#  x  x mod 2^(tt+1)  34  
A93Att  [tt+1] MODPOW2C#  x  x mod 2^(tt+1)  34  
A93Ctt  [tt+1] RSHIFT#MOD  x  q=floor(x/2^(tt+1)) r=xq*2^(tt+1)  34  
A93Dtt  [tt+1] RSHIFTR#MOD  x  q=round(x/2^(tt+1)) r=xq*2^(tt+1)  34  
A93Ett  [tt+1] RSHIFTC#MOD  x  q=ceil(x/2^(tt+1)) r=xq*2^(tt+1)  34  
A980  MULADDDIVMOD  x y w z  q=floor((xy+w)/z) r=(xy+w)zq  26  
A981  MULADDDIVMODR  x y w z  q=round((xy+w)/z) r=(xy+w)zq  26  
A982  MULADDDIVMODC  x y w z  q=ceil((xy+w)/z) r=(xy+w)zq  26  
A984  MULDIV  x y z  q  q=floor(x*y/z)  26 
A985  MULDIVR  x y z  q'  q'=round(x*y/z)  26 
A986  MULDIVC  x y z  q'  q'=ceil(x*y/z)  26 
A988  MULMOD  x y z  x*y mod z  26  
A989  MULMODR  x y z  x*y mod z  26  
A98A  MULMODC  x y z  x*y mod z  26  
A98C  MULDIVMOD  x y z  q r  q=floor(x*y/z) , r=x*yz*q  26 
A98D  MULDIVMODR  x y z  q r  q=round(x*y/z) , r=x*yz*q  26 
A98E  MULDIVMODC  x y z  q r  q=ceil(x*y/z) , r=x*yz*q  26 
A9A0  MULADDRSHIFTMOD  x y w z  q=floor((xy+w)/2^z) r=(xy+w)q*2^z  26  
A9A1  MULADDRSHIFTRMOD  x y w z  q=round((xy+w)/2^z) r=(xy+w)q*2^z  26  
A9A2  MULADDRSHIFTCMOD  x y w z  q=ceil((xy+w)/2^z) r=(xy+w)q*2^z  26  
A9A4  MULRSHIFT  x y z  floor(x*y/2^z)  0 <= z <= 256  26 
A9A5  MULRSHIFTR  x y z  round(x*y/2^z)  0 <= z <= 256  26 
A9A6  MULRSHIFTC  x y z  ceil(x*y/2^z)  0 <= z <= 256  26 
A9A8  MULMODPOW2_VAR  x y z  x*y mod 2^z  26  
A9A9  MULMODPOW2R_VAR  x y z  x*y mod 2^z  26  
A9AA  MULMODPOW2C_VAR  x y z  x*y mod 2^z  26  
A9AC  MULRSHIFTMOD_VAR  x y z  q=floor(x*y/2^z) r=xyq*2^z  26  
A9AD  MULRSHIFTRMOD_VAR  x y z  q=round(x*y/2^z) r=xyq*2^z  26  
A9AE  MULRSHIFTCMOD_VAR  x y z  q=ceil(x*y/2^z) r=xyq*2^z  26  
A9B0tt  [tt+1] MULADDRSHIFT#MOD  x y w  q=floor((xy+w)/2^z) r=(xy+w)q*2^z  34  
A9B1tt  [tt+1] MULADDRSHIFTR#MOD  x y w  q=round((xy+w)/2^z) r=(xy+w)q*2^z  34  
A9B2tt  [tt+1] MULADDRSHIFTC#MOD  x y w  q=ceil((xy+w)/2^z) r=(xy+w)q*2^z  34  
A9B4tt  [tt+1] MULRSHIFT#  x y  floor(x*y/2^(tt+1))  34  
A9B5tt  [tt+1] MULRSHIFTR#  x y  round(x*y/2^(tt+1))  34  
A9B6tt  [tt+1] MULRSHIFTC#  x y  ceil(x*y/2^(tt+1))  34  
A9B8tt  [tt+1] MULMODPOW2#  x y  x*y mod 2^(tt+1)  34  
A9B9tt  [tt+1] MULMODPOW2R#  x y  x*y mod 2^(tt+1)  34  
A9BAtt  [tt+1] MULMODPOW2C#  x y  x*y mod 2^(tt+1)  34  
A9BC  MULRSHIFT#MOD  x y  q=floor(x*y/2^(tt+1)) r=xyq*2^(tt+1)  34  
A9BD  MULRSHIFTR#MOD  x y  q=round(x*y/2^(tt+1)) r=xyq*2^(tt+1)  34  
A9BE  MULRSHIFTC#MOD  x y  q=ceil(x*y/2^(tt+1)) r=xyq*2^(tt+1)  34  
A9C0  LSHIFTADDDIVMOD  x w z y  q=floor((x*2^y+w)/z) r=(x*2^y+w)zq  26  
A9C1  LSHIFTADDDIVMODR  x w z y  q=round((x*2^y+w)/z) r=(x*2^y+w)zq  26  
A9C2  LSHIFTADDDIVMODC  x w z y  q=round((x*2^y+w)/z) r=(x*2^y+w)zq  26  
A9C4  LSHIFTDIV  x y z  floor(2^z*x/y)  0 <= z <= 256  26 
A9C5  LSHIFTDIVR  x y z  round(2^z*x/y)  0 <= z <= 256  26 
A9C6  LSHIFTDIVC  x y z  ceil(2^z*x/y)  0 <= z <= 256  26 
A9C8  LSHIFTMOD  x y z  2^z*x mod y  26  
A9C9  LSHIFTMODR  x y z  2^z*x mod y  26  
A9CA  LSHIFTMODC  x y z  2^z*x mod y  26  
A9CC  LSHIFTDIVMOD  x y z  q=floor(2^z*x/y) r=2^z*xq*y  26  
A9CD  LSHIFTDIVMODR  x y z  q=round(2^z*x/y) r=2^z*xq*y  26  
A9CE  LSHIFTDIVMODC  x y z  q=ceil(2^z*x/y) r=2^z*xq*y  26  
A9D0tt  [tt+1] LSHIFT#ADDDIVMOD  x w z  q=floor((x*2^y+w)/z) r=(x*2^y+w)zq  34  
A9D1tt  [tt+1] LSHIFT#ADDDIVMODR  x w z  q=round((x*2^y+w)/z) r=(x*2^y+w)zq  34  
A9D2tt  [tt+1] LSHIFT#ADDDIVMODC  x w z  q=ceil((x*2^y+w)/z) r=(x*2^y+w)zq  34  
A9D4tt  [tt+1] LSHIFT#DIV  x y  floor(2^(tt+1)*x/y)  34  
A9D5tt  [tt+1] LSHIFT#DIVR  x y  round(2^(tt+1)*x/y)  34  
A9D6tt  [tt+1] LSHIFT#DIVC  x y  ceil(2^(tt+1)*x/y)  26  
A9D8tt  [tt+1] LSHIFT#MOD  x y  2^(tt+1)*x mod y  34  
A9D9tt  [tt+1] LSHIFT#MODR  x y  2^(tt+1)*x mod y  34  
A9DAtt  [tt+1] LSHIFT#MODC  x y  2^(tt+1)*x mod y  34  
A9DCtt  [tt+1] LSHIFT#DIVMOD  x y  q=floor(2^(tt+1)*x/y) r=2^(tt+1)*xq*y  34  
A9DDtt  [tt+1] LSHIFT#DIVMODR  x y  q=round(2^(tt+1)*x/y) r=2^(tt+1)*xq*y  34  
A9DEtt  [tt+1] LSHIFT#DIVMODC  x y  q=ceil(2^(tt+1)*x/y) r=2^(tt+1)*xq*y  34  
AAcc  [cc+1] LSHIFT#  x  x*2^(cc+1)  0 <= cc <= 255  26 
ABcc  [cc+1] RSHIFT#  x  floor(x/2^(cc+1))  0 <= cc <= 255  18 
AC  LSHIFT  x y  x*2^y  0 <= y <= 1023  18 
AD  RSHIFT  x y  floor(x/2^y)  0 <= y <= 1023  18 
AE  POW2  y  2^y 
 18 
B0  AND  x y  x&y  Bitwise and of two signed integers x and y , signextended to infinity.  18 
B1  OR  x y  xy  Bitwise or of two integers.  18 
B2  XOR  x y  x xor y  Bitwise xor of two integers.  18 
B3  NOT  x  ~x  Bitwise not of an integer.  26 
B4cc  [cc+1] FITS  x  x  Checks whether  26/76 
B5cc  [cc+1] UFITS  x  x  Checks whether x is a cc+1 bit unsigned integer for 0 <= cc <= 255 (i.e., whether 0 <= x < 2^(cc+1) ).  26/76 
B600  FITSX  x c  x  Checks whether x is a c bit signed integer for 0 <= c <= 1023 .  26/76 
B601  UFITSX  x c  x  Checks whether x is a c bit unsigned integer for 0 <= c <= 1023 .  26/76 
B602  BITSIZE  x  c  Computes smallest c >= 0 such that x fits into a c bit signed integer (2^(c1) <= c < 2^(c1) ).  26 
B603  UBITSIZE  x  c  Computes smallest c >= 0 such that x fits into a c bit unsigned integer (0 <= x < 2^c ), or throws a range check exception.  26 
B608  MIN  x y  x or y  Computes the minimum of two integers x and y .  26 
B609  MAX  x y  x or y  Computes the maximum of two integers x and y .  26 
B60A  MINMAX
INTSORT2  x y  x y or y x  Sorts two integers. Quiet version of this operation returns two NaN s if any of the arguments are NaN s.  26 
B60B  ABS  x  x  Computes the absolute value of an integer x .  26 
B7A0  QADD  x y  x+y  26  
B7A1  QSUB  x y  xy  26  
B7A2  QSUBR  x y  yx  26  
B7A3  QNEGATE  x  x  26  
B7A4  QINC  x  x+1  26  
B7A5  QDEC  x  x1  26  
B7A8  QMUL  x y  x*y  26  
B7A900  QADDDIVMOD  x w z  q=floor((x+w)/z) r=(x+w)zq  34  
B7A901  QADDDIVMODR  x w z  q=round((x+w)/z) r=(x+w)zq  34  
B7A902  QADDDIVMODC  x w y  q=ceil((x+w)/z) r=(x+w)zq  34  
B7A904  QDIV  x y  q  Division returns NaN if y=0 .  34 
B7A905  QDIVR  x y  q'  34  
B7A906  QDIVC  x y  q''  34  
B7A908  QMOD  x y  r  34  
B7A909  QMODR  x y  r  34  
B7A90A  QMODC  x y  r  34  
B7A90C  QDIVMOD  x y  q r  34  
B7A90D  QDIVMODR  x y  q' r'  34  
B7A90E  QDIVMODC  x y  q'' r''  34  
B7A920  QADDRSHIFTMOD  x w z  q=floor((x+w)/2^z) r=(x+w)q*2^z  34  
B7A921  QADDRSHIFTMODR  x w z  q=round((x+w)/2^z) r=(x+w)q*2^z  34  
B7A922  QADDRSHIFTMODC  x w z  q=ceil((x+w)/2^z) r=(x+w)q*2^z  34  
B7A925  QRSHIFTR  x y  round(x/2^y)  34  
B7A926  QRSHIFTC  x y  ceil(x/2^y)  34  
B7A928  QMODPOW2  x y  x mod 2^y  34  
B7A929  QMODPOW2R  x y  x mod 2^y  34  
B7A92A  QMODPOW2C  x y  x mod 2^y  34  
B7A92C  QRSHIFTMOD  x y  q=floor(x/2^y) r=xq*2^y  34  
B7A92D  QRSHIFTMODR  x y  q=round(x/2^y) r=xq*2^y  34  
B7A92E  QRSHIFTMODC  x y  q=ceil(x/2^y) r=xq*2^y  34  
B7A930tt  [tt+1] QADDRSHIFT#MOD  x w  q=floor((x+w)/2^(tt+1)) r=(x+w)q*2^(tt+1)  42  
B7A931tt  [tt+1] QADDRSHIFTR#MOD  x w  q=round((x+w)/2^(tt+1)) r=(x+w)q*2^(tt+1)  42  
B7A932tt  [tt+1] QADDRSHIFTC#MOD  x w  q=round((x+w)/2^(tt+1)) r=(x+w)q*2^(tt+1)  42  
B7A935tt  [tt+1] QRSHIFTR#  x  round(x/2^(tt+1))  42  
B7A936tt  [tt+1] QRSHIFTC#  x  ceil(x/2^(tt+1))  42  
B7A938tt  [tt+1] QMODPOW2#  x  x mod 2^(tt+1)  42  
B7A939tt  [tt+1] QMODPOW2R#  x  x mod 2^(tt+1)  42  
B7A93Att  [tt+1] QMODPOW2C#  x  x mod 2^(tt+1)  42  
A93Ctt  [tt+1] QRSHIFT#MOD  x  q=floor(x/2^(tt+1)) r=xq*2^(tt+1)  42  
A93Dtt  [tt+1] QRSHIFTR#MOD  x  q=round(x/2^(tt+1)) r=xq*2^(tt+1)  42  
B7A93Ett  [tt+1] QRSHIFTC#MOD  x  q=ceil(x/2^(tt+1)) r=xq*2^(tt+1)  42  
B7A980  QMULADDDIVMOD  x y w z  q=floor((xy+w)/z) r=(xy+w)zq  34  
B7A981  QMULADDDIVMODR  x y w z  q=round((xy+w)/z) r=(xy+w)zq  34  
B7A982  QMULADDDIVMODC  x y w z  q=ceil((xy+w)/z) r=(xy+w)zq  34  
B7A984  QMULDIV  x y z  q  q=floor(x*y/z)  34 
B7A985  QMULDIVR  x y z  q'  34  
B7A986  QMULDIVC  x y z  q'  q'=ceil(x*y/z)  34 
B7A988  QMULMOD  x y z  x*y mod z  34  
B7A989  QMULMODR  x y z  x*y mod z  34  
B7A98A  QMULMODC  x y z  x*y mod z  34  
B7A98C  QMULDIVMOD  x y z  q r  34  
B7A98D  QMULDIVMODR  x y z  q r  q=round(x*y/z) , r=x*yz*q  34 
B7A98E  QMULDIVMODC  x y z  q r  q=ceil(x*y/z) , r=x*yz*q  34 
B7A9A0  QMULADDRSHIFTMOD  x y w z  q=floor((xy+w)/2^z) r=(xy+w)q*2^z  34  
B7A9A1  QMULADDRSHIFTRMOD  x y w z  q=round((xy+w)/2^z) r=(xy+w)q*2^z  34  
B7A9A2  QMULADDRSHIFTCMOD  x y w z  q=ceil((xy+w)/2^z) r=(xy+w)q*2^z  34  
B7A9A4  QMULRSHIFT  x y z  floor(x*y/2^z)  0 <= z <= 256  34 
B7A9A5  QMULRSHIFTR  x y z  round(x*y/2^z)  0 <= z <= 256  34 
B7A9A6  QMULRSHIFTC  x y z  ceil(x*y/2^z)  0 <= z <= 256  34 
B7A9A8  QMULMODPOW2_VAR  x y z  x*y mod 2^z  34  
B7A9A9  QMULMODPOW2R_VAR  x y z  x*y mod 2^z  34  
B7A9AA  QMULMODPOW2C_VAR  x y z  x*y mod 2^z  34  
B7A9AC  QMULRSHIFTMOD_VAR  x y z  q=floor(x*y/2^z) r=xyq*2^z  34  
B7A9AD  QMULRSHIFTRMOD_VAR  x y z  q=round(x*y/2^z) r=xyq*2^z  34  
B7A9AE  QMULRSHIFTCMOD_VAR  x y z  q=ceil(x*y/2^z) r=xyq*2^z  34  
B7A9B0tt  [tt+1] QMULADDRSHIFT#MOD  x y w  q=floor((xy+w)/2^z) r=(xy+w)q*2^z  42  
B7A9B1tt  [tt+1] QMULADDRSHIFTR#MOD  x y w  q=round((xy+w)/2^z) r=(xy+w)q*2^z  42  
B7A9B2tt  [tt+1] QMULADDRSHIFTC#MOD  x y w  q=ceil((xy+w)/2^z) r=(xy+w)q*2^z  42  
B7A9B4tt  [tt+1] QMULRSHIFT#  x y  floor(x*y/2^(tt+1))  42  
B7A9B5tt  [tt+1] QMULRSHIFTR#  x y  round(x*y/2^(tt+1))  42  
B7A9B6tt  [tt+1] QMULRSHIFTC#  x y  ceil(x*y/2^(tt+1))  42  
B7A9B8tt  [tt+1] QMULMODPOW2#  x y  x*y mod 2^(tt+1)  42  
B7A9B9tt  [tt+1] QMULMODPOW2R#  x y  x*y mod 2^(tt+1)  42  
B7A9BAtt  [tt+1] QMULMODPOW2C#  x y  x*y mod 2^(tt+1)  42  
B7A9BC  QMULRSHIFT#MOD  x y  q=floor(x*y/2^(tt+1)) r=xyq*2^(tt+1)  42  
B7A9BD  QMULRSHIFTR#MOD  x y  q=round(x*y/2^(tt+1)) r=xyq*2^(tt+1)  42  
B7A9BE  QMULRSHIFTC#MOD  x y  q=ceil(x*y/2^(tt+1)) r=xyq*2^(tt+1)  42  
B7A9C0  QLSHIFTADDDIVMOD  x w z y  q=floor((x*2^y+w)/z) r=(x*2^y+w)zq  34  
B7A9C1  QLSHIFTADDDIVMODR  x w z y  q=round((x*2^y+w)/z) r=(x*2^y+w)zq  34  
B7A9C2  QLSHIFTADDDIVMODC  x w z y  q=round((x*2^y+w)/z) r=(x*2^y+w)zq  34  
B7A9C4  QLSHIFTDIV  x y z  floor(2^z*x/y)  0 <= z <= 256  34 
B7A9C5  QLSHIFTDIVR  x y z  round(2^z*x/y)  0 <= z <= 256  34 
B7A9C6  QLSHIFTDIVC  x y z  ceil(2^z*x/y)  0 <= z <= 256  34 
B7A9C8  QLSHIFTMOD  x y z  2^z*x mod y  34  
B7A9C9  QLSHIFTMODR  x y z  2^z*x mod y  34  
B7A9CA  QLSHIFTMODC  x y z  2^z*x mod y  34  
B7A9CC  QLSHIFTDIVMOD  x y z  q=floor(2^z*x/y) r=2^z*xq*y  34  
B7A9CD  QLSHIFTDIVMODR  x y z  q=round(2^z*x/y) r=2^z*xq*y  34  
B7A9CE  QLSHIFTDIVMODC  x y z  q=ceil(2^z*x/y) r=2^z*xq*y  34  
B7A9D0tt  [tt+1] QLSHIFT#ADDDIVMOD  x w z  q=floor((x*2^(tt+1)+w)/z) r=(x*2^(tt+1)+w)zq  42  
B7A9D1tt  [tt+1] QLSHIFT#ADDDIVMODR  x w z  q=round((x*2^(tt+1)+w)/z) r=(x*2^(tt+1)+w)zq  42  
B7A9D2tt  [tt+1] QLSHIFT#ADDDIVMODC  x w z  q=ceil((x*2^(tt+1)+w)/z) r=(x*2^(tt+1)+w)zq  42  
B7A9D4tt  [tt+1] QLSHIFT#DIV  x y  floor(2^(tt+1)*x/y)  42  
B7A9D5tt  [tt+1] QLSHIFT#DIVR  x y  round(2^(tt+1)*x/y)  42  
B7A9D6tt  [tt+1] QLSHIFT#DIVC  x y  ceil(2^(tt+1)*x/y)  34  
B7A9D8tt  [tt+1] QLSHIFT#MOD  x y  2^(tt+1)*x mod y  42  
B7A9D9tt  [tt+1] LSHIFT#MODR  x y  2^(tt+1)*x mod y  42  
B7A9DAtt  [tt+1] QLSHIFT#MODC  x y  2^(tt+1)*x mod y  42  
B7A9DCtt  [tt+1] QLSHIFT#DIVMOD  x y  q=floor(2^(tt+1)*x/y) r=2^(tt+1)*xq*y  42  
B7A9DDtt  [tt+1] QLSHIFT#DIVMODR  x y  q=round(2^(tt+1)*x/y) r=2^(tt+1)*xq*y  42  
B7A9DEtt  [tt+1] QLSHIFT#DIVMODC  x y  q=ceil(2^(tt+1)*x/y) r=2^(tt+1)*xq*y  42  
B7AAcc  [cc+1] QLSHIFT#  x  x*2^(cc+1)  0 <= cc <= 255  34 
B7ABcc  [cc+1] RSHIFT#  x  floor(x/2^(cc+1))  0 <= cc <= 255  26 
B7AC  QLSHIFT  x y  x*2^y  26  
B7AD  QRSHIFT  x y  floor(x/2^y)  26  
B7AE  QPOW2  y  2^y  26  
B7B0  QAND  x y  x&y  26  
B7B1  QOR  x y  xy  26  
B7B2  QXOR  x y  x xor y  26  
B7B3  QNOT  x  ~x  26  
B7B4cc  [cc+1] QFITS  x  x  Replaces x with a NaN if x is not a cc+1 bit signed integer, leaves it intact otherwise.  34 
B7B5cc  [cc+1] QUFITS  x  x  Replaces x with a NaN if x is not a cc+1 bit unsigned integer, leaves it intact otherwise.  34 
B7B600  QFITSX  x c  x  Replaces x with a NaN if x is not a cbit signed integer, leaves it intact otherwise.  34 
B7B601  QUFITSX  x c  x  Replaces x with a NaN if x is not a cbit unsigned integer, leaves it intact otherwise.  34 
Opcode  Fift syntax  Stack  Description  Gas 

B8  SGN  x  sgn(x)  Computes the sign of an integer  18 
B9  LESS  x y  x<y  Returns 1 if x<y , 0 otherwise.  18 
BA  EQUAL  x y  x=y  Returns 1 if x=y , 0 otherwise.  18 
BB  LEQ  x y  x<=y  18  
BC  GREATER  x y  x>y  18  
BD  NEQ  x y  x!=y  Equivalent to EQUAL NOT .  18 
BE  GEQ  x y  x>=y  Equivalent to LESS NOT .  18 
BF  CMP  x y  sgn(xy)  Computes the sign of  18 
C0yy  [yy] EQINT  x  x=yy  Returns  26 
C1yy  [yy] LESSINT
[yy1] LEQINT  x  x<yy  Returns  26 
C2yy  [yy] GTINT
[yy+1] GEQINT  x  x>yy  Returns  26 
C3yy  [yy] NEQINT  x  x!=yy  Returns  26 
C4  ISNAN  x  x=NaN  Checks whether x is a NaN .  18 
C5  CHKNAN  x  x  Throws an arithmetic overflow exception if x is a NaN .  18/68 
C700  SEMPTY  s  ?  Checks whether a Slice s is empty (i.e., contains no bits of data and no cell references).  26 
C701  SDEMPTY  s  ?  Checks whether Slice s has no bits of data.  26 
C702  SREMPTY  s  ?  Checks whether Slice s has no references.  26 
C703  SDFIRST  s  ?  Checks whether the first bit of Slice s is a one.  26 
C704  SDLEXCMP  s s'  x  Compares the data of s lexicographically with the data of s' , returning 1 , 0, or 1 depending on the result.  26 
C705  SDEQ  s s'  ?  Checks whether the data parts of s and s' coincide, equivalent to SDLEXCMP ISZERO .  26 
C708  SDPFX  s s'  ?  Checks whether s is a prefix of s' .  26 
C709  SDPFXREV  s s'  ?  Checks whether s' is a prefix of s , equivalent to SWAP SDPFX .  26 
C70A  SDPPFX  s s'  ?  Checks whether s is a proper prefix of s' (i.e., a prefix distinct from s' ).  26 
C70B  SDPPFXREV  s s'  ?  Checks whether s' is a proper prefix of s .  26 
C70C  SDSFX  s s'  ?  Checks whether s is a suffix of s' .  26 
C70D  SDSFXREV  s s'  ?  Checks whether s' is a suffix of s .  26 
C70E  SDPSFX  s s'  ?  Checks whether s is a proper suffix of s' .  26 
C70F  SDPSFXREV  s s'  ?  Checks whether s' is a proper suffix of s .  26 
C710  SDCNTLEAD0  s  n  Returns the number of leading zeroes in s .  26 
C711  SDCNTLEAD1  s  n  Returns the number of leading ones in s .  26 
C712  SDCNTTRAIL0  s  n  Returns the number of trailing zeroes in s .  26 
C713  SDCNTTRAIL1  s  n  Returns the number of trailing ones in s .  26 
Opcode  Fift syntax  Stack  Description  Gas 

C8  NEWC   b  Creates a new empty Builder.  18 
C9  ENDC  b  c  Converts a Builder into an ordinary Cell.  518 
CAcc  [cc+1] STI  x b  b'  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.  26 
CBcc  [cc+1] STU  x b  b'  Stores an unsigned cc+1 bit integer x into Builder b . In all other respects it is similar to STI .  26 
CC  STREF  c b  b'  Stores a reference to Cell c into Builder b .  18 
CD  STBREFR
ENDCST  b b''  b  Equivalent to ENDC SWAP STREF .  518 
CE  STSLICE  s b  b'  Stores Slice s into Builder b .  18 
CF00  STIX  x b l  b'  Stores a signed l bit integer x into b for 0 <= l <= 257 .  26 
CF01  STUX  x b l  b'  Stores an unsigned l bit integer x into b for 0 <= l <= 256 .  26 
CF02  STIXR  b x l  b'  Similar to STIX , but with arguments in a different order.  26 
CF03  STUXR  b x l  b'  Similar to STUX , but with arguments in a different order.  26 
CF04  STIXQ  x b l  x b f or b' 0  A quiet version of  26 
CF05  STUXQ  x b l  x b f or b' 0  A quiet version of STUX .  26 
CF06  STIXRQ  b x l  b x f or b' 0  A quiet version of STIXR .  26 
CF07  STUXRQ  b x l  b x f or b' 0  A quiet version of STUXR .  26 
CF08cc  [cc+1] STI_l  x b  b'  A longer version of [cc+1] STI .  34 
CF09cc  [cc+1] STU_l  x b  b'  A longer version of [cc+1] STU .  34 
CF0Acc  [cc+1] STIR  b x  b'  Equivalent to SWAP [cc+1] STI .  34 
CF0Bcc  [cc+1] STUR  b x  b'  Equivalent to SWAP [cc+1] STU .  34 
CF0Ccc  [cc+1] STIQ  x b  x b f or b' 0  A quiet version of STI .  34 
CF0Dcc  [cc+1] STUQ  x b  x b f or b' 0  A quiet version of STU .  34 
CF0Ecc  [cc+1] STIRQ  b x  b x f or b' 0  A quiet version of STIR .  34 
CF0Fcc  [cc+1] STURQ  b x  b x f or b' 0  A quiet version of STUR .  34 
CF10  STREF_l  c b  b'  A longer version of STREF .  26 
CF11  STBREF  b' b  b''  Equivalent to SWAP STBREFR .  526 
CF12  STSLICE_l  s b  b'  A longer version of STSLICE .  26 
CF13  STB  b' b  b''  Appends all data from Builder b' to Builder b .  26 
CF14  STREFR  b c  b'  Equivalent to SWAP STREF .  26 
CF15  STBREFR_l  b b'  b''  A longer encoding of STBREFR .  526 
CF16  STSLICER  b s  b'  Equivalent to SWAP STSLICE .  26 
CF17  STBR
BCONCAT  b b'  b''  Concatenates two builders.
Equivalent to  26 
CF18  STREFQ  c b  c b 1 or b' 0  Quiet version of STREF .  26 
CF19  STBREFQ  b' b  b' b 1 or b'' 0  Quiet version of STBREF .  526 
CF1A  STSLICEQ  s b  s b 1 or b' 0  Quiet version of STSLICE .  26 
CF1B  STBQ  b' b  b' b 1 or b'' 0  Quiet version of STB .  26 
CF1C  STREFRQ  b c  b c 1 or b' 0  Quiet version of STREFR .  26 
CF1D  STBREFRQ  b b'  b b' 1 or b'' 0  Quiet version of STBREFR .  526 
CF1E  STSLICERQ  b s  b s 1 or b'' 0  Quiet version of STSLICER .  26 
CF1F  STBRQ
BCONCATQ  b b'  b b' 1 or b'' 0  Quiet version of STBR .  26 
CF20  [ref] STREFCONST  b  b'  Equivalent to PUSHREF STREFR .  26 
CF21  [ref] [ref] STREF2CONST  b  b'  Equivalent to STREFCONST STREFCONST .  26 
CF23  ENDXC  b x  c  If  526 
CF28  STILE4  x b  b'  Stores a littleendian signed 32bit integer.  26 
CF29  STULE4  x b  b'  Stores a littleendian unsigned 32bit integer.  26 
CF2A  STILE8  x b  b'  Stores a littleendian signed 64bit integer.  26 
CF2B  STULE8  x b  b'  Stores a littleendian unsigned 64bit integer.  26 
CF30  BDEPTH  b  x  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 .  26 
CF31  BBITS  b  x  Returns the number of data bits already stored in Builder b .  26 
CF32  BREFS  b  y  Returns the number of cell references already stored in b .  26 
CF33  BBITREFS  b  x y  Returns the numbers of both data bits and cell references in b .  26 
CF35  BREMBITS  b  x'  Returns the number of data bits that can still be stored in b .  26 
CF36  BREMREFS  b  y'  Returns the number of references that can still be stored in b .  26 
CF37  BREMBITREFS  b  x' y'  Returns the numbers of both data bits and references that can still be stored in b .  26 
CF38cc  [cc+1] BCHKBITS#  b   Checks whether cc+1 bits can be stored into b , where 0 <= cc <= 255 .  34/84 
CF39  BCHKBITS  b x   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.  26/76 
CF3A  BCHKREFS  b y   Checks whether y references can be stored into b , 0 <= y <= 7 .  26/76 
CF3B  BCHKBITREFS  b x y   Checks whether x bits and y references can be stored into b , 0 <= x <= 1023 , 0 <= y <= 7 .  26/76 
CF3Ccc  [cc+1] BCHKBITSQ#  b  ?  Checks whether cc+1 bits can be stored into b , where 0 <= cc <= 255 .  34 
CF3D  BCHKBITSQ  b x  ?  Checks whether x bits can be stored into b , 0 <= x <= 1023 .  26 
CF3E  BCHKREFSQ  b y  ?  Checks whether y references can be stored into b , 0 <= y <= 7 .  26 
CF3F  BCHKBITREFSQ  b x y  ?  Checks whether x bits and y references can be stored into b , 0 <= x <= 1023 , 0 <= y <= 7 .  26 
CF40  STZEROES  b n  b'  Stores n binary zeroes into Builder b .  26 
CF41  STONES  b n  b'  Stores n binary ones into Builder b .  26 
CF42  STSAME  b n x  b'  Stores n binary x es (0 <= x <= 1 ) into Builder b .  26 
CFC0_xysss  [slice] STSLICECONST  b  b'  Stores a constant subslice  24 
D0  CTOS  c  s  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.  118/43 
D1  ENDS  s   Removes a Slice s from the stack, and throws an exception if it is not empty.  18/68 
D2cc  [cc+1] LDI  s  x s'  Loads (i.e., parses) a signed cc+1 bit integer x from Slice s , and returns the remainder of s as s' .  26 
D3cc  [cc+1] LDU  s  x s'  Loads an unsigned cc+1 bit integer x from Slice s .  26 
D4  LDREF  s  c s'  Loads a cell reference c from s .  18 
D5  LDREFRTOS  s  s' s''  Equivalent to LDREF SWAP CTOS .  118/43 
D6cc  [cc+1] LDSLICE  s  s'' s'  Cuts the next cc+1 bits of s into a separate Slice s'' .  26 
D700  LDIX  s l  x s'  Loads a signed l bit (0 <= l <= 257 ) integer x from Slice s , and returns the remainder of s as s' .  26 
D701  LDUX  s l  x s'  Loads an unsigned l bit integer x from (the first l bits of) s , with 0 <= l <= 256 .  26 
D702  PLDIX  s l  x  Preloads a signed l bit integer from Slice s , for 0 <= l <= 257 .  26 
D703  PLDUX  s l  x  Preloads an unsigned l bit integer from s , for 0 <= l <= 256 .  26 
D704  LDIXQ  s l  x s' 1 or s 0  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.  26 
D705  LDUXQ  s l  x s' 1 or s 0  Quiet version of LDUX .  26 
D706  PLDIXQ  s l  x 1 or 0  Quiet version of PLDIX .  26 
D707  PLDUXQ  s l  x 1 or 0  Quiet version of PLDUX .  26 
D708cc  [cc+1] LDI_l  s  x s'  A longer encoding for LDI .  34 
D709cc  [cc+1] LDU_l  s  x s'  A longer encoding for LDU .  34 
D70Acc  [cc+1] PLDI  s  x  Preloads a signed cc+1 bit integer from Slice s .  34 
D70Bcc  [cc+1] PLDU  s  x  Preloads an unsigned cc+1 bit integer from s .  34 
D70Ccc  [cc+1] LDIQ  s  x s' 1 or s 0  A quiet version of LDI .  34 
D70Dcc  [cc+1] LDUQ  s  x s' 1 or s 0  A quiet version of LDU .  34 
D70Ecc  [cc+1] PLDIQ  s  x 1 or 0  A quiet version of PLDI .  34 
D70Fcc  [cc+1] PLDUQ  s  x 1 or 0  A quiet version of PLDU .  34 
D714_c  [32(c+1)] PLDUZ  s  s x  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.  26 
D718  LDSLICEX  s l  s'' s'  Loads the first 0 <= l <= 1023 bits from Slice s into a separate Slice s'' , returning the remainder of s as s' .  26 
D719  PLDSLICEX  s l  s''  Returns the first 0 <= l <= 1023 bits of s as s'' .  26 
D71A  LDSLICEXQ  s l  s'' s' 1 or s 0  A quiet version of LDSLICEX .  26 
D71B  PLDSLICEXQ  s l  s' 1 or 0  A quiet version of LDSLICEXQ .  26 
D71Ccc  [cc+1] LDSLICE_l  s  s'' s'  A longer encoding for LDSLICE .  34 
D71Dcc  [cc+1] PLDSLICE  s  s''  Returns the first 0 < cc+1 <= 256 bits of s as s'' .  34 
D71Ecc  [cc+1] LDSLICEQ  s  s'' s' 1 or s 0  A quiet version of LDSLICE .  34 
D71Fcc  [cc+1] PLDSLICEQ  s  s'' 1 or 0  A quiet version of PLDSLICE .  34 
D720  SDCUTFIRST  s l  s'  Returns the first 0 <= l <= 1023 bits of s . It is equivalent to PLDSLICEX .  26 
D721  SDSKIPFIRST  s l  s'  Returns all but the first 0 <= l <= 1023 bits of s . It is equivalent to LDSLICEX NIP .  26 
D722  SDCUTLAST  s l  s'  Returns the last 0 <= l <= 1023 bits of s .  26 
D723  SDSKIPLAST  s l  s'  Returns all but the last 0 <= l <= 1023 bits of s .  26 
D724  SDSUBSTR  s l l'  s'  Returns 0 <= l' <= 1023 bits of s starting from offset 0 <= l <= 1023 , thus extracting a bit substring out of the data of s .  26 
D726  SDBEGINSX  s s'  s''  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 .  26 
D727  SDBEGINSXQ  s s'  s'' 1 or s 0  A quiet version of SDBEGINSX .  26 
D72A_xsss  [slice] SDBEGINS  s  s''  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.  31 
D72E_xsss  [slice] SDBEGINSQ  s  s'' 1 or s 0  A quiet version of SDBEGINS .  31 
D730  SCUTFIRST  s l r  s'  Returns the first 0 <= l <= 1023 bits and first 0 <= r <= 4 references of s .  26 
D731  SSKIPFIRST  s l r  s'  Returns all but the first l bits of s and r references of s .  26 
D732  SCUTLAST  s l r  s'  Returns the last 0 <= l <= 1023 data bits and last 0 <= r <= 4 references of s .  26 
D733  SSKIPLAST  s l r  s'  Returns all but the last l bits of s and r references of s .  26 
D734  SUBSLICE  s l r l' r'  s'  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.  26 
D736  SPLIT  s l r  s' s''  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'' .  26 
D737  SPLITQ  s l r  s' s'' 1 or s 0  A quiet version of SPLIT .  26 
D739  XCTOS  c  s ?  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 . 

D73A  XLOAD  c  c'  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. 

D73B  XLOADQ  c  c' 1 or c 0  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. 

D741  SCHKBITS  s l   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.  26/76 
D742  SCHKREFS  s r   Checks whether there are at least r references in Slice s .  26/76 
D743  SCHKBITREFS  s l r   Checks whether there are at least l data bits and r references in Slice s .  26/76 
D745  SCHKBITSQ  s l  ?  Checks whether there are at least l data bits in Slice s .  26 
D746  SCHKREFSQ  s r  ?  Checks whether there are at least r references in Slice s .  26 
D747  SCHKBITREFSQ  s l r  ?  Checks whether there are at least l data bits and r references in Slice s .  26 
D748  PLDREFVAR  s n  c  Returns the n th cell reference of Slice s for 0 <= n <= 3 .  26 
D749  SBITS  s  l  Returns the number of data bits in Slice s .  26 
D74A  SREFS  s  r  Returns the number of references in Slice s .  26 
D74B  SBITREFS  s  l r  Returns both the number of data bits and the number of references in s .  26 
D74E_n  [n] PLDREFIDX  s  c  Returns the n th cell reference of Slice s , where 0 <= n <= 3 .  26 
D750  LDILE4  s  x s'  Loads a littleendian signed 32bit integer.  26 
D751  LDULE4  s  x s'  Loads a littleendian unsigned 32bit integer.  26 
D752  LDILE8  s  x s'  Loads a littleendian signed 64bit integer.  26 
D753  LDULE8  s  x s'  Loads a littleendian unsigned 64bit integer.  26 
D754  PLDILE4  s  x  Preloads a littleendian signed 32bit integer.  26 
D755  PLDULE4  s  x  Preloads a littleendian unsigned 32bit integer.  26 
D756  PLDILE8  s  x  Preloads a littleendian signed 64bit integer.  26 
D757  PLDULE8  s  x  Preloads a littleendian unsigned 64bit integer.  26 
D758  LDILE4Q  s  x s' 1 or s 0  Quietly loads a littleendian signed 32bit integer.  26 
D759  LDULE4Q  s  x s' 1 or s 0  Quietly loads a littleendian unsigned 32bit integer.  26 
D75A  LDILE8Q  s  x s' 1 or s 0  Quietly loads a littleendian signed 64bit integer.  26 
D75B  LDULE8Q  s  x s' 1 or s 0  Quietly loads a littleendian unsigned 64bit integer.  26 
D75C  PLDILE4Q  s  x 1 or 0  Quietly preloads a littleendian signed 32bit integer.  26 
D75D  PLDULE4Q  s  x 1 or 0  Quietly preloads a littleendian unsigned 32bit integer.  26 
D75E  PLDILE8Q  s  x 1 or 0  Quietly preloads a littleendian signed 64bit integer.  26 
D75F  PLDULE8Q  s  x 1 or 0  Quietly preloads a littleendian unsigned 64bit integer.  26 
D760  LDZEROES  s  n s'  Returns the count n of leading zero bits in s , and removes these bits from s .  26 
D761  LDONES  s  n s'  Returns the count n of leading one bits in s , and removes these bits from s .  26 
D762  LDSAME  s x  n s'  Returns the count n of leading bits equal to 0 <= x <= 1 in s , and removes these bits from s .  26 
D764  SDEPTH  s  x  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 .  26 
D765  CDEPTH  c  x  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.  26 
D766  CLEVEL  cell  level  Returns level of the cell.  26 
D767  CLEVELMASK  cell  level_mask  Returns level mask of the cell.  26 
D76A_  [i] CHASHI  cell  hash  Returns i th hash of the cell.  26 
D76E_  [i] CDEPTHI  cell  depth  Returns i th depth of the cell.  26 
D770  CHASHIX  cell i  hash  Returns i th hash of the cell.  26 
D771  CDEPTHIX  cell i  depth  Returns i th depth of the cell.  26 
Opcode  Fift syntax  Stack  Description  Gas 

D8  EXECUTE
CALLX  c   Calls, or executes, continuation c .  18 
D9  JMPX  c   Jumps, or transfers control, to continuation  18 
DApr  [p] [r] CALLXARGS  c   Calls continuation  26 
DB0p  [p] 1 CALLXARGS  c   Calls continuation c with 0 <= p <= 15 parameters, expecting an arbitrary number of return values.  26 
DB1p  [p] JMPXARGS  c   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).  26 
DB2r  [r] RETARGS 
 Returns to c0 , with 0 <= r <= 15 return values taken from the current stack.  26 
DB30  RET
RETTRUE 
 Returns to the continuation at  26 
DB31  RETALT
RETFALSE 
 Returns to the continuation at  26 
DB32  BRANCH
RETBOOL  f   Performs RETTRUE if integer f!=0 , or RETFALSE if f=0 .  26 
DB34  CALLCC  c   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 ).  26 
DB35  JMPXDATA  c   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 .  26 
DB36pr  [p] [r] CALLCCARGS  c   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 newlyinvoked continuation c , setting cc.nargs to 1 <= r <= 14 .  34 
DB38  CALLXVARARGS  c p r   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 .  26 
DB39  RETVARARGS  p r   Similar to RETARGS .  26 
DB3A  JMPXVARARGS  c p r   Similar to JMPXARGS .  26 
DB3B  CALLCCVARARGS  c p r   Similar to CALLCCARGS .  26 
DB3C  [ref] CALLREF 
 Equivalent to PUSHREFCONT CALLX .  126/51 
DB3D  [ref] JMPREF 
 Equivalent to PUSHREFCONT JMPX .  126/51 
DB3E  [ref] JMPREFDATA 
 Equivalent to PUSHREFCONT JMPXDATA .  126/51 
DB3F  RETDATA 
 Equivalent to c0 PUSHCTR JMPXDATA . In this way, the remainder of the current continuation is converted into a Slice and returned to the caller.  26 
DB4fff  flags RUNVM  x_1 ... x_n n code [r] [c4] [c7] [g_l] [g_m]  x'_1 ... x'_m exitcode [data'] [c4'] [c5] [g_c]  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. 

DB50  RUNVMX  x_1 ... x_n n code [r] [c4] [c7] [g_l] [g_m] flags  x'_1 ... x'_m exitcode [data'] [c4'] [c5] [g_c]  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. 

DC  IFRET
IFNOT:  f   Performs a RET , but only if integer f is nonzero. If f is a NaN , throws an integer overflow exception.  18 
DD  IFNOTRET
IF:  f   Performs a RET , but only if integer f is zero.  18 
DE  IF  f c   Performs EXECUTE for c (i.e., executes c ), but only if integer f is nonzero. Otherwise simply discards both values.  18 
DF  IFNOT  f c   Executes continuation c , but only if integer f is zero. Otherwise simply discards both values.  18 
E0  IFJMP  f c   Jumps to c (similarly to JMPX ), but only if f is nonzero.  18 
E1  IFNOTJMP  f c   Jumps to c (similarly to JMPX ), but only if f is zero.  18 
E2  IFELSE  f c c'   If integer f is nonzero, executes c , otherwise executes c' . Equivalent to CONDSELCHK EXECUTE .  18 
E300  [ref] IFREF  f   Equivalent to  26/126/51 
E301  [ref] IFNOTREF  f   Equivalent to PUSHREFCONT IFNOT .  26/126/51 
E302  [ref] IFJMPREF  f   Equivalent to PUSHREFCONT IFJMP .  26/126/51 
E303  [ref] IFNOTJMPREF  f   Equivalent to PUSHREFCONT IFNOTJMP .  26/126/51 
E304  CONDSEL  f x y  x or y  If integer f is nonzero, 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 .  26 
E305  CONDSELCHK  f x y  x or y  Same as CONDSEL , but first checks whether x and y have the same type.  26 
E308  IFRETALT  f   Performs RETALT if integer f!=0 .  26 
E309  IFNOTRETALT  f   Performs RETALT if integer f=0 .  26 
E30D  [ref] IFREFELSE  f c   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.  26/126/51 
E30E  [ref] IFELSEREF  f c   Equivalent to PUSHREFCONT IFELSE .  26/126/51 
E30F  [ref] [ref] IFREFELSEREF  f   Equivalent to PUSHREFCONT PUSHREFCONT IFELSE .  126/51 
E39_n  [n] IFBITJMP  x c  x  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.  26 
E3B_n  [n] IFNBITJMP  x c  x  Jumps to c if bit 0 <= n <= 31 is not set in integer x .  26 
E3D_n  [ref] [n] IFBITJMPREF  x  x  Performs a JMPREF if bit 0 <= n <= 31 is set in integer x .  126/51 
E3F_n  [ref] [n] IFNBITJMPREF  x  x  Performs a JMPREF if bit 0 <= n <= 31 is not set in integer x .  126/51 
E4  REPEAT  n c   Executes continuation  18 
E5  REPEATEND
REPEAT:  n   Similar to REPEAT , but it is applied to the current continuation cc .  18 
E6  UNTIL  c   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.  18 
E7  UNTILEND
UNTIL:    Similar to UNTIL , but executes the current continuation cc in a loop. When the loop exit condition is satisfied, performs a RET .  18 
E8  WHILE  c' c   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 nonzero, executes c , and then begins a new iteration.  18 
E9  WHILEEND  c'   Similar to WHILE , but uses the current continuation cc as the loop body.  18 
EA  AGAIN  c   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 ).  18 
EB  AGAINEND
AGAIN:    Similar to AGAIN , but performed with respect to the current continuation cc .  18 
E314  REPEATBRK  n c   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.  26 
E315  REPEATENDBRK  n   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 .  26 
E316  UNTILBRK  c   Similar to UNTIL , but also modifies c1 in the same way as REPEATBRK .  26 
E317  UNTILENDBRK
UNTILBRK:    Equivalent to SAMEALTSAVE UNTILEND .  26 
E318  WHILEBRK  c' c   Similar to WHILE , but also modifies c1 in the same way as REPEATBRK .  26 
E319  WHILEENDBRK  c   Equivalent to SAMEALTSAVE WHILEEND .  26 
E31A  AGAINBRK  c   Similar to AGAIN , but also modifies c1 in the same way as REPEATBRK .  26 
E31B  AGAINENDBRK
AGAINBRK:    Equivalent to SAMEALTSAVE AGAINEND .  26 
ECrn  [r] [n] SETCONTARGS  x_1 x_2...x_r c  c'  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.  26+s'' 
ED0p  [p] RETURNARGS    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.  26+s'' 
ED10  RETURNVARARGS  p   Similar to RETURNARGS , but with Integer 0 <= p <= 255 taken from the stack.  26+s'' 
ED11  SETCONTVARARGS  x_1 x_2...x_r c r n  c'  Similar to SETCONTARGS , but with 0 <= r <= 255 and 1 <= n <= 255 taken from the stack.  26+s'' 
ED12  SETNUMVARARGS  c n  c' 
 26 
ED1E  BLESS  s  c  Transforms a Slice s into a simple ordinary continuation c , with c.code=s and an empty stack and savelist.  26 
ED1F  BLESSVARARGS  x_1...x_r s r n  c  Equivalent to ROT BLESS ROTREV SETCONTVARARGS .  26+s'' 
EErn  [r] [n] BLESSARGS  x_1...x_r s  c 
 26 
ED4i  c[i] PUSHCTR
c[i] PUSH   x  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.  26 
ED5i  c[i] POPCTR
c[i] POP  x   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 typechecking exception may occur.  26 
ED6i  c[i] SETCONT
c[i] SETCONTCTR  x c  c'  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 .  26 
ED7i  c[i] SETRETCTR  x   Equivalent to c0 PUSHCTR c[i] SETCONTCTR c0 POPCTR .  26 
ED8i  c[i] SETALTCTR  x   Equivalent to c1 PUSHCTR c[i] SETCONTCTR c1 POPCTR .  26 
ED9i  c[i] POPSAVE
c[i] POPCTRSAVE  x   Similar to  26 
EDAi  c[i] SAVE
c[i] SAVECTR 
 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 .  26 
EDBi  c[i] SAVEALT
c[i] SAVEALTCTR 
 Similar to c[i] SAVE , but saves the current value of c[i] into the savelist of c1 , not c0 .  26 
EDCi  c[i] SAVEBOTH
c[i] SAVEBOTHCTR 
 Equivalent to c[i] SAVE c[i] SAVEALT .  26 
EDE0  PUSHCTRX  i  x  Similar to  26 
EDE1  POPCTRX  x i   Similar to c[i] POPCTR , but with 0 <= i <= 255 from the stack.  26 
EDE2  SETCONTCTRX  x c i  c'  Similar to c[i] SETCONTCTR , but with 0 <= i <= 255 from the stack.  26 
EDF0  COMPOS
BOOLAND  c c'  c''  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 .  26 
EDF1  COMPOSALT
BOOLOR  c c'  c''  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 .  26 
EDF2  COMPOSBOTH  c c'  c''  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 ''.  26 
EDF3  ATEXIT  c   Sets c0 to compose0(c, c0) . In other words, c will be executed before exiting current subroutine.  26 
EDF4  ATEXITALT  c   Sets c1 to compose1(c, c1) . In other words, c will be executed before exiting current subroutine by its alternative return path.  26 
EDF5  SETEXITALT  c   Sets  26 
EDF6  THENRET  c  c'  Computes compose0(c, c0) .  26 
EDF7  THENRETALT  c  c'  Computes compose0(c, c1)  26 
EDF8  INVERT    Interchanges c0 and c1 .  26 
EDF9  BOOLEVAL  c  ?  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.  26 
EDFA  SAMEALT    Sets c1 to c0 . Equivalent to c0 PUSHCTR c1 POPCTR .  26 
EDFB  SAMEALTSAVE    Sets  26 
F0nn  [nn] CALL
[nn] CALLDICT   nn  Calls the continuation in 

F12_n  [n] CALL
[n] CALLDICT   n  For 0 <= n < 2^14 , an encoding of [n] CALL for larger values of n . 

F16_n  [n] JMP   n  Jumps to the continuation in 

F1A_n  [n] PREPARE
[n] PREPAREDICT   n c  Equivalent to 

Opcode  Fift syntax  Stack  Description  Gas 

F22_n  [n] THROW   0 n  Throws exception  76 
F26_n  [n] THROWIF  f   Throws exception 0 <= n <= 63 with parameter zero only if integer f!=0 .  26/76 
F2A_n  [n] THROWIFNOT  f   Throws exception 0 <= n <= 63 with parameter zero only if integer f=0 .  26/76 
F2C4_n  [n] THROW   0 nn  For 0 <= n < 2^11 , an encoding of [n] THROW for larger values of n .  84 
F2CC_n  [n] THROWARG  x  x nn  Throws exception 0 <= n < 2^11 with parameter x , by copying x and n into the stack of c2 and transferring control to c2 .  84 
F2D4_n  [n] THROWIF  f   For 0 <= n < 2^11 , an encoding of [n] THROWIF for larger values of n .  34/84 
F2DC_n  [n] THROWARGIF  x f   Throws exception 0 <= nn < 2^11 with parameter x only if integer f!=0 .  34/84 
F2E4_n  [n] THROWIFNOT  f   For 0 <= n < 2^11 , an encoding of [n] THROWIFNOT for larger values of n .  34/84 
F2EC_n  [n] THROWARGIFNOT  x f   Throws exception 0 <= n < 2^11 with parameter x only if integer f=0 .  34/84 
F2F0  THROWANY  n  0 n  Throws exception  76 
F2F1  THROWARGANY  x n  x n  Throws exception  76 
F2F2  THROWANYIF  n f   Throws exception 0 <= n < 2^16 with parameter zero only if f!=0 .  26/76 
F2F3  THROWARGANYIF  x n f   Throws exception 0 <= n<2^16 with parameter x only if f!=0 .  26/76 
F2F4  THROWANYIFNOT  n f   Throws exception 0 <= n<2^16 with parameter zero only if f=0 .  26/76 
F2F5  THROWARGANYIFNOT  x n f   Throws exception 0 <= n<2^16 with parameter x only if f=0 .  26/76 
F2FF  TRY  c c'   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 rethrow the exception by THROWANY if it cannot handle it by itself.  26 
F3pr  [p] [r] TRYARGS  c c'   Similar to  26 
Opcode  Fift syntax  Stack  Description  Gas 

F400  STDICT
STOPTREF  D b  b'  Stores dictionary  26 
F401  SKIPDICT
SKIPOPTREF  s  s'  Equivalent to LDDICT NIP .  26 
F402  LDDICTS  s  s' s''  Loads (parses) a (Slicerepresented) dictionary  26 
F403  PLDDICTS  s  s'  Preloads a (Slicerepresented) dictionary  26 
F404  LDDICT
LDOPTREF  s  D s'  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.  26 
F405  PLDDICT
PLDOPTREF  s  D  Preloads a dictionary  26 
F406  LDDICTQ  s  D s' 1 or s 0  A quiet version of LDDICT .  26 
F407  PLDDICTQ  s  D 1 or 0  A quiet version of PLDDICT .  26 
F40A  DICTGET  k D n  x 1 or 0  Looks up key 

F40B  DICTGETREF  k D n  c 1 or 0  Similar to 

F40C  DICTIGET  i D n  x 1 or 0  Similar to DICTGET , but with a signed (bigendian) 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. 

F40D  DICTIGETREF  i D n  c 1 or 0  Combines DICTIGET with DICTGETREF : it uses signed n bit Integer i as a key and returns a Cell instead of a Slice on success. 

F40E  DICTUGET  i D n  x 1 or 0  Similar to DICTIGET , but with unsigned (bigendian) n bit Integer i used as a key. 

F40F  DICTUGETREF  i D n  c 1 or 0  Similar to DICTIGETREF , but with an unsigned n bit Integer key i . 

F412  DICTSET  x k D n  D'  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' . 

F413  DICTSETREF  c k D n  D'  Similar to DICTSET , but with the value set to a reference to Cell c . 

F414  DICTISET  x i D n  D'  Similar to DICTSET , but with the key represented by a (bigendian) signed n bit integer i . If i does not fit into n bits, a range check exception is generated. 

F415  DICTISETREF  c i D n  D'  Similar to DICTSETREF , but with the key a signed n bit integer as in DICTISET . 

F416  DICTUSET  x i D n  D'  Similar to DICTISET , but with i an unsigned n bit integer. 

F417  DICTUSETREF  c i D n  D'  Similar to DICTISETREF , but with i unsigned. 

F41A  DICTSETGET  x k D n  D' y 1 or D' 0  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. 

F41B  DICTSETGETREF  c k D n  D' c' 1 or D' 0  Combines DICTSETREF with DICTGETREF similarly to DICTSETGET . 

F41C  DICTISETGET  x i D n  D' y 1 or D' 0  DICTISETGET , but with i a signed n bit integer. 

F41D  DICTISETGETREF  c i D n  D' c' 1 or D' 0  DICTISETGETREF , but with i a signed n bit integer. 

F41E  DICTUSETGET  x i D n  D' y 1 or D' 0  DICTISETGET , but with i an unsigned n bit integer. 

F41F  DICTUSETGETREF  c i D n  D' c' 1 or D' 0  DICTISETGETREF , but with i an unsigned n bit integer. 

F422  DICTREPLACE  x k D n  D' 1 or D 0  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 . 

F423  DICTREPLACEREF  c k D n  D' 1 or D 0  A Replace counterpart of DICTSETREF . 

F424  DICTIREPLACE  x i D n  D' 1 or D 0  DICTREPLACE , but with i a signed n bit integer. 

F425  DICTIREPLACEREF  c i D n  D' 1 or D 0  DICTREPLACEREF , but with i a signed n bit integer. 

F426  DICTUREPLACE  x i D n  D' 1 or D 0  DICTREPLACE , but with i an unsigned n bit integer. 

F427  DICTUREPLACEREF  c i D n  D' 1 or D 0  DICTREPLACEREF , but with i an unsigned n bit integer. 

F42A  DICTREPLACEGET  x k D n  D' y 1 or D 0  A Replace counterpart of DICTSETGET : on success, also returns the old value associated with the key in question. 

F42B  DICTREPLACEGETREF  c k D n  D' c' 1 or D 0  A Replace counterpart of DICTSETGETREF . 

F42C  DICTIREPLACEGET  x i D n  D' y 1 or D 0  DICTREPLACEGET , but with i a signed n bit integer. 

F42D  DICTIREPLACEGETREF  c i D n  D' c' 1 or D 0  DICTREPLACEGETREF , but with i a signed n bit integer. 

F42E  DICTUREPLACEGET  x i D n  D' y 1 or D 0  DICTREPLACEGET , but with i an unsigned n bit integer. 

F42F  DICTUREPLACEGETREF  c i D n  D' c' 1 or D 0  DICTREPLACEGETREF , but with i an unsigned n bit integer. 

F432  DICTADD  x k D n  D' 1 or D 0  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 . 

F433  DICTADDREF  c k D n  D' 1 or D 0  An Add counterpart of DICTSETREF . 

F434  DICTIADD  x i D n  D' 1 or D 0  DICTADD , but with i a signed n bit integer. 

F435  DICTIADDREF  c i D n  D' 1 or D 0  DICTADDREF , but with i a signed n bit integer. 

F436  DICTUADD  x i D n  D' 1 or D 0  DICTADD , but with i an unsigned n bit integer. 

F437  DICTUADDREF  c i D n  D' 1 or D 0  DICTADDREF , but with i an unsigned n bit integer. 

F43A  DICTADDGET  x k D n  D' 1 or D y 0  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. 

F43B  DICTADDGETREF  c k D n  D' 1 or D c' 0  An Add counterpart of DICTSETGETREF . 

F43C  DICTIADDGET  x i D n  D' 1 or D y 0  DICTADDGET , but with i a signed n bit integer. 

F43D  DICTIADDGETREF  c i D n  D' 1 or D c' 0  DICTADDGETREF , but with i a signed n bit integer. 

F43E  DICTUADDGET  x i D n  D' 1 or D y 0  DICTADDGET , but with i an unsigned n bit integer. 

F43F  DICTUADDGETREF  c i D n  D' 1 or D c' 0  DICTADDGETREF , but with i an unsigned n bit integer. 

F441  DICTSETB  b k D n  D' 
 
F442  DICTISETB  b i D n  D' 
 
F443  DICTUSETB  b i D n  D' 
 
F445  DICTSETGETB  b k D n  D' y 1 or D' 0 
 
F446  DICTISETGETB  b i D n  D' y 1 or D' 0 
 
F447  DICTUSETGETB  b i D n  D' y 1 or D' 0 
 
F449  DICTREPLACEB  b k D n  D' 1 or D 0 
 
F44A  DICTIREPLACEB  b i D n  D' 1 or D 0 
 
F44B  DICTUREPLACEB  b i D n  D' 1 or D 0 
 
F44D  DICTREPLACEGETB  b k D n  D' y 1 or D 0 
 
F44E  DICTIREPLACEGETB  b i D n  D' y 1 or D 0 
 
F44F  DICTUREPLACEGETB  b i D n  D' y 1 or D 0 
 
F451  DICTADDB  b k D n  D' 1 or D 0 
 
F452  DICTIADDB  b i D n  D' 1 or D 0 
 
F453  DICTUADDB  b i D n  D' 1 or D 0 
 
F455  DICTADDGETB  b k D n  D' 1 or D y 0 
 
F456  DICTIADDGETB  b i D n  D' 1 or D y 0 
 
F457  DICTUADDGETB  b i D n  D' 1 or D y 0 
 
F459  DICTDEL  k D n  D' 1 or D 0  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 . 

F45A  DICTIDEL  i D n  D' ?  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''). 

F45B  DICTUDEL  i D n  D' ?  Similar to DICTIDEL , but with i an unsigned n bit integer. 

F462  DICTDELGET  k D n  D' x 1 or D 0  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 . 

F463  DICTDELGETREF  k D n  D' c 1 or D 0  Similar to DICTDELGET , but with LDREF ENDS applied to x on success, so that the value returned c is a Cell. 

F464  DICTIDELGET  i D n  D' x 1 or D 0  DICTDELGET , but with i a signed n bit integer. 

F465  DICTIDELGETREF  i D n  D' c 1 or D 0  DICTDELGETREF , but with i a signed n bit integer. 

F466  DICTUDELGET  i D n  D' x 1 or D 0  DICTDELGET , but with i an unsigned n bit integer. 

F467  DICTUDELGETREF  i D n  D' c 1 or D 0  DICTDELGETREF , but with i an unsigned n bit integer. 

F469  DICTGETOPTREF  k D n  c^?  A variant of DICTGETREF that returns Null instead of the value c^? if the key k is absent from dictionary D . 

F46A  DICTIGETOPTREF  i D n  c^?  DICTGETOPTREF , but with i a signed n bit integer. If the key i is out of range, also returns Null. 

F46B  DICTUGETOPTREF  i D n  c^?  DICTGETOPTREF , but with i an unsigned n bit integer. If the key i is out of range, also returns Null. 

F46D  DICTSETGETOPTREF  c^? k D n  D' ~c^?  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). 

F46E  DICTISETGETOPTREF  c^? i D n  D' ~c^?  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. 

F46F  DICTUSETGETOPTREF  c^? i D n  D' ~c^?  Similar to primitive DICTSETGETOPTREF , but using unsigned n bit Integer i as a key. 

F470  PFXDICTSET  x k D n  D' 1 or D 0 
 
F471  PFXDICTREPLACE  x k D n  D' 1 or D 0 
 
F472  PFXDICTADD  x k D n  D' 1 or D 0 
 
F473  PFXDICTDEL  k D n  D' 1 or D 0 
 
F474  DICTGETNEXT  k D n  x' k' 1 or 0  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). 

F475  DICTGETNEXTEQ  k D n  x' k' 1 or 0  Similar to DICTGETNEXT , but computes the minimal key k' that is lexicographically greater than or equal to k . 

F476  DICTGETPREV  k D n  x' k' 1 or 0  Similar to DICTGETNEXT , but computes the maximal key k' lexicographically smaller than k . 

F477  DICTGETPREVEQ  k D n  x' k' 1 or 0  Similar to DICTGETPREV , but computes the maximal key k' lexicographically smaller than or equal to k . 

F478  DICTIGETNEXT  i D n  x' i' 1 or 0  Similar to DICTGETNEXT , but interprets all keys in dictionary D as bigendian signed n bit integers, and computes the minimal key i' that is larger than Integer i (which does not necessarily fit into n bits). 

F479  DICTIGETNEXTEQ  i D n  x' i' 1 or 0  Similar to DICTGETNEXTEQ , but interprets keys as signed n bit integers. 

F47A  DICTIGETPREV  i D n  x' i' 1 or 0  Similar to DICTGETPREV , but interprets keys as signed n bit integers. 

F47B  DICTIGETPREVEQ  i D n  x' i' 1 or 0  Similar to DICTGETPREVEQ , but interprets keys as signed n bit integers. 

F47C  DICTUGETNEXT  i D n  x' i' 1 or 0  Similar to DICTGETNEXT , but interprets all keys in dictionary D as bigendian 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 nonnegative). 

F47D  DICTUGETNEXTEQ  i D n  x' i' 1 or 0  Similar to DICTGETNEXTEQ , but interprets keys as unsigned n bit integers. 

F47E  DICTUGETPREV  i D n  x' i' 1 or 0  Similar to DICTGETPREV , but interprets keys as unsigned n bit integers. 

F47F  DICTUGETPREVEQ  i D n  x' i' 1 or 0  Similar to DICTGETPREVEQ , but interprets keys a unsigned n bit integers. 

F482  DICTMIN  D n  x k 1 or 0  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 . 

F483  DICTMINREF  D n  c k 1 or 0  Similar to DICTMIN , but returns the only reference in the value as a Cell c . 

F484  DICTIMIN  D n  x i 1 or 0  Similar to DICTMIN , but computes the minimal key i under the assumption that all keys are bigendian signed n bit integers. Notice that the key and value returned may differ from those computed by DICTMIN and DICTUMIN . 

F485  DICTIMINREF  D n  c i 1 or 0  Similar to DICTIMIN , but returns the only reference in the value. 

F486  DICTUMIN  D n  x i 1 or 0  Similar to DICTMIN , but returns the key as an unsigned n bit Integer i . 

F487  DICTUMINREF  D n  c i 1 or 0  Similar to DICTUMIN , but returns the only reference in the value. 

F48A  DICTMAX  D n  x k 1 or 0  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 . 

F48B  DICTMAXREF  D n  c k 1 or 0  Similar to DICTMAX , but returns the only reference in the value. 

F48C  DICTIMAX  D n  x i 1 or 0  Similar to DICTMAX , but computes the maximal key i under the assumption that all keys are bigendian signed n bit integers. Notice that the key and value returned may differ from those computed by DICTMAX and DICTUMAX . 

F48D  DICTIMAXREF  D n  c i 1 or 0  Similar to DICTIMAX , but returns the only reference in the value. 

F48E  DICTUMAX  D n  x i 1 or 0  Similar to DICTMAX , but returns the key as an unsigned n bit Integer i . 

F48F  DICTUMAXREF  D n  c i 1 or 0  Similar to DICTUMAX , but returns the only reference in the value. 

F492  DICTREMMIN  D n  D' x k 1 or D 0  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' . 

F493  DICTREMMINREF  D n  D' c k 1 or D 0  Similar to DICTREMMIN , but returns the only reference in the value as a Cell c . 

F494  DICTIREMMIN  D n  D' x i 1 or D 0  Similar to DICTREMMIN , but computes the minimal key i under the assumption that all keys are bigendian signed n bit integers. Notice that the key and value returned may differ from those computed by DICTREMMIN and DICTUREMMIN . 

F495  DICTIREMMINREF  D n  D' c i 1 or D 0  Similar to DICTIREMMIN , but returns the only reference in the value. 

F496  DICTUREMMIN  D n  D' x i 1 or D 0  Similar to DICTREMMIN , but returns the key as an unsigned n bit Integer i . 

F497  DICTUREMMINREF  D n  D' c i 1 or D 0  Similar to DICTUREMMIN , but returns the only reference in the value. 

F49A  DICTREMMAX  D n  D' x k 1 or D 0  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' . 

F49B  DICTREMMAXREF  D n  D' c k 1 or D 0  Similar to DICTREMMAX , but returns the only reference in the value as a Cell c . 

F49C  DICTIREMMAX  D n  D' x i 1 or D 0  Similar to DICTREMMAX , but computes the minimal key i under the assumption that all keys are bigendian signed n bit integers. Notice that the key and value returned may differ from those computed by DICTREMMAX and DICTUREMMAX . 

F49D  DICTIREMMAXREF  D n  D' c i 1 or D 0  Similar to DICTIREMMAX , but returns the only reference in the value. 

F49E  DICTUREMMAX  D n  D' x i 1 or D 0  Similar to DICTREMMAX , but returns the key as an unsigned n bit Integer i . 

F49F  DICTUREMMAXREF  D n  D' c i 1 or D 0  Similar to DICTUREMMAX , but returns the only reference in the value. 

F4A0  DICTIGETJMP  i D n   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. 

F4A1  DICTUGETJMP  i D n   Similar to DICTIGETJMP , but performs DICTUGET instead of DICTIGET . 

F4A2  DICTIGETEXEC  i D n   Similar to DICTIGETJMP , but with EXECUTE instead of JMPX . 

F4A3  DICTUGETEXEC  i D n   Similar to DICTUGETJMP , but with EXECUTE instead of JMPX . 

F4A6_n  [ref] [n] DICTPUSHCONST   D n  Pushes a nonempty 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 nonempty dictionary itself (one 1 bit and a cell reference), and then the unsigned 10bit integer n (as if by a STU 10 instruction). An empty dictionary can be pushed by a NEWDICT primitive instead.  34 
F4A8  PFXDICTGETQ  s D n  s' x s'' 1 or s 0  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. 

F4A9  PFXDICTGET  s D n  s' x s''  Similar to PFXDICTGET , but throws a cell deserialization failure exception on failure. 

F4AA  PFXDICTGETJMP  s D n  s' s'' or s  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. 

F4AB  PFXDICTGETEXEC  s D n  s' s''  Similar to PFXDICTGETJMP , but EXEC utes the continuation found instead of jumping to it. On failure, throws a cell deserialization exception. 

F4AE_n  [ref] [n] PFXDICTCONSTGETJMP
[ref] [n] PFXDICTSWITCH  s  s' s'' or s  Combines [n] DICTPUSHCONST for 0 <= n <= 1023 with PFXDICTGETJMP . 

F4BC  DICTIGETJMPZ  i D n  i or nothing  A variant of DICTIGETJMP that returns index i on failure. 

F4BD  DICTUGETJMPZ  i D n  i or nothing  A variant of DICTUGETJMP that returns index i on failure. 

F4BE  DICTIGETEXECZ  i D n  i or nothing  A variant of DICTIGETEXEC that returns index i on failure. 

F4BF  DICTUGETEXECZ  i D n  i or nothing  A variant of DICTUGETEXEC that returns index i on failure. 

F4B1  SUBDICTGET  k l D n  D'  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' . 

F4B2  SUBDICTIGET  x l D n  D'  Variant of SUBDICTGET with the prefix represented by a signed bigendian l bit Integer x , where necessarily l <= 257 . 

F4B3  SUBDICTUGET  x l D n  D'  Variant of SUBDICTGET with the prefix represented by an unsigned bigendian l bit Integer x , where necessarily l <= 256 . 

F4B5  SUBDICTRPGET  k l D n  D'  Similar to SUBDICTGET , but removes the common prefix k from all keys of the new dictionary D' , which becomes of type HashmapE(nl,X) . 

F4B6  SUBDICTIRPGET  x l D n  D'  Variant of SUBDICTRPGET with the prefix represented by a signed bigendian l bit Integer x , where necessarily l <= 257 . 

F4B7  SUBDICTURPGET  x l D n  D'  Variant of SUBDICTRPGET with the prefix represented by an unsigned bigendian l bit Integer x , where necessarily l <= 256 . 

Opcode  Fift syntax  Stack  Description  Gas 

F800  ACCEPT    Sets current gas limit  26 
F801  SETGASLIMIT  g   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^631 is equivalent to ACCEPT .  26 
F807  GASCONSUMED   g_c  Returns gas consumed by VM so far (including this instruction).  26 
F80F  COMMIT    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.  26 
F810  RANDU256   x  Generates a new pseudorandom unsigned 256bit Integer x . The algorithm is as follows: if r is the old value of the random seed, considered as a 32byte array (by constructing the bigendian representation of an unsigned 256bit 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 .  26+c7+c1_1 
F811  RAND  y  z  Generates a new pseudorandom integer  26+c7+c1_1 
F814  SETRAND  x   Sets the random seed to unsigned 256bit Integer x .  26+c7+c1_1 
F815  ADDRAND
RANDOMIZE  x   Mixes unsigned 256bit Integer x into the random seed r by setting the random seed to Sha of the concatenation of two 32byte strings: the first with the bigendian representation of the old seed r , and the second with the bigendian representation of x .  26 
F82i  [i] GETPARAM   x  Returns the  26 
F830  CONFIGDICT   D 32  Returns the global configuration dictionary along with its key length (32).
Equivalent to  26 
F832  CONFIGPARAM  i  c 1 or 0  Returns the value of the global configuration parameter with integer index 

F833  CONFIGOPTPARAM  i  c^?  Returns the value of the global configuration parameter with integer index 

F83400  PREVMCBLOCKS   t  Retrives last_mc_blocks part of PrevBlocksInfo from c7 (parameter 13). 

F83401  PREVKEYBLOCK   t  Retrives prev_key_block part of PrevBlocksInfo from c7 (parameter 13). 

F835  GLOBALID   i  Retrieves global_id from 19 network config. 

F836  GETGASFEE  gas_used is_mc  price  Calculates gas fee 

F837  GETSTORAGEFEE  cells bits seconds is_mc  price  Calculates storage fees (only current StoragePrices entry is used). 

F838  GETFORWARDFEE  cells bits is_mc  price  Calculates forward fee. 

F839  GETPRECOMPILEDGAS   x  Returns gas usage for the current contract if it is precompiled, null otherwise. 

F83A  GETORIGINALFWDFEE  fwd_fee is_mc  orig_fwd_fee  Calculate fwd_fee * 2^16 / first_frac . Can be used to get the original fwd_fee of the message. 

F83B  GETGASFEESIMPLE  gas_used is_mc  price  Same as GETGASFEE , but without flat price (just (gas_used * price) / 2^16) . 

F83C  GETFORWARDFEESIMPLE  cells bits is_mc  price  Same as GETFORWARDFEE , but without lump price (just (bits*bit_price + cells*cell_price) / 2^16 ). 

F840  GETGLOBVAR  k  x  Returns the  26 
F85_k  [k] GETGLOB   x  Returns the  26 
F860  SETGLOBVAR  x k   Assigns  26+c7' 
F87_k  [k] SETGLOB  x   Assigns  26+c7' 
F900  HASHCU  c  x  Computes the representation hash of a Cell c and returns it as a 256bit unsigned integer x . Useful for signing and checking signatures of arbitrary entities represented by a tree of cells.  26 
F901  HASHSU  s  x  Computes the hash of a Slice s and returns it as a 256bit 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 .  526 
F902  SHA256U  s  x  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 256bit unsigned integer x .  26 
F90400  HASHEXT_SHA256  s_1 ... s_n n  h  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/33 gas per byte 
F90401  HASHEXT_SHA512  s_1 ... s_n n  h1 h2  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/16 gas per byte 
F90402  HASHEXT_BLAKE2B  s_1 ... s_n n  h1 h2  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/19 gas per byte 
F90403  HASHEXT_KECCAK256  s_1 ... s_n n  h  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/11 gas per byte 
F90404  HASHEXT_KECCAK512  s_1 ... s_n n  h1 h2  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/19 gas per byte 
F90500  HASHEXTR_SHA256  s_n ... s_1 n  h  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/33 gas per byte 
F90501  HASHEXTR_SHA512  s_n ... s_1 n  h1 h2  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/16 gas per byte 
F90502  HASHEXTR_BLAKE2B  s_n ... s_1 n  h1 h2  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/19 gas per byte 
F90503  HASHEXTR_KECCAK256  s_n ... s_1 n  h  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/11 gas per byte 
F90504  HASHEXTR_KECCAK512  s_n ... s_1 n  h1 h2  Calculates and returns hash of the concatenation of slices (or builders) s_1...s_n .  1/19 gas per byte 
F90600  HASHEXTA_SHA256  b s_1 ... s_n n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/33 gas per byte 
F90601  HASHEXTA_SHA512  b s_1 ... s_n n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/16 gas per byte 
F90602  HASHEXTA_BLAKE2B  b s_1 ... s_n n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/19 gas per byte 
F90603  HASHEXTA_KECCAK256  b s_1 ... s_n n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/11 gas per byte 
F90604  HASHEXTA_KECCAK512  b s_1 ... s_n n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/6 gas per byte 
F90700  HASHEXTAR_SHA256  b s_1 ... s_n n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/33 gas per byte 
F90701  HASHEXTAR_SHA512  b s_n ... s_1 n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/16 gas per byte 
F90702  HASHEXTAR_BLAKE2B  b s_n ... s_1 n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/19 gas per byte 
F90703  HASHEXTAR_KECCAK256  b s_n ... s_1 n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/11 gas per byte 
F90704  HASHEXTAR_KECCAK512  b s_n ... s_1 n  b'  Calculates hash of the concatenation of slices (or builders) s_1...s_n . Appends the resulting hash to a builder b .  1/6 gas per byte 
F910  CHKSIGNU  h s k  ?  Checks the Ed25519signature  26 
F911  CHKSIGNS  d s k  ?  Checks whether s is a valid Ed25519signature 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 256bit number that is actually signed.  26 
F912  ECRECOVER  hash v r s  0 or h x1 x2 1  Recovers public key from signature, identical to Bitcoin/Ethereum operations. Takes 32byte hash as uint256 hash ; 65byte signature as uint8 v and uint256 r , s . Returns 0 on failure, public key and 1 on success. 65byte public key is returned as uint8 h , uint256 x1 , x2 .  1526 
F914  P256_CHKSIGNU  h sig k  ?  Checks seck256r1signature sig of a number h (a 256bit 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 33byte slice (encoded according to Sec. 2.3.4 point 2 of SECG SEC 1). Signature sig is a 64byte slice (two 256bit unsigned integers r and s ).  3526 
F915  P256_CHKSIGNS  d sig k  ?  Checks seck256r1signature sig of data portion of slice d and public key k . Returns 1 on success, 0 on failure. Public key is a 33byte slice (encoded according to Sec. 2.3.4 point 2 of SECG SEC 1). Signature sig is a 64byte slice (two 256bit unsigned integers r and s ).  3526 
F920  RIST255_FROMHASH  h1 h2  x  Deterministically generates a valid point x from a 512bit hash (given as two 256bit integers).  626 
F921  RIST255_VALIDATE  x   Checks that integer x is a valid representation of some curve point. Throws range_chk on error.  226 
F922  RIST255_ADD  x y  x+y  Addition of two points on a curve.  626 
F923  RIST255_SUB  x y  xy  Subtraction of two points on curve.  626 
F924  RIST255_MUL  x n  x*n  Multiplies point x by a scalar n . Any n is valid, including negative.  2026 
F925  RIST255_MULBASE  n  g*n  Multiplies the generator point g by a scalar n . Any n is valid, including negative.  776 
F926  RIST255_PUSHL   l  Pushes integer l=2^252+27742317777372353535851937790883648493, which is the order of the group.  26 
B7F921  RIST255_QVALIDATE  x  0 or 1  Checks that integer x is a valid representation of some curve point. Returns 1 on success and 0 on failure.  234 
B7F922  RIST255_QADD  x y  0 or x+y 1  Addition of two points on a curve. Returns 1 on success and 0 on failure.  634 
B7F923  RIST255_QSUB  x y  0 or xy 1  Subtraction of two points on curve. Returns 1 on success and 0 on failure.  634 
B7F924  RIST255_QMUL  x n  0 or x*n 1  Multiplies point x by a scalar n . Any n is valid, including negative. Returns 1 on success and 0 on failure.  2034 
B7F925  RIST255_QMULBASE  n  0 or g*n 1  Multiplies the generator point g by a scalar n . Any n is valid, including negative.  784 
F93000  BLS_VERIFY  pk msg sgn  bool  Checks BLS signature, return true on success, false otherwise.  61034 
F93001  BLS_AGGREGATE  sig_1 ... sig_n n  sig  Aggregates signatures. n>0 . Throw exception if n=0 or if some sig_i is not a valid signature.  n*43502616 
F93002  BLS_FASTAGGREGATEVERIFY  pk_1 ... pk_n n msg sig  bool  Checks aggregated BLS signature for keys pk_1...pk_n and message msg . Return true on success, false otherwise. Return false if n=0 .  58034+n*3000 
F93003  BLS_AGGREGATEVERIFY  pk_1 msg_1 ... pk_n msg_n n sgn  bool  Checks aggregated BLS signature for keymessage pairs pk_1 msg_1...pk_n msg_n . Return true on success, false otherwise. Return false if n=0 .  38534+n*22500 
F93010  BLS_G1_ADD  x y  x+y  Addition on G1.  3934 
F93011  BLS_G1_SUB  x y  xy  Subtraction on G1.  3934 
F93012  BLS_G1_NEG  x  x  Negation on G1.  784 
F93013  BLS_G1_MUL  x s  x*s  Multiplies G1 point x by scalar s . Any s is valid, including negative.  5234 
F93014  BLS_G1_MULTIEXP  x_1 s_1 ... x_n s_n n  x_1*s_1+...+x_n*s_n  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.  11409+n*630+n/floor(max(log2(n),4))*8820 
F93015  BLS_G1_ZERO   zero  Pushes zero point in G1.  34 
F93016  BLS_MAP_TO_G1  f  x  Converts FP element f to a G1 point.  2384 
F93017  BLS_G1_INGROUP  x  bool  Checks that slice x represents a valid element of G1.  2984 
F93018  BLS_G1_ISZERO  x  bool  Checks that G1 point x is equal to zero.  34 
F93020  BLS_G2_ADD  x y  x+y  Addition on G2.  6134 
F93021  BLS_G2_SUB  x y  xy  Subtraction on G2.  6134 
F93022  BLS_G2_NEG  x  x  Negation on G2.  1584 
F93023  BLS_G2_MUL  x s  x*s  Multiplies G2 point x by scalar s . Any s is valid, including negative.  10584 
F93024  BLS_G2_MULTIEXP  x_1 s_1 ... x_n s_n n  x_1*s_1+...+x_n*s_n  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.  30422+n*1280+n/floor(max(log2(n),4))*22840 
F93025  BLS_G2_ZERO   zero  Pushes zero point in G2.  34 
F93026  BLS_MAP_TO_G2  f  x  Converts FP2 element f to a G2 point.  7984 
F93027  BLS_G2_INGROUP  x  bool  Checks that slice x represents a valid element of G2.  4284 
F93028  BLS_G2_ISZERO  x  bool  Checks that G2 point x is equal to zero.  34 
F93030  BLS_PAIRING  x_1 y_1 ... x_n y_n n  bool  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 .  20034+n*11800 
F93031  BLS_PUSHR   r  Pushes the order of G1 and G2 (approx. 2^255 ).  34 
F940  CDATASIZEQ  c n  x y z 1 or 0  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 depthfirst traversal of this dag, with a hash table of visited cell hashes used to prevent visits of alreadyvisited cells. The total count of visited cells x cannot exceed nonnegative 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 . 

F941  CDATASIZE  c n  x y z  A nonquiet version of CDATASIZEQ that throws a cell overflow exception (8) on failure. 

F942  SDATASIZEQ  s n  x y z 1 or 0  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 . 

F943  SDATASIZE  s n  x y z  A nonquiet version of SDATASIZEQ that throws a cell overflow exception (8) on failure. 

FA00  LDGRAMS
LDVARUINT16  s  x s'  Loads (deserializes) a  26 
FA01  LDVARINT16  s  x s'  Similar to  26 
FA02  STGRAMS
STVARUINT16  b x  b'  Stores (serializes) an Integer x in the range 0...2^1201 into Builder b , and returns the resulting Builder b' . The serialization of x consists of a 4bit unsigned bigendian integer l , which is the smallest integer l>=0 , such that x<2^(8l) , followed by an 8l bit unsigned bigendian representation of x . If x does not belong to the supported range, a range check exception is thrown.  26 
FA03  STVARINT16  b x  b'  Similar to STVARUINT16 , but serializes a signed Integer x in the range 2^119...2^1191 .  26 
FA04  LDVARUINT32  s  x s'  Loads (deserializes) a  26 
FA05  LDVARINT32  s  x s'  Similar to  26 
FA06  STVARUINT32  b x  b'  Stores (serializes) an Integer x in the range 0...2^2481 into Builder b , and returns the resulting Builder b' . The serialization of x consists of a 5bit unsigned bigendian integer l , which is the smallest integer l>=0 , such that x<2^(8l) , followed by an 8l bit unsigned bigendian representation of x . If x does not belong to the supported range, a range check exception is thrown.  26 
FA07  STVARINT32  b x  b'  Similar to STVARUINT32 , but serializes a signed Integer x in the range 2^247...2^2471 .  26 
FA40  LDMSGADDR  s  s' s''  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.  26 
FA41  LDMSGADDRQ  s  s' s'' 1 or s 0  A quiet version of LDMSGADDR : on success, pushes an extra 1 ; on failure, pushes the original s and a zero.  26 
FA42  PARSEMSGADDR  s  t  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.  26 
FA43  PARSEMSGADDRQ  s  t 1 or 0  A quiet version of PARSEMSGADDR : returns a zero on error instead of throwing an exception.  26 
FA44  REWRITESTDADDR  s  x y  Parses Slice s containing a valid MsgAddressInt (usually a msg_addr_std ), applies rewriting from the anycast (if present) to the samelength prefix of the address, and returns both the workchain x and the 256bit address y as integers. If the address is not 256bit, or if s is not a valid serialization of MsgAddressInt , throws a cell deserialization exception.  26 
FA45  REWRITESTDADDRQ  s  x y 1 or 0  A quiet version of primitive REWRITESTDADDR .  26 
FA46  REWRITEVARADDR  s  x s'  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 ).  26 
FA47  REWRITEVARADDRQ  s  x s' 1 or 0  A quiet version of primitive REWRITEVARADDR .  26 
FB00  SENDRAWMSG  c x   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 smartcontract 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 .  526 
FB02  RAWRESERVE  x y   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 bx 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 nonnegative integer, and y must be in the range 0...15 .  526 
FB03  RAWRESERVEX  x D y   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.  526 
FB04  SETCODE  c   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.  526 
FB06  SETLIBCODE  c x   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.  526 
FB07  CHANGELIB  h x   Creates an output action similarly to SETLIBCODE , but instead of the library code accepts its hash as an unsigned 256bit 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.  526 
FB08  SENDMSG  c x  fee  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).  526 
Opcode  Fift syntax  Stack  Description  Gas 

FEij  {i*16+j} DEBUG    26  
FEFnssss  {string} DEBUGSTR
{string} {x} DEBUGSTRI   
 26 
FFnn  [nn] SETCP    Selects TVM codepage 0 <= nn < 240 . If the codepage is not supported, throws an invalid opcode exception.  26 
FFFz  [z16] SETCP    Selects TVM codepage z16 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.  26 
FFF0  SETCPX  c   Selects codepage c with 2^15 <= c < 2^15 passed in the top of the stack.  26 
Opcode  Fift syntax  Stack  Description  Gas 

0i  SWAP  x y  y x  Same as s1 XCHG0 .  18 
2i  DUP  x  x x  Same as s0 PUSH .  18 
2i  OVER  x y  x y x  Same as s1 PUSH .  18 
3i  DROP  x   Same as s0 POP , discards the topofstack value.  18 
3i  NIP  x y  y  Same as s1 POP .  18 
55ij  ROT2
2ROT  a b c d e f  c d e f a b  Rotates the three topmost pairs of stack entries.  26 
55ij  [i+1] ROLL 
 Rotates the top  26 
55ij  [i+1] ROLL
[i+1] ROLLREV 
 Rotates the top  26 
6F0n  NIL   t  Pushes the only Tuple t=() of length zero.  26+n 
6F0n  SINGLE  x  t  Creates a singleton t:=(x) , i.e., a Tuple of length one.  26+n 
6F0n  PAIR
CONS  x y  t  Creates pair t:=(x,y) .  26+n 
6F0n  TRIPLE  x y z  t  Creates triple t:=(x,y,z) .  26+n 
6F1k  FIRST
CAR  t  x  Returns the first element of a Tuple.  26 
6F1k  SECOND
CDR  t  y  Returns the second element of a Tuple.  26 
6F1k  THIRD  t  z  Returns the third element of a Tuple.  26 
6F2n  UNSINGLE  t  x  Unpacks a singleton t=(x) .  26+n 
6F2n  UNPAIR
UNCONS  t  x y  Unpacks a pair t=(x,y) .  26+n 
6F2n  UNTRIPLE  t  x y z  Unpacks a triple t=(x,y,z) .  26+n 
6F3k  CHKTUPLE  t   Checks whether t is a Tuple. If not, throws a type check exception.  26+k 
6F5k  SETFIRST  t x  t'  Sets the first component of Tuple t to x and returns the resulting Tuple t' .  26+t 
6F5k  SETSECOND  t x  t'  Sets the second component of Tuple t to x and returns the resulting Tuple t' .  26+t 
6F5k  SETTHIRD  t x  t'  Sets the third component of Tuple t to x and returns the resulting Tuple t' .  26+t 
6F6k  FIRSTQ
CARQ  t  x  Returns the first element of a Tuple.  26 
6F6k  SECONDQ
CDRQ  t  y  Returns the second element of a Tuple.  26 
6F6k  THIRDQ  t  z  Returns the third element of a Tuple.  26 
6F7k  SETFIRSTQ  t x  t'  Sets the first component of Tuple t to x and returns the resulting Tuple t' .  26+t' 
6F7k  SETSECONDQ  t x  t'  Sets the second component of Tuple t to x and returns the resulting Tuple t' .  26+t' 
6F7k  SETTHIRDQ  t x  t'  Sets the third component of Tuple t to x and returns the resulting Tuple t' .  26+t' 
6FBij  CADR  t  x  Recovers x=(t_2)_1 .  26 
6FBij  CDDR  t  x  Recovers x=(t_2)_2 .  26 
6FE_ijk  CADDR  t  x  Recovers x=t_2_2_1 .  26 
6FE_ijk  CDDDR  t  x  Recovers x=t_2_2_2 .  26 
7i  ZERO
FALSE   0  18  
7i  ONE   1  18  
7i  TWO   2  18  
7i  TEN   10  18  
7i  TRUE   1  18  
B4cc  CHKBOOL  x  x  Checks whether x is a ''boolean value'' (i.e., either 0 or 1).  26/76 
B5cc  CHKBIT  x  x  Checks whether x is a binary digit (i.e., zero or one).  26/76 
C0yy  ISZERO  x  x=0  Checks whether an integer is zero. Corresponds to Forth's 0= .  26 
C1yy  ISNEG  x  x<0  Checks whether an integer is negative. Corresponds to Forth's 0< .  26 
C1yy  ISNPOS  x  x<=0  Checks whether an integer is nonpositive.  26 
C2yy  ISPOS  x  x>0  Checks whether an integer is positive. Corresponds to Forth's 0> .  26 
C2yy  ISNNEG  x  x >=0  Checks whether an integer is nonnegative.  26 
CFC0_xysss  STZERO  b  b'  Stores one binary zero.  24 
CFC0_xysss  STONE  b  b'  Stores one binary one.  24 
D74E_n  PLDREF  s  c  Preloads the first cell reference of a Slice.  26 
ECrn  [n] SETNUMARGS  c  c'  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 nonnegative value, does nothing.  26+s'' 
ECrn  [r] 1 SETCONTARGS  x_1 x_2...x_r c  c'  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.  26+s'' 
EErn  [n] BLESSNUMARGS  s  c  Also transforms a Slice s into a Continuation c , but sets c.nargs to 0 <= n <= 14 .  26 
ED4i  c4 PUSHCTR
c4 PUSH   x  Pushes the ''global data root'' cell reference, thus enabling access to persistent smartcontract data.  26 
ED5i  c4 POPCTR
c4 POP  x   Sets the ''global data root'' cell reference, thus allowing modification of persistent smartcontract data.  26 
6D  NEWDICT   D  Returns a new empty dictionary.
It is an alternative mnemonics for  18 
6E  DICTEMPTY  D  ?  Checks whether dictionary  18 
CE  STDICTS
 s b  b'  Stores a Slicerepresented dictionary  18 
F82i  NOW   x  Returns the current Unix time as an Integer. If it is impossible to recover the requested value starting from  26 
F82i  BLOCKLT   x  Returns the starting logical time of the current block.
Equivalent to  26 
F82i  LTIME   x  Returns the logical time of the current transaction.
Equivalent to  26 
F82i  RANDSEED   x  Returns the current random seed as an unsigned 256bit Integer.
Equivalent to  26 
F82i  BALANCE   t  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 32bit keys representing the balance of ''extra currencies'').
Equivalent to  26 
F82i  MYADDR   s  Returns the internal address of the current smart contract as a Slice with a  26 
F82i  CONFIGROOT   D  Returns the Maybe Cell D with the current global configuration dictionary. Equivalent to 9 GETPARAM .  26 
F82i  MYCODE   c  Retrieves code of smartcontract from c7. Equivalent to 10 GETPARAM .  26 
F82i  INCOMINGVALUE   t  Retrieves value of incoming message from c7. Equivalent to 11 GETPARAM .  26 
F82i  STORAGEFEES   i  Retrieves value of storage phase fees from c7. Equivalent to 12 GETPARAM .  26 
F82i  PREVBLOCKSINFOTUPLE   t  Retrives PrevBlocksInfo: [last_mc_blocks, prev_key_block] from c7. Equivalent to 13 GETPARAM .  26 
FEij  DUMPSTK    Dumps the stack (at most the top 255 values) and shows the total stack depth. Does nothing on production versions of TVM.  26 
FEij  STRDUMP    Dumps slice with length divisible by 8 from top of stack as a string. Does nothing on production versions of TVM.  26 
FEij  s[j] DUMP    Dumps slice with length divisible by 8 from top of stack as a string. Does nothing on production versions of TVM.  26 
FFnn  SETCP0    Selects TVM (test) codepage zero as described in this document.  26 