mirror of https://github.com/status-im/op-geth.git
55 lines
924 B
Go
55 lines
924 B
Go
|
package ar
|
||
|
|
||
|
import "math/big"
|
||
|
|
||
|
const lenops int64 = 9
|
||
|
|
||
|
type OpsFunc func(a, b *big.Int) *big.Int
|
||
|
|
||
|
var ops [lenops]OpsFunc
|
||
|
|
||
|
func init() {
|
||
|
ops[0] = Add
|
||
|
ops[1] = Mul
|
||
|
ops[2] = Mod
|
||
|
ops[3] = Xor
|
||
|
ops[4] = And
|
||
|
ops[5] = Or
|
||
|
ops[6] = Sub1
|
||
|
ops[7] = XorSub
|
||
|
ops[8] = Rsh
|
||
|
}
|
||
|
|
||
|
func Add(x, y *big.Int) *big.Int {
|
||
|
return new(big.Int).Add(x, y)
|
||
|
}
|
||
|
func Mul(x, y *big.Int) *big.Int {
|
||
|
return new(big.Int).Mul(x, y)
|
||
|
}
|
||
|
func Mod(x, y *big.Int) *big.Int {
|
||
|
return new(big.Int).Mod(x, y)
|
||
|
}
|
||
|
func Xor(x, y *big.Int) *big.Int {
|
||
|
return new(big.Int).Xor(x, y)
|
||
|
}
|
||
|
func And(x, y *big.Int) *big.Int {
|
||
|
return new(big.Int).And(x, y)
|
||
|
}
|
||
|
func Or(x, y *big.Int) *big.Int {
|
||
|
return new(big.Int).Or(x, y)
|
||
|
}
|
||
|
func Sub1(x, y *big.Int) *big.Int {
|
||
|
a := big.NewInt(-1)
|
||
|
a.Sub(a, x)
|
||
|
|
||
|
return a
|
||
|
}
|
||
|
func XorSub(x, y *big.Int) *big.Int {
|
||
|
t := Sub1(x, nil)
|
||
|
|
||
|
return t.Xor(t, y)
|
||
|
}
|
||
|
func Rsh(x, y *big.Int) *big.Int {
|
||
|
return new(big.Int).Rsh(x, uint(y.Uint64()%64))
|
||
|
}
|