module Language.Elna.CodeGenerator ( Asm(..) , generateCode ) where import Data.ByteString (ByteString) 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) data Directive = GlobalDirective | FunctionDirective deriving (Eq, Show) data Asm = Instruction RiscV.Instruction | JumpLabel ByteString [Directive] deriving Eq generateCode :: SymbolTable -> Vector Quadruple -> Vector Asm generateCode _ _ = Vector.fromList [ JumpLabel "main" [GlobalDirective, FunctionDirective] , Instruction (RiscV.CallInstruction "printi") , Instruction (RiscV.BaseInstruction RiscV.Jalr $ RiscV.I RiscV.RA RiscV.JALR RiscV.Zero 0) ]