Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions arch/LoongArch/LoongArchGenCSMappingInsnOp.inc
Original file line number Diff line number Diff line change
Expand Up @@ -3383,49 +3383,49 @@
}},
{ /* LOONGARCH_LD_B (690) - LOONGARCH_INS_LD_B - ld.b $rd, $rj, $imm12 */
{
{ CS_OP_REG | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rj */
{ CS_OP_IMM | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* imm12 */
{ 0 }
}},
{ /* LOONGARCH_LD_BU (691) - LOONGARCH_INS_LD_BU - ld.bu $rd, $rj, $imm12 */
{
{ CS_OP_REG | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rj */
{ CS_OP_IMM | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* imm12 */
{ 0 }
}},
{ /* LOONGARCH_LD_D (692) - LOONGARCH_INS_LD_D - ld.d $rd, $rj, $imm12 */
{
{ CS_OP_REG | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rj */
{ CS_OP_IMM | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* imm12 */
{ 0 }
}},
{ /* LOONGARCH_LD_H (693) - LOONGARCH_INS_LD_H - ld.h $rd, $rj, $imm12 */
{
{ CS_OP_REG | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rj */
{ CS_OP_IMM | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* imm12 */
{ 0 }
}},
{ /* LOONGARCH_LD_HU (694) - LOONGARCH_INS_LD_HU - ld.hu $rd, $rj, $imm12 */
{
{ CS_OP_REG | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rj */
{ CS_OP_IMM | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* imm12 */
{ 0 }
}},
{ /* LOONGARCH_LD_W (695) - LOONGARCH_INS_LD_W - ld.w $rd, $rj, $imm12 */
{
{ CS_OP_REG | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rj */
{ CS_OP_IMM | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* imm12 */
{ 0 }
}},
{ /* LOONGARCH_LD_WU (696) - LOONGARCH_INS_LD_WU - ld.wu $rd, $rj, $imm12 */
{
{ CS_OP_REG | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rj */
{ CS_OP_IMM | CS_OP_MEM, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* imm12 */
{ 0 }
Expand Down Expand Up @@ -4233,28 +4233,28 @@
}},
{ /* LOONGARCH_ST_B (818) - LOONGARCH_INS_ST_B - st.b $rd, $rj, $imm12 */
{
{ CS_OP_REG | CS_OP_MEM, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG | CS_OP_MEM, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rj */
{ CS_OP_IMM | CS_OP_MEM, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* imm12 */
{ 0 }
}},
{ /* LOONGARCH_ST_D (819) - LOONGARCH_INS_ST_D - st.d $rd, $rj, $imm12 */
{
{ CS_OP_REG | CS_OP_MEM, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG | CS_OP_MEM, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rj */
{ CS_OP_IMM | CS_OP_MEM, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* imm12 */
{ 0 }
}},
{ /* LOONGARCH_ST_H (820) - LOONGARCH_INS_ST_H - st.h $rd, $rj, $imm12 */
{
{ CS_OP_REG | CS_OP_MEM, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG | CS_OP_MEM, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rj */
{ CS_OP_IMM | CS_OP_MEM, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* imm12 */
{ 0 }
}},
{ /* LOONGARCH_ST_W (821) - LOONGARCH_INS_ST_W - st.w $rd, $rj, $imm12 */
{
{ CS_OP_REG | CS_OP_MEM, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG, CS_AC_READ, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rd */
{ CS_OP_REG | CS_OP_MEM, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* rj */
{ CS_OP_IMM | CS_OP_MEM, CS_AC_WRITE, { CS_DATA_TYPE_INVALID_SIMPLE_VALUE_TYPE, CS_DATA_TYPE_LAST } }, /* imm12 */
{ 0 }
Expand Down
4 changes: 2 additions & 2 deletions arch/LoongArch/LoongArchGenCSOpGroup.inc
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@
/* Capstone's LLVM TableGen Backends: */
/* https://github.com/capstone-engine/llvm-capstone */

LOONGARCH_OP_GROUP_OPERAND = 0,
LOONGARCH_OP_GROUP_ATOMICMEMOP = 1,
LoongArch_OP_GROUP_Operand = 0,
LoongArch_OP_GROUP_AtomicMemOp = 1,
4 changes: 2 additions & 2 deletions arch/LoongArch/LoongArchInstPrinter.c
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ static void printRegName(MCInst *MI, SStream *O, MCRegister Reg)

static void printOperand(MCInst *MI, unsigned OpNo, SStream *O)
{
add_cs_detail(MI, LOONGARCH_OP_GROUP_OPERAND, OpNo);
add_cs_detail(MI, LoongArch_OP_GROUP_Operand, OpNo);
MCOperand *MO = MCInst_getOperand(MI, (OpNo));

if (MCOperand_isReg(MO)) {
Expand Down Expand Up @@ -134,7 +134,7 @@ static void printOperand(MCInst *MI, unsigned OpNo, SStream *O)

static void printAtomicMemOp(MCInst *MI, unsigned OpNo, SStream *O)
{
add_cs_detail(MI, LOONGARCH_OP_GROUP_ATOMICMEMOP, OpNo);
add_cs_detail(MI, LoongArch_OP_GROUP_AtomicMemOp, OpNo);
MCOperand *MO = MCInst_getOperand(MI, (OpNo));

printRegName(MI, O, MCOperand_getReg(MO));
Expand Down
4 changes: 2 additions & 2 deletions arch/LoongArch/LoongArchMapping.c
Original file line number Diff line number Diff line change
Expand Up @@ -549,7 +549,7 @@ void LoongArch_add_cs_detail(MCInst *MI, int /* loongarch_op_group */ op_group,
default:
printf("ERROR: Operand group %d not handled!\n", op_group);
CS_ASSERT_RET(0);
case LOONGARCH_OP_GROUP_OPERAND:
case LoongArch_OP_GROUP_Operand:
if (op_type == CS_OP_IMM) {
LoongArch_set_detail_op_imm(MI, OpNum, LOONGARCH_OP_IMM,
MCInst_getOpVal(MI, OpNum));
Expand All @@ -559,7 +559,7 @@ void LoongArch_add_cs_detail(MCInst *MI, int /* loongarch_op_group */ op_group,
} else
CS_ASSERT_RET(0 && "Op type not handled.");
break;
case LOONGARCH_OP_GROUP_ATOMICMEMOP:
case LoongArch_OP_GROUP_AtomicMemOp:
CS_ASSERT_RET(op_type == CS_OP_REG);
// converted to MEM operand later in LoongArch_rewrite_memory_operand
LoongArch_set_detail_op_reg(MI, OpNum,
Expand Down
18 changes: 17 additions & 1 deletion tests/details/loongarch.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ test_cases:
imm: -1
-
input:
bytes: [ 0x80, 0x80, 0x00, 0x40, 0x63, 0x80, 0xff, 0x02, 0x78, 0x20, 0xc0, 0x29, 0x00, 0x84, 0x00, 0x01, 0x00, 0xa4, 0x14, 0x01, 0xed, 0x01, 0x00, 0x4c ]
bytes: [ 0x80, 0x80, 0x00, 0x40, 0x63, 0x80, 0xff, 0x02, 0x78, 0x20, 0xc0, 0x29, 0x00, 0x84, 0x00, 0x01, 0x00, 0xa4, 0x14, 0x01, 0xed, 0x01, 0x00, 0x4c, 0x0c, 0xfe, 0x3f, 0x2a ]
arch: "loongarch"
options: [ CS_OPT_DETAIL, CS_MODE_LOONGARCH64]
address: 0x0
Expand Down Expand Up @@ -120,6 +120,22 @@ test_cases:
type: LOONGARCH_OP_IMM
imm: 0x0
groups: [ LOONGARCH_GRP_JUMP ]
-
asm_text: "ld.bu $t0, $t4, -1"
details:
loongarch:
operands:
-
type: LOONGARCH_OP_REG
reg: t0
access: CS_AC_WRITE
-
type: LOONGARCH_OP_MEM
mem_base: t4
mem_disp: -1
access: CS_AC_READ
regs_read: [ t4 ]
regs_write: [ t0 ]
-
input:
bytes: [ 0x80, 0x0d, 0x00, 0x40, 0x00, 0xec, 0x0b, 0x54 ]
Expand Down
Loading