Merge branch 'feature/add-xesppie-support-for-gdbstub' into 'master'

feat(gdbstub): add riscv xesppie extension support

Closes IDF-8606

See merge request espressif/esp-idf!35414
This commit is contained in:
Alexey Lapshin
2024-12-19 18:38:15 +08:00
7 changed files with 920 additions and 71 deletions

View File

@@ -1,10 +1,12 @@
/*
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "rv_decode.h"
#include "riscv/csr_hwlp.h"
#include "soc/soc_caps.h"
static inline uint32_t rv_inst_len(uint32_t inst)
{
@@ -154,5 +156,26 @@ uintptr_t rv_compute_next_pc(esp_gdbstub_frame_t *frame, uintptr_t inst_addr)
}
}
#endif /* __riscv_c */
#if SOC_CPU_HAS_HWLOOP
/* This block of code could be done with a loop, but the RV_READ_CSR macro
* is not designed to pass values as variables.
*/
/* Check if LOOP0 is executing */
const uintptr_t loop0_end_addr = RV_READ_CSR(CSR_LOOP0_END_ADDR);
if (loop0_end_addr == inst_addr) {
const uint32_t loop0_count = RV_READ_CSR(CSR_LOOP0_COUNT);
if (loop0_count > 1) {
return RV_READ_CSR(CSR_LOOP0_START_ADDR);
}
}
/* Check if LOOP1 is executing */
const uintptr_t loop1_end_addr = RV_READ_CSR(CSR_LOOP1_END_ADDR);
if (loop1_end_addr == inst_addr) {
const uint32_t loop1_count = RV_READ_CSR(CSR_LOOP1_COUNT);
if (loop1_count > 1) {
return RV_READ_CSR(CSR_LOOP1_START_ADDR);
}
}
#endif // SOC_CPU_HAS_HWLOOP
return inst_addr + inst_len;
}

View File

