xref: /openbmc/qemu/disas/riscv-xventana.c (revision 14639717bf379480e937716fcaf1e72b47fd4c5f)
1f6f72338SChristoph Müllner /*
2f6f72338SChristoph Müllner  * QEMU RISC-V Disassembler for xventana.
3f6f72338SChristoph Müllner  *
4f6f72338SChristoph Müllner  * SPDX-License-Identifier: GPL-2.0-or-later
5f6f72338SChristoph Müllner  */
6f6f72338SChristoph Müllner 
7*3910de6fSPeter Maydell #include "qemu/osdep.h"
8f6f72338SChristoph Müllner #include "disas/riscv.h"
9f6f72338SChristoph Müllner #include "disas/riscv-xventana.h"
10f6f72338SChristoph Müllner 
11f6f72338SChristoph Müllner typedef enum {
12f6f72338SChristoph Müllner     /* 0 is reserved for rv_op_illegal. */
13f6f72338SChristoph Müllner     ventana_op_vt_maskc = 1,
14f6f72338SChristoph Müllner     ventana_op_vt_maskcn = 2,
15f6f72338SChristoph Müllner } rv_ventana_op;
16f6f72338SChristoph Müllner 
17f6f72338SChristoph Müllner const rv_opcode_data ventana_opcode_data[] = {
18f6f72338SChristoph Müllner     { "vt.illegal", rv_codec_illegal, rv_fmt_none, NULL, 0, 0, 0 },
19f6f72338SChristoph Müllner     { "vt.maskc", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
20f6f72338SChristoph Müllner     { "vt.maskcn", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 },
21f6f72338SChristoph Müllner };
22f6f72338SChristoph Müllner 
decode_xventanacondops(rv_decode * dec,rv_isa isa)23f6f72338SChristoph Müllner void decode_xventanacondops(rv_decode *dec, rv_isa isa)
24f6f72338SChristoph Müllner {
25f6f72338SChristoph Müllner     rv_inst inst = dec->inst;
26f6f72338SChristoph Müllner     rv_opcode op = rv_op_illegal;
27f6f72338SChristoph Müllner 
28f6f72338SChristoph Müllner     switch (((inst >> 0) & 0b11)) {
29f6f72338SChristoph Müllner     case 3:
30f6f72338SChristoph Müllner         switch (((inst >> 2) & 0b11111)) {
31f6f72338SChristoph Müllner         case 30:
32f6f72338SChristoph Müllner             switch (((inst >> 22) & 0b1111111000) | ((inst >> 12) & 0b0000000111)) {
33f6f72338SChristoph Müllner             case 6: op = ventana_op_vt_maskc; break;
34f6f72338SChristoph Müllner             case 7: op = ventana_op_vt_maskcn; break;
35f6f72338SChristoph Müllner             }
36f6f72338SChristoph Müllner             break;
37f6f72338SChristoph Müllner         }
38f6f72338SChristoph Müllner         break;
39f6f72338SChristoph Müllner     }
40f6f72338SChristoph Müllner 
41f6f72338SChristoph Müllner     dec->op = op;
42f6f72338SChristoph Müllner }
43