From daec506ed3f90e61c6a3c4d5b38c19e28ebb1978 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Sat, 21 Sep 2024 23:35:32 +0200 Subject: Put _start and main call into builtins --- lib/Language/Elna/CodeGenerator.hs | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'lib/Language/Elna/CodeGenerator.hs') diff --git a/lib/Language/Elna/CodeGenerator.hs b/lib/Language/Elna/CodeGenerator.hs index 704f625..1ddfb21 100644 --- a/lib/Language/Elna/CodeGenerator.hs +++ b/lib/Language/Elna/CodeGenerator.hs @@ -1,17 +1,28 @@ module Language.Elna.CodeGenerator - ( generateCode + ( Asm(..) + , generateCode ) where +import Data.Text (Text) import Data.Vector (Vector) import qualified Data.Vector as Vector import Language.Elna.Intermediate (Quadruple(..)) import qualified Language.Elna.Architecture.RiscV as RiscV import Language.Elna.SymbolTable (SymbolTable) -generateCode :: SymbolTable -> Vector Quadruple -> Vector RiscV.Instruction +data Directive + = GlobalDirective + | FunctionDirective + deriving (Eq, Show) + +data Asm + = Instruction RiscV.Instruction + | JumpLabel Text [Directive] + deriving Eq + +generateCode :: SymbolTable -> Vector Quadruple -> Vector Asm generateCode _ _ = Vector.fromList - [ RiscV.CallInstruction "printi" - , RiscV.Instruction RiscV.OpImm $ RiscV.I RiscV.A0 RiscV.ADDI RiscV.Zero 0 - , RiscV.Instruction RiscV.OpImm $ RiscV.I RiscV.A7 RiscV.ADDI RiscV.Zero 93 - , RiscV.Instruction RiscV.System $ RiscV.Type RiscV.Zero RiscV.PRIV RiscV.Zero RiscV.ECALL + [ JumpLabel "main" [GlobalDirective, FunctionDirective] + , Instruction (RiscV.CallInstruction "printi") + , Instruction (RiscV.BaseInstruction RiscV.Jalr $ RiscV.I RiscV.RA RiscV.JALR RiscV.Zero 0) ] -- cgit v1.2.3