(4)プリフィクス候補を整理する。
p1:
CMPcc形の命令についた場合、「比較してJMP」のパターンではないことを示す。
つかないときは CMPcc(R3F, ?, ?); CND(R3F); JMP(?); に展開されてしまう。
メモリ系の命令に付いたときは、ポインタレジスタのアクセス後のインクリメントを指示する。
それ以外の命令についた場合、3項型であることを示す。これがなければ2項型になる。
p2:
最終項がレジスタであることを示す。これがなければ、LIMM(R3F, ?);を使って即値フィールドを生成する。
p3:
即値フィールドは2バイトである。これがないときは即値フィールドは1バイトである。
p4:
即値フィールドは4バイトである。これがないときは即値フィールドは1バイトである。
この方法ではなく、p3を2度指定したら4バイトにするという方法もある。どっちがいいかは検討中。
- これはプリフィクスではないけど、インクリメント+比較+ジャンプ命令を作る(一命令で書ける)。
- INCCMPJNE(reg0, reg1, label);
- INCCMPJNEI(reg0, imm, label);
- ループ開始用に初期値セット&ラベル宣言のセットもほしい。
- ラベル番号も直近の宣言値からの相対値で指定できるようにするべき。その上で2バイトや4バイトも指定可能に。ラベル番号プリフィクス。
- ラベル番号については、lbstk的な指定も可能にしておきたい。ここは考えどころ。