跳到主要内容

算术原语

操作码Fift 语法堆栈Gas描述
Please enter a search query
No results found

TVM 指令内容列表

算术原语

加法、减法、乘法

xxxxxxx
操作码
xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Fift 语法
xxxxxxxxxxxxxxxxx
堆栈
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
描述
xxxx
Gas
A0ADDx y - x+y18
A1SUBx y - x-y18
A2SUBRx y - y-x等同于 SWAP SUB18
A3NEGATEx - -x等同于 -1 MULCONSTZERO SUBR
注意,如果 x=-2^256 时会触发整数溢出异常。
18
A4INCx - x+1等同于 1 ADDCONST18
A5DECx - x-1等同于 -1 ADDCONST18
A6cc[cc] ADDCONST
[cc] ADDINT
[-cc] SUBCONST
[-cc] SUBINT
x - x+cc-128 <= cc <= 12726
A7cc[cc] MULCONST
[cc] MULINT
x - x*cc-128 <= cc <= 12726
A8MULx y - x*y18

除法

xxxxxxx
操作码
xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Fift 语法
xxxxxxxxxxxxxxxxx
堆栈
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
描述
xxxx
Gas
A9mscdf这是除法的通用编码,可选进行预乘和用移位替换除法或乘法。变量字段如下:
0 <= m <= 1 - 表示是否有预乘(MULDIV 及其变体),可能被左移替换。
0 <= s <= 2 - 表示乘法或除法中的哪一个被移位替换:s=0 - 无替换,s=1 - 除法被右移替换,s=2 - 乘法被左移替换(仅当 m=1 时可能)。
0 <= c <= 1 - 表示是否有移位操作符的一个字节常量参数 tt(如果 s!=0)。对于 s=0c=0。如果 c=1,则 0 <= tt <= 255,并且移位由 tt+1 位执行。如果 s!=0c=0,则移位量作为栈顶的 整数0...256 范围内提供。
1 <= d <= 3 - 表示需要哪些除法结果:1 - 仅商,2 - 仅余数,3 - 商和余数。
0 <= f <= 2 - 舍入模式:0 - 向下取整,1 - 最近整数,2 - 向上取整。
下列所有指令均为此变体。
26
A904DIVx y - qq=floor(x/y)r=x-y*q26
A905DIVRx y - q’q’=round(x/y)r’=x-y*q’26
A906DIVCx y - q''q’’=ceil(x/y)r’’=x-y*q’’26
A908MODx y - r26
A90CDIVMODx y - q r26
A90DDIVMODRx y - q' r'26
A90EDIVMODCx y - q'' r''26
A925RSHIFTRx y - round(x/2^y)26
A926RSHIFTCx y - ceil(x/2^y)34
A935tt[tt+1] RSHIFTR#x y - round(x/2^(tt+1))34
A936tt[tt+1] RSHIFTC#x y - ceil(x/2^(tt+1))34
A938tt[tt+1] MODPOW2#x - x mod 2^(tt+1)34
A98MULDIVx y z - qq=floor(x*y/z)26
A985MULDIVRx y z - q'q'=round(x*y/z)26
A98CMULDIVMODx y z - q rq=floor(x*y/z)r=x*y-z*q26
A9A4MULRSHIFTx y z - floor(x*y/2^z)0 <= z <= 25626
A9A5MULRSHIFTRx y z - round(x*y/2^z)0 <= z <= 25626
A9A6MULRSHIFTCx y z - ceil(x*y/2^z)0 <= z <= 25634
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))26
A9C4LSHIFTDIVx y z - floor(2^z*x/y)0 <= z <= 25626
A9C5LSHIFTDIVRx y z - round(2^z*x/y)0 <= z <= 25626
A9C6LSHIFTDIVCx y z - ceil(2^z*x/y)0 <= z <= 25634
A9D4tt[tt+1] LSHIFT#DIVx y - floor(2^(tt+1)*x/y)34
A9D5tt[tt+1] LSHIFT#DIVRx y - round(2^(tt+1)*x/y)34
A9D6tt[tt+1] LSHIFT#DIVCx y - ceil(2^(tt+1)*x/y)26

移位、逻辑操作

