0xEC for usage as extended opcode space.
It would be convenient to introduce new opcodes that are likely to be infrequently used, whilst also being able to have greater than 256 opcodes in total. As a single byte opcode is half the size of a double byte opcode, the greatest efficiency in code sizes will be one where frequently used opcodes are single bytes. Two prefix bytes are used to accommodate up to 510 double byte opcodes.
For example, a new arithmetic opcode may be allocated to
ADD), and a novel opcode may be introduced at
Triple byte opcodes may be doubly-prefixed by
0xEB EC and
0xEC EB. It is possible to allocate experimental opcodes to this triple-byte space initially, and if they prove safe and useful, they could later be allocated a location in double-byte or single-byte space.
0xEC EC, and
0xEB EC may be interpreted as further extensions of the opcode space.
0xEC do not themselves affect the stack or memory, however opcodes specified by further bytes may. If a multi-byte opcode is yet to be defined, it is to be treated as
INVALID rather than as a NOP, as per usual for undefined opcodes.
0xEC were chosen to be part of the E-series of opcodes. For example, the
0xEF byte is reserved for contracts conforming to the Ethereum Object Format. By having unassigned opcodes for extending the opcode space, there will be a lower risk of breaking the functionalities of deployed contracts compared to choosing assigned opcodes.
Previous usage of
0xEC may result in unexpected behavior and broken code.
Copyright and related rights waived via CC0.