1 | import { Option, RuntimeHeap, RuntimeProgram, RuntimeOp } from '@glimmer/interfaces';
|
2 | import VM from './append';
|
3 | import { MachineRegister } from '@glimmer/vm';
|
4 | export interface LowLevelRegisters {
|
5 | [MachineRegister.pc]: number;
|
6 | [MachineRegister.ra]: number;
|
7 | [MachineRegister.sp]: number;
|
8 | [MachineRegister.fp]: number;
|
9 | }
|
10 | export declare function initializeRegisters(): LowLevelRegisters;
|
11 | export declare function initializeRegistersWithSP(sp: number): LowLevelRegisters;
|
12 | export declare function initializeRegistersWithPC(pc: number): LowLevelRegisters;
|
13 | export interface Stack {
|
14 | push(value: unknown): void;
|
15 | get(position: number): number;
|
16 | pop<T>(): T;
|
17 | }
|
18 | export interface Externs {
|
19 | debugBefore(opcode: RuntimeOp): unknown;
|
20 | debugAfter(state: unknown): void;
|
21 | }
|
22 | export default class LowLevelVM {
|
23 | stack: Stack;
|
24 | heap: RuntimeHeap;
|
25 | program: RuntimeProgram;
|
26 | externs: Externs;
|
27 | readonly registers: LowLevelRegisters;
|
28 | currentOpSize: number;
|
29 | constructor(stack: Stack, heap: RuntimeHeap, program: RuntimeProgram, externs: Externs, registers: LowLevelRegisters);
|
30 | fetchRegister(register: MachineRegister): number;
|
31 | loadRegister(register: MachineRegister, value: number): void;
|
32 | setPc(pc: number): void;
|
33 | pushFrame(): void;
|
34 | popFrame(): void;
|
35 | pushSmallFrame(): void;
|
36 | popSmallFrame(): void;
|
37 | goto(offset: number): void;
|
38 | target(offset: number): number;
|
39 | call(handle: number): void;
|
40 | returnTo(offset: number): void;
|
41 | return(): void;
|
42 | nextStatement(): Option<RuntimeOp>;
|
43 | evaluateOuter(opcode: RuntimeOp, vm: VM): void;
|
44 | evaluateInner(opcode: RuntimeOp, vm: VM): void;
|
45 | evaluateMachine(opcode: RuntimeOp): void;
|
46 | evaluateSyscall(opcode: RuntimeOp, vm: VM): void;
|
47 | }
|
48 | //# sourceMappingURL=low-level.d.ts.map |
\ | No newline at end of file |