From d89f80783d007e09ab6b322774b237d7886edba6 Mon Sep 17 00:00:00 2001 From: Jan Vrany Date: Fri, 20 Oct 2023 21:33:32 +0100 Subject: [PATCH] RISC-V: refactor `?store` evaluators ...to use common helper. --- .../TRRV64GCodeEvaluator.class.st | 53 ++++++++++++++----- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/src/Tinyrossa-RISCV/TRRV64GCodeEvaluator.class.st b/src/Tinyrossa-RISCV/TRRV64GCodeEvaluator.class.st index 6222b32..b79276b 100644 --- a/src/Tinyrossa-RISCV/TRRV64GCodeEvaluator.class.st +++ b/src/Tinyrossa-RISCV/TRRV64GCodeEvaluator.class.st @@ -174,6 +174,33 @@ TRRV64GCodeEvaluator >> commonShr: node [ ] +{ #category : #'evaluation-helpers' } +TRRV64GCodeEvaluator >> commonStore: node [ + "Handles astore, lstore, istore, sstore & bstore" + + | srcReg offset type | + + offset := (AcDSLSymbol value: node symbol name). + srcReg := self evaluate: node child1. + + type := node type. + (type == Address or:[type == Int64]) ifTrue:[ + generate + sd: srcReg, (sp + offset). + ] ifFalse:[ type == Int32 ifTrue:[ + generate + sw: srcReg, (sp + offset). + ] ifFalse:[ type == Int16 ifTrue:[ + generate + sh: srcReg, (sp + offset). + ] ifFalse:[ type == Int8 ifTrue:[ + generate + sb: srcReg, (sp + offset). + ]]]]. + + ^nil. +] + { #category : #'evaluation-helpers' } TRRV64GCodeEvaluator >> evaluate_Xcmpgt: node [ "Handles Address, Int64 Int32, Int16 & Int8" @@ -289,7 +316,7 @@ TRRV64GCodeEvaluator >> evaluate_aloadi: node [ { #category : #evaluation } TRRV64GCodeEvaluator >> evaluate_astore: node [ - ^ self evaluate_lstore: node + ^ self commonStore: node ] { #category : #evaluation } @@ -307,6 +334,11 @@ TRRV64GCodeEvaluator >> evaluate_bloadi: node [ ^ self evaluate_Xloadi: node ] +{ #category : #evaluation } +TRRV64GCodeEvaluator >> evaluate_bstore: node [ + ^ self commonStore: node +] + { #category : #evaluation } TRRV64GCodeEvaluator >> evaluate_goto: node [ generate @@ -557,12 +589,7 @@ TRRV64GCodeEvaluator >> evaluate_ishr: node [ { #category : #evaluation } TRRV64GCodeEvaluator >> evaluate_istore: node [ - | symbol srcReg | - - symbol := node symbol. - srcReg := self evaluate: node child1. - generate sw: srcReg, (sp + (AcDSLSymbol value: symbol name)). - ^ nil + ^ self commonStore: node ] { #category : #evaluation } @@ -635,12 +662,7 @@ TRRV64GCodeEvaluator >> evaluate_lshr: node [ { #category : #evaluation } TRRV64GCodeEvaluator >> evaluate_lstore: node [ - | symbol srcReg | - - symbol := node symbol. - srcReg := self evaluate: node child1. - generate sd: srcReg, (sp + (AcDSLSymbol value: symbol name)). - ^ nil + ^ self commonStore: node ] { #category : #evaluation } @@ -720,3 +742,8 @@ TRRV64GCodeEvaluator >> evaluate_sload: node [ TRRV64GCodeEvaluator >> evaluate_sloadi: node [ ^ self evaluate_Xloadi: node ] + +{ #category : #evaluation } +TRRV64GCodeEvaluator >> evaluate_sstore: node [ + ^ self commonStore: node +]