-
Notifications
You must be signed in to change notification settings - Fork 37
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uninitialized Nodes in Instruction Set Tree #74
Comments
Please check whether this instruction is actually executed, I am pretty confident it is (otherwise ETISS would complain, as you already noted). You can do that i.e. by using the etiss/ArchImpl/RISCV/RISCVArch.cpp Line 12140 in 91fa3b3
The instruction tree printing stuff has some issues, but usually these don't mean the decoder is not working. @rafzi might know more as to why the instruction tree prints do not work as expected. |
Providing some more Infos: Compiling the following
and dumping the binary with
One can see how most of the instructions are 16bit/compressed instructions (for some reason the human-readable instructions are not shown as compressed instructions). Because the assembler is responsible for converting "normal" instructions to compressed instructions (of course only when compressed support is available), also the Running this with the
I also set a breakpoint using the target gdb in at one of the inline
With the CoreDSL for
the So I am fairly certain that a "compressed add immediate" is executed. Coming back to the instruction tree and using the encoding from above b000 | imm[5:5]s | rs1[4:0] | imm[4:0]s | b01
the |
When uncommenting
etiss/ArchImpl/RISCV/RISCVArchSpecificImp.h
Line 386 in 4c36313
the tree structure of the instruction set/instruction decoder gets printed.
However, some nodes in the compressed instruction set tree are printed as "uninitialized" (arrows
<-----
inserted by me):A node gets printed as uninitialized when this condition evaluates to false:
etiss/src/Instruction.cpp
Line 739 in 4c36313
The second uninitialized node
corresponds to the
c.addi
instruction. Checking the binary I am compiling (using an rv32gc compiler) this instruction gets used multiple times. I would thus expect the binary to throw some sort of error. However, the binary using these "uninitialized instructions" runs without any issues.What is happening here? Why are those nodes printed as uninitialized? Why does the binary run anyways? Any help is appreciated! :)
PS: I am mainly asking because I am working on something else, where some instructions/nodes of a RISC-V instruction set extension are also printed as "uninitialized". However, those uninitialized instructions cause some trouble and I am trying to understand why and where the underlying issue is.
The text was updated successfully, but these errors were encountered: