Skip to content

Commit

Permalink
RISC-V: refactor ?load evaluators
Browse files Browse the repository at this point in the history
...to use common helper.
  • Loading branch information
janvrany authored and shingarov committed Nov 29, 2023
1 parent 75f0703 commit cccdb3a
Showing 1 changed file with 40 additions and 13 deletions.
53 changes: 40 additions & 13 deletions src/Tinyrossa-RISCV/TRRV64GCodeEvaluator.class.st
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,33 @@ TRRV64GCodeEvaluator >> commonBin: node opcodeR: opR opcodeI: opI [
^ dstReg
]

{ #category : #'evaluation-helpers' }
TRRV64GCodeEvaluator >> commonLoad: node [
"Handles aload, lload, iload, sload & bload"

| dstReg offset type |

offset := (AcDSLSymbol value: node symbol name).
dstReg := codegen allocateRegister.

type := node type.
(type == Address or:[type == Int64]) ifTrue:[
generate
ld: dstReg, (sp + offset).
] ifFalse:[ type == Int32 ifTrue:[
generate
lw: dstReg, (sp + offset).
] ifFalse:[ type == Int16 ifTrue:[
generate
lh: dstReg, (sp + offset).
] ifFalse:[ type == Int8 ifTrue:[
generate
lb: dstReg, (sp + offset).
]]]].

^dstReg.
]

{ #category : #'evaluation-helpers' }
TRRV64GCodeEvaluator >> commonMul: node [
"Handles imul and lmul"
Expand Down Expand Up @@ -252,7 +279,7 @@ TRRV64GCodeEvaluator >> evaluate_aladd: node [

{ #category : #evaluation }
TRRV64GCodeEvaluator >> evaluate_aload: node [
^ self evaluate_lload: node
^ self commonLoad: node
]

{ #category : #evaluation }
Expand All @@ -270,6 +297,11 @@ TRRV64GCodeEvaluator >> evaluate_bconst: node [
^ self evaluate_iconst: node
]

{ #category : #evaluation }
TRRV64GCodeEvaluator >> evaluate_bload: node [
^ self commonLoad: node
]

{ #category : #evaluation }
TRRV64GCodeEvaluator >> evaluate_bloadi: node [
^ self evaluate_Xloadi: node
Expand Down Expand Up @@ -495,12 +527,7 @@ TRRV64GCodeEvaluator >> evaluate_iflcmpne: node [

{ #category : #evaluation }
TRRV64GCodeEvaluator >> evaluate_iload: node [
| symbol dstReg |

symbol := node symbol.
dstReg := codegen allocateRegister.
generate lw: dstReg, (sp + (AcDSLSymbol value: symbol name)).
^ dstReg
^ self commonLoad: node
]

{ #category : #evaluation }
Expand Down Expand Up @@ -583,12 +610,7 @@ TRRV64GCodeEvaluator >> evaluate_lconst: node [

{ #category : #evaluation }
TRRV64GCodeEvaluator >> evaluate_lload: node [
| symbol dstReg |

symbol := node symbol.
dstReg := codegen allocateRegister.
generate ld: dstReg, (sp + (AcDSLSymbol value: symbol name)).
^ dstReg
^ self commonLoad: node
]

{ #category : #evaluation }
Expand Down Expand Up @@ -689,6 +711,11 @@ TRRV64GCodeEvaluator >> evaluate_sconst: node [
^ self evaluate_iconst: node
]

{ #category : #evaluation }
TRRV64GCodeEvaluator >> evaluate_sload: node [
^ self commonLoad: node
]

{ #category : #evaluation }
TRRV64GCodeEvaluator >> evaluate_sloadi: node [
^ self evaluate_Xloadi: node
Expand Down

0 comments on commit cccdb3a

Please sign in to comment.