summaryrefslogtreecommitdiff
path: root/lib/Language/Elna/Backend
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2024-12-02 13:57:03 +0100
committerEugen Wissner <belka@caraus.de>2024-12-02 13:57:03 +0100
commit0c40bca60b343bb289f0a567ec9ec9e9382bad2a (patch)
treebd0906d21a34afcd571e1b1489f3982c2c98151e /lib/Language/Elna/Backend
parent147967c04b0efeec4246b8ba0ff9b6961c9fe6cd (diff)
downloadelna-0c40bca60b343bb289f0a567ec9ec9e9382bad2a.tar.gz
Add array assignment to the IR
Diffstat (limited to 'lib/Language/Elna/Backend')
-rw-r--r--lib/Language/Elna/Backend/Allocator.hs4
-rw-r--r--lib/Language/Elna/Backend/Intermediate.hs4
2 files changed, 6 insertions, 2 deletions
diff --git a/lib/Language/Elna/Backend/Allocator.hs b/lib/Language/Elna/Backend/Allocator.hs
index f0f285b..acdf3e5 100644
--- a/lib/Language/Elna/Backend/Allocator.hs
+++ b/lib/Language/Elna/Backend/Allocator.hs
@@ -135,6 +135,10 @@ quadruple = \case
AssignQuadruple operand1 variable -> do
operand1' <- operand operand1
AssignQuadruple operand1' <$> storeVariable variable
+ ArrayAssignQuadruple operand1 operand2 variable -> do
+ operand1' <- operand operand1
+ operand2' <- operand operand2
+ ArrayAssignQuadruple operand1' operand2' <$> storeVariable variable
operand :: Operand Variable -> Allocator r (Operand (Store r))
operand (IntOperand x) = pure $ IntOperand x
diff --git a/lib/Language/Elna/Backend/Intermediate.hs b/lib/Language/Elna/Backend/Intermediate.hs
index 331d044..dcf0ede 100644
--- a/lib/Language/Elna/Backend/Intermediate.hs
+++ b/lib/Language/Elna/Backend/Intermediate.hs
@@ -50,8 +50,8 @@ data Quadruple v
| DivisionQuadruple (Operand v) (Operand v) v
| GoToQuadruple Label
| AssignQuadruple (Operand v) v
- {-| ArrayQuadruple Variable Operand Variable
- | ArrayAssignQuadruple Operand Operand Variable -}
+ {-| ArrayQuadruple Variable Operand Variable -}
+ | ArrayAssignQuadruple (Operand v) (Operand v) v
| LessOrEqualQuadruple (Operand v) (Operand v) Label
| GreaterOrEqualQuadruple (Operand v) (Operand v) Label
| GreaterQuadruple (Operand v) (Operand v) Label