code: func opSAR(pc *uint64, interpreter *EVMInterpreter, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) {
  	// Note, S256 returns (potentially) a new bigint, so we're popping, not peeking this one
  	shift, value := math.U256(stack.pop()), math.S256(stack.pop())
  	defer interpreter.intPool.put(shift) // First operand back into the pool
  
  	if shift.Cmp(common.Big256) >= 0 {
  		if value.Sign() >= 0 {
  			value.SetUint64(0)
  		} else {
  			value.SetInt64(-1)
  		}
  		stack.push(math.U256(value))
  		return nil, nil
  	}
  	n := uint(shift.Uint64())
  	value.Rsh(value, n)
  	stack.push(math.U256(value))
  
  	return nil, nil
  }
docs: // opSAR implements Arithmetic Shift Right
  // The SAR instruction (arithmetic shift right) pops 2 values from the stack, first arg1 and then arg2,
  // and pushes on the stack arg2 shifted to the right by arg1 number of bits with sign extension.