This commit is contained in:
parent
728148ae42
commit
ca6e9d1656
4
src/codegen/x86_64/isel.ts
Normal file
4
src/codegen/x86_64/isel.ts
Normal file
@ -0,0 +1,4 @@
|
||||
import * as mir from "../../mir.ts";
|
||||
|
||||
export function selectFnInstructions(fn: mir.Fn) {
|
||||
}
|
||||
66
src/codegen/x86_64/module.ts
Normal file
66
src/codegen/x86_64/module.ts
Normal file
@ -0,0 +1,66 @@
|
||||
export class Module {
|
||||
private fns: Fn[] = [];
|
||||
}
|
||||
|
||||
export class Fn {
|
||||
private blocks: Block[] = [];
|
||||
}
|
||||
|
||||
export class Block {
|
||||
private insts: Inst[] = [];
|
||||
|
||||
push(inst: Inst) {
|
||||
this.insts.push(inst);
|
||||
}
|
||||
}
|
||||
|
||||
export class Inst {
|
||||
}
|
||||
|
||||
export type InstKind =
|
||||
| { tag: "PushR"; src: Reg }
|
||||
| { tag: "PopR"; dst: Reg }
|
||||
| { tag: "MovRR"; dst: Reg; src: Reg }
|
||||
| { tag: "SubRI"; dst: Reg; imm: number }
|
||||
| { tag: "MovRI"; dst: Reg; imm: number }
|
||||
| { tag: "MovMRR"; dst: Reg; offset: number; src: Reg }
|
||||
| { tag: "MovRMR"; dst: Reg; src: Reg; offset: number }
|
||||
| { tag: "AddR"; dst_op1: Reg; op2: Reg }
|
||||
| { tag: "Jmp"; bb: number }
|
||||
| { tag: "Ret" };
|
||||
|
||||
export class Reg {
|
||||
static tempId = 1000;
|
||||
|
||||
private constructor(
|
||||
private id: number,
|
||||
) {}
|
||||
|
||||
static reg(reg: Regs): Reg {
|
||||
return new Reg(reg);
|
||||
}
|
||||
|
||||
static temp(): Reg {
|
||||
return new Reg(this.tempId++);
|
||||
}
|
||||
}
|
||||
|
||||
export const Regs = {
|
||||
a: 1,
|
||||
b: 2,
|
||||
c: 3,
|
||||
si: 4,
|
||||
di: 5,
|
||||
sp: 6,
|
||||
bp: 7,
|
||||
r8: 8,
|
||||
r9: 9,
|
||||
r10: 10,
|
||||
r11: 11,
|
||||
r12: 12,
|
||||
r13: 13,
|
||||
r14: 14,
|
||||
r15: 15,
|
||||
} as const;
|
||||
|
||||
export type Regs = typeof Regs[keyof typeof Regs];
|
||||
Loading…
x
Reference in New Issue
Block a user