diff options
Diffstat (limited to 'lib/Language/Elna/Backend')
| -rw-r--r-- | lib/Language/Elna/Backend/Allocator.hs | 4 | ||||
| -rw-r--r-- | lib/Language/Elna/Backend/Intermediate.hs | 20 |
2 files changed, 18 insertions, 6 deletions
diff --git a/lib/Language/Elna/Backend/Allocator.hs b/lib/Language/Elna/Backend/Allocator.hs index 701beb8..bdbccab 100644 --- a/lib/Language/Elna/Backend/Allocator.hs +++ b/lib/Language/Elna/Backend/Allocator.hs @@ -50,6 +50,10 @@ allocate MachineConfiguration{..} = fmap function = DivisionQuadruple (operand operand1) (operand operand2) $ Store $ temporaryRegisters !! fromIntegral index + quadruple (LabelQuadruple label) = LabelQuadruple label + quadruple (GoToQuadruple label) = GoToQuadruple label + quadruple (EqualQuadruple operand1 operand2 goToLabel) = + EqualQuadruple (operand operand1) (operand operand2) goToLabel operand :: Operand Variable -> Operand (Store r) operand (IntOperand x) = IntOperand x operand (VariableOperand (TempVariable index)) diff --git a/lib/Language/Elna/Backend/Intermediate.hs b/lib/Language/Elna/Backend/Intermediate.hs index 380fba7..6d3a1af 100644 --- a/lib/Language/Elna/Backend/Intermediate.hs +++ b/lib/Language/Elna/Backend/Intermediate.hs @@ -1,13 +1,21 @@ module Language.Elna.Backend.Intermediate ( Operand(..) , Quadruple(..) - {- , Label(..) -} + , Label(..) , Variable(..) ) where import Data.Int (Int32) import Data.Word (Word32) import Data.Text (Text) +import qualified Data.Text as Text + +newtype Label = Label { unLabel :: Text } + deriving Eq + +instance Show Label + where + show (Label label) = '.' : Text.unpack label newtype Variable = TempVariable Word32 -- | Variable Text deriving Eq @@ -32,15 +40,15 @@ data Quadruple v | NegationQuadruple (Operand v) v | ProductQuadruple (Operand v) (Operand v) v | DivisionQuadruple (Operand v) (Operand v) v - {-| GoToQuadruple Label - | AssignQuadruple Operand Variable + | GoToQuadruple Label + {-| AssignQuadruple Operand Variable | ArrayQuadruple Variable Operand Variable | ArrayAssignQuadruple Operand Operand Variable - | EqualQuadruple Operand Operand Label | NonEqualQuadruple Operand Operand Label | LessQuadruple Operand Operand Label | GreaterQuadruple Operand Operand Label | LessOrEqualQuadruple Operand Operand Label - | GreaterOrEqualQuadruple Operand Operand Label - | LabelQuadruple Label -} + | GreaterOrEqualQuadruple Operand Operand Label -} + | EqualQuadruple (Operand v) (Operand v) Label + | LabelQuadruple Label deriving (Eq, Show) |
