summaryrefslogtreecommitdiff
path: root/lib/Language/Elna/CodeGenerator.hs
blob: e61e274bef2f19b08c7559ac964ff486378c2884 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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)
    ]