Now it disassembles 0x0000 (invalid encoding of c.addi4spn) as c.unimp
(RVC). Non-RVC variant of unimp pseudoinstruction (0xc0001073) is also
implemented.
Zfhmin is a subset of Zfh (half-precision IEEE 754 binary16 floating
point) extension, consisting only of data transfer and conversion
instructions.
This commit adds `EXT_ZFHMIN` to `isa_extension_t`, permits "zfhmin"
as a multi-letter extension and adjusts feature gate for
data transfer / conversion instructions.
* FLH / FSH
* FMV.X.H / FMV.H.X
* FCVT.S.H / FCVT.H.S
* FCVT.D.H / FCVT.H.D (if 'D' extension is also present)
* FCVT.Q.H / FCVT.H.Q (if 'Q' extension is also present)
On C++11 and later, std::string is guaranteed to be null-terminated.
However, `*(str.end())` is NOT guaranteed to be '\0'.
So, we parse ISA string using C-style string buffer (raw pointers).
This allows them to share PARAM macro with narrowing right-shift instructions.
Rename VV_NSHIFT_PARAMS -> VV_NARROW_PARAMS so nclip, nsra, nsrl can share it.
(Same goes to VX_NSHIFT_PARAMS and VI_NSHIFT_PARAMS)
"ZiHintPause" extension adds PAUSE instruction (which is a special
encoding of FENCE instruction) that performs nothing in the simulator
but supported by its disassembler.
This commit adds dummy extension (which does nothing itself)
"ZiHintPause" to `processor_t::parse_isa_string` to prevent
"unsupported extension" error message.
In Spike, `fence.i` instruction is not masked by any extensions.
I assume that this is required.
This commit adds dummy extension (which does nothing itself)
"Zifencei" to `processor_t::parse_isa_string` to prevent
"unsupported extension" error message.
1f58b4d869 introduced a link error on my
Mojave machine, because making the Boost include path the highest-priority
one was forcing use of the system's libfdt.h. But the system's libfdt.h
unfortunately lacks the 'extern "C"' linkage modifier, causing link errors
when invoking FDT routines from C++ code.
Fix by making the Boost include path the lowest-priority one.
Because using two booleans gives the impression that there are four
possibilities. Since hideleg is itself masked by mideleg, there are
effectively only three choices, so make that explicit via enum.