diff options
| author | Xiaolin Zhao <zhaoxiaolin@loongson.cn> | 2024-12-13 17:20:38 +0800 |
|---|---|---|
| committer | abner chenc <chenguoqi@loongson.cn> | 2025-03-16 20:39:28 -0700 |
| commit | f41fdd962db3264e62ec6acb4a8f5e40d22bdfed (patch) | |
| tree | f22be30cab3e697e22f2c18a1fd8b5ddb3c9741a /src/cmd/internal | |
| parent | 38d146d57229a8e432d7570a0391f07b8cbf9393 (diff) | |
| download | go-f41fdd962db3264e62ec6acb4a8f5e40d22bdfed.tar.xz | |
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>
Diffstat (limited to 'src/cmd/internal')
| -rw-r--r-- | src/cmd/internal/obj/loong64/a.out.go | 10 | ||||
| -rw-r--r-- | src/cmd/internal/obj/loong64/anames.go | 8 | ||||
| -rw-r--r-- | src/cmd/internal/obj/loong64/asm.go | 24 |
3 files changed, 42 insertions, 0 deletions
diff --git a/src/cmd/internal/obj/loong64/a.out.go b/src/cmd/internal/obj/loong64/a.out.go index 9df63de388..7eaf5c0ce1 100644 --- a/src/cmd/internal/obj/loong64/a.out.go +++ b/src/cmd/internal/obj/loong64/a.out.go @@ -950,6 +950,16 @@ const ( AXVFRSQRTF AXVFRSQRTD + // LSX and LASX integer neg instructions + AVNEGB + AVNEGH + AVNEGW + AVNEGV + AXVNEGB + AXVNEGH + AXVNEGW + AXVNEGV + ALAST // aliases diff --git a/src/cmd/internal/obj/loong64/anames.go b/src/cmd/internal/obj/loong64/anames.go index bc7948eb00..eae240d5fd 100644 --- a/src/cmd/internal/obj/loong64/anames.go +++ b/src/cmd/internal/obj/loong64/anames.go @@ -449,5 +449,13 @@ var Anames = []string{ "XVFRECIPD", "XVFRSQRTF", "XVFRSQRTD", + "VNEGB", + "VNEGH", + "VNEGW", + "VNEGV", + "XVNEGB", + "XVNEGH", + "XVNEGW", + "XVNEGV", "LAST", } diff --git a/src/cmd/internal/obj/loong64/asm.go b/src/cmd/internal/obj/loong64/asm.go index 3186791791..f128dc16e9 100644 --- a/src/cmd/internal/obj/loong64/asm.go +++ b/src/cmd/internal/obj/loong64/asm.go @@ -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) |
