diff options
Diffstat (limited to 'twasm/README.md')
| -rw-r--r-- | twasm/README.md | 87 |
1 files changed, 69 insertions, 18 deletions
diff --git a/twasm/README.md b/twasm/README.md index 72ec2e3..c479b33 100644 --- a/twasm/README.md +++ b/twasm/README.md @@ -212,33 +212,83 @@ entries are as follows: ``` +------------------------------+ | 0 operand operators | ++------------------------------+ +| 127 96 | ++------------------------------+ +| reserved | ++------------------------------+ +| 95 64 | ++------------------------------+ +| reserved | ++------------------------------+ +| 63 32 | ++------------------------------+ +| reserved | +----------+--------+----------+ | 31 24 | 23 16 | 15 0 | +----------+--------+----------+ | reserved | opcode | token ID | +----------+--------+----------+ -+-------+----------+---------+----------+ -| 1 operand operators | -+-------+----------+---------+----------+ -| 31 27 | 26 24 | 23 16 | 15 0 | -+-------+----------+---------+----------+ -| zeros | reg bits | opcode | token ID | -| | | dst=r/m | | -+-------+----------+---------+----------+ ++-------------------------------------------------------------+ +| 1 operand operators | ++-------------------------------------------------------------+ +| 127 96 | ++-------------------------------------------------------------+ +| reserved | ++----------+-------+-------+-------+-------+----------+-------+ +| 95 88 | 87 84 | 83 80 | 79 76 | 75 72 | 71 68 | 67 64 | ++----------+-------+-------+-------+-------+----------+-------+ +| reserved | op5&8 | op4&8 | op3&8 | op2&8 | reserved | op0&8 | ++----------+-------+-------+-------+-------+----------+-------+ +| 63 56 | 55 48 | 47 40 | 39 32 | ++----------+---------------+---------------+------------------+ +| opcode | opcode | opcode | opcode | +| dst=rel8 | dest=rel | dst=imm8 | dst=imm | ++----------+---------------+---------------+------------------+ +| 31 24 | 23 16 | 15 0 | ++----------+---------------+----------------------------------+ +| reserved | opcode | token ID | +| | dst=r/m | | ++----------+---------------+----------------------------------+ -+------------------------------+ -| 2 operand operators | -+---------+---------+----------+ -| 31 24 | 23 16 | 15 0 | -+---------+---------+----------+ -| opcode | opcode | token ID | -| dst=reg | dst=r/m | | -| src=r/m | src=reg | | -+---------+---------+----------+ ++----------------------------------------------+ +| 2 operand operators | ++----------------------------------------------+ +| 127 96 | ++----------------------------------------------+ +| reserved | ++-------------------+-------+-------+----------+ +| 95 80 | 79 76 | 75 72 | 71 64 | ++-------------------+-------+-------+----------+ +| reserved | op3&8 | op2&8 | reserved | ++-------------------+-------+-------+----------+ +| 63 48 | 47 40 | 39 32 | ++-------------------+---------------+----------+ +| reserved | opcode | opcode | +| | dst=r/m | dst=r/m | +| | src=imm8 | src=imm | ++---------+---------+---------------+----------+ +| 31 24 | 23 16 | 15 0 | ++---------+---------+--------------------------+ +| opcode | opcode | token ID | +| dst=r | dst=r/m | | +| src=r/m | src=r | | ++---------+---------+--------------------------+ + +; key: +r/m ; r/m 16/32/64 +r ; r 16/32/64 +imm ; imm 16/32 +imm8 ; imm 8 +rel ; rel 16/32 +rel8 ; rel 8 + +opX&8 ; low 8 bits are the operator flag that goes with opcode at offset X from + ; the first opcode in the table entry ``` -note the lack of support for multiple-byte opcodes or multiple opcodes for one token ID; these features will likely be added at some point after the parser accumulates too much jank. +note much room to expand. If an opcode doesn't exist, it should be 0x00 ### token IDs @@ -339,6 +389,7 @@ supported tokens are listed below | ret | 0x005A | | | cmp | 0x005B | | | | 0x10XX | some memory address; `XX` is as specified below | +| | 0xFEXX | used to pass some raw value `XX` in place of a token id | | | 0xFFFF | unrecognised token | values of `XX` in `0x10XX`: |
