summaryrefslogtreecommitdiff
path: root/lib/Language/Elna/CodeGenerator.hs
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2024-09-21 23:35:32 +0200
committerEugen Wissner <belka@caraus.de>2024-09-21 23:35:32 +0200
commitdaec506ed3f90e61c6a3c4d5b38c19e28ebb1978 (patch)
tree147a08333e608e1c57471075ccbd7a06a8c542cf /lib/Language/Elna/CodeGenerator.hs
parent0a8d3fce2f2797b95b22ea3577d2514621c850fc (diff)
downloadelna-daec506ed3f90e61c6a3c4d5b38c19e28ebb1978.tar.gz
Put _start and main call into builtins
Diffstat (limited to 'lib/Language/Elna/CodeGenerator.hs')
-rw-r--r--lib/Language/Elna/CodeGenerator.hs23
1 files changed, 17 insertions, 6 deletions
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)
]