diff --git a/riscv64/riscv64asm/objdump_test.go b/riscv64/riscv64asm/objdump_test.go index ddaa28c5..e54810d5 100644 --- a/riscv64/riscv64asm/objdump_test.go +++ b/riscv64/riscv64asm/objdump_test.go @@ -88,6 +88,12 @@ func allowedMismatchObjdump(text string, inst *Inst, dec ExtInst, version string return true } + // Zabha instructions (amocas.b/h) require both zabha and zacas + // in the ELF attributes, supported by objdump 2.43 and later. + if strings.HasPrefix(dec.text, ".insn") && isZabhaOp(inst.Op) && !objdumpVersionAtLeast(version, "2.43") { + return true + } + return false } @@ -128,3 +134,11 @@ func isZvkOp(op Op) bool { } return false } + +func isZabhaOp(op Op) bool { + // All Zabha instructions are AMO* byte (.B) or halfword (.H) operations, + // including .AQ/.RL/.AQRL variants (e.g. AMOADD.B.AQ contains ".B"). + name := opstr[op] + return (strings.Contains(name, ".B") || strings.Contains(name, ".H")) && + strings.HasPrefix(name, "AMO") +} diff --git a/riscv64/riscv64asm/objdumpext_test.go b/riscv64/riscv64asm/objdumpext_test.go index acbd9256..2db0ebb1 100644 --- a/riscv64/riscv64asm/objdumpext_test.go +++ b/riscv64/riscv64asm/objdumpext_test.go @@ -289,7 +289,7 @@ func writeELF64(f *os.File, size int) error { strtabsize := len("\x00.text\x00.riscv.attributes\x00.shstrtab\x00") // RISC-V objdump needs the .riscv.attributes section to identify extensions. exts := "rv64i2p0_m2p0_a2p0_f2p0_d2p0_q2p0_c2p0_v1p0_" + - "zicbom1p0_zicbop1p0_zicboz1p0_zicond1p0_zmmul1p0_" + + "zabha1p0_zacas1p0_zicbom1p0_zicbop1p0_zicboz1p0_zicond1p0_zmmul1p0_" + "zfh1p0_zfhmin1p0_zba1p0_zbb1p0_zbc1p0_zbs1p0_" + "zvkg1p0_zvkned1p0_zvknha1p0_zvknhb1p0_zvksed1p0_zvksh1p0" b := buildRISCVAttributes(exts) diff --git a/riscv64/riscv64asm/plan9x.go b/riscv64/riscv64asm/plan9x.go index 59f2a5b9..2e552ed3 100644 --- a/riscv64/riscv64asm/plan9x.go +++ b/riscv64/riscv64asm/plan9x.go @@ -58,8 +58,21 @@ goSyntaxSwitch: AMOOR_D_RL, AMOOR_D_AQRL, AMOOR_W, AMOOR_W_AQ, AMOOR_W_RL, AMOOR_W_AQRL, AMOSWAP_D, AMOSWAP_D_AQ, AMOSWAP_D_RL, AMOSWAP_D_AQRL, AMOSWAP_W, AMOSWAP_W_AQ, AMOSWAP_W_RL, AMOSWAP_W_AQRL, AMOXOR_D, AMOXOR_D_AQ, AMOXOR_D_RL, AMOXOR_D_AQRL, AMOXOR_W, - AMOXOR_W_AQ, AMOXOR_W_RL, AMOXOR_W_AQRL, SC_D, SC_D_AQ, SC_D_RL, SC_D_AQRL, - SC_W, SC_W_AQ, SC_W_RL, SC_W_AQRL: + AMOXOR_W_AQ, AMOXOR_W_RL, AMOXOR_W_AQRL, AMOADD_B, AMOADD_B_AQ, AMOADD_B_AQRL, + AMOADD_B_RL, AMOADD_H, AMOADD_H_AQ, AMOADD_H_AQRL, AMOADD_H_RL, AMOAND_B, + AMOAND_B_AQ, AMOAND_B_AQRL, AMOAND_B_RL, AMOAND_H, AMOAND_H_AQ, AMOAND_H_AQRL, + AMOAND_H_RL, AMOCAS_B, AMOCAS_B_AQ, AMOCAS_B_AQRL, AMOCAS_B_RL, AMOCAS_H, + AMOCAS_H_AQ, AMOCAS_H_AQRL, AMOCAS_H_RL, AMOMAXU_B, AMOMAXU_B_AQ, AMOMAXU_B_AQRL, + AMOMAXU_B_RL, AMOMAXU_H, AMOMAXU_H_AQ, AMOMAXU_H_AQRL, AMOMAXU_H_RL, AMOMAX_B, + AMOMAX_B_AQ, AMOMAX_B_AQRL, AMOMAX_B_RL, AMOMAX_H, AMOMAX_H_AQ, AMOMAX_H_AQRL, + AMOMAX_H_RL, AMOMINU_B, AMOMINU_B_AQ, AMOMINU_B_AQRL, AMOMINU_B_RL, AMOMINU_H, + AMOMINU_H_AQ, AMOMINU_H_AQRL, AMOMINU_H_RL, AMOMIN_B, AMOMIN_B_AQ, AMOMIN_B_AQRL, + AMOMIN_B_RL, AMOMIN_H, AMOMIN_H_AQ, AMOMIN_H_AQRL, AMOMIN_H_RL, AMOOR_B, + AMOOR_B_AQ, AMOOR_B_AQRL, AMOOR_B_RL, AMOOR_H, AMOOR_H_AQ, AMOOR_H_AQRL, + AMOOR_H_RL, AMOSWAP_B, AMOSWAP_B_AQ, AMOSWAP_B_AQRL, AMOSWAP_B_RL, AMOSWAP_H, + AMOSWAP_H_AQ, AMOSWAP_H_AQRL, AMOSWAP_H_RL, AMOXOR_B, AMOXOR_B_AQ, AMOXOR_B_AQRL, + AMOXOR_B_RL, AMOXOR_H, AMOXOR_H_AQ, AMOXOR_H_AQRL, AMOXOR_H_RL, + SC_D, SC_D_AQ, SC_D_RL, SC_D_AQRL, SC_W, SC_W_AQ, SC_W_RL, SC_W_AQRL: // Atomic instructions have special operand order. args[2], args[1] = args[1], args[2] diff --git a/riscv64/riscv64asm/tables.go b/riscv64/riscv64asm/tables.go index f96c307b..7b356f24 100644 --- a/riscv64/riscv64asm/tables.go +++ b/riscv64/riscv64asm/tables.go @@ -13,74 +13,154 @@ const ( ADDIW ADDW ADD_UW + AMOADD_B + AMOADD_B_AQ + AMOADD_B_AQRL + AMOADD_B_RL AMOADD_D AMOADD_D_AQ AMOADD_D_AQRL AMOADD_D_RL + AMOADD_H + AMOADD_H_AQ + AMOADD_H_AQRL + AMOADD_H_RL AMOADD_W AMOADD_W_AQ AMOADD_W_AQRL AMOADD_W_RL + AMOAND_B + AMOAND_B_AQ + AMOAND_B_AQRL + AMOAND_B_RL AMOAND_D AMOAND_D_AQ AMOAND_D_AQRL AMOAND_D_RL + AMOAND_H + AMOAND_H_AQ + AMOAND_H_AQRL + AMOAND_H_RL AMOAND_W AMOAND_W_AQ AMOAND_W_AQRL AMOAND_W_RL + AMOCAS_B + AMOCAS_B_AQ + AMOCAS_B_AQRL + AMOCAS_B_RL + AMOCAS_H + AMOCAS_H_AQ + AMOCAS_H_AQRL + AMOCAS_H_RL + AMOMAXU_B + AMOMAXU_B_AQ + AMOMAXU_B_AQRL + AMOMAXU_B_RL AMOMAXU_D AMOMAXU_D_AQ AMOMAXU_D_AQRL AMOMAXU_D_RL + AMOMAXU_H + AMOMAXU_H_AQ + AMOMAXU_H_AQRL + AMOMAXU_H_RL AMOMAXU_W AMOMAXU_W_AQ AMOMAXU_W_AQRL AMOMAXU_W_RL + AMOMAX_B + AMOMAX_B_AQ + AMOMAX_B_AQRL + AMOMAX_B_RL AMOMAX_D AMOMAX_D_AQ AMOMAX_D_AQRL AMOMAX_D_RL + AMOMAX_H + AMOMAX_H_AQ + AMOMAX_H_AQRL + AMOMAX_H_RL AMOMAX_W AMOMAX_W_AQ AMOMAX_W_AQRL AMOMAX_W_RL + AMOMINU_B + AMOMINU_B_AQ + AMOMINU_B_AQRL + AMOMINU_B_RL AMOMINU_D AMOMINU_D_AQ AMOMINU_D_AQRL AMOMINU_D_RL + AMOMINU_H + AMOMINU_H_AQ + AMOMINU_H_AQRL + AMOMINU_H_RL AMOMINU_W AMOMINU_W_AQ AMOMINU_W_AQRL AMOMINU_W_RL + AMOMIN_B + AMOMIN_B_AQ + AMOMIN_B_AQRL + AMOMIN_B_RL AMOMIN_D AMOMIN_D_AQ AMOMIN_D_AQRL AMOMIN_D_RL + AMOMIN_H + AMOMIN_H_AQ + AMOMIN_H_AQRL + AMOMIN_H_RL AMOMIN_W AMOMIN_W_AQ AMOMIN_W_AQRL AMOMIN_W_RL + AMOOR_B + AMOOR_B_AQ + AMOOR_B_AQRL + AMOOR_B_RL AMOOR_D AMOOR_D_AQ AMOOR_D_AQRL AMOOR_D_RL + AMOOR_H + AMOOR_H_AQ + AMOOR_H_AQRL + AMOOR_H_RL AMOOR_W AMOOR_W_AQ AMOOR_W_AQRL AMOOR_W_RL + AMOSWAP_B + AMOSWAP_B_AQ + AMOSWAP_B_AQRL + AMOSWAP_B_RL AMOSWAP_D AMOSWAP_D_AQ AMOSWAP_D_AQRL AMOSWAP_D_RL + AMOSWAP_H + AMOSWAP_H_AQ + AMOSWAP_H_AQRL + AMOSWAP_H_RL AMOSWAP_W AMOSWAP_W_AQ AMOSWAP_W_AQRL AMOSWAP_W_RL + AMOXOR_B + AMOXOR_B_AQ + AMOXOR_B_AQRL + AMOXOR_B_RL AMOXOR_D AMOXOR_D_AQ AMOXOR_D_AQRL AMOXOR_D_RL + AMOXOR_H + AMOXOR_H_AQ + AMOXOR_H_AQRL + AMOXOR_H_RL AMOXOR_W AMOXOR_W_AQ AMOXOR_W_AQRL @@ -1037,74 +1117,154 @@ var opstr = [...]string{ ADDIW: "ADDIW", ADDW: "ADDW", ADD_UW: "ADD.UW", + AMOADD_B: "AMOADD.B", + AMOADD_B_AQ: "AMOADD.B.AQ", + AMOADD_B_AQRL: "AMOADD.B.AQRL", + AMOADD_B_RL: "AMOADD.B.RL", AMOADD_D: "AMOADD.D", AMOADD_D_AQ: "AMOADD.D.AQ", AMOADD_D_AQRL: "AMOADD.D.AQRL", AMOADD_D_RL: "AMOADD.D.RL", + AMOADD_H: "AMOADD.H", + AMOADD_H_AQ: "AMOADD.H.AQ", + AMOADD_H_AQRL: "AMOADD.H.AQRL", + AMOADD_H_RL: "AMOADD.H.RL", AMOADD_W: "AMOADD.W", AMOADD_W_AQ: "AMOADD.W.AQ", AMOADD_W_AQRL: "AMOADD.W.AQRL", AMOADD_W_RL: "AMOADD.W.RL", + AMOAND_B: "AMOAND.B", + AMOAND_B_AQ: "AMOAND.B.AQ", + AMOAND_B_AQRL: "AMOAND.B.AQRL", + AMOAND_B_RL: "AMOAND.B.RL", AMOAND_D: "AMOAND.D", AMOAND_D_AQ: "AMOAND.D.AQ", AMOAND_D_AQRL: "AMOAND.D.AQRL", AMOAND_D_RL: "AMOAND.D.RL", + AMOAND_H: "AMOAND.H", + AMOAND_H_AQ: "AMOAND.H.AQ", + AMOAND_H_AQRL: "AMOAND.H.AQRL", + AMOAND_H_RL: "AMOAND.H.RL", AMOAND_W: "AMOAND.W", AMOAND_W_AQ: "AMOAND.W.AQ", AMOAND_W_AQRL: "AMOAND.W.AQRL", AMOAND_W_RL: "AMOAND.W.RL", + AMOCAS_B: "AMOCAS.B", + AMOCAS_B_AQ: "AMOCAS.B.AQ", + AMOCAS_B_AQRL: "AMOCAS.B.AQRL", + AMOCAS_B_RL: "AMOCAS.B.RL", + AMOCAS_H: "AMOCAS.H", + AMOCAS_H_AQ: "AMOCAS.H.AQ", + AMOCAS_H_AQRL: "AMOCAS.H.AQRL", + AMOCAS_H_RL: "AMOCAS.H.RL", + AMOMAXU_B: "AMOMAXU.B", + AMOMAXU_B_AQ: "AMOMAXU.B.AQ", + AMOMAXU_B_AQRL: "AMOMAXU.B.AQRL", + AMOMAXU_B_RL: "AMOMAXU.B.RL", AMOMAXU_D: "AMOMAXU.D", AMOMAXU_D_AQ: "AMOMAXU.D.AQ", AMOMAXU_D_AQRL: "AMOMAXU.D.AQRL", AMOMAXU_D_RL: "AMOMAXU.D.RL", + AMOMAXU_H: "AMOMAXU.H", + AMOMAXU_H_AQ: "AMOMAXU.H.AQ", + AMOMAXU_H_AQRL: "AMOMAXU.H.AQRL", + AMOMAXU_H_RL: "AMOMAXU.H.RL", AMOMAXU_W: "AMOMAXU.W", AMOMAXU_W_AQ: "AMOMAXU.W.AQ", AMOMAXU_W_AQRL: "AMOMAXU.W.AQRL", AMOMAXU_W_RL: "AMOMAXU.W.RL", + AMOMAX_B: "AMOMAX.B", + AMOMAX_B_AQ: "AMOMAX.B.AQ", + AMOMAX_B_AQRL: "AMOMAX.B.AQRL", + AMOMAX_B_RL: "AMOMAX.B.RL", AMOMAX_D: "AMOMAX.D", AMOMAX_D_AQ: "AMOMAX.D.AQ", AMOMAX_D_AQRL: "AMOMAX.D.AQRL", AMOMAX_D_RL: "AMOMAX.D.RL", + AMOMAX_H: "AMOMAX.H", + AMOMAX_H_AQ: "AMOMAX.H.AQ", + AMOMAX_H_AQRL: "AMOMAX.H.AQRL", + AMOMAX_H_RL: "AMOMAX.H.RL", AMOMAX_W: "AMOMAX.W", AMOMAX_W_AQ: "AMOMAX.W.AQ", AMOMAX_W_AQRL: "AMOMAX.W.AQRL", AMOMAX_W_RL: "AMOMAX.W.RL", + AMOMINU_B: "AMOMINU.B", + AMOMINU_B_AQ: "AMOMINU.B.AQ", + AMOMINU_B_AQRL: "AMOMINU.B.AQRL", + AMOMINU_B_RL: "AMOMINU.B.RL", AMOMINU_D: "AMOMINU.D", AMOMINU_D_AQ: "AMOMINU.D.AQ", AMOMINU_D_AQRL: "AMOMINU.D.AQRL", AMOMINU_D_RL: "AMOMINU.D.RL", + AMOMINU_H: "AMOMINU.H", + AMOMINU_H_AQ: "AMOMINU.H.AQ", + AMOMINU_H_AQRL: "AMOMINU.H.AQRL", + AMOMINU_H_RL: "AMOMINU.H.RL", AMOMINU_W: "AMOMINU.W", AMOMINU_W_AQ: "AMOMINU.W.AQ", AMOMINU_W_AQRL: "AMOMINU.W.AQRL", AMOMINU_W_RL: "AMOMINU.W.RL", + AMOMIN_B: "AMOMIN.B", + AMOMIN_B_AQ: "AMOMIN.B.AQ", + AMOMIN_B_AQRL: "AMOMIN.B.AQRL", + AMOMIN_B_RL: "AMOMIN.B.RL", AMOMIN_D: "AMOMIN.D", AMOMIN_D_AQ: "AMOMIN.D.AQ", AMOMIN_D_AQRL: "AMOMIN.D.AQRL", AMOMIN_D_RL: "AMOMIN.D.RL", + AMOMIN_H: "AMOMIN.H", + AMOMIN_H_AQ: "AMOMIN.H.AQ", + AMOMIN_H_AQRL: "AMOMIN.H.AQRL", + AMOMIN_H_RL: "AMOMIN.H.RL", AMOMIN_W: "AMOMIN.W", AMOMIN_W_AQ: "AMOMIN.W.AQ", AMOMIN_W_AQRL: "AMOMIN.W.AQRL", AMOMIN_W_RL: "AMOMIN.W.RL", + AMOOR_B: "AMOOR.B", + AMOOR_B_AQ: "AMOOR.B.AQ", + AMOOR_B_AQRL: "AMOOR.B.AQRL", + AMOOR_B_RL: "AMOOR.B.RL", AMOOR_D: "AMOOR.D", AMOOR_D_AQ: "AMOOR.D.AQ", AMOOR_D_AQRL: "AMOOR.D.AQRL", AMOOR_D_RL: "AMOOR.D.RL", + AMOOR_H: "AMOOR.H", + AMOOR_H_AQ: "AMOOR.H.AQ", + AMOOR_H_AQRL: "AMOOR.H.AQRL", + AMOOR_H_RL: "AMOOR.H.RL", AMOOR_W: "AMOOR.W", AMOOR_W_AQ: "AMOOR.W.AQ", AMOOR_W_AQRL: "AMOOR.W.AQRL", AMOOR_W_RL: "AMOOR.W.RL", + AMOSWAP_B: "AMOSWAP.B", + AMOSWAP_B_AQ: "AMOSWAP.B.AQ", + AMOSWAP_B_AQRL: "AMOSWAP.B.AQRL", + AMOSWAP_B_RL: "AMOSWAP.B.RL", AMOSWAP_D: "AMOSWAP.D", AMOSWAP_D_AQ: "AMOSWAP.D.AQ", AMOSWAP_D_AQRL: "AMOSWAP.D.AQRL", AMOSWAP_D_RL: "AMOSWAP.D.RL", + AMOSWAP_H: "AMOSWAP.H", + AMOSWAP_H_AQ: "AMOSWAP.H.AQ", + AMOSWAP_H_AQRL: "AMOSWAP.H.AQRL", + AMOSWAP_H_RL: "AMOSWAP.H.RL", AMOSWAP_W: "AMOSWAP.W", AMOSWAP_W_AQ: "AMOSWAP.W.AQ", AMOSWAP_W_AQRL: "AMOSWAP.W.AQRL", AMOSWAP_W_RL: "AMOSWAP.W.RL", + AMOXOR_B: "AMOXOR.B", + AMOXOR_B_AQ: "AMOXOR.B.AQ", + AMOXOR_B_AQRL: "AMOXOR.B.AQRL", + AMOXOR_B_RL: "AMOXOR.B.RL", AMOXOR_D: "AMOXOR.D", AMOXOR_D_AQ: "AMOXOR.D.AQ", AMOXOR_D_AQRL: "AMOXOR.D.AQRL", AMOXOR_D_RL: "AMOXOR.D.RL", + AMOXOR_H: "AMOXOR.H", + AMOXOR_H_AQ: "AMOXOR.H.AQ", + AMOXOR_H_AQRL: "AMOXOR.H.AQRL", + AMOXOR_H_RL: "AMOXOR.H.RL", AMOXOR_W: "AMOXOR.W", AMOXOR_W_AQ: "AMOXOR.W.AQ", AMOXOR_W_AQRL: "AMOXOR.W.AQRL", @@ -2066,6 +2226,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0x0000003b, op: ADDW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}}, // ADD.UW rd, rs1, rs2 {mask: 0xfe00707f, value: 0x0800003b, op: ADD_UW, args: argTypeList{arg_rd, arg_rs1, arg_rs2}}, + // AMOADD.B rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x0000002f, op: AMOADD_B, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOADD.B.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x0400002f, op: AMOADD_B_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOADD.B.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x0600002f, op: AMOADD_B_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOADD.B.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x0200002f, op: AMOADD_B_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOADD.D rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x0000302f, op: AMOADD_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOADD.D.AQ rd, rs2, rs1_ptr @@ -2074,6 +2242,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0x0600302f, op: AMOADD_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOADD.D.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x0200302f, op: AMOADD_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOADD.H rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x0000102f, op: AMOADD_H, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOADD.H.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x0400102f, op: AMOADD_H_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOADD.H.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x0600102f, op: AMOADD_H_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOADD.H.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x0200102f, op: AMOADD_H_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOADD.W rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x0000202f, op: AMOADD_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOADD.W.AQ rd, rs2, rs1_ptr @@ -2082,6 +2258,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0x0600202f, op: AMOADD_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOADD.W.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x0200202f, op: AMOADD_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOAND.B rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x6000002f, op: AMOAND_B, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOAND.B.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x6400002f, op: AMOAND_B_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOAND.B.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x6600002f, op: AMOAND_B_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOAND.B.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x6200002f, op: AMOAND_B_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOAND.D rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x6000302f, op: AMOAND_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOAND.D.AQ rd, rs2, rs1_ptr @@ -2090,6 +2274,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0x6600302f, op: AMOAND_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOAND.D.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x6200302f, op: AMOAND_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOAND.H rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x6000102f, op: AMOAND_H, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOAND.H.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x6400102f, op: AMOAND_H_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOAND.H.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x6600102f, op: AMOAND_H_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOAND.H.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x6200102f, op: AMOAND_H_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOAND.W rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x6000202f, op: AMOAND_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOAND.W.AQ rd, rs2, rs1_ptr @@ -2098,6 +2290,30 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0x6600202f, op: AMOAND_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOAND.W.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x6200202f, op: AMOAND_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOCAS.B rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x2800002f, op: AMOCAS_B, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOCAS.B.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x2c00002f, op: AMOCAS_B_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOCAS.B.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x2e00002f, op: AMOCAS_B_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOCAS.B.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x2a00002f, op: AMOCAS_B_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOCAS.H rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x2800102f, op: AMOCAS_H, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOCAS.H.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x2c00102f, op: AMOCAS_H_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOCAS.H.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x2e00102f, op: AMOCAS_H_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOCAS.H.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x2a00102f, op: AMOCAS_H_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMAXU.B rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xe000002f, op: AMOMAXU_B, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMAXU.B.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xe400002f, op: AMOMAXU_B_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMAXU.B.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xe600002f, op: AMOMAXU_B_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMAXU.B.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xe200002f, op: AMOMAXU_B_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMAXU.D rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0xe000302f, op: AMOMAXU_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMAXU.D.AQ rd, rs2, rs1_ptr @@ -2106,6 +2322,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0xe600302f, op: AMOMAXU_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMAXU.D.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0xe200302f, op: AMOMAXU_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMAXU.H rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xe000102f, op: AMOMAXU_H, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMAXU.H.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xe400102f, op: AMOMAXU_H_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMAXU.H.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xe600102f, op: AMOMAXU_H_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMAXU.H.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xe200102f, op: AMOMAXU_H_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMAXU.W rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0xe000202f, op: AMOMAXU_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMAXU.W.AQ rd, rs2, rs1_ptr @@ -2114,6 +2338,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0xe600202f, op: AMOMAXU_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMAXU.W.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0xe200202f, op: AMOMAXU_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMAX.B rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xa000002f, op: AMOMAX_B, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMAX.B.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xa400002f, op: AMOMAX_B_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMAX.B.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xa600002f, op: AMOMAX_B_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMAX.B.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xa200002f, op: AMOMAX_B_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMAX.D rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0xa000302f, op: AMOMAX_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMAX.D.AQ rd, rs2, rs1_ptr @@ -2122,6 +2354,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0xa600302f, op: AMOMAX_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMAX.D.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0xa200302f, op: AMOMAX_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMAX.H rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xa000102f, op: AMOMAX_H, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMAX.H.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xa400102f, op: AMOMAX_H_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMAX.H.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xa600102f, op: AMOMAX_H_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMAX.H.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xa200102f, op: AMOMAX_H_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMAX.W rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0xa000202f, op: AMOMAX_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMAX.W.AQ rd, rs2, rs1_ptr @@ -2130,6 +2370,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0xa600202f, op: AMOMAX_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMAX.W.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0xa200202f, op: AMOMAX_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMINU.B rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xc000002f, op: AMOMINU_B, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMINU.B.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xc400002f, op: AMOMINU_B_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMINU.B.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xc600002f, op: AMOMINU_B_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMINU.B.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xc200002f, op: AMOMINU_B_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMINU.D rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0xc000302f, op: AMOMINU_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMINU.D.AQ rd, rs2, rs1_ptr @@ -2138,6 +2386,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0xc600302f, op: AMOMINU_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMINU.D.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0xc200302f, op: AMOMINU_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMINU.H rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xc000102f, op: AMOMINU_H, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMINU.H.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xc400102f, op: AMOMINU_H_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMINU.H.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xc600102f, op: AMOMINU_H_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMINU.H.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0xc200102f, op: AMOMINU_H_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMINU.W rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0xc000202f, op: AMOMINU_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMINU.W.AQ rd, rs2, rs1_ptr @@ -2146,6 +2402,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0xc600202f, op: AMOMINU_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMINU.W.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0xc200202f, op: AMOMINU_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMIN.B rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x8000002f, op: AMOMIN_B, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMIN.B.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x8400002f, op: AMOMIN_B_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMIN.B.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x8600002f, op: AMOMIN_B_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMIN.B.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x8200002f, op: AMOMIN_B_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMIN.D rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x8000302f, op: AMOMIN_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMIN.D.AQ rd, rs2, rs1_ptr @@ -2154,6 +2418,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0x8600302f, op: AMOMIN_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMIN.D.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x8200302f, op: AMOMIN_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMIN.H rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x8000102f, op: AMOMIN_H, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMIN.H.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x8400102f, op: AMOMIN_H_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMIN.H.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x8600102f, op: AMOMIN_H_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOMIN.H.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x8200102f, op: AMOMIN_H_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMIN.W rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x8000202f, op: AMOMIN_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMIN.W.AQ rd, rs2, rs1_ptr @@ -2162,6 +2434,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0x8600202f, op: AMOMIN_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOMIN.W.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x8200202f, op: AMOMIN_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOOR.B rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x4000002f, op: AMOOR_B, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOOR.B.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x4400002f, op: AMOOR_B_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOOR.B.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x4600002f, op: AMOOR_B_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOOR.B.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x4200002f, op: AMOOR_B_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOOR.D rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x4000302f, op: AMOOR_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOOR.D.AQ rd, rs2, rs1_ptr @@ -2170,6 +2450,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0x4600302f, op: AMOOR_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOOR.D.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x4200302f, op: AMOOR_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOOR.H rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x4000102f, op: AMOOR_H, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOOR.H.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x4400102f, op: AMOOR_H_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOOR.H.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x4600102f, op: AMOOR_H_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOOR.H.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x4200102f, op: AMOOR_H_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOOR.W rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x4000202f, op: AMOOR_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOOR.W.AQ rd, rs2, rs1_ptr @@ -2178,6 +2466,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0x4600202f, op: AMOOR_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOOR.W.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x4200202f, op: AMOOR_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOSWAP.B rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x0800002f, op: AMOSWAP_B, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOSWAP.B.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x0c00002f, op: AMOSWAP_B_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOSWAP.B.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x0e00002f, op: AMOSWAP_B_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOSWAP.B.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x0a00002f, op: AMOSWAP_B_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOSWAP.D rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x0800302f, op: AMOSWAP_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOSWAP.D.AQ rd, rs2, rs1_ptr @@ -2186,6 +2482,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0x0e00302f, op: AMOSWAP_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOSWAP.D.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x0a00302f, op: AMOSWAP_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOSWAP.H rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x0800102f, op: AMOSWAP_H, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOSWAP.H.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x0c00102f, op: AMOSWAP_H_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOSWAP.H.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x0e00102f, op: AMOSWAP_H_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOSWAP.H.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x0a00102f, op: AMOSWAP_H_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOSWAP.W rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x0800202f, op: AMOSWAP_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOSWAP.W.AQ rd, rs2, rs1_ptr @@ -2194,6 +2498,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0x0e00202f, op: AMOSWAP_W_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOSWAP.W.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x0a00202f, op: AMOSWAP_W_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOXOR.B rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x2000002f, op: AMOXOR_B, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOXOR.B.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x2400002f, op: AMOXOR_B_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOXOR.B.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x2600002f, op: AMOXOR_B_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOXOR.B.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x2200002f, op: AMOXOR_B_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOXOR.D rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x2000302f, op: AMOXOR_D, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOXOR.D.AQ rd, rs2, rs1_ptr @@ -2202,6 +2514,14 @@ var instFormats = [...]instFormat{ {mask: 0xfe00707f, value: 0x2600302f, op: AMOXOR_D_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOXOR.D.RL rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x2200302f, op: AMOXOR_D_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOXOR.H rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x2000102f, op: AMOXOR_H, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOXOR.H.AQ rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x2400102f, op: AMOXOR_H_AQ, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOXOR.H.AQRL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x2600102f, op: AMOXOR_H_AQRL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, + // AMOXOR.H.RL rd, rs2, rs1_ptr + {mask: 0xfe00707f, value: 0x2200102f, op: AMOXOR_H_RL, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOXOR.W rd, rs2, rs1_ptr {mask: 0xfe00707f, value: 0x2000202f, op: AMOXOR_W, args: argTypeList{arg_rd, arg_rs2, arg_rs1_ptr}}, // AMOXOR.W.AQ rd, rs2, rs1_ptr diff --git a/riscv64/riscv64asm/testdata/gnucases.txt b/riscv64/riscv64asm/testdata/gnucases.txt index db1fc8f4..e1b0dbfb 100644 --- a/riscv64/riscv64asm/testdata/gnucases.txt +++ b/riscv64/riscv64asm/testdata/gnucases.txt @@ -417,6 +417,68 @@ a260| ld x1,8(x2) b353530e| czero.eqz x7,x6,x5 b373530e| czero.nez x7,x6,x5 +# 16.: "Zabha" Extension for Byte and Halfword Atomic Memory Operations, Version 1.0 +af826300| amoadd.b x5,x6,(x7) +af826304| amoadd.b.aq x5,x6,(x7) +af826302| amoadd.b.rl x5,x6,(x7) +af926300| amoadd.h x5,x6,(x7) +af926304| amoadd.h.aq x5,x6,(x7) +af926302| amoadd.h.rl x5,x6,(x7) +af826360| amoand.b x5,x6,(x7) +af826364| amoand.b.aq x5,x6,(x7) +af826362| amoand.b.rl x5,x6,(x7) +af926360| amoand.h x5,x6,(x7) +af926364| amoand.h.aq x5,x6,(x7) +af926362| amoand.h.rl x5,x6,(x7) +af826328| amocas.b x5,x6,(x7) +af82632c| amocas.b.aq x5,x6,(x7) +af82632a| amocas.b.rl x5,x6,(x7) +af926328| amocas.h x5,x6,(x7) +af92632c| amocas.h.aq x5,x6,(x7) +af92632a| amocas.h.rl x5,x6,(x7) +af8263e0| amomaxu.b x5,x6,(x7) +af8263e4| amomaxu.b.aq x5,x6,(x7) +af8263e2| amomaxu.b.rl x5,x6,(x7) +af9263e0| amomaxu.h x5,x6,(x7) +af9263e4| amomaxu.h.aq x5,x6,(x7) +af9263e2| amomaxu.h.rl x5,x6,(x7) +af8263a0| amomax.b x5,x6,(x7) +af8263a4| amomax.b.aq x5,x6,(x7) +af8263a2| amomax.b.rl x5,x6,(x7) +af9263a0| amomax.h x5,x6,(x7) +af9263a4| amomax.h.aq x5,x6,(x7) +af9263a2| amomax.h.rl x5,x6,(x7) +af8263c0| amominu.b x5,x6,(x7) +af8263c4| amominu.b.aq x5,x6,(x7) +af8263c2| amominu.b.rl x5,x6,(x7) +af9263c0| amominu.h x5,x6,(x7) +af9263c4| amominu.h.aq x5,x6,(x7) +af9263c2| amominu.h.rl x5,x6,(x7) +af826380| amomin.b x5,x6,(x7) +af826384| amomin.b.aq x5,x6,(x7) +af826382| amomin.b.rl x5,x6,(x7) +af926380| amomin.h x5,x6,(x7) +af926384| amomin.h.aq x5,x6,(x7) +af926382| amomin.h.rl x5,x6,(x7) +af826340| amoor.b x5,x6,(x7) +af826344| amoor.b.aq x5,x6,(x7) +af826342| amoor.b.rl x5,x6,(x7) +af926340| amoor.h x5,x6,(x7) +af926344| amoor.h.aq x5,x6,(x7) +af926342| amoor.h.rl x5,x6,(x7) +af826308| amoswap.b x5,x6,(x7) +af82630c| amoswap.b.aq x5,x6,(x7) +af82630a| amoswap.b.rl x5,x6,(x7) +af926308| amoswap.h x5,x6,(x7) +af92630c| amoswap.h.aq x5,x6,(x7) +af92630a| amoswap.h.rl x5,x6,(x7) +af826320| amoxor.b x5,x6,(x7) +af826324| amoxor.b.aq x5,x6,(x7) +af826322| amoxor.b.rl x5,x6,(x7) +af926320| amoxor.h x5,x6,(x7) +af926324| amoxor.h.aq x5,x6,(x7) +af926322| amoxor.h.rl x5,x6,(x7) + # 19.6.1: Cache-Block Management Instructions (Zicbom), Version 1.0.0 0fa01200| cbo.clean (x5) 0fa02200| cbo.flush (x5) diff --git a/riscv64/riscv64asm/testdata/plan9cases.txt b/riscv64/riscv64asm/testdata/plan9cases.txt index a361d65e..68679d8d 100644 --- a/riscv64/riscv64asm/testdata/plan9cases.txt +++ b/riscv64/riscv64asm/testdata/plan9cases.txt @@ -370,6 +370,68 @@ b3115228| BSET X5, X4, X3 b353530e| CZEROEQZ X5, X6, X7 b373530e| CZERONEZ X5, X6, X7 +# 16.: "Zabha" Extension for Byte and Halfword Atomic Memory Operations, Version 1.0 +af826300| AMOADDB X6, (X7), X5 +af826304| AMOADDB X6, (X7), X5 +af826302| AMOADDB X6, (X7), X5 +af926300| AMOADDH X6, (X7), X5 +af926304| AMOADDH X6, (X7), X5 +af926302| AMOADDH X6, (X7), X5 +af826360| AMOANDB X6, (X7), X5 +af826364| AMOANDB X6, (X7), X5 +af826362| AMOANDB X6, (X7), X5 +af926360| AMOANDH X6, (X7), X5 +af926364| AMOANDH X6, (X7), X5 +af926362| AMOANDH X6, (X7), X5 +af826328| AMOCASB X6, (X7), X5 +af82632c| AMOCASB X6, (X7), X5 +af82632a| AMOCASB X6, (X7), X5 +af926328| AMOCASH X6, (X7), X5 +af92632c| AMOCASH X6, (X7), X5 +af92632a| AMOCASH X6, (X7), X5 +af8263e0| AMOMAXUB X6, (X7), X5 +af8263e4| AMOMAXUB X6, (X7), X5 +af8263e2| AMOMAXUB X6, (X7), X5 +af9263e0| AMOMAXUH X6, (X7), X5 +af9263e4| AMOMAXUH X6, (X7), X5 +af9263e2| AMOMAXUH X6, (X7), X5 +af8263a0| AMOMAXB X6, (X7), X5 +af8263a4| AMOMAXB X6, (X7), X5 +af8263a2| AMOMAXB X6, (X7), X5 +af9263a0| AMOMAXH X6, (X7), X5 +af9263a4| AMOMAXH X6, (X7), X5 +af9263a2| AMOMAXH X6, (X7), X5 +af8263c0| AMOMINUB X6, (X7), X5 +af8263c4| AMOMINUB X6, (X7), X5 +af8263c2| AMOMINUB X6, (X7), X5 +af9263c0| AMOMINUH X6, (X7), X5 +af9263c4| AMOMINUH X6, (X7), X5 +af9263c2| AMOMINUH X6, (X7), X5 +af826380| AMOMINB X6, (X7), X5 +af826384| AMOMINB X6, (X7), X5 +af826382| AMOMINB X6, (X7), X5 +af926380| AMOMINH X6, (X7), X5 +af926384| AMOMINH X6, (X7), X5 +af926382| AMOMINH X6, (X7), X5 +af826340| AMOORB X6, (X7), X5 +af826344| AMOORB X6, (X7), X5 +af826342| AMOORB X6, (X7), X5 +af926340| AMOORH X6, (X7), X5 +af926344| AMOORH X6, (X7), X5 +af926342| AMOORH X6, (X7), X5 +af826308| AMOSWAPB X6, (X7), X5 +af82630c| AMOSWAPB X6, (X7), X5 +af82630a| AMOSWAPB X6, (X7), X5 +af926308| AMOSWAPH X6, (X7), X5 +af92630c| AMOSWAPH X6, (X7), X5 +af92630a| AMOSWAPH X6, (X7), X5 +af826320| AMOXORB X6, (X7), X5 +af826324| AMOXORB X6, (X7), X5 +af826322| AMOXORB X6, (X7), X5 +af926320| AMOXORH X6, (X7), X5 +af926324| AMOXORH X6, (X7), X5 +af926322| AMOXORH X6, (X7), X5 + # 19.6.1: Cache-Block Management Instructions (Zicbom), Version 1.0.0 0fa01200| CBOCLEAN (X5) 0fa02200| CBOFLUSH (X5) diff --git a/riscv64/riscv64spec/spec.go b/riscv64/riscv64spec/spec.go index 887dd143..557028a1 100644 --- a/riscv64/riscv64spec/spec.go +++ b/riscv64/riscv64spec/spec.go @@ -32,6 +32,8 @@ var extensions = []string{ "rv_m", "rv_q", "rv_v", + "rv_zabha", + "rv_zabha_zacas", "rv_zba", "rv_zbb", "rv_zbc",