diff options
| author | Eugen Wissner <belka@caraus.de> | 2024-11-06 22:23:49 +0100 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2024-11-06 22:23:49 +0100 |
| commit | 060496fc6ee331e2710ff8ade23317a0a79cbd6c (patch) | |
| tree | 9af7b8f8767449bea7ae9a76e244141118ae5e75 /lib/Language/Elna/Backend | |
| parent | e2d4b76c0bbad6c0740f5322e862a02971802e87 (diff) | |
| download | elna-060496fc6ee331e2710ff8ade23317a0a79cbd6c.tar.gz | |
Parse local variables
Diffstat (limited to 'lib/Language/Elna/Backend')
| -rw-r--r-- | lib/Language/Elna/Backend/Allocator.hs | 36 | ||||
| -rw-r--r-- | lib/Language/Elna/Backend/Intermediate.hs | 8 |
2 files changed, 25 insertions, 19 deletions
diff --git a/lib/Language/Elna/Backend/Allocator.hs b/lib/Language/Elna/Backend/Allocator.hs index 2b410a3..0c3e5c3 100644 --- a/lib/Language/Elna/Backend/Allocator.hs +++ b/lib/Language/Elna/Backend/Allocator.hs @@ -30,26 +30,21 @@ allocate MachineConfiguration{..} = fmap function quadruple (ParameterQuadruple operand1) = ParameterQuadruple (operand operand1) quadruple (CallQuadruple name count) = CallQuadruple name count - quadruple (AddQuadruple operand1 operand2 (TempVariable index)) + quadruple (AddQuadruple operand1 operand2 variable) = AddQuadruple (operand operand1) (operand operand2) - $ Store - $ temporaryRegisters !! fromIntegral index - quadruple (SubtractionQuadruple operand1 operand2 (TempVariable index)) + $ storeVariable variable + quadruple (SubtractionQuadruple operand1 operand2 variable) = SubtractionQuadruple (operand operand1) (operand operand2) - $ Store - $ temporaryRegisters !! fromIntegral index - quadruple (NegationQuadruple operand1 (TempVariable index)) + $ storeVariable variable + quadruple (NegationQuadruple operand1 variable) = NegationQuadruple (operand operand1) - $ Store - $ temporaryRegisters !! fromIntegral index - quadruple (ProductQuadruple operand1 operand2 (TempVariable index)) + $ storeVariable variable + quadruple (ProductQuadruple operand1 operand2 variable) = ProductQuadruple (operand operand1) (operand operand2) - $ Store - $ temporaryRegisters !! fromIntegral index - quadruple (DivisionQuadruple operand1 operand2 (TempVariable index)) + $ storeVariable variable + quadruple (DivisionQuadruple operand1 operand2 variable) = DivisionQuadruple (operand operand1) (operand operand2) - $ Store - $ temporaryRegisters !! fromIntegral index + $ storeVariable variable quadruple (LabelQuadruple label) = LabelQuadruple label quadruple (GoToQuadruple label) = GoToQuadruple label quadruple (EqualQuadruple operand1 operand2 goToLabel) = @@ -64,9 +59,20 @@ allocate MachineConfiguration{..} = fmap function LessOrEqualQuadruple (operand operand1) (operand operand2) goToLabel quadruple (GreaterOrEqualQuadruple operand1 operand2 goToLabel) = GreaterOrEqualQuadruple (operand operand1) (operand operand2) goToLabel + quadruple (AssignQuadruple operand1 variable) + = AssignQuadruple (operand operand1) + $ storeVariable variable operand :: Operand Variable -> Operand (Store r) operand (IntOperand x) = IntOperand x operand (VariableOperand (TempVariable index)) = VariableOperand $ Store $ temporaryRegisters !! fromIntegral index + operand (VariableOperand (LocalVariable index)) + = VariableOperand + $ Store + $ temporaryRegisters !! fromIntegral index + storeVariable (TempVariable index) = + Store $ temporaryRegisters !! fromIntegral index + storeVariable (LocalVariable index) = + Store $ temporaryRegisters !! fromIntegral index diff --git a/lib/Language/Elna/Backend/Intermediate.hs b/lib/Language/Elna/Backend/Intermediate.hs index f1a5d7a..c4dcf18 100644 --- a/lib/Language/Elna/Backend/Intermediate.hs +++ b/lib/Language/Elna/Backend/Intermediate.hs @@ -17,12 +17,12 @@ instance Show Label where show (Label label) = '.' : Text.unpack label -newtype Variable = TempVariable Word32 -- | Variable Text +data Variable = TempVariable Word32 | LocalVariable Word32 deriving Eq instance Show Variable where - -- show (Variable variable) = '$' : Text.unpack variable + show (LocalVariable variable) = '@' : show variable show (TempVariable variable) = '$' : show variable data Operand v @@ -41,8 +41,8 @@ data Quadruple v | ProductQuadruple (Operand v) (Operand v) v | DivisionQuadruple (Operand v) (Operand v) v | GoToQuadruple Label - {-| AssignQuadruple Operand Variable - | ArrayQuadruple Variable Operand Variable + | AssignQuadruple (Operand v) v + {-| ArrayQuadruple Variable Operand Variable | ArrayAssignQuadruple Operand Operand Variable -} | LessOrEqualQuadruple (Operand v) (Operand v) Label | GreaterOrEqualQuadruple (Operand v) (Operand v) Label |
