| 132 | } |
| 133 | |
| 134 | func opSignExtend(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { |
| 135 | back := stack.pop() |
| 136 | if back.Cmp(big.NewInt(31)) < 0 { |
| 137 | bit := uint(back.Uint64()*8 + 7) |
| 138 | num := stack.pop() |
| 139 | mask := back.Lsh(common.Big1, bit) |
| 140 | mask.Sub(mask, common.Big1) |
| 141 | if num.Bit(int(bit)) > 0 { |
| 142 | num.Or(num, mask.Not(mask)) |
| 143 | } else { |
| 144 | num.And(num, mask) |
| 145 | } |
| 146 | |
| 147 | stack.push(math.U256(num)) |
| 148 | } |
| 149 | |
| 150 | evm.interpreter.intPool.put(back) |
| 151 | return nil, nil |
| 152 | } |
| 153 | |
| 154 | func opNot(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) { |
| 155 | x := stack.peek() |