summaryrefslogtreecommitdiff
path: root/twasm/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'twasm/README.md')
-rw-r--r--twasm/README.md87
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`: