mirror of
https://github.com/golang/go.git
synced 2025-10-19 19:13:18 +00:00
cmd/internal/obj/loong64: add {V,XV}NEG{B/H/W/V} instructions support
Go asm syntax: VNEG{B/H/W/V} VJ, VD XVNEG{B/H/W/V} XJ, XD Equivalent platform assembler syntax: vneg.{b/h/w/d} vd, vj xvneg.{b/h/w/d} xd, xj Change-Id: Ie0a82a434b0ffbcb77425a65b96eff56e030028c Reviewed-on: https://go-review.googlesource.com/c/go/+/635935 Reviewed-by: abner chenc <chenguoqi@loongson.cn> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
38d146d572
commit
f41fdd962d
4 changed files with 52 additions and 0 deletions
10
src/cmd/asm/internal/asm/testdata/loong64enc1.s
vendored
10
src/cmd/asm/internal/asm/testdata/loong64enc1.s
vendored
|
@ -849,3 +849,13 @@ lable2:
|
|||
XVFRECIPD X2, X1 // 41f89c76
|
||||
XVFRSQRTF X2, X1 // 41049d76
|
||||
XVFRSQRTD X2, X1 // 41089d76
|
||||
|
||||
// [X]VNEG{B/H/W/V} instructions
|
||||
VNEGB V1, V2 // 22309c72
|
||||
VNEGH V1, V2 // 22349c72
|
||||
VNEGW V1, V2 // 22389c72
|
||||
VNEGV V1, V2 // 223c9c72
|
||||
XVNEGB X2, X1 // 41309c76
|
||||
XVNEGH X2, X1 // 41349c76
|
||||
XVNEGW X2, X1 // 41389c76
|
||||
XVNEGV X2, X1 // 413c9c76
|
||||
|
|
|
@ -950,6 +950,16 @@ const (
|
|||
AXVFRSQRTF
|
||||
AXVFRSQRTD
|
||||
|
||||
// LSX and LASX integer neg instructions
|
||||
AVNEGB
|
||||
AVNEGH
|
||||
AVNEGW
|
||||
AVNEGV
|
||||
AXVNEGB
|
||||
AXVNEGH
|
||||
AXVNEGW
|
||||
AXVNEGV
|
||||
|
||||
ALAST
|
||||
|
||||
// aliases
|
||||
|
|
|
@ -449,5 +449,13 @@ var Anames = []string{
|
|||
"XVFRECIPD",
|
||||
"XVFRSQRTF",
|
||||
"XVFRSQRTD",
|
||||
"VNEGB",
|
||||
"VNEGH",
|
||||
"VNEGW",
|
||||
"VNEGV",
|
||||
"XVNEGB",
|
||||
"XVNEGH",
|
||||
"XVNEGW",
|
||||
"XVNEGV",
|
||||
"LAST",
|
||||
}
|
||||
|
|
|
@ -1659,6 +1659,10 @@ func buildop(ctxt *obj.Link) {
|
|||
opset(AVFRECIPD, r0)
|
||||
opset(AVFRSQRTF, r0)
|
||||
opset(AVFRSQRTD, r0)
|
||||
opset(AVNEGB, r0)
|
||||
opset(AVNEGH, r0)
|
||||
opset(AVNEGW, r0)
|
||||
opset(AVNEGV, r0)
|
||||
|
||||
case AXVPCNTB:
|
||||
opset(AXVPCNTH, r0)
|
||||
|
@ -1670,6 +1674,10 @@ func buildop(ctxt *obj.Link) {
|
|||
opset(AXVFRECIPD, r0)
|
||||
opset(AXVFRSQRTF, r0)
|
||||
opset(AXVFRSQRTD, r0)
|
||||
opset(AXVNEGB, r0)
|
||||
opset(AXVNEGH, r0)
|
||||
opset(AXVNEGW, r0)
|
||||
opset(AXVNEGV, r0)
|
||||
|
||||
case AVADDB:
|
||||
opset(AVADDH, r0)
|
||||
|
@ -3366,6 +3374,22 @@ func (c *ctxt0) oprr(a obj.As) uint32 {
|
|||
return 0x1da741 << 10 // xvfrsqrt.s
|
||||
case AXVFRSQRTD:
|
||||
return 0x1da742 << 10 // xvfrsqrt.d
|
||||
case AVNEGB:
|
||||
return 0x1ca70c << 10 // vneg.b
|
||||
case AVNEGH:
|
||||
return 0x1ca70d << 10 // vneg.h
|
||||
case AVNEGW:
|
||||
return 0x1ca70e << 10 // vneg.w
|
||||
case AVNEGV:
|
||||
return 0x1ca70f << 10 // vneg.d
|
||||
case AXVNEGB:
|
||||
return 0x1da70c << 10 // xvneg.b
|
||||
case AXVNEGH:
|
||||
return 0x1da70d << 10 // xvneg.h
|
||||
case AXVNEGW:
|
||||
return 0x1da70e << 10 // xvneg.w
|
||||
case AXVNEGV:
|
||||
return 0x1da70f << 10 // xvneg.d
|
||||
}
|
||||
|
||||
c.ctxt.Diag("bad rr opcode %v", a)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue