cmd: update golang.org/x/arch for riscv64 disassembler

Update to a newer version of golang.org/x/arch, in order to bring in
changes to the riscv64 disassembler:

  go get golang.org/x/arch@master
  go mod vendor
  go mod tidy

Change-Id: I6e3ece09e72e36d50bae8341832d5b8f7e330e72
Reviewed-on: https://go-review.googlesource.com/c/go/+/778961
Reviewed-by: Keith Randall <khr@golang.org>
Auto-Submit: Joel Sing <joel@sing.id.au>
Reviewed-by: Keith Randall <khr@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
Joel Sing 2026-05-18 23:47:38 +10:00 committed by Gopher Robot
parent c3f7d75877
commit fd7a0e680d
7 changed files with 200 additions and 31 deletions

View file

@ -4,7 +4,7 @@ go 1.27
require (
github.com/google/pprof v0.0.0-20260115054156-294ebfa9ad83
golang.org/x/arch v0.23.1-0.20260109160903-657d90bd6695
golang.org/x/arch v0.27.1-0.20260513003155-2ebc08890589
golang.org/x/build v0.0.0-20260122183339-3ba88df37c64
golang.org/x/mod v0.36.1-0.20260513122029-343ee60345a1
golang.org/x/sync v0.20.0

View file

@ -6,8 +6,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20250417193237-f615e6bd150b h1:ogbOPx8
github.com/ianlancetaylor/demangle v0.0.0-20250417193237-f615e6bd150b/go.mod h1:gx7rwoVhcfuVKG5uya9Hs3Sxj7EIvldVofAWIUtGouw=
github.com/yuin/goldmark v1.6.0 h1:boZcn2GTjpsynOsC0iJHnBWa4Bi0qzfJjthwauItG68=
github.com/yuin/goldmark v1.6.0/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
golang.org/x/arch v0.23.1-0.20260109160903-657d90bd6695 h1:q45HsUyFzBjBk4mHGgUewJf6KKOkNiWB8wMx0X6elyA=
golang.org/x/arch v0.23.1-0.20260109160903-657d90bd6695/go.mod h1:dNHoOeKiyja7GTvF9NJS1l3Z2yntpQNzgrjh1cU103A=
golang.org/x/arch v0.27.1-0.20260513003155-2ebc08890589 h1:vhLfA6kUzRvCYV5uFBJbdMndztX1STqGC8GmQJsuldY=
golang.org/x/arch v0.27.1-0.20260513003155-2ebc08890589/go.mod h1:0X+GdSIP+kL5wPmpK7sdkEVTt2XoYP0cSjQSbZBwOi8=
golang.org/x/build v0.0.0-20260122183339-3ba88df37c64 h1:BNhBATNmH/VtzGolB+ksQPPvn6ZyffiR8TmKenqNo+A=
golang.org/x/build v0.0.0-20260122183339-3ba88df37c64/go.mod h1:3QmSbNil8ZWqC94m80Glej1v8b92gYzPIQPTtSa0c+4=
golang.org/x/mod v0.36.1-0.20260513122029-343ee60345a1 h1:C0TwvxhsI0bHc1TbK4QEa5PCMrHiST7y/lpX4MVW3KM=

View file

@ -52,31 +52,18 @@ func GoSyntax(inst Inst, pc uint64, symname func(uint64) (string, uint64), text
// Move addressing mode into opcode suffix.
suffix := ""
switch inst.Op {
case LDR, LDRB, LDRH, LDRSB, LDRSH, LDRSW, STR, STRB, STRH, STUR, STURB, STURH, LD1, ST1:
switch mem := inst.Args[1].(type) {
for i := range inst.Args {
switch mem := inst.Args[i].(type) {
case MemImmediate:
switch mem.Mode {
case AddrOffset:
// no suffix
case AddrPreIndex:
suffix = ".W"
suffix += ".W"
case AddrPostIndex, AddrPostReg:
suffix = ".P"
suffix += ".P"
}
}
case STP, LDP:
switch mem := inst.Args[2].(type) {
case MemImmediate:
switch mem.Mode {
case AddrOffset:
// no suffix
case AddrPreIndex:
suffix = ".W"
case AddrPostIndex:
suffix = ".P"
}
}
}

View file

@ -29,8 +29,9 @@ func GNUSyntax(inst Inst) string {
}
op := strings.ToLower(inst.Op.String())
gnuSyntaxSwitch:
switch inst.Op {
case ADDI, ADDIW, ANDI, ORI, SLLI, SLLIW, SRAI, SRAIW, SRLI, SRLIW, XORI:
case ADDI, ADDIW, ANDI, SLLI, SLLIW, SRAI, SRAIW, SRLI, SRLIW, XORI:
if inst.Op == ADDI {
if inst.Args[1].(Reg) == X0 && inst.Args[0].(Reg) != X0 {
op = "li"
@ -65,6 +66,25 @@ func GNUSyntax(inst Inst) string {
args = args[:len(args)-1]
}
case ORI:
if inst.Args[0].(Reg) == X0 {
simm := inst.Args[2].(Simm)
switch simm.Imm & 0b11111 {
case 0:
op = "prefetch.i"
case 1:
op = "prefetch.r"
case 3:
op = "prefetch.w"
default:
break gnuSyntaxSwitch
}
// compared to ORI, the lowest 5 bits of simm.Imm in PREFETCH should be zeros
simm.Imm = simm.Imm &^ 0b11111
args[0] = RegOffset{inst.Args[1].(Reg), simm}.String()
args = args[:len(args)-2]
}
case ADD:
if inst.Args[1].(Reg) == X0 {
op = "mv"
@ -221,11 +241,25 @@ func GNUSyntax(inst Inst) string {
args = args[:len(args)-1]
}
// When both pred and succ equals to iorw, the GNU objdump will omit them.
case FENCE:
if inst.Args[0].(MemOrder).String() == "iorw" &&
inst.Args[1].(MemOrder).String() == "iorw" {
args = nil
fm := inst.Enc >> 28
pred := inst.Args[0].(MemOrder).String()
succ := inst.Args[1].(MemOrder).String()
if fm == 0b1000 {
if pred == "rw" && succ == "rw" {
return "fence.tso"
}
return op
}
// PAUSE is encoded as a FENCE instruction with pred=W, succ=0.
if pred == "w" && succ == "" {
return "pause"
}
if fm != 0 || pred == "" || succ == "" || (pred == "iorw" && succ == "iorw") {
// We've either got a full fence or a reserved encoding which should be
// treated as a full fence. When both pred and succ equals to iorw, GNU
// objdump will omit them.
return op
}
case FSGNJX_D:

View file

@ -44,6 +44,7 @@ func GoSyntax(inst Inst, pc uint64, symname func(uint64) (string, uint64), text
op := inst.Op.String()
goSyntaxSwitch:
switch inst.Op {
case AMOADD_D, AMOADD_D_AQ, AMOADD_D_RL, AMOADD_D_AQRL, AMOADD_W, AMOADD_W_AQ,
@ -74,6 +75,25 @@ func GoSyntax(inst Inst, pc uint64, symname func(uint64) (string, uint64), text
args = args[:len(args)-1]
}
case ORI:
if inst.Args[0].(Reg) == X0 {
simm := inst.Args[2].(Simm)
switch simm.Imm & 0b11111 {
case 0:
op = "PREFETCHI"
case 1:
op = "PREFETCHR"
case 3:
op = "PREFETCHW"
default:
break goSyntaxSwitch
}
// compared to ORI, the lowest 5 bits of simm.Imm in PREFETCH should be zeros
simm.Imm = simm.Imm &^ 0b11111
args[0] = plan9Arg(&inst, pc, symname, RegOffset{inst.Args[1].(Reg), simm})
args = args[:len(args)-2]
}
case ANDI:
if inst.Args[2].(Simm).Imm == 255 {
op = "MOVBU"
@ -179,9 +199,26 @@ func GoSyntax(inst Inst, pc uint64, symname func(uint64) (string, uint64), text
}
}
// Fence instruction in plan9 doesn't have any operands.
case FENCE:
args = nil
fm := inst.Enc >> 28
pred := inst.Args[0].(MemOrder).String()
succ := inst.Args[1].(MemOrder).String()
if fm == 0b1000 {
if pred == "rw" && succ == "rw" {
return "FENCE.TSO"
}
return op
}
// PAUSE is encoded as a FENCE instruction with pred=W, succ=0.
if pred == "w" && succ == "" {
return "PAUSE"
}
if fm != 0 || pred == "" || succ == "" || (pred == "iorw" && succ == "iorw") {
// We've either got a full fence or a reserved encoding which should be
// treated as a full fence.
return op
}
args[0], args[1] = args[1], args[0]
case FMADD_D, FMADD_H, FMADD_Q, FMADD_S, FMSUB_D, FMSUB_H,
FMSUB_Q, FMSUB_S, FNMADD_D, FNMADD_H, FNMADD_Q, FNMADD_S,

View file

@ -1,5 +1,4 @@
// Code generated by riscv64spec riscv-opcodes
// DO NOT EDIT
// Code generated by 'go run ../riscv64spec riscv-opcodes'; DO NOT EDIT.
// Copyright 2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
@ -104,6 +103,13 @@ const (
BNE
BSET
BSETI
CBO_CLEAN
CBO_FLUSH
CBO_INVAL
CBO_ZERO
CLMUL
CLMULH
CLMULR
CLZ
CLZW
CPOP
@ -375,6 +381,27 @@ const (
VAADDU_VX
VAADD_VV
VAADD_VX
VAESDF_VS
VAESDF_VV
VAESDM_VS
VAESDM_VV
VAESEF_VS
VAESEF_VV
VAESEM_VS
VAESEM_VV
VAESKF1_VI
VAESKF2_VI
VAESZ_VS
VGHSH_VV
VGMUL_VV
VSHA2CH_VV
VSHA2CL_VV
VSHA2MS_VV
VSM3C_VI
VSM3ME_VV
VSM4K_VI
VSM4R_VS
VSM4R_VV
VADC_VIM
VADC_VVM
VADC_VXM
@ -1100,6 +1127,13 @@ var opstr = [...]string{
BNE: "BNE",
BSET: "BSET",
BSETI: "BSETI",
CBO_CLEAN: "CBO.CLEAN",
CBO_FLUSH: "CBO.FLUSH",
CBO_INVAL: "CBO.INVAL",
CBO_ZERO: "CBO.ZERO",
CLMUL: "CLMUL",
CLMULH: "CLMULH",
CLMULR: "CLMULR",
CLZ: "CLZ",
CLZW: "CLZW",
CPOP: "CPOP",
@ -1371,6 +1405,27 @@ var opstr = [...]string{
VAADDU_VX: "VAADDU.VX",
VAADD_VV: "VAADD.VV",
VAADD_VX: "VAADD.VX",
VAESDF_VS: "VAESDF.VS",
VAESDF_VV: "VAESDF.VV",
VAESDM_VS: "VAESDM.VS",
VAESDM_VV: "VAESDM.VV",
VAESEF_VS: "VAESEF.VS",
VAESEF_VV: "VAESEF.VV",
VAESEM_VS: "VAESEM.VS",
VAESEM_VV: "VAESEM.VV",
VAESKF1_VI: "VAESKF1.VI",
VAESKF2_VI: "VAESKF2.VI",
VAESZ_VS: "VAESZ.VS",
VGHSH_VV: "VGHSH.VV",
VGMUL_VV: "VGMUL.VV",
VSHA2CH_VV: "VSHA2CH.VV",
VSHA2CL_VV: "VSHA2CL.VV",
VSHA2MS_VV: "VSHA2MS.VV",
VSM3C_VI: "VSM3C.VI",
VSM3ME_VV: "VSM3ME.VV",
VSM4K_VI: "VSM4K.VI",
VSM4R_VS: "VSM4R.VS",
VSM4R_VV: "VSM4R.VV",
VADC_VIM: "VADC.VIM",
VADC_VVM: "VADC.VVM",
VADC_VXM: "VADC.VXM",
@ -2191,6 +2246,20 @@ var instFormats = [...]instFormat{
{mask: 0xfe00707f, value: 0x28001033, op: BSET, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},
// BSETI rd, rs1, shamt6
{mask: 0xfc00707f, value: 0x28001013, op: BSETI, args: argTypeList{arg_rd, arg_rs1, arg_shamt6}},
// CBO.CLEAN rs1_ptr
{mask: 0xfff07fff, value: 0x0010200f, op: CBO_CLEAN, args: argTypeList{arg_rs1_ptr}},
// CBO.FLUSH rs1_ptr
{mask: 0xfff07fff, value: 0x0020200f, op: CBO_FLUSH, args: argTypeList{arg_rs1_ptr}},
// CBO.INVAL rs1_ptr
{mask: 0xfff07fff, value: 0x0000200f, op: CBO_INVAL, args: argTypeList{arg_rs1_ptr}},
// CBO.ZERO rs1_ptr
{mask: 0xfff07fff, value: 0x0040200f, op: CBO_ZERO, args: argTypeList{arg_rs1_ptr}},
// CLMUL rd, rs1, rs2
{mask: 0xfe00707f, value: 0x0a001033, op: CLMUL, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},
// CLMULH rd, rs1, rs2
{mask: 0xfe00707f, value: 0x0a003033, op: CLMULH, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},
// CLMULR rd, rs1, rs2
{mask: 0xfe00707f, value: 0x0a002033, op: CLMULR, args: argTypeList{arg_rd, arg_rs1, arg_rs2}},
// CLZ rd, rs1
{mask: 0xfff0707f, value: 0x60001013, op: CLZ, args: argTypeList{arg_rd, arg_rs1}},
// CLZW rd, rs1
@ -2733,6 +2802,48 @@ var instFormats = [...]instFormat{
{mask: 0xfc00707f, value: 0x24002057, op: VAADD_VV, args: argTypeList{arg_vm, arg_vs2, arg_vs1, arg_vd}},
// VAADD.VX vm, vs2, rs1, vd
{mask: 0xfc00707f, value: 0x24006057, op: VAADD_VX, args: argTypeList{arg_vm, arg_vs2, arg_rs1, arg_vd}},
// VAESDF.VS vs2, vd
{mask: 0xfe0ff07f, value: 0xa600a077, op: VAESDF_VS, args: argTypeList{arg_vs2, arg_vd}},
// VAESDF.VV vs2, vd
{mask: 0xfe0ff07f, value: 0xa200a077, op: VAESDF_VV, args: argTypeList{arg_vs2, arg_vd}},
// VAESDM.VS vs2, vd
{mask: 0xfe0ff07f, value: 0xa6002077, op: VAESDM_VS, args: argTypeList{arg_vs2, arg_vd}},
// VAESDM.VV vs2, vd
{mask: 0xfe0ff07f, value: 0xa2002077, op: VAESDM_VV, args: argTypeList{arg_vs2, arg_vd}},
// VAESEF.VS vs2, vd
{mask: 0xfe0ff07f, value: 0xa601a077, op: VAESEF_VS, args: argTypeList{arg_vs2, arg_vd}},
// VAESEF.VV vs2, vd
{mask: 0xfe0ff07f, value: 0xa201a077, op: VAESEF_VV, args: argTypeList{arg_vs2, arg_vd}},
// VAESEM.VS vs2, vd
{mask: 0xfe0ff07f, value: 0xa6012077, op: VAESEM_VS, args: argTypeList{arg_vs2, arg_vd}},
// VAESEM.VV vs2, vd
{mask: 0xfe0ff07f, value: 0xa2012077, op: VAESEM_VV, args: argTypeList{arg_vs2, arg_vd}},
// VAESKF1.VI vs2, zimm, vd
{mask: 0xfe00707f, value: 0x8a002077, op: VAESKF1_VI, args: argTypeList{arg_vs2, arg_zimm, arg_vd}},
// VAESKF2.VI vs2, zimm, vd
{mask: 0xfe00707f, value: 0xaa002077, op: VAESKF2_VI, args: argTypeList{arg_vs2, arg_zimm, arg_vd}},
// VAESZ.VS vs2, vd
{mask: 0xfe0ff07f, value: 0xa603a077, op: VAESZ_VS, args: argTypeList{arg_vs2, arg_vd}},
// VGHSH.VV vs2, vs1, vd
{mask: 0xfe00707f, value: 0xb2002077, op: VGHSH_VV, args: argTypeList{arg_vs2, arg_vs1, arg_vd}},
// VGMUL.VV vs2, vd
{mask: 0xfe0ff07f, value: 0xa208a077, op: VGMUL_VV, args: argTypeList{arg_vs2, arg_vd}},
// VSHA2CH.VV vs2, vs1, vd
{mask: 0xfe00707f, value: 0xba002077, op: VSHA2CH_VV, args: argTypeList{arg_vs2, arg_vs1, arg_vd}},
// VSHA2CL.VV vs2, vs1, vd
{mask: 0xfe00707f, value: 0xbe002077, op: VSHA2CL_VV, args: argTypeList{arg_vs2, arg_vs1, arg_vd}},
// VSHA2MS.VV vs2, vs1, vd
{mask: 0xfe00707f, value: 0xb6002077, op: VSHA2MS_VV, args: argTypeList{arg_vs2, arg_vs1, arg_vd}},
// VSM3C.VI vs2, zimm, vd
{mask: 0xfe00707f, value: 0xae002077, op: VSM3C_VI, args: argTypeList{arg_vs2, arg_zimm, arg_vd}},
// VSM3ME.VV vs2, vs1, vd
{mask: 0xfe00707f, value: 0x82002077, op: VSM3ME_VV, args: argTypeList{arg_vs2, arg_vs1, arg_vd}},
// VSM4K.VI vs2, zimm, vd
{mask: 0xfe00707f, value: 0x86002077, op: VSM4K_VI, args: argTypeList{arg_vs2, arg_zimm, arg_vd}},
// VSM4R.VS vs2, vd
{mask: 0xfe0ff07f, value: 0xa6082077, op: VSM4R_VS, args: argTypeList{arg_vs2, arg_vd}},
// VSM4R.VV vs2, vd
{mask: 0xfe0ff07f, value: 0xa2082077, op: VSM4R_VV, args: argTypeList{arg_vs2, arg_vd}},
// VADC.VIM vs2, simm5, vd
{mask: 0xfe00707f, value: 0x40003057, op: VADC_VIM, args: argTypeList{arg_vs2, arg_simm5, arg_vd}},
// VADC.VVM vs2, vs1, vd

View file

@ -16,8 +16,8 @@ github.com/google/pprof/third_party/svgpan
# github.com/ianlancetaylor/demangle v0.0.0-20250417193237-f615e6bd150b
## explicit; go 1.13
github.com/ianlancetaylor/demangle
# golang.org/x/arch v0.23.1-0.20260109160903-657d90bd6695
## explicit; go 1.24.0
# golang.org/x/arch v0.27.1-0.20260513003155-2ebc08890589
## explicit; go 1.25.0
golang.org/x/arch/arm/armasm
golang.org/x/arch/arm64/arm64asm
golang.org/x/arch/loong64/loong64asm