1 | import { MachineOp, Op } from '../vm-opcodes';
|
2 | import { Operand } from './operands';
|
3 | import { CompilerBuffer } from '../template';
|
4 |
|
5 | export const enum OpcodeSize {
|
6 | ARG_SHIFT = 8,
|
7 | MAX_SIZE = 0x7fffffff,
|
8 | TYPE_SIZE = 0b11111111,
|
9 | TYPE_MASK = 0b00000000000000000000000011111111,
|
10 | OPERAND_LEN_MASK = 0b00000000000000000000001100000000,
|
11 | MACHINE_MASK = 0b00000000000000000000010000000000,
|
12 | }
|
13 |
|
14 | export interface InstructionEncoder {
|
15 | size: number;
|
16 | readonly buffer: CompilerBuffer;
|
17 |
|
18 | encode(type: MachineOp, machine: OpcodeSize.MACHINE_MASK, ...operands: Operand[]): void;
|
19 | encode(type: Op, machine: 0, ...operands: Operand[]): void;
|
20 |
|
21 | patch(position: number, target: number): void;
|
22 | }
|