#define INSN_IS_RVC(x) (((x) & 0x3) < 0x3)
-#define CRD do_writeback(XPR,(insn.bits >> 5) & 0x1f)
+#define CRD do_writeback(XPR, (insn.bits >> 5) & 0x1f)
#define CRS1 XPR[(insn.bits >> 10) & 0x1f]
#define CRS2 XPR[(insn.bits >> 5) & 0x1f]
#define CIMM6 ((int32_t)((insn.bits >> 10) & 0x3f) << 26 >> 26)
+#define CIMM5 ((int32_t)((insn.bits >> 5) & 0x1f) << 27 >> 27)
#define CIMM10 ((int32_t)((insn.bits >> 5) & 0x3ff) << 22 >> 22)
#define CJUMP_TARGET (pc + (CIMM10 << JUMP_ALIGN_BITS))
+static const uint8_t rvc_regmap[8] = { 20, 21, 2, 3, 4, 5, 6, 7 };
+#define CRDS do_writeback(XPR, rvc_regmap[(insn.bits >> 13) & 0x7])
+#define CRS1S XPR[rvc_regmap[(insn.bits >> 10) & 0x7]]
+#define CRS2S XPR[rvc_regmap[(insn.bits >> 13) & 0x7]]
+
// vector stuff
#define VL vl
}
break;
}
+ case 0x4:
+ {
+ #include "insns/c_ldsp.h"
+ break;
+ }
+ case 0x5:
+ {
+ #include "insns/c_lwsp.h"
+ break;
+ }
+ case 0x6:
+ {
+ #include "insns/c_sdsp.h"
+ break;
+ }
case 0x7:
{
switch((insn.bits >> 0x7) & 0x7)
}
break;
}
+ case 0x8:
+ {
+ #include "insns/c_swsp.h"
+ break;
+ }
+ case 0x9:
+ {
+ #include "insns/c_ld.h"
+ break;
+ }
+ case 0xa:
+ {
+ #include "insns/c_lw.h"
+ break;
+ }
case 0xb:
{
switch((insn.bits >> 0x7) & 0x7)
}
break;
}
+ case 0xc:
+ {
+ #include "insns/c_sd.h"
+ break;
+ }
+ case 0xd:
+ {
+ #include "insns/c_sw.h"
+ break;
+ }
case 0xf:
{
switch((insn.bits >> 0x7) & 0x7)
}
break;
}
+ case 0x24:
+ {
+ #include "insns/c_ldsp.h"
+ break;
+ }
+ case 0x25:
+ {
+ #include "insns/c_lwsp.h"
+ break;
+ }
+ case 0x26:
+ {
+ #include "insns/c_sdsp.h"
+ break;
+ }
case 0x27:
{
switch((insn.bits >> 0x7) & 0x7)
}
break;
}
+ case 0x28:
+ {
+ #include "insns/c_swsp.h"
+ break;
+ }
+ case 0x29:
+ {
+ #include "insns/c_ld.h"
+ break;
+ }
+ case 0x2a:
+ {
+ #include "insns/c_lw.h"
+ break;
+ }
case 0x2b:
{
switch((insn.bits >> 0x7) & 0x7)
}
break;
}
+ case 0x2c:
+ {
+ #include "insns/c_sd.h"
+ break;
+ }
+ case 0x2d:
+ {
+ #include "insns/c_sw.h"
+ break;
+ }
case 0x2f:
{
switch((insn.bits >> 0x7) & 0x7)
}
break;
}
+ case 0x44:
+ {
+ #include "insns/c_ldsp.h"
+ break;
+ }
+ case 0x45:
+ {
+ #include "insns/c_lwsp.h"
+ break;
+ }
+ case 0x46:
+ {
+ #include "insns/c_sdsp.h"
+ break;
+ }
case 0x47:
{
switch((insn.bits >> 0x7) & 0x7)
}
break;
}
+ case 0x48:
+ {
+ #include "insns/c_swsp.h"
+ break;
+ }
+ case 0x49:
+ {
+ #include "insns/c_ld.h"
+ break;
+ }
+ case 0x4a:
+ {
+ #include "insns/c_lw.h"
+ break;
+ }
case 0x4b:
{
switch((insn.bits >> 0x7) & 0x7)
}
break;
}
+ case 0x4c:
+ {
+ #include "insns/c_sd.h"
+ break;
+ }
+ case 0x4d:
+ {
+ #include "insns/c_sw.h"
+ break;
+ }
case 0x4f:
{
switch((insn.bits >> 0x7) & 0x7)
}
break;
}
+ case 0x64:
+ {
+ #include "insns/c_ldsp.h"
+ break;
+ }
+ case 0x65:
+ {
+ #include "insns/c_lwsp.h"
+ break;
+ }
+ case 0x66:
+ {
+ #include "insns/c_sdsp.h"
+ break;
+ }
case 0x67:
{
#include "insns/j.h"
break;
}
+ case 0x68:
+ {
+ #include "insns/c_swsp.h"
+ break;
+ }
+ case 0x69:
+ {
+ #include "insns/c_ld.h"
+ break;
+ }
+ case 0x6a:
+ {
+ #include "insns/c_lw.h"
+ break;
+ }
case 0x6b:
{
switch((insn.bits >> 0x7) & 0x7)
}
break;
}
+ case 0x6c:
+ {
+ #include "insns/c_sd.h"
+ break;
+ }
+ case 0x6d:
+ {
+ #include "insns/c_sw.h"
+ break;
+ }
case 0x6f:
{
#include "insns/jal.h"