mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-18 19:00:46 +00:00
core/vm: splice stack helper bodies into the generated switch
This commit is contained in:
parent
12eb1f1e02
commit
c52874d654
2 changed files with 301 additions and 108 deletions
|
|
@ -196,7 +196,36 @@ func (g *generator) inlineBody(handler string) string {
|
|||
}
|
||||
out.WriteString(line + "\n")
|
||||
}
|
||||
return out.String()
|
||||
return expandStackHelpers(out.String())
|
||||
}
|
||||
|
||||
// The compiler shrinks its inlining budget into very large functions, and
|
||||
// execUntraced is far past the size threshold. The cheap stack helpers
|
||||
// (pop1, len, peek, drop, back) still inline there, but get and the
|
||||
// pop1Peek1 family turn into real calls, which a snailtracer profile put at
|
||||
// over a tenth of the run. The generator splices those helper bodies in
|
||||
// textually wherever they appear in statement position, verbatim from
|
||||
// stack.go.
|
||||
var (
|
||||
pop1Peek1Re = regexp.MustCompile(`(?m)^(\s*)(\w+), (\w+) := scope\.Stack\.pop1Peek1\(\)$`)
|
||||
pop2Peek1Re = regexp.MustCompile(`(?m)^(\s*)(\w+), (\w+), (\w+) := scope\.Stack\.pop2Peek1\(\)$`)
|
||||
pop2Re = regexp.MustCompile(`(?m)^(\s*)(\w+), (\w+) := scope\.Stack\.pop2\(\)$`)
|
||||
getAssignRe = regexp.MustCompile(`(?m)^(\s*)(\w+) := scope\.Stack\.get\(\)$`)
|
||||
getCallRe = regexp.MustCompile(`(?m)^(\s*)scope\.Stack\.get\(\)\.(\w+)\((.*)\)$`)
|
||||
)
|
||||
|
||||
func expandStackHelpers(src string) string {
|
||||
src = pop1Peek1Re.ReplaceAllString(src,
|
||||
"${1}stack.inner.top--\n${1}stack.size--\n${1}$2 := &stack.inner.data[stack.inner.top]\n${1}$3 := &stack.inner.data[stack.inner.top-1]")
|
||||
src = pop2Peek1Re.ReplaceAllString(src,
|
||||
"${1}stack.inner.top -= 2\n${1}stack.size -= 2\n${1}$2 := &stack.inner.data[stack.inner.top+1]\n${1}$3 := &stack.inner.data[stack.inner.top]\n${1}$4 := &stack.inner.data[stack.inner.top-1]")
|
||||
src = pop2Re.ReplaceAllString(src,
|
||||
"${1}stack.inner.top -= 2\n${1}stack.size -= 2\n${1}$2 := &stack.inner.data[stack.inner.top+1]\n${1}$3 := &stack.inner.data[stack.inner.top]")
|
||||
src = getAssignRe.ReplaceAllString(src,
|
||||
"${1}$2 := &stack.inner.data[stack.inner.top]\n${1}stack.inner.top++\n${1}stack.size++")
|
||||
src = getCallRe.ReplaceAllString(src,
|
||||
"${1}stack.inner.data[stack.inner.top].$2($3)\n${1}stack.inner.top++\n${1}stack.size++")
|
||||
return src
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
|
@ -322,12 +351,21 @@ func (g *generator) emitWork(code byte) {
|
|||
switch {
|
||||
case code >= 0x62 && code <= 0x7f: // PUSH3-PUSH32: inline makePush(n,n)
|
||||
g.emitPushFixed(int(code) - 0x5f)
|
||||
case code >= 0x80 && code <= 0x8f: // DUP1-DUP16: inline makeDup(n)
|
||||
case code >= 0x80 && code <= 0x8f: // DUP1-DUP16: the dup body, emitted raw
|
||||
g.p(`
|
||||
scope.Stack.dup(%d)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-%d]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
`, int(code)-0x7f)
|
||||
case code >= 0x90 && code <= 0x9f: // SWAP1-SWAP16: the swap body, emitted raw
|
||||
n := int(code) - 0x8f
|
||||
g.p(`
|
||||
stack.inner.data[stack.bottom+stack.size-%d], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-%d]
|
||||
pc++
|
||||
continue mainLoop
|
||||
`, n+1, n+1)
|
||||
default:
|
||||
g.p("%s", g.inlineBody(inlineHandler[code]))
|
||||
}
|
||||
|
|
@ -339,7 +377,9 @@ func (g *generator) emitPushFixed(n int) {
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+%d)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := %d - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
|
|||
|
|
@ -50,7 +50,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
x, y := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
x := &stack.inner.data[stack.inner.top]
|
||||
y := &stack.inner.data[stack.inner.top-1]
|
||||
y.Add(x, y)
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
|
@ -63,7 +66,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 5
|
||||
x, y := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
x := &stack.inner.data[stack.inner.top]
|
||||
y := &stack.inner.data[stack.inner.top-1]
|
||||
y.Mul(x, y)
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
|
@ -76,7 +82,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
x, y := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
x := &stack.inner.data[stack.inner.top]
|
||||
y := &stack.inner.data[stack.inner.top-1]
|
||||
y.Sub(x, y)
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
|
@ -89,7 +98,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 5
|
||||
x, y := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
x := &stack.inner.data[stack.inner.top]
|
||||
y := &stack.inner.data[stack.inner.top-1]
|
||||
y.Div(x, y)
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
|
@ -102,7 +114,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 5
|
||||
x, y := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
x := &stack.inner.data[stack.inner.top]
|
||||
y := &stack.inner.data[stack.inner.top-1]
|
||||
y.SDiv(x, y)
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
|
@ -115,7 +130,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 5
|
||||
x, y := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
x := &stack.inner.data[stack.inner.top]
|
||||
y := &stack.inner.data[stack.inner.top-1]
|
||||
y.Mod(x, y)
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
|
@ -128,7 +146,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 5
|
||||
x, y := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
x := &stack.inner.data[stack.inner.top]
|
||||
y := &stack.inner.data[stack.inner.top-1]
|
||||
y.SMod(x, y)
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
|
@ -141,7 +162,11 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 8
|
||||
x, y, z := scope.Stack.pop2Peek1()
|
||||
stack.inner.top -= 2
|
||||
stack.size -= 2
|
||||
x := &stack.inner.data[stack.inner.top+1]
|
||||
y := &stack.inner.data[stack.inner.top]
|
||||
z := &stack.inner.data[stack.inner.top-1]
|
||||
z.AddMod(x, y, z)
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
|
@ -154,7 +179,11 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 8
|
||||
x, y, z := scope.Stack.pop2Peek1()
|
||||
stack.inner.top -= 2
|
||||
stack.size -= 2
|
||||
x := &stack.inner.data[stack.inner.top+1]
|
||||
y := &stack.inner.data[stack.inner.top]
|
||||
z := &stack.inner.data[stack.inner.top-1]
|
||||
z.MulMod(x, y, z)
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
|
@ -167,7 +196,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 5
|
||||
back, num := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
back := &stack.inner.data[stack.inner.top]
|
||||
num := &stack.inner.data[stack.inner.top-1]
|
||||
num.ExtendSign(num, back)
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
|
@ -180,7 +212,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
x, y := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
x := &stack.inner.data[stack.inner.top]
|
||||
y := &stack.inner.data[stack.inner.top-1]
|
||||
if x.Lt(y) {
|
||||
y.SetOne()
|
||||
} else {
|
||||
|
|
@ -197,7 +232,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
x, y := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
x := &stack.inner.data[stack.inner.top]
|
||||
y := &stack.inner.data[stack.inner.top-1]
|
||||
if x.Gt(y) {
|
||||
y.SetOne()
|
||||
} else {
|
||||
|
|
@ -214,7 +252,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
x, y := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
x := &stack.inner.data[stack.inner.top]
|
||||
y := &stack.inner.data[stack.inner.top-1]
|
||||
if x.Slt(y) {
|
||||
y.SetOne()
|
||||
} else {
|
||||
|
|
@ -231,7 +272,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
x, y := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
x := &stack.inner.data[stack.inner.top]
|
||||
y := &stack.inner.data[stack.inner.top-1]
|
||||
if x.Sgt(y) {
|
||||
y.SetOne()
|
||||
} else {
|
||||
|
|
@ -248,7 +292,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
x, y := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
x := &stack.inner.data[stack.inner.top]
|
||||
y := &stack.inner.data[stack.inner.top-1]
|
||||
if x.Eq(y) {
|
||||
y.SetOne()
|
||||
} else {
|
||||
|
|
@ -282,7 +329,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
x, y := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
x := &stack.inner.data[stack.inner.top]
|
||||
y := &stack.inner.data[stack.inner.top-1]
|
||||
y.And(x, y)
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
|
@ -295,7 +345,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
x, y := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
x := &stack.inner.data[stack.inner.top]
|
||||
y := &stack.inner.data[stack.inner.top-1]
|
||||
y.Or(x, y)
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
|
@ -308,7 +361,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
x, y := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
x := &stack.inner.data[stack.inner.top]
|
||||
y := &stack.inner.data[stack.inner.top-1]
|
||||
y.Xor(x, y)
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
|
@ -334,7 +390,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
th, val := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
th := &stack.inner.data[stack.inner.top]
|
||||
val := &stack.inner.data[stack.inner.top-1]
|
||||
val.Byte(th)
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
|
@ -348,7 +407,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
shift, value := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
shift := &stack.inner.data[stack.inner.top]
|
||||
value := &stack.inner.data[stack.inner.top-1]
|
||||
if shift.LtUint64(256) {
|
||||
value.Lsh(value, uint(shift.Uint64()))
|
||||
} else {
|
||||
|
|
@ -369,7 +431,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
shift, value := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
shift := &stack.inner.data[stack.inner.top]
|
||||
value := &stack.inner.data[stack.inner.top-1]
|
||||
if shift.LtUint64(256) {
|
||||
value.Rsh(value, uint(shift.Uint64()))
|
||||
} else {
|
||||
|
|
@ -390,7 +455,10 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
shift, value := scope.Stack.pop1Peek1()
|
||||
stack.inner.top--
|
||||
stack.size--
|
||||
shift := &stack.inner.data[stack.inner.top]
|
||||
value := &stack.inner.data[stack.inner.top-1]
|
||||
if shift.GtUint64(256) {
|
||||
if value.Sign() >= 0 {
|
||||
value.Clear()
|
||||
|
|
@ -615,7 +683,10 @@ mainLoop:
|
|||
res, err = nil, errStopToken
|
||||
break mainLoop
|
||||
}
|
||||
pos, cond := scope.Stack.pop2()
|
||||
stack.inner.top -= 2
|
||||
stack.size -= 2
|
||||
pos := &stack.inner.data[stack.inner.top+1]
|
||||
cond := &stack.inner.data[stack.inner.top]
|
||||
if !cond.IsZero() {
|
||||
if !scope.Contract.validJumpdest(pos) {
|
||||
res, err = nil, ErrInvalidJump
|
||||
|
|
@ -634,7 +705,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 2
|
||||
scope.Stack.get().SetUint64(pc)
|
||||
stack.inner.data[stack.inner.top].SetUint64(pc)
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
|
|
@ -646,7 +719,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 2
|
||||
scope.Stack.get().SetUint64(uint64(scope.Memory.Len()))
|
||||
stack.inner.data[stack.inner.top].SetUint64(uint64(scope.Memory.Len()))
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
|
|
@ -667,7 +742,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 2
|
||||
scope.Stack.get().Clear()
|
||||
stack.inner.data[stack.inner.top].Clear()
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
|
|
@ -753,7 +830,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+3)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 3 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -780,7 +859,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+4)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 4 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -807,7 +888,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+5)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 5 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -834,7 +917,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+6)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 6 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -861,7 +946,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+7)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 7 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -888,7 +975,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+8)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 8 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -915,7 +1004,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+9)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 9 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -942,7 +1033,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+10)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 10 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -969,7 +1062,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+11)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 11 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -996,7 +1091,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+12)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 12 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1023,7 +1120,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+13)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 13 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1050,7 +1149,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+14)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 14 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1077,7 +1178,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+15)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 15 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1104,7 +1207,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+16)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 16 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1131,7 +1236,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+17)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 17 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1158,7 +1265,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+18)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 18 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1185,7 +1294,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+19)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 19 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1212,7 +1323,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+20)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 20 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1239,7 +1352,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+21)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 21 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1266,7 +1381,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+22)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 22 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1293,7 +1410,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+23)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 23 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1320,7 +1439,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+24)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 24 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1347,7 +1468,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+25)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 25 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1374,7 +1497,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+26)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 26 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1401,7 +1526,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+27)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 27 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1428,7 +1555,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+28)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 28 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1455,7 +1584,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+29)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 29 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1482,7 +1613,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+30)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 30 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1509,7 +1642,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+31)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 31 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1536,7 +1671,9 @@ mainLoop:
|
|||
codeLen := len(scope.Contract.Code)
|
||||
start := min(codeLen, int(pc+1))
|
||||
end := min(codeLen, start+32)
|
||||
a := scope.Stack.get()
|
||||
a := &stack.inner.data[stack.inner.top]
|
||||
stack.inner.top++
|
||||
stack.size++
|
||||
a.SetBytes(scope.Contract.Code[start:end])
|
||||
if missing := 32 - (end - start); missing > 0 {
|
||||
a.Lsh(a, uint(8*missing))
|
||||
|
|
@ -1554,7 +1691,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.dup(1)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-1]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
case DUP2:
|
||||
|
|
@ -1567,7 +1706,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.dup(2)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-2]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
case DUP3:
|
||||
|
|
@ -1580,7 +1721,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.dup(3)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-3]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
case DUP4:
|
||||
|
|
@ -1593,7 +1736,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.dup(4)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-4]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
case DUP5:
|
||||
|
|
@ -1606,7 +1751,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.dup(5)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-5]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
case DUP6:
|
||||
|
|
@ -1619,7 +1766,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.dup(6)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-6]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
case DUP7:
|
||||
|
|
@ -1632,7 +1781,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.dup(7)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-7]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
case DUP8:
|
||||
|
|
@ -1645,7 +1796,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.dup(8)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-8]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
case DUP9:
|
||||
|
|
@ -1658,7 +1811,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.dup(9)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-9]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
case DUP10:
|
||||
|
|
@ -1671,7 +1826,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.dup(10)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-10]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
case DUP11:
|
||||
|
|
@ -1684,7 +1841,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.dup(11)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-11]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
case DUP12:
|
||||
|
|
@ -1697,7 +1856,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.dup(12)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-12]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
case DUP13:
|
||||
|
|
@ -1710,7 +1871,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.dup(13)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-13]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
case DUP14:
|
||||
|
|
@ -1723,7 +1886,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.dup(14)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-14]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
case DUP15:
|
||||
|
|
@ -1736,7 +1901,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.dup(15)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-15]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
case DUP16:
|
||||
|
|
@ -1749,7 +1916,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.dup(16)
|
||||
stack.inner.data[stack.bottom+stack.size] = stack.inner.data[stack.bottom+stack.size-16]
|
||||
stack.size++
|
||||
stack.inner.top++
|
||||
pc++
|
||||
continue mainLoop
|
||||
case SWAP1:
|
||||
|
|
@ -1760,10 +1929,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.swap1()
|
||||
stack.inner.data[stack.bottom+stack.size-2], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-2]
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
case SWAP2:
|
||||
if sLen := stack.len(); sLen < 3 {
|
||||
return nil, &ErrStackUnderflow{stackLen: sLen, required: 3}
|
||||
|
|
@ -1772,10 +1940,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.swap2()
|
||||
stack.inner.data[stack.bottom+stack.size-3], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-3]
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
case SWAP3:
|
||||
if sLen := stack.len(); sLen < 4 {
|
||||
return nil, &ErrStackUnderflow{stackLen: sLen, required: 4}
|
||||
|
|
@ -1784,10 +1951,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.swap3()
|
||||
stack.inner.data[stack.bottom+stack.size-4], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-4]
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
case SWAP4:
|
||||
if sLen := stack.len(); sLen < 5 {
|
||||
return nil, &ErrStackUnderflow{stackLen: sLen, required: 5}
|
||||
|
|
@ -1796,10 +1962,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.swap4()
|
||||
stack.inner.data[stack.bottom+stack.size-5], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-5]
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
case SWAP5:
|
||||
if sLen := stack.len(); sLen < 6 {
|
||||
return nil, &ErrStackUnderflow{stackLen: sLen, required: 6}
|
||||
|
|
@ -1808,10 +1973,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.swap5()
|
||||
stack.inner.data[stack.bottom+stack.size-6], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-6]
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
case SWAP6:
|
||||
if sLen := stack.len(); sLen < 7 {
|
||||
return nil, &ErrStackUnderflow{stackLen: sLen, required: 7}
|
||||
|
|
@ -1820,10 +1984,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.swap6()
|
||||
stack.inner.data[stack.bottom+stack.size-7], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-7]
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
case SWAP7:
|
||||
if sLen := stack.len(); sLen < 8 {
|
||||
return nil, &ErrStackUnderflow{stackLen: sLen, required: 8}
|
||||
|
|
@ -1832,10 +1995,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.swap7()
|
||||
stack.inner.data[stack.bottom+stack.size-8], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-8]
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
case SWAP8:
|
||||
if sLen := stack.len(); sLen < 9 {
|
||||
return nil, &ErrStackUnderflow{stackLen: sLen, required: 9}
|
||||
|
|
@ -1844,10 +2006,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.swap8()
|
||||
stack.inner.data[stack.bottom+stack.size-9], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-9]
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
case SWAP9:
|
||||
if sLen := stack.len(); sLen < 10 {
|
||||
return nil, &ErrStackUnderflow{stackLen: sLen, required: 10}
|
||||
|
|
@ -1856,10 +2017,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.swap9()
|
||||
stack.inner.data[stack.bottom+stack.size-10], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-10]
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
case SWAP10:
|
||||
if sLen := stack.len(); sLen < 11 {
|
||||
return nil, &ErrStackUnderflow{stackLen: sLen, required: 11}
|
||||
|
|
@ -1868,10 +2028,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.swap10()
|
||||
stack.inner.data[stack.bottom+stack.size-11], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-11]
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
case SWAP11:
|
||||
if sLen := stack.len(); sLen < 12 {
|
||||
return nil, &ErrStackUnderflow{stackLen: sLen, required: 12}
|
||||
|
|
@ -1880,10 +2039,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.swap11()
|
||||
stack.inner.data[stack.bottom+stack.size-12], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-12]
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
case SWAP12:
|
||||
if sLen := stack.len(); sLen < 13 {
|
||||
return nil, &ErrStackUnderflow{stackLen: sLen, required: 13}
|
||||
|
|
@ -1892,10 +2050,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.swap12()
|
||||
stack.inner.data[stack.bottom+stack.size-13], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-13]
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
case SWAP13:
|
||||
if sLen := stack.len(); sLen < 14 {
|
||||
return nil, &ErrStackUnderflow{stackLen: sLen, required: 14}
|
||||
|
|
@ -1904,10 +2061,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.swap13()
|
||||
stack.inner.data[stack.bottom+stack.size-14], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-14]
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
case SWAP14:
|
||||
if sLen := stack.len(); sLen < 15 {
|
||||
return nil, &ErrStackUnderflow{stackLen: sLen, required: 15}
|
||||
|
|
@ -1916,10 +2072,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.swap14()
|
||||
stack.inner.data[stack.bottom+stack.size-15], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-15]
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
case SWAP15:
|
||||
if sLen := stack.len(); sLen < 16 {
|
||||
return nil, &ErrStackUnderflow{stackLen: sLen, required: 16}
|
||||
|
|
@ -1928,10 +2083,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.swap15()
|
||||
stack.inner.data[stack.bottom+stack.size-16], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-16]
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
case SWAP16:
|
||||
if sLen := stack.len(); sLen < 17 {
|
||||
return nil, &ErrStackUnderflow{stackLen: sLen, required: 17}
|
||||
|
|
@ -1940,10 +2094,9 @@ mainLoop:
|
|||
return nil, ErrOutOfGas
|
||||
}
|
||||
contract.Gas.RegularGas -= 3
|
||||
scope.Stack.swap16()
|
||||
stack.inner.data[stack.bottom+stack.size-17], stack.inner.data[stack.bottom+stack.size-1] = stack.inner.data[stack.bottom+stack.size-1], stack.inner.data[stack.bottom+stack.size-17]
|
||||
pc++
|
||||
continue mainLoop
|
||||
|
||||
default:
|
||||
operation := table[op]
|
||||
if sLen := stack.len(); sLen < operation.minStack {
|
||||
|
|
|
|||
Loading…
Reference in a new issue