xxxxxxx
操作码
xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Fift 语法
xxxxxxxxxxxxxxxxx
堆栈
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
描述
xxxx
Gas
AAcc[cc+1] LSHIFT#x - x*2^(cc+1)0 <= cc <= 25526
ABcc[cc+1] RSHIFT#x - floor(x/2^(cc+1))0 <= cc <= 25518
ACLSHIFTx y - x*2^y0 <= y <= 102318
ADRSHIFTx y - floor(x/2^y)0 <= y <= 102318
AEPOW2y - 2^y0 <= y <= 1023
等同于 ONE SWAP LSHIFT
18
B0ANDx y - x&y对两个有符号整数 xy 进行按位与运算,符号扩展到无限。18
B1ORx y - x\|y对两个整数进行按位或运算。18
B2XORx y - x xor y对两个整数进行按位异或运算。18
B3NOTx - ~x一个整数的按位非运算。26
B4cc[cc+1] FITSx - x检查 x 是否为 cc+1 位有符号整数,对于 0 <= cc <= 255(即 -2^cc <= x < 2^cc)。
如果不是,要么触发整数溢出异常,要么用 NaN 替换 x(静默版本)。
26/76
B400CHKBOOLx - x检查 x 是否为“布尔值”(即 0 或 -1)。26/76
B5cc[cc+1] UFITSx - x检查 x 是否为 cc+1 位无符号整数,对于 0 <= cc <= 255(即 0 <= x < 2^(cc+1))。26/76
B500CHKBITx - x检查 x 是否为二进制数字(即零或一)。26/76
B600FITSXx c - x检查 x 是否为 c 位有符号整数,对于 0 <= c <= 102326/76
B601UFITSXx c - x检查 x 是否为 c 位无符号整数,对于 0 <= c <= 102326/76
B602BITSIZEx - c计算最小的 c >= 0 使得 x 适合于 c 位有符号整数(-2^(c-1) <= c < 2^(c-1))。26
B603UBITSIZEx - c计算最小的 c >= 0 使得 x 适合于 c 位无符号整数(0 <= x < 2^c),或抛出范围检查异常。26
B608MINx y - x or y计算两个整数 xy 的最小值。26
B609MAXx y - x or y计算两个整数 xy 的最大值。26
B60AMINMAX
INTSORT2
x y - x y or y x排序两个整数。如果任一参数为 NaNs,静默版本的此操作返回两个 NaNs。26
B60BABSx - \|x\|计算整数 x 的绝对值。26

静默算术原语

静默操作在其参数之一为 NaN 或在整数溢出的情况下返回 NaN,而不是抛出异常。 静默操作如下所示带有 Q 前缀。另一种使操作变为静默的方法是在其前添加 QUIET(即可以写 QUIET ADD 而不是 QADD)。 整数比较原语的静默版本也可用(QUIET SGNQUIET LESS 等)。

xxxxxxx
操作码
xxxxxxxxxxxxxxxxxxxxxxxxxxxx
Fift 语法
xxxxxxxxxxxxxxxxx
堆栈
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
描述
xxxx
Gas
B7A0QADDx y - x+y26
B7A1QSUBx y - x-y26
B7A2QSUBRx y - y-x26
B7A3QNEGATEx - -x26
B7A4QINCx - x+126
B7A5QDECx - x-126
B7A8QMULx y - x*y26
B7A904QDIVx y - q如果 y=0 则除法返回 NaN34
B7A905QDIVRx y - q’34
B7A906QDIVCx y - q''34
B7A908QMODx y - r34
B7A90CQDIVMODx y - q r34
B7A90DQDIVMODRx y - q' r'34
B7A90EQDIVMODCx y - q'' r''34
B7A985QMULDIVRx y z - q'34
B7A98CQMULDIVMODx y z - q r34
B7ACQLSHIFTx y - x*2^y26
B7ADQRSHIFTx y - floor(x/2^y)26
B7AEQPOW2y - 2^y26
B7B0QANDx y - x&y26
B7B1QORx y - x\|y26
B7B2QXORx y - x xor y26
B7B3QNOTx - ~x26
B7B4cc[cc+1] QFITSx - x如果 x 不是 cc+1 位有符号整数,则用 NaN 替换 x,否则保持不变。34
B7B5cc[cc+1] QUFITSx - x如果 x 不是 cc+1 位无符号整数,则用 NaN 替换 x,否则保持不变。34
B7B600QFITSXx c - x如果 x 不是 c 位有符号整数,则用 NaN 替换 x,否则保持不变。34
B7B601QUFITSXx c - x如果 x 不是 c 位无符号整数,则用 NaN 替换 x,否则保持不变。34

TVM 指令内容列表