#lang racket (require (prefix-in bril: bril/lang)) (require "aarch64var.rkt") ; only deals with int64 type! (define (bril-instr-to-aarch64var bril-instr) (match bril-instr [(bril:Label label) (Label label)] [(bril:ConstantInstr dest-name _ (bril:Int const-val)) (list (LMov (Imm const-val) (Var dest-name)))] [(bril:ValueInstr op dest type args _ _) (bril-value-instr-to-aarch64 op dest args)] [(bril:EffectInstr op args _ _) (match op ['return (bril-return-to-aarch64var args)])])) (define (bril-value-instr-to-aarch64 op dest args) (case op ['add (list (Add (Var (list-ref args 0)) (Var (list-ref args 1)) (Var dest)))] ['sub (list (Sub (Var (list-ref args 0)) (Var (list-ref args 1)) (Var dest)))])) (define (bril-return-to-aarch64var args) (match args [(list var) (list (LMov (Reg 'x0) (Var (list-ref args 0))) (RetDefault))] [_ (list (RetDefault))]))