Skip to content

Commit f41fdd9

Browse files
sophie-zhaoabner-chenc
authored andcommitted
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 <[email protected]> LUCI-TryBot-Result: Go LUCI <[email protected]> Reviewed-by: Cherry Mui <[email protected]> Reviewed-by: David Chase <[email protected]>
1 parent 38d146d commit f41fdd9

File tree

4 files changed

+52
-0
lines changed

4 files changed

+52
-0
lines changed

Diff for: src/cmd/asm/internal/asm/testdata/loong64enc1.s

+10
Original file line numberDiff line numberDiff line change
@@ -849,3 +849,13 @@ lable2:
849849
XVFRECIPD X2, X1 // 41f89c76
850850
XVFRSQRTF X2, X1 // 41049d76
851851
XVFRSQRTD X2, X1 // 41089d76
852+
853+
// [X]VNEG{B/H/W/V} instructions
854+
VNEGB V1, V2 // 22309c72
855+
VNEGH V1, V2 // 22349c72
856+
VNEGW V1, V2 // 22389c72
857+
VNEGV V1, V2 // 223c9c72
858+
XVNEGB X2, X1 // 41309c76
859+
XVNEGH X2, X1 // 41349c76
860+
XVNEGW X2, X1 // 41389c76
861+
XVNEGV X2, X1 // 413c9c76

Diff for: src/cmd/internal/obj/loong64/a.out.go

+10
Original file line numberDiff line numberDiff line change
@@ -950,6 +950,16 @@ const (
950950
AXVFRSQRTF
951951
AXVFRSQRTD
952952

953+
// LSX and LASX integer neg instructions
954+
AVNEGB
955+
AVNEGH
956+
AVNEGW
957+
AVNEGV
958+
AXVNEGB
959+
AXVNEGH
960+
AXVNEGW
961+
AXVNEGV
962+
953963
ALAST
954964

955965
// aliases

Diff for: src/cmd/internal/obj/loong64/anames.go

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: src/cmd/internal/obj/loong64/asm.go

+24
Original file line numberDiff line numberDiff line change
@@ -1659,6 +1659,10 @@ func buildop(ctxt *obj.Link) {
16591659
opset(AVFRECIPD, r0)
16601660
opset(AVFRSQRTF, r0)
16611661
opset(AVFRSQRTD, r0)
1662+
opset(AVNEGB, r0)
1663+
opset(AVNEGH, r0)
1664+
opset(AVNEGW, r0)
1665+
opset(AVNEGV, r0)
16621666

16631667
case AXVPCNTB:
16641668
opset(AXVPCNTH, r0)
@@ -1670,6 +1674,10 @@ func buildop(ctxt *obj.Link) {
16701674
opset(AXVFRECIPD, r0)
16711675
opset(AXVFRSQRTF, r0)
16721676
opset(AXVFRSQRTD, r0)
1677+
opset(AXVNEGB, r0)
1678+
opset(AXVNEGH, r0)
1679+
opset(AXVNEGW, r0)
1680+
opset(AXVNEGV, r0)
16731681

16741682
case AVADDB:
16751683
opset(AVADDH, r0)
@@ -3366,6 +3374,22 @@ func (c *ctxt0) oprr(a obj.As) uint32 {
33663374
return 0x1da741 << 10 // xvfrsqrt.s
33673375
case AXVFRSQRTD:
33683376
return 0x1da742 << 10 // xvfrsqrt.d
3377+
case AVNEGB:
3378+
return 0x1ca70c << 10 // vneg.b
3379+
case AVNEGH:
3380+
return 0x1ca70d << 10 // vneg.h
3381+
case AVNEGW:
3382+
return 0x1ca70e << 10 // vneg.w
3383+
case AVNEGV:
3384+
return 0x1ca70f << 10 // vneg.d
3385+
case AXVNEGB:
3386+
return 0x1da70c << 10 // xvneg.b
3387+
case AXVNEGH:
3388+
return 0x1da70d << 10 // xvneg.h
3389+
case AXVNEGW:
3390+
return 0x1da70e << 10 // xvneg.w
3391+
case AXVNEGV:
3392+
return 0x1da70f << 10 // xvneg.d
33693393
}
33703394

33713395
c.ctxt.Diag("bad rr opcode %v", a)

0 commit comments

Comments
 (0)