memory_table.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package vm
  2. import (
  3. "math/big"
  4. "github.com/ethereum/go-ethereum/common/math"
  5. )
  6. func memorySha3(stack *Stack) *big.Int {
  7. return calcMemSize(stack.Back(0), stack.Back(1))
  8. }
  9. func memoryCalldataCopy(stack *Stack) *big.Int {
  10. return calcMemSize(stack.Back(0), stack.Back(2))
  11. }
  12. func memoryCodeCopy(stack *Stack) *big.Int {
  13. return calcMemSize(stack.Back(0), stack.Back(2))
  14. }
  15. func memoryExtCodeCopy(stack *Stack) *big.Int {
  16. return calcMemSize(stack.Back(1), stack.Back(3))
  17. }
  18. func memoryMLoad(stack *Stack) *big.Int {
  19. return calcMemSize(stack.Back(0), big.NewInt(32))
  20. }
  21. func memoryMStore8(stack *Stack) *big.Int {
  22. return calcMemSize(stack.Back(0), big.NewInt(1))
  23. }
  24. func memoryMStore(stack *Stack) *big.Int {
  25. return calcMemSize(stack.Back(0), big.NewInt(32))
  26. }
  27. func memoryCreate(stack *Stack) *big.Int {
  28. return calcMemSize(stack.Back(1), stack.Back(2))
  29. }
  30. func memoryCall(stack *Stack) *big.Int {
  31. x := calcMemSize(stack.Back(5), stack.Back(6))
  32. y := calcMemSize(stack.Back(3), stack.Back(4))
  33. return math.BigMax(x, y)
  34. }
  35. func memoryCallCode(stack *Stack) *big.Int {
  36. x := calcMemSize(stack.Back(5), stack.Back(6))
  37. y := calcMemSize(stack.Back(3), stack.Back(4))
  38. return math.BigMax(x, y)
  39. }
  40. func memoryDelegateCall(stack *Stack) *big.Int {
  41. x := calcMemSize(stack.Back(4), stack.Back(5))
  42. y := calcMemSize(stack.Back(2), stack.Back(3))
  43. return math.BigMax(x, y)
  44. }
  45. func memoryReturn(stack *Stack) *big.Int {
  46. return calcMemSize(stack.Back(0), stack.Back(1))
  47. }
  48. func memoryLog(stack *Stack) *big.Int {
  49. mSize, mStart := stack.Back(1), stack.Back(0)
  50. return calcMemSize(mStart, mSize)
  51. }