cvut / qtrvsim

RISC-V CPU simulator for education purposes
GNU General Public License v3.0
466 stars 56 forks source link

src: add support for %hi() and %lo() to internal assembler #110

Closed rbartosr closed 5 months ago

rbartosr commented 5 months ago

The update is as minimal as possible therefore the syntax of these functions is fixed to "%hi(" and "%lo(" - i.e. spaces between the function and the parenthesis is not allowed.

It allows to use function %lo and %hi in internal assembler. Example: ... .text lui a0,%hi(value) addi a0,a0,%lo(value) lw t0,0(a0) .... value: .word 0x1234

ppisa commented 5 months ago

Thanks for contribution. It can be used and it is elegant how small modification is but on the other hand it has limitation, because it cannot be used the way %hi(something) + some value etc. I am not sure if the GNU assembler allows to use modifiers as normal functions inside expression. If not then this approach is correct. If it is allowed to use %hi a %lo inside expressions then it would worth to implement them as part of the https://github.com/cvut/qtrvsim/blob/master/src/assembler/fixmatheval.cpp as variant of FmeNodeUnaryOp. It was my initial idea. Problem with proposed approach will be to combine %hi and %lo with lw and sw arguments because there is math_eexpression(register) evaluated as single field value...

ppisa commented 5 months ago

Detail easy to resolve is that QString.last is Qt6 feature.

kubakubakuba commented 5 months ago

I fixed the Make error, I also tested the implementation on some test code using the web evaluator project. Works well for the simple syntax, but does not work on more complicated (which is to be expected, it has not yet been implemented), so I am just adding this log from the evaluation for future reference:

Error in integrated assembly.
On line 67 in your code:
argument does not match instruction template
here -->lw s1, %lo(table)+16(t3)
On line 77 in your code:
argument does not match instruction template
here -->lw s3, %lo(table)+16(t3)

Thanks for the contribution!

jdupak commented 5 months ago

Full implementation in https://github.com/cvut/qtrvsim/blob/master/src/assembler/fixmatheval.cpp was merged by #115.