@@ -1,5 +1,5 @@
/*
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
* SPDX-FileCopyrightText: 2023-2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
@@ -103,6 +103,368 @@ struct inst_list_s rv32c_nojump[] = {
{0x9459, "c.srai"},
{0x8481, "c.srai64"}};
struct inst_list_s xesppie_nojump[] = {
{0x0287805f, "esp.vcmulas.s16.qacc.h"},
{0x03c0633b, "esp.vcmulas.s16.qacc.h.ld.ip"},
{0x0300207f, "esp.vcmulas.s16.qacc.h.ld.xp"},
{0x0283805f, "esp.vcmulas.s16.qacc.l"},
{0x01c0633b, "esp.vcmulas.s16.qacc.l.ld.ip"},
{0x0100207f, "esp.vcmulas.s16.qacc.l.ld.xp"},
{0x0285805f, "esp.vcmulas.s8.qacc.h"},
{0x02c0633b, "esp.vcmulas.s8.qacc.h.ld.ip"},
{0x0200207f, "esp.vcmulas.s8.qacc.h.ld.xp"},
{0x0281805f, "esp.vcmulas.s8.qacc.l"},
{0x00c0633b, "esp.vcmulas.s8.qacc.l.ld.ip"},
{0x0000207f, "esp.vcmulas.s8.qacc.l.ld.xp"},
{0x02c7005f, "esp.vmulas.s16.qacc"},
{0x02e060bb, "esp.vmulas.s16.qacc.ld.ip"},
{0x020822ff, "esp.vmulas.s16.qacc.ld.xp"},
{0x03e060bb, "esp.vmulas.s16.qacc.st.ip"},
{0x030822ff, "esp.vmulas.s16.qacc.st.xp"},
{0x02c3005f, "esp.vmulas.s16.xacc"},
{0x00e060bb, "esp.vmulas.s16.xacc.ld.ip"},
{0x000822ff, "esp.vmulas.s16.xacc.ld.xp"},
{0x01e060bb, "esp.vmulas.s16.xacc.st.ip"},
{0x010822ff, "esp.vmulas.s16.xacc.st.xp"},
{0x02c5005f, "esp.vmulas.s8.qacc"},
{0x026060bb, "esp.vmulas.s8.qacc.ld.ip"},
{0x020022ff, "esp.vmulas.s8.qacc.ld.xp"},
{0x036060bb, "esp.vmulas.s8.qacc.st.ip"},
{0x030022ff, "esp.vmulas.s8.qacc.st.xp"},
{0x02c1005f, "esp.vmulas.s8.xacc"},
{0x006060bb, "esp.vmulas.s8.xacc.ld.ip"},
{0x000022ff, "esp.vmulas.s8.xacc.ld.xp"},
{0x016060bb, "esp.vmulas.s8.xacc.st.ip"},
{0x010022ff, "esp.vmulas.s8.xacc.st.xp"},
{0x02c6005f, "esp.vmulas.u16.qacc"},
{0x02a060bb, "esp.vmulas.u16.qacc.ld.ip"},
{0x020820ff, "esp.vmulas.u16.qacc.ld.xp"},
{0x03a060bb, "esp.vmulas.u16.qacc.st.ip"},
{0x030820ff, "esp.vmulas.u16.qacc.st.xp"},
{0x02c2005f, "esp.vmulas.u16.xacc"},
{0x00a060bb, "esp.vmulas.u16.xacc.ld.ip"},
{0x000820ff, "esp.vmulas.u16.xacc.ld.xp"},
{0x01a060bb, "esp.vmulas.u16.xacc.st.ip"},
{0x010820ff, "esp.vmulas.u16.xacc.st.xp"},
{0x02c4005f, "esp.vmulas.u8.qacc"},
{0x022060bb, "esp.vmulas.u8.qacc.ld.ip"},
{0x020020ff, "esp.vmulas.u8.qacc.ld.xp"},
{0x032060bb, "esp.vmulas.u8.qacc.st.ip"},
{0x030020ff, "esp.vmulas.u8.qacc.st.xp"},
{0x02c0005f, "esp.vmulas.u8.xacc"},
{0x002060bb, "esp.vmulas.u8.xacc.ld.ip"},
{0x000020ff, "esp.vmulas.u8.xacc.ld.xp"},
{0x012060bb, "esp.vmulas.u8.xacc.st.ip"},
{0x010020ff, "esp.vmulas.u8.xacc.st.xp"},
{0x006061bb, "esp.vmulas.s16.qacc.ldbc.incp"},
{0x002061bb, "esp.vmulas.s8.qacc.ldbc.incp"},
{0x004061bb, "esp.vmulas.u16.qacc.ldbc.incp"},
{0x000061bb, "esp.vmulas.u8.qacc.ldbc.incp"},
{0x02f0005f, "esp.vsmulas.s16.qacc"},
{0x038063bb, "esp.vsmulas.s16.qacc.ld.incp"},
{0x02b0005f, "esp.vsmulas.s8.qacc"},
{0x018063bb, "esp.vsmulas.s8.qacc.ld.incp"},
{0x02d0005f, "esp.vsmulas.u16.qacc"},
{0x028063bb, "esp.vsmulas.u16.qacc.ld.incp"},
{0x0290005f, "esp.vsmulas.u8.qacc"},
{0x008063bb, "esp.vsmulas.u8.qacc.ld.incp"},
{0x0006245f, "esp.cmul.s16"},
{0x00c0403f, "esp.cmul.s16.ld.incp"},
{0x02c0403f, "esp.cmul.s16.st.incp"},
{0x0002245f, "esp.cmul.s8"},
{0x0040403f, "esp.cmul.s8.ld.incp"},
{0x0240403f, "esp.cmul.s8.st.incp"},
{0x0004245f, "esp.cmul.u16"},
{0x0080403f, "esp.cmul.u16.ld.incp"},
{0x0280403f, "esp.cmul.u16.st.incp"},
{0x0000245f, "esp.cmul.u8"},
{0x0000403f, "esp.cmul.u8.ld.incp"},
{0x0200403f, "esp.cmul.u8.st.incp"},
{0x90c0505b, "esp.max.s16.a"},
{0x90a0505b, "esp.max.s32.a"},
{0x9040505b, "esp.max.s8.a"},
{0x9080505b, "esp.max.u16.a"},
{0x9020505b, "esp.max.u32.a"},
{0x9000505b, "esp.max.u8.a"},
{0x90d0505b, "esp.min.s16.a"},
{0x90b0505b, "esp.min.s32.a"},
{0x9050505b, "esp.min.s8.a"},
{0x9090505b, "esp.min.u16.a"},
{0x9030505b, "esp.min.u32.a"},
{0x9010505b, "esp.min.u8.a"},
{0x8000105b, "esp.vabs.16"},
{0x8000085b, "esp.vabs.32"},
{0x8000005b, "esp.vabs.8"},
{0x0284065f, "esp.vadd.s16"},
{0x0108603b, "esp.vadd.s16.ld.incp"},
{0x0308603b, "esp.vadd.s16.st.incp"},
{0x0284055f, "esp.vadd.s32"},
{0x0100613b, "esp.vadd.s32.ld.incp"},
{0x0300613b, "esp.vadd.s32.st.incp"},
{0x0280065f, "esp.vadd.s8"},
{0x0008603b, "esp.vadd.s8.ld.incp"},
{0x0208603b, "esp.vadd.s8.st.incp"},
{0x0284045f, "esp.vadd.u16"},
{0x0100603b, "esp.vadd.u16.ld.incp"},
{0x0300603b, "esp.vadd.u16.st.incp"},
{0x0280055f, "esp.vadd.u32"},
{0x0000613b, "esp.vadd.u32.ld.incp"},
{0x0200613b, "esp.vadd.u32.st.incp"},
{0x0280045f, "esp.vadd.u8"},
{0x0000603b, "esp.vadd.u8.ld.incp"},
{0x0200603b, "esp.vadd.u8.st.incp"},
{0x0000505b, "esp.vclamp.s16"},
{0x0006ac5f, "esp.vmax.s16"},
{0x0068403f, "esp.vmax.s16.ld.incp"},
{0x00e8403f, "esp.vmax.s16.st.incp"},
{0x0005ac5f, "esp.vmax.s32"},
{0x0058403f, "esp.vmax.s32.ld.incp"},
{0x00d8403f, "esp.vmax.s32.st.incp"},
{0x0002ac5f, "esp.vmax.s8"},
{0x0028403f, "esp.vmax.s8.ld.incp"},
{0x00a8403f, "esp.vmax.s8.st.incp"},
{0x0004ac5f, "esp.vmax.u16"},
{0x0048403f, "esp.vmax.u16.ld.incp"},
{0x00c8403f, "esp.vmax.u16.st.incp"},
{0x0001ac5f, "esp.vmax.u32"},
{0x0018403f, "esp.vmax.u32.ld.incp"},
{0x0098403f, "esp.vmax.u32.st.incp"},
{0x0000ac5f, "esp.vmax.u8"},
{0x0008403f, "esp.vmax.u8.ld.incp"},
{0x0088403f, "esp.vmax.u8.st.incp"},
{0x00063c5f, "esp.vmin.s16"},
{0x0168403f, "esp.vmin.s16.ld.incp"},
{0x01e8403f, "esp.vmin.s16.st.incp"},
{0x00053c5f, "esp.vmin.s32"},
{0x0158403f, "esp.vmin.s32.ld.incp"},
{0x01d8403f, "esp.vmin.s32.st.incp"},
{0x00023c5f, "esp.vmin.s8"},
{0x0128403f, "esp.vmin.s8.ld.incp"},
{0x01a8403f, "esp.vmin.s8.st.incp"},
{0x00043c5f, "esp.vmin.u16"},
{0x0148403f, "esp.vmin.u16.ld.incp"},
{0x01c8403f, "esp.vmin.u16.st.incp"},
{0x00013c5f, "esp.vmin.u32"},
{0x0118403f, "esp.vmin.u32.ld.incp"},
{0x0198403f, "esp.vmin.u32.st.incp"},
{0x00003c5f, "esp.vmin.u8"},
{0x0108403f, "esp.vmin.u8.ld.incp"},
{0x0188403f, "esp.vmin.u8.st.incp"},
{0x0006bc5f, "esp.vmul.s16"},
{0x0368403f, "esp.vmul.s16.ld.incp"},
{0x0283045f, "esp.vmul.s16.s8xs8"},
{0x03e8403f, "esp.vmul.s16.st.incp"},
{0x0287045f, "esp.vmul.s32.s16xs16"},
{0x0002bc5f, "esp.vmul.s8"},
{0x0328403f, "esp.vmul.s8.ld.incp"},
{0x03a8403f, "esp.vmul.s8.st.incp"},
{0x0004bc5f, "esp.vmul.u16"},
{0x0348403f, "esp.vmul.u16.ld.incp"},
{0x03c8403f, "esp.vmul.u16.st.incp"},
{0x0000bc5f, "esp.vmul.u8"},
{0x0308403f, "esp.vmul.u8.ld.incp"},
{0x0388403f, "esp.vmul.u8.st.incp"},
{0x02a0605f, "esp.vprelu.s16"},
{0x0220605f, "esp.vprelu.s8"},
{0x82005c5b, "esp.vrelu.s16"},
{0x8200585b, "esp.vrelu.s8"},
{0x1a80025f, "esp.vsadds.s16"},
{0x0a80025f, "esp.vsadds.s8"},
{0x1280025f, "esp.vsadds.u16"},
{0x0280025f, "esp.vsadds.u8"},
{0x1800583b, "esp.vsat.s16"},
{0x1800543b, "esp.vsat.s32"},
{0x1800483b, "esp.vsat.s8"},
{0x1800503b, "esp.vsat.u16"},
{0x1800443b, "esp.vsat.u32"},
{0x1800403b, "esp.vsat.u8"},
{0x1e80025f, "esp.vssubs.s16"},
{0x0e80025f, "esp.vssubs.s8"},
{0x1680025f, "esp.vssubs.u16"},
{0x0680025f, "esp.vssubs.u8"},
{0x028406df, "esp.vsub.s16"},
{0x0188613b, "esp.vsub.s16.ld.incp"},
{0x0388613b, "esp.vsub.s16.st.incp"},
{0x028405df, "esp.vsub.s32"},
{0x0100633b, "esp.vsub.s32.ld.incp"},
{0x0300633b, "esp.vsub.s32.st.incp"},
{0x028006df, "esp.vsub.s8"},
{0x0088613b, "esp.vsub.s8.ld.incp"},
{0x0288613b, "esp.vsub.s8.st.incp"},
{0x028404df, "esp.vsub.u16"},
{0x0180613b, "esp.vsub.u16.ld.incp"},
{0x0380613b, "esp.vsub.u16.st.incp"},
{0x028005df, "esp.vsub.u32"},
{0x0000633b, "esp.vsub.u32.ld.incp"},
{0x0200633b, "esp.vsub.u32.st.incp"},
{0x028004df, "esp.vsub.u8"},
{0x0080613b, "esp.vsub.u8.ld.incp"},
{0x0280613b, "esp.vsub.u8.st.incp"},
{0x04840433, "esp.addx2"},
{0x08840433, "esp.addx4"},
{0x40842433, "esp.sat"},
{0x44840433, "esp.subx2"},
{0x48840433, "esp.subx4"},
{0x0004205f, "esp.andq"},
{0x0006205f, "esp.notq"},
{0x0000205f, "esp.orq"},
{0x0002205f, "esp.xorq"},
{0x0001b45f, "esp.vcmp.eq.s16"},
{0x00012c5f, "esp.vcmp.eq.s32"},
{0x0000b45f, "esp.vcmp.eq.s8"},
{0x0001345f, "esp.vcmp.eq.u16"},
{0x00002c5f, "esp.vcmp.eq.u32"},
{0x0000345f, "esp.vcmp.eq.u8"},
{0x0005b45f, "esp.vcmp.gt.s16"},
{0x00052c5f, "esp.vcmp.gt.s32"},
{0x0004b45f, "esp.vcmp.gt.s8"},
{0x0005345f, "esp.vcmp.gt.u16"},
{0x00042c5f, "esp.vcmp.gt.u32"},
{0x0004345f, "esp.vcmp.gt.u8"},
{0x0003b45f, "esp.vcmp.lt.s16"},
{0x00032c5f, "esp.vcmp.lt.s32"},
{0x0002b45f, "esp.vcmp.lt.s8"},
{0x0003345f, "esp.vcmp.lt.u16"},
{0x00022c5f, "esp.vcmp.lt.u32"},
{0x0002345f, "esp.vcmp.lt.u8"},
{0x1060005b, "esp.mov.s16.qacc"},
{0x1020005b, "esp.mov.s8.qacc"},
{0x1040005b, "esp.mov.u16.qacc"},
{0x1000005b, "esp.mov.u8.qacc"},
{0x00c0005f, "esp.movi.16.a"},
{0x80e0005f, "esp.movi.16.q"},
{0x8080005f, "esp.movi.32.a"},
{0x8090005f, "esp.movi.32.q"},
{0x0080005f, "esp.movi.8.a"},
{0x80a0005f, "esp.movi.8.q"},
{0x80d0005f, "esp.movx.r.cfg"},
{0x84d0005f, "esp.movx.r.fft.bit.width"},
{0x8cd0005f, "esp.movx.r.perf"},
{0x80b0005f, "esp.movx.r.sar"},
{0x88b0005f, "esp.movx.r.sar.bytes"},
{0x8cb0005f, "esp.movx.r.xacc.h"},
{0x84b0005f, "esp.movx.r.xacc.l"},
{0x90d0005f, "esp.movx.w.cfg"},
{0x94d0005f, "esp.movx.w.fft.bit.width"},
{0x9cd0005f, "esp.movx.w.perf"},
{0x90b0005f, "esp.movx.w.sar"},
{0x98b0005f, "esp.movx.w.sar.bytes"},
{0x9cb0005f, "esp.movx.w.xacc.h"},
{0x94b0005f, "esp.movx.w.xacc.l"},
{0x1800585b, "esp.vext.s16"},
{0x0800585b, "esp.vext.s8"},
{0x1000585b, "esp.vext.u16"},
{0x0000585b, "esp.vext.u8"},
{0x0286005f, "esp.vunzip.16"},
{0x0284805f, "esp.vunzip.32"},
{0x0284005f, "esp.vunzip.8"},
{0x00c04c5b, "esp.vunzipt.16"},
{0x00804c5b, "esp.vunzipt.8"},
{0x0282005f, "esp.vzip.16"},
{0x0280805f, "esp.vzip.32"},
{0x0280005f, "esp.vzip.8"},
{0x00404c5b, "esp.vzipt.16"},
{0x00004c5b, "esp.vzipt.8"},
{0x0040005b, "esp.zero.q"},
{0x0000025b, "esp.zero.qacc"},
{0x0000005b, "esp.zero.xacc"},
{0x0000007b, "esp.fft.ams.s16.ld.incp"},
{0x0000207b, "esp.fft.ams.s16.ld.incp.uaup"},
{0x0000607b, "esp.fft.ams.s16.ld.r32.decp"},
{0x0000203f, "esp.fft.ams.s16.st.incp"},
{0x1000025b, "esp.fft.bitrev"},
{0x0000003f, "esp.fft.cmul.s16.ld.xp"},
{0x0000007f, "esp.fft.cmul.s16.st.xp"},
{0x0281045f, "esp.fft.r2bf.s16"},
{0x0200605f, "esp.fft.r2bf.s16.st.incp"},
{0x0000203b, "esp.fft.vst.r32.decp"},
{0x8800203b, "esp.ld.128.usar.ip"},
{0x8000405f, "esp.ld.128.usar.xp"},
{0xa000433b, "esp.ld.xacc.ip"},
{0xe08040bb, "esp.ldqa.s16.128.ip"},
{0x1300535b, "esp.ldqa.s16.128.xp"},
{0x608040bb, "esp.ldqa.s8.128.ip"},
{0x1300515b, "esp.ldqa.s8.128.xp"},
{0xa08040bb, "esp.ldqa.u16.128.ip"},
{0x1300525b, "esp.ldqa.u16.128.xp"},
{0x208040bb, "esp.ldqa.u8.128.ip"},
{0x1300505b, "esp.ldqa.u8.128.xp"},
{0xc600203b, "esp.vldbc.16.ip"},
{0x9600405f, "esp.vldbc.16.xp"},
{0x8e00203b, "esp.vldbc.32.ip"},
{0x8e00405f, "esp.vldbc.32.xp"},
{0x4600203b, "esp.vldbc.8.ip"},
{0x8600405f, "esp.vldbc.8.xp"},
{0xc880403b, "esp.vldext.s16.ip"},
{0xf000605f, "esp.vldext.s16.xp"},
{0x4880403b, "esp.vldext.s8.ip"},
{0x7000605f, "esp.vldext.s8.xp"},
{0x8880403b, "esp.vldext.u16.ip"},
{0xb000605f, "esp.vldext.u16.xp"},
{0x0880403b, "esp.vldext.u8.ip"},
{0x3000605f, "esp.vldext.u8.xp"},
{0x2800403b, "esp.vldhbc.16.incp"},
{0x4080403b, "esp.ld.qacc.h.h.128.ip"},
{0x6080403b, "esp.ld.qacc.h.l.128.ip"},
{0x0080403b, "esp.ld.qacc.l.h.128.ip"},
{0x2080403b, "esp.ld.qacc.l.l.128.ip"},
{0x6000413b, "esp.ld.ua.state.ip"},
{0x0080205f, "esp.ldxq.32"},
{0xc080403b, "esp.st.qacc.h.h.128.ip"},
{0xe080403b, "esp.st.qacc.h.l.128.ip"},
{0x8080403b, "esp.st.qacc.l.h.128.ip"},
{0xa080403b, "esp.st.qacc.l.l.128.ip"},
{0xe000413b, "esp.st.ua.state.ip"},
{0x8080205f, "esp.stxq.32"},
{0x4200203b, "esp.vld.128.ip"},
{0x8200405f, "esp.vld.128.xp"},
{0x6400203b, "esp.vld.h.64.ip"},
{0x8c00405f, "esp.vld.h.64.xp"},
{0x2400203b, "esp.vld.l.64.ip"},
{0x8400405f, "esp.vld.l.64.xp"},
{0xc200203b, "esp.vst.128.ip"},
{0x9200405f, "esp.vst.128.xp"},
{0xe400203b, "esp.vst.h.64.ip"},
{0x9c00405f, "esp.vst.h.64.xp"},
{0xa400203b, "esp.vst.l.64.ip"},
{0x9400405f, "esp.vst.l.64.xp"},
{0x0000485b, "esp.slci.2q"},
{0x0000405f, "esp.slcxxp.2q"},
{0x8024005b, "esp.src.q"},
{0x8000213b, "esp.src.q.ld.ip"},
{0x0000003b, "esp.src.q.ld.xp"},
{0x8024105b, "esp.src.q.qup"},
{0x0080485b, "esp.srci.2q"},
{0x9864005b, "esp.srcmb.s16.q.qacc"},
{0xd800203b, "esp.srcmb.s16.qacc"},
{0x8864005b, "esp.srcmb.s8.q.qacc"},
{0x5800203b, "esp.srcmb.s8.qacc"},
{0x9064005b, "esp.srcmb.u16.q.qacc"},
{0x9800203b, "esp.srcmb.u16.qacc"},
{0x8064005b, "esp.srcmb.u8.q.qacc"},
{0x1800203b, "esp.srcmb.u8.qacc"},
{0x0000405b, "esp.srcq.128.st.incp"},
{0x0000445f, "esp.srcxxp.2q"},
{0x94f0005f, "esp.srs.s.xacc"},
{0x84f0005f, "esp.srs.u.xacc"},
{0x8004005b, "esp.vsl.32"},
{0x0020005f, "esp.vsld.16"},
{0x0010005f, "esp.vsld.32"},
{0x0000005f, "esp.vsld.8"},
{0x8004035b, "esp.vsr.s32"},
{0x8004015b, "esp.vsr.u32"},
{0x0060005f, "esp.vsrd.16"},
{0x0050005f, "esp.vsrd.32"},
{0x0040005f, "esp.vsrd.8"},
{0xe00041bb, "esp.st.s.xacc.ip"},
{0x600041bb, "esp.st.u.xacc.ip"},
{0x0000502b, "esp.lp.setupi"},
{0x0004402b, "esp.lp.setup"},
{0x0000002b, "esp.lp.starti"},
{0x0000102b, "esp.lp.endi"},
{0x0000302b, "esp.lp.counti"},
{0x0004202b, "esp.lp.count"}};
TEST_CASE("decode rv32i instructions")
{
@@ -336,3 +698,16 @@ TEST_CASE("decode rv32m instructions")
CHECK(rv_compute_next_pc(temp_regs_frame, inst_addr) == inst_addr + 4);
}
}
TEST_CASE("decode xesppie instructions")
{
uintptr_t pc;
uint32_t inst;
uintptr_t inst_addr = (uintptr_t)&inst;
for (size_t i = 0; i < sizeof(xesppie_nojump)/sizeof(xesppie_nojump[0]); i++) {
inst = xesppie_nojump[i].inst;
DEBUG_PRINTF("testing instruction %s\n", xesppie_nojump[i].name);
CHECK(rv_compute_next_pc(temp_regs_frame, inst_addr) == inst_addr + 4);
}
}

View File

@@ -0,0 +1,369 @@
/*
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
// This file is used to generate "xesppie_nojump" array.
// It's manually passed to gcc + objdump:
// riscv32-esp-elf-gcc -march=rv32ixesppie -c rv_decode/xesppie.S
// riscv32-esp-elf-objdump -D -j .text xesppie.o | tail -n +8 | sed -E 's/^\s+[0-9a-f]+:\s+([0-9a-f]+)\s+([a-zA-Z0-9_.]+).*/{0x\1, "\2"},/'
esp.vcmulas.s16.qacc.h q0,q0
esp.vcmulas.s16.qacc.h.ld.ip q0,x8,-128,q0,q0
esp.vcmulas.s16.qacc.h.ld.xp q0,x8,x8,q0,q0
esp.vcmulas.s16.qacc.l q0,q0
esp.vcmulas.s16.qacc.l.ld.ip q0,x8,-128,q0,q0
esp.vcmulas.s16.qacc.l.ld.xp q0,x8,x8,q0,q0
esp.vcmulas.s8.qacc.h q0,q0
esp.vcmulas.s8.qacc.h.ld.ip q0,x8,-128,q0,q0
esp.vcmulas.s8.qacc.h.ld.xp q0,x8,x8,q0,q0
esp.vcmulas.s8.qacc.l q0,q0
esp.vcmulas.s8.qacc.l.ld.ip q0,x8,-128,q0,q0
esp.vcmulas.s8.qacc.l.ld.xp q0,x8,x8,q0,q0
esp.vmulas.s16.qacc q0,q0
esp.vmulas.s16.qacc.ld.ip q0,x8,-128,q0,q0
esp.vmulas.s16.qacc.ld.xp q0,x8,x8,q0,q0
esp.vmulas.s16.qacc.st.ip q0,x8,-128,q0,q0
esp.vmulas.s16.qacc.st.xp q0,x8,x8,q0,q0
esp.vmulas.s16.xacc q0,q0
esp.vmulas.s16.xacc.ld.ip q0,x8,-128,q0,q0
esp.vmulas.s16.xacc.ld.xp q0,x8,x8,q0,q0
esp.vmulas.s16.xacc.st.ip q0,x8,-128,q0,q0
esp.vmulas.s16.xacc.st.xp q0,x8,x8,q0,q0
esp.vmulas.s8.qacc q0,q0
esp.vmulas.s8.qacc.ld.ip q0,x8,-128,q0,q0
esp.vmulas.s8.qacc.ld.xp q0,x8,x8,q0,q0
esp.vmulas.s8.qacc.st.ip q0,x8,-128,q0,q0
esp.vmulas.s8.qacc.st.xp q0,x8,x8,q0,q0
esp.vmulas.s8.xacc q0,q0
esp.vmulas.s8.xacc.ld.ip q0,x8,-128,q0,q0
esp.vmulas.s8.xacc.ld.xp q0,x8,x8,q0,q0
esp.vmulas.s8.xacc.st.ip q0,x8,-128,q0,q0
esp.vmulas.s8.xacc.st.xp q0,x8,x8,q0,q0
esp.vmulas.u16.qacc q0,q0
esp.vmulas.u16.qacc.ld.ip q0,x8,-128,q0,q0
esp.vmulas.u16.qacc.ld.xp q0,x8,x8,q0,q0
esp.vmulas.u16.qacc.st.ip q0,x8,-128,q0,q0
esp.vmulas.u16.qacc.st.xp q0,x8,x8,q0,q0
esp.vmulas.u16.xacc q0,q0
esp.vmulas.u16.xacc.ld.ip q0,x8,-128,q0,q0
esp.vmulas.u16.xacc.ld.xp q0,x8,x8,q0,q0
esp.vmulas.u16.xacc.st.ip q0,x8,-128,q0,q0
esp.vmulas.u16.xacc.st.xp q0,x8,x8,q0,q0
esp.vmulas.u8.qacc q0,q0
esp.vmulas.u8.qacc.ld.ip q0,x8,-128,q0,q0
esp.vmulas.u8.qacc.ld.xp q0,x8,x8,q0,q0
esp.vmulas.u8.qacc.st.ip q0,x8,-128,q0,q0
esp.vmulas.u8.qacc.st.xp q0,x8,x8,q0,q0
esp.vmulas.u8.xacc q0,q0
esp.vmulas.u8.xacc.ld.ip q0,x8,-128,q0,q0
esp.vmulas.u8.xacc.ld.xp q0,x8,x8,q0,q0
esp.vmulas.u8.xacc.st.ip q0,x8,-128,q0,q0
esp.vmulas.u8.xacc.st.xp q0,x8,x8,q0,q0
esp.vmulas.s16.qacc.ldbc.incp q0,x8,q0,q0
esp.vmulas.s8.qacc.ldbc.incp q0,x8,q0,q0
esp.vmulas.u16.qacc.ldbc.incp q0,x8,q0,q0
esp.vmulas.u8.qacc.ldbc.incp q0,x8,q0,q0
esp.vsmulas.s16.qacc q0,q0,0
esp.vsmulas.s16.qacc.ld.incp q0,x8,q0,q0,0
esp.vsmulas.s8.qacc q0,q0,0
esp.vsmulas.s8.qacc.ld.incp q0,x8,q0,q0,0
esp.vsmulas.u16.qacc q0,q0,0
esp.vsmulas.u16.qacc.ld.incp q0,x8,q0,q0,0
esp.vsmulas.u8.qacc q0,q0,0
esp.vsmulas.u8.qacc.ld.incp q0,x8,q0,q0,0
esp.cmul.s16 q0,q0,q0,0
esp.cmul.s16.ld.incp q0,x8,q0,q0,q0,0
esp.cmul.s16.st.incp q0,x8,q0,q0,q0,0
esp.cmul.s8 q0,q0,q0,0
esp.cmul.s8.ld.incp q0,x8,q0,q0,q0,0
esp.cmul.s8.st.incp q0,x8,q0,q0,q0,0
esp.cmul.u16 q0,q0,q0,0
esp.cmul.u16.ld.incp q0,x8,q0,q0,q0,0
esp.cmul.u16.st.incp q0,x8,q0,q0,q0,0
esp.cmul.u8 q0,q0,q0,0
esp.cmul.u8.ld.incp q0,x8,q0,q0,q0,0
esp.cmul.u8.st.incp q0,x8,q0,q0,q0,0
esp.max.s16.a q0,x8
esp.max.s32.a q0,x8
esp.max.s8.a q0,x8
esp.max.u16.a q0,x8
esp.max.u32.a q0,x8
esp.max.u8.a q0,x8
esp.min.s16.a q0,x8
esp.min.s32.a q0,x8
esp.min.s8.a q0,x8
esp.min.u16.a q0,x8
esp.min.u32.a q0,x8
esp.min.u8.a q0,x8
esp.vabs.16 q0,q0
esp.vabs.32 q0,q0
esp.vabs.8 q0,q0
esp.vadd.s16 q0,q0,q0
esp.vadd.s16.ld.incp q0,x8,q0,q0,q0
esp.vadd.s16.st.incp q0,x8,q0,q0,q0
esp.vadd.s32 q0,q0,q0
esp.vadd.s32.ld.incp q0,x8,q0,q0,q0
esp.vadd.s32.st.incp q0,x8,q0,q0,q0
esp.vadd.s8 q0,q0,q0
esp.vadd.s8.ld.incp q0,x8,q0,q0,q0
esp.vadd.s8.st.incp q0,x8,q0,q0,q0
esp.vadd.u16 q0,q0,q0
esp.vadd.u16.ld.incp q0,x8,q0,q0,q0
esp.vadd.u16.st.incp q0,x8,q0,q0,q0
esp.vadd.u32 q0,q0,q0
esp.vadd.u32.ld.incp q0,x8,q0,q0,q0
esp.vadd.u32.st.incp q0,x8,q0,q0,q0
esp.vadd.u8 q0,q0,q0
esp.vadd.u8.ld.incp q0,x8,q0,q0,q0
esp.vadd.u8.st.incp q0,x8,q0,q0,q0
esp.vclamp.s16 q0,q0,0
esp.vmax.s16 q0,q0,q0
esp.vmax.s16.ld.incp q0,x8,q0,q0,q0
esp.vmax.s16.st.incp q0,x8,q0,q0,q0
esp.vmax.s32 q0,q0,q0
esp.vmax.s32.ld.incp q0,x8,q0,q0,q0
esp.vmax.s32.st.incp q0,x8,q0,q0,q0
esp.vmax.s8 q0,q0,q0
esp.vmax.s8.ld.incp q0,x8,q0,q0,q0
esp.vmax.s8.st.incp q0,x8,q0,q0,q0
esp.vmax.u16 q0,q0,q0
esp.vmax.u16.ld.incp q0,x8,q0,q0,q0
esp.vmax.u16.st.incp q0,x8,q0,q0,q0
esp.vmax.u32 q0,q0,q0
esp.vmax.u32.ld.incp q0,x8,q0,q0,q0
esp.vmax.u32.st.incp q0,x8,q0,q0,q0
esp.vmax.u8 q0,q0,q0
esp.vmax.u8.ld.incp q0,x8,q0,q0,q0
esp.vmax.u8.st.incp q0,x8,q0,q0,q0
esp.vmin.s16 q0,q0,q0
esp.vmin.s16.ld.incp q0,x8,q0,q0,q0
esp.vmin.s16.st.incp q0,x8,q0,q0,q0
esp.vmin.s32 q0,q0,q0
esp.vmin.s32.ld.incp q0,x8,q0,q0,q0
esp.vmin.s32.st.incp q0,x8,q0,q0,q0
esp.vmin.s8 q0,q0,q0
esp.vmin.s8.ld.incp q0,x8,q0,q0,q0
esp.vmin.s8.st.incp q0,x8,q0,q0,q0
esp.vmin.u16 q0,q0,q0
esp.vmin.u16.ld.incp q0,x8,q0,q0,q0
esp.vmin.u16.st.incp q0,x8,q0,q0,q0
esp.vmin.u32 q0,q0,q0
esp.vmin.u32.ld.incp q0,x8,q0,q0,q0
esp.vmin.u32.st.incp q0,x8,q0,q0,q0
esp.vmin.u8 q0,q0,q0
esp.vmin.u8.ld.incp q0,x8,q0,q0,q0
esp.vmin.u8.st.incp q0,x8,q0,q0,q0
esp.vmul.s16 q0,q0,q0
esp.vmul.s16.ld.incp q0,x8,q0,q0,q0
esp.vmul.s16.s8xs8 q0,q0,q0,q0
esp.vmul.s16.st.incp q0,x8,q0,q0,q0
esp.vmul.s32.s16xs16 q0,q0,q0,q0
esp.vmul.s8 q0,q0,q0
esp.vmul.s8.ld.incp q0,x8,q0,q0,q0
esp.vmul.s8.st.incp q0,x8,q0,q0,q0
esp.vmul.u16 q0,q0,q0
esp.vmul.u16.ld.incp q0,x8,q0,q0,q0
esp.vmul.u16.st.incp q0,x8,q0,q0,q0
esp.vmul.u8 q0,q0,q0
esp.vmul.u8.ld.incp q0,x8,q0,q0,q0
esp.vmul.u8.st.incp q0,x8,q0,q0,q0
esp.vprelu.s16 q0,q0,q0,x8
esp.vprelu.s8 q0,q0,q0,x8
esp.vrelu.s16 q0,x8,x8
esp.vrelu.s8 q0,x8,x8
esp.vsadds.s16 q0,q0,x8
esp.vsadds.s8 q0,q0,x8
esp.vsadds.u16 q0,q0,x8
esp.vsadds.u8 q0,q0,x8
esp.vsat.s16 q0,q0,x8,x8
esp.vsat.s32 q0,q0,x8,x8
esp.vsat.s8 q0,q0,x8,x8
esp.vsat.u16 q0,q0,x8,x8
esp.vsat.u32 q0,q0,x8,x8
esp.vsat.u8 q0,q0,x8,x8
esp.vssubs.s16 q0,q0,x8
esp.vssubs.s8 q0,q0,x8
esp.vssubs.u16 q0,q0,x8
esp.vssubs.u8 q0,q0,x8
esp.vsub.s16 q0,q0,q0
esp.vsub.s16.ld.incp q0,x8,q0,q0,q0
esp.vsub.s16.st.incp q0,x8,q0,q0,q0
esp.vsub.s32 q0,q0,q0
esp.vsub.s32.ld.incp q0,x8,q0,q0,q0
esp.vsub.s32.st.incp q0,x8,q0,q0,q0
esp.vsub.s8 q0,q0,q0
esp.vsub.s8.ld.incp q0,x8,q0,q0,q0
esp.vsub.s8.st.incp q0,x8,q0,q0,q0
esp.vsub.u16 q0,q0,q0
esp.vsub.u16.ld.incp q0,x8,q0,q0,q0
esp.vsub.u16.st.incp q0,x8,q0,q0,q0
esp.vsub.u32 q0,q0,q0
esp.vsub.u32.ld.incp q0,x8,q0,q0,q0
esp.vsub.u32.st.incp q0,x8,q0,q0,q0
esp.vsub.u8 q0,q0,q0
esp.vsub.u8.ld.incp q0,x8,q0,q0,q0
esp.vsub.u8.st.incp q0,x8,q0,q0,q0
esp.addx2 x8,x8,x8
esp.addx4 x8,x8,x8
esp.sat x8,x8,x8
esp.subx2 x8,x8,x8
esp.subx4 x8,x8,x8
esp.andq q0,q0,q0
esp.notq q0,q0
esp.orq q0,q0,q0
esp.xorq q0,q0,q0
esp.vcmp.eq.s16 q0,q0,q0
esp.vcmp.eq.s32 q0,q0,q0
esp.vcmp.eq.s8 q0,q0,q0
esp.vcmp.eq.u16 q0,q0,q0
esp.vcmp.eq.u32 q0,q0,q0
esp.vcmp.eq.u8 q0,q0,q0
esp.vcmp.gt.s16 q0,q0,q0
esp.vcmp.gt.s32 q0,q0,q0
esp.vcmp.gt.s8 q0,q0,q0
esp.vcmp.gt.u16 q0,q0,q0
esp.vcmp.gt.u32 q0,q0,q0
esp.vcmp.gt.u8 q0,q0,q0
esp.vcmp.lt.s16 q0,q0,q0
esp.vcmp.lt.s32 q0,q0,q0
esp.vcmp.lt.s8 q0,q0,q0
esp.vcmp.lt.u16 q0,q0,q0
esp.vcmp.lt.u32 q0,q0,q0
esp.vcmp.lt.u8 q0,q0,q0
esp.mov.s16.qacc q0
esp.mov.s8.qacc q0
esp.mov.u16.qacc q0
esp.mov.u8.qacc q0
esp.movi.16.a q0,x8,0
esp.movi.16.q q0,x8,0
esp.movi.32.a q0,x8,0
esp.movi.32.q q0,x8,0
esp.movi.8.a q0,x8,0
esp.movi.8.q q0,x8,0
esp.movx.r.cfg x8
esp.movx.r.fft.bit.width x8
esp.movx.r.perf x8,x8
esp.movx.r.sar x8
esp.movx.r.sar.bytes x8
esp.movx.r.xacc.h x8
esp.movx.r.xacc.l x8
esp.movx.w.cfg x8
esp.movx.w.fft.bit.width x8
esp.movx.w.perf x8
esp.movx.w.sar x8
esp.movx.w.sar.bytes x8
esp.movx.w.xacc.h x8
esp.movx.w.xacc.l x8
esp.vext.s16 q0,q0,q0
esp.vext.s8 q0,q0,q0
esp.vext.u16 q0,q0,q0
esp.vext.u8 q0,q0,q0
esp.vunzip.16 q0,q0
esp.vunzip.32 q0,q0
esp.vunzip.8 q0,q0
esp.vunzipt.16 q0,q0,q0
esp.vunzipt.8 q0,q0,q0
esp.vzip.16 q0,q0
esp.vzip.32 q0,q0
esp.vzip.8 q0,q0
esp.vzipt.16 q0,q0,q0
esp.vzipt.8 q0,q0,q0
esp.zero.q q0
esp.zero.qacc
esp.zero.xacc
esp.fft.ams.s16.ld.incp q0,x8,q0,q0,q0,q0,q0,0
esp.fft.ams.s16.ld.incp.uaup q0,x8,q0,q0,q0,q0,q0,0
esp.fft.ams.s16.ld.r32.decp q0,x8,q0,q0,q0,q0,q0,0
esp.fft.ams.s16.st.incp q0,q0,x8,x8,q0,q0,q0,0
esp.fft.bitrev q0,x8
esp.fft.cmul.s16.ld.xp q0,x8,x8,q0,q0,q0,0
esp.fft.cmul.s16.st.xp q0,q0,q0,x8,x8,0,0,0
esp.fft.r2bf.s16 q0,q0,q0,q0,0
esp.fft.r2bf.s16.st.incp q0,q0,q0,x8,0
esp.fft.vst.r32.decp q0,x8,0
esp.ld.128.usar.ip q0,x8,-2048
esp.ld.128.usar.xp q0,x8,x8
esp.ld.xacc.ip x8,-1024
esp.ldqa.s16.128.ip x8,-2048
esp.ldqa.s16.128.xp x8,x8
esp.ldqa.s8.128.ip x8,-2048
esp.ldqa.s8.128.xp x8,x8
esp.ldqa.u16.128.ip x8,-2048
esp.ldqa.u16.128.xp x8,x8
esp.ldqa.u8.128.ip x8,-2048
esp.ldqa.u8.128.xp x8,x8
esp.vldbc.16.ip q0,x8,-512
esp.vldbc.16.xp q0,x8,x8
esp.vldbc.32.ip q0,x8,-512
esp.vldbc.32.xp q0,x8,x8
esp.vldbc.8.ip q0,x8,-512
esp.vldbc.8.xp q0,x8,x8
esp.vldext.s16.ip q0,q0,x8,-128
esp.vldext.s16.xp q0,q0,x8,x8
esp.vldext.s8.ip q0,q0,x8,-128
esp.vldext.s8.xp q0,q0,x8,x8
esp.vldext.u16.ip q0,q0,x8,-128
esp.vldext.u16.xp q0,q0,x8,x8
esp.vldext.u8.ip q0,q0,x8,-128
esp.vldext.u8.xp q0,q0,x8,x8
esp.vldhbc.16.incp q0,q0,x8
esp.ld.qacc.h.h.128.ip x8,-2048
esp.ld.qacc.h.l.128.ip x8,-2048
esp.ld.qacc.l.h.128.ip x8,-2048
esp.ld.qacc.l.l.128.ip x8,-2048
esp.ld.ua.state.ip x8,-2048
esp.ldxq.32 q0,q0,x8,0,0
esp.st.qacc.h.h.128.ip x8,-2048
esp.st.qacc.h.l.128.ip x8,-2048
esp.st.qacc.l.h.128.ip x8,-2048
esp.st.qacc.l.l.128.ip x8,-2048
esp.st.ua.state.ip x8,-2048
esp.stxq.32 q0,q0,x8,0,0
esp.vld.128.ip q0,x8,-2048
esp.vld.128.xp q0,x8,x8
esp.vld.h.64.ip q0,x8,-1024
esp.vld.h.64.xp q0,x8,x8
esp.vld.l.64.ip q0,x8,-1024
esp.vld.l.64.xp q0,x8,x8
esp.vst.128.ip q0,x8,-2048
esp.vst.128.xp q0,x8,x8
esp.vst.h.64.ip q0,x8,-1024
esp.vst.h.64.xp q0,x8,x8
esp.vst.l.64.ip q0,x8,-1024
esp.vst.l.64.xp q0,x8,x8
esp.slci.2q q0,q0,0
esp.slcxxp.2q q0,q0,x8,x8
esp.src.q q0,q0,q0
esp.src.q.ld.ip q0,x8,-2048,q0,q0
esp.src.q.ld.xp q0,x8,x8,q0,q0
esp.src.q.qup q0,q0,q0
esp.srci.2q q0,q0,0
esp.srcmb.s16.q.qacc q0,q0,0
esp.srcmb.s16.qacc q0,x8,0
esp.srcmb.s8.q.qacc q0,q0,0
esp.srcmb.s8.qacc q0,x8,0
esp.srcmb.u16.q.qacc q0,q0,0
esp.srcmb.u16.qacc q0,x8,0
esp.srcmb.u8.q.qacc q0,q0,0
esp.srcmb.u8.qacc q0,x8,0
esp.srcq.128.st.incp q0,q0,x8
esp.srcxxp.2q q0,q0,x8,x8
esp.srs.s.xacc x8,x8
esp.srs.u.xacc x8,x8
esp.vsl.32 q0,q0
esp.vsld.16 q0,q0,q0
esp.vsld.32 q0,q0,q0
esp.vsld.8 q0,q0,q0
esp.vsr.s32 q0,q0
esp.vsr.u32 q0,q0
esp.vsrd.16 q0,q0,q0
esp.vsrd.32 q0,q0,q0
esp.vsrd.8 q0,q0,q0
esp.st.s.xacc.ip x8,-1024
esp.st.u.xacc.ip x8,-1024
esp.lp.setupi 0,0,0
esp.lp.setup 0,x8,0
esp.lp.starti 0,0
esp.lp.endi 0,0
esp.lp.counti 0,0
esp.lp.count 0,x8