mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +00:00
cmd/internal/obj/loong64: add [X]VMULW{EV/OD} series instructions support
Go asm syntax: VMULW{EV/OD}{HB/WH/VW/QV}[U] VK, VJ, VD XVMULW{EV/OD}{HB/WH/VW/QV}[U] XK, XJ, XD VMULW{EV/OD}{HBUB/WHUH/VWUW/QVUV} VK, VJ, VD XVMULW{EV/OD}{HBUB/WHUH/VWUW/QVUV} XK, XJ, XD Equivalent platform assembler syntax: vmulw{ev/od}.{h.b/w.h/d.w/q.d}[u] vd, vj, vk xvmulw{ev/od}.{h.b/w.h/d.w/q.d}[u] xd, xj, xk vmulw{ev/od}.{h.bu.b/w.hu.h/d.wu.w/q.du.d} vd, vj, vk xvmulw{ev/od}.{h.bu.b/w.hu.h/d.wu.w/q.du.d} xd, xj, xk Change-Id: Ib1b5fb9605417a2b81841deae40e0e2beb90d03c Reviewed-on: https://go-review.googlesource.com/c/go/+/658375 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: abner chenc <chenguoqi@loongson.cn> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
4f5863c2ce
commit
ac8474c0a2
52
src/cmd/asm/internal/asm/testdata/loong64enc1.s
vendored
52
src/cmd/asm/internal/asm/testdata/loong64enc1.s
vendored
@ -859,3 +859,55 @@ lable2:
|
||||
XVNEGH X2, X1 // 41349c76
|
||||
XVNEGW X2, X1 // 41389c76
|
||||
XVNEGV X2, X1 // 413c9c76
|
||||
|
||||
// [X]{VMULW}{EV/OD}.{H.B/W.H/D.W/Q.D}[U] instructions
|
||||
VMULWEVHB V1, V2, V3 // 43049070
|
||||
VMULWEVWH V1, V2, V3 // 43849070
|
||||
VMULWEVVW V1, V2, V3 // 43049170
|
||||
VMULWEVQV V1, V2, V3 // 43849170
|
||||
VMULWODHB V1, V2, V3 // 43049270
|
||||
VMULWODWH V1, V2, V3 // 43849270
|
||||
VMULWODVW V1, V2, V3 // 43049370
|
||||
VMULWODQV V1, V2, V3 // 43849370
|
||||
VMULWEVHBU V1, V2, V3 // 43049870
|
||||
VMULWEVWHU V1, V2, V3 // 43849870
|
||||
VMULWEVVWU V1, V2, V3 // 43049970
|
||||
VMULWEVQVU V1, V2, V3 // 43849970
|
||||
VMULWODHBU V1, V2, V3 // 43049a70
|
||||
VMULWODWHU V1, V2, V3 // 43849a70
|
||||
VMULWODVWU V1, V2, V3 // 43049b70
|
||||
VMULWODQVU V1, V2, V3 // 43849b70
|
||||
XVMULWEVHB X1, X2, X3 // 43049074
|
||||
XVMULWEVWH X1, X2, X3 // 43849074
|
||||
XVMULWEVVW X1, X2, X3 // 43049174
|
||||
XVMULWEVQV X1, X2, X3 // 43849174
|
||||
XVMULWODHB X1, X2, X3 // 43049274
|
||||
XVMULWODWH X1, X2, X3 // 43849274
|
||||
XVMULWODVW X1, X2, X3 // 43049374
|
||||
XVMULWODQV X1, X2, X3 // 43849374
|
||||
XVMULWEVHBU X1, X2, X3 // 43049874
|
||||
XVMULWEVWHU X1, X2, X3 // 43849874
|
||||
XVMULWEVVWU X1, X2, X3 // 43049974
|
||||
XVMULWEVQVU X1, X2, X3 // 43849974
|
||||
XVMULWODHBU X1, X2, X3 // 43049a74
|
||||
XVMULWODWHU X1, X2, X3 // 43849a74
|
||||
XVMULWODVWU X1, X2, X3 // 43049b74
|
||||
XVMULWODQVU X1, X2, X3 // 43849b74
|
||||
|
||||
// [X]{VMULW}{EV/OD}.{H.BU.B/W.HU.H/D.WU.W/Q.DU.D} instructions
|
||||
VMULWEVHBUB V1, V2, V3 // 4304a070
|
||||
VMULWEVWHUH V1, V2, V3 // 4384a070
|
||||
VMULWEVVWUW V1, V2, V3 // 4304a170
|
||||
VMULWEVQVUV V1, V2, V3 // 4384a170
|
||||
VMULWODHBUB V1, V2, V3 // 4304a270
|
||||
VMULWODWHUH V1, V2, V3 // 4384a270
|
||||
VMULWODVWUW V1, V2, V3 // 4304a370
|
||||
VMULWODQVUV V1, V2, V3 // 4384a370
|
||||
XVMULWEVHBUB X1, X2, X3 // 4304a074
|
||||
XVMULWEVWHUH X1, X2, X3 // 4384a074
|
||||
XVMULWEVVWUW X1, X2, X3 // 4304a174
|
||||
XVMULWEVQVUV X1, X2, X3 // 4384a174
|
||||
XVMULWODHBUB X1, X2, X3 // 4304a274
|
||||
XVMULWODWHUH X1, X2, X3 // 4384a274
|
||||
XVMULWODVWUW X1, X2, X3 // 4304a374
|
||||
XVMULWODQVUV X1, X2, X3 // 4384a374
|
||||
|
@ -960,6 +960,56 @@ const (
|
||||
AXVNEGW
|
||||
AXVNEGV
|
||||
|
||||
// LSX and LASX mul instructions that operate on even or odd positions
|
||||
AVMULWEVHB
|
||||
AVMULWEVWH
|
||||
AVMULWEVVW
|
||||
AVMULWEVQV
|
||||
AVMULWODHB
|
||||
AVMULWODWH
|
||||
AVMULWODVW
|
||||
AVMULWODQV
|
||||
AVMULWEVHBU
|
||||
AVMULWEVWHU
|
||||
AVMULWEVVWU
|
||||
AVMULWEVQVU
|
||||
AVMULWODHBU
|
||||
AVMULWODWHU
|
||||
AVMULWODVWU
|
||||
AVMULWODQVU
|
||||
AXVMULWEVHB
|
||||
AXVMULWEVWH
|
||||
AXVMULWEVVW
|
||||
AXVMULWEVQV
|
||||
AXVMULWODHB
|
||||
AXVMULWODWH
|
||||
AXVMULWODVW
|
||||
AXVMULWODQV
|
||||
AXVMULWEVHBU
|
||||
AXVMULWEVWHU
|
||||
AXVMULWEVVWU
|
||||
AXVMULWEVQVU
|
||||
AXVMULWODHBU
|
||||
AXVMULWODWHU
|
||||
AXVMULWODVWU
|
||||
AXVMULWODQVU
|
||||
AVMULWEVHBUB
|
||||
AVMULWEVWHUH
|
||||
AVMULWEVVWUW
|
||||
AVMULWEVQVUV
|
||||
AVMULWODHBUB
|
||||
AVMULWODWHUH
|
||||
AVMULWODVWUW
|
||||
AVMULWODQVUV
|
||||
AXVMULWEVHBUB
|
||||
AXVMULWEVWHUH
|
||||
AXVMULWEVVWUW
|
||||
AXVMULWEVQVUV
|
||||
AXVMULWODHBUB
|
||||
AXVMULWODWHUH
|
||||
AXVMULWODVWUW
|
||||
AXVMULWODQVUV
|
||||
|
||||
ALAST
|
||||
|
||||
// aliases
|
||||
|
@ -457,5 +457,53 @@ var Anames = []string{
|
||||
"XVNEGH",
|
||||
"XVNEGW",
|
||||
"XVNEGV",
|
||||
"VMULWEVHB",
|
||||
"VMULWEVWH",
|
||||
"VMULWEVVW",
|
||||
"VMULWEVQV",
|
||||
"VMULWODHB",
|
||||
"VMULWODWH",
|
||||
"VMULWODVW",
|
||||
"VMULWODQV",
|
||||
"VMULWEVHBU",
|
||||
"VMULWEVWHU",
|
||||
"VMULWEVVWU",
|
||||
"VMULWEVQVU",
|
||||
"VMULWODHBU",
|
||||
"VMULWODWHU",
|
||||
"VMULWODVWU",
|
||||
"VMULWODQVU",
|
||||
"XVMULWEVHB",
|
||||
"XVMULWEVWH",
|
||||
"XVMULWEVVW",
|
||||
"XVMULWEVQV",
|
||||
"XVMULWODHB",
|
||||
"XVMULWODWH",
|
||||
"XVMULWODVW",
|
||||
"XVMULWODQV",
|
||||
"XVMULWEVHBU",
|
||||
"XVMULWEVWHU",
|
||||
"XVMULWEVVWU",
|
||||
"XVMULWEVQVU",
|
||||
"XVMULWODHBU",
|
||||
"XVMULWODWHU",
|
||||
"XVMULWODVWU",
|
||||
"XVMULWODQVU",
|
||||
"VMULWEVHBUB",
|
||||
"VMULWEVWHUH",
|
||||
"VMULWEVVWUW",
|
||||
"VMULWEVQVUV",
|
||||
"VMULWODHBUB",
|
||||
"VMULWODWHUH",
|
||||
"VMULWODVWUW",
|
||||
"VMULWODQVUV",
|
||||
"XVMULWEVHBUB",
|
||||
"XVMULWEVWHUH",
|
||||
"XVMULWEVVWUW",
|
||||
"XVMULWEVQVUV",
|
||||
"XVMULWODHBUB",
|
||||
"XVMULWODWHUH",
|
||||
"XVMULWODVWUW",
|
||||
"XVMULWODQVUV",
|
||||
"LAST",
|
||||
}
|
||||
|
@ -1583,6 +1583,30 @@ func buildop(ctxt *obj.Link) {
|
||||
opset(AVMODHU, r0)
|
||||
opset(AVMODWU, r0)
|
||||
opset(AVMODVU, r0)
|
||||
opset(AVMULWEVHB, r0)
|
||||
opset(AVMULWEVWH, r0)
|
||||
opset(AVMULWEVVW, r0)
|
||||
opset(AVMULWEVQV, r0)
|
||||
opset(AVMULWODHB, r0)
|
||||
opset(AVMULWODWH, r0)
|
||||
opset(AVMULWODVW, r0)
|
||||
opset(AVMULWODQV, r0)
|
||||
opset(AVMULWEVHBU, r0)
|
||||
opset(AVMULWEVWHU, r0)
|
||||
opset(AVMULWEVVWU, r0)
|
||||
opset(AVMULWEVQVU, r0)
|
||||
opset(AVMULWODHBU, r0)
|
||||
opset(AVMULWODWHU, r0)
|
||||
opset(AVMULWODVWU, r0)
|
||||
opset(AVMULWODQVU, r0)
|
||||
opset(AVMULWEVHBUB, r0)
|
||||
opset(AVMULWEVWHUH, r0)
|
||||
opset(AVMULWEVVWUW, r0)
|
||||
opset(AVMULWEVQVUV, r0)
|
||||
opset(AVMULWODHBUB, r0)
|
||||
opset(AVMULWODWHUH, r0)
|
||||
opset(AVMULWODVWUW, r0)
|
||||
opset(AVMULWODQVUV, r0)
|
||||
|
||||
case AXVSEQB:
|
||||
opset(AXVSEQH, r0)
|
||||
@ -1624,6 +1648,30 @@ func buildop(ctxt *obj.Link) {
|
||||
opset(AXVMODHU, r0)
|
||||
opset(AXVMODWU, r0)
|
||||
opset(AXVMODVU, r0)
|
||||
opset(AXVMULWEVHB, r0)
|
||||
opset(AXVMULWEVWH, r0)
|
||||
opset(AXVMULWEVVW, r0)
|
||||
opset(AXVMULWEVQV, r0)
|
||||
opset(AXVMULWODHB, r0)
|
||||
opset(AXVMULWODWH, r0)
|
||||
opset(AXVMULWODVW, r0)
|
||||
opset(AXVMULWODQV, r0)
|
||||
opset(AXVMULWEVHBU, r0)
|
||||
opset(AXVMULWEVWHU, r0)
|
||||
opset(AXVMULWEVVWU, r0)
|
||||
opset(AXVMULWEVQVU, r0)
|
||||
opset(AXVMULWODHBU, r0)
|
||||
opset(AXVMULWODWHU, r0)
|
||||
opset(AXVMULWODVWU, r0)
|
||||
opset(AXVMULWODQVU, r0)
|
||||
opset(AXVMULWEVHBUB, r0)
|
||||
opset(AXVMULWEVWHUH, r0)
|
||||
opset(AXVMULWEVVWUW, r0)
|
||||
opset(AXVMULWEVQVUV, r0)
|
||||
opset(AXVMULWODHBUB, r0)
|
||||
opset(AXVMULWODWHUH, r0)
|
||||
opset(AXVMULWODVWUW, r0)
|
||||
opset(AXVMULWODQVUV, r0)
|
||||
|
||||
case AVANDB:
|
||||
opset(AVORB, r0)
|
||||
@ -2990,6 +3038,102 @@ func (c *ctxt0) oprrr(a obj.As) uint32 {
|
||||
return 0xe9ce << 15 // xvmod.wu
|
||||
case AXVMODVU:
|
||||
return 0xe9cf << 15 // xvmod.du
|
||||
case AVMULWEVHB:
|
||||
return 0xe120 << 15 // vmulwev.h.b
|
||||
case AVMULWEVWH:
|
||||
return 0xe121 << 15 // vmulwev.w.h
|
||||
case AVMULWEVVW:
|
||||
return 0xe122 << 15 // vmulwev.d.w
|
||||
case AVMULWEVQV:
|
||||
return 0xe123 << 15 // vmulwev.q.d
|
||||
case AVMULWODHB:
|
||||
return 0xe124 << 15 // vmulwod.h.b
|
||||
case AVMULWODWH:
|
||||
return 0xe125 << 15 // vmulwod.w.h
|
||||
case AVMULWODVW:
|
||||
return 0xe126 << 15 // vmulwod.d.w
|
||||
case AVMULWODQV:
|
||||
return 0xe127 << 15 // vmulwod.q.d
|
||||
case AVMULWEVHBU:
|
||||
return 0xe130 << 15 // vmulwev.h.bu
|
||||
case AVMULWEVWHU:
|
||||
return 0xe131 << 15 // vmulwev.w.hu
|
||||
case AVMULWEVVWU:
|
||||
return 0xe132 << 15 // vmulwev.d.wu
|
||||
case AVMULWEVQVU:
|
||||
return 0xe133 << 15 // vmulwev.q.du
|
||||
case AVMULWODHBU:
|
||||
return 0xe134 << 15 // vmulwod.h.bu
|
||||
case AVMULWODWHU:
|
||||
return 0xe135 << 15 // vmulwod.w.hu
|
||||
case AVMULWODVWU:
|
||||
return 0xe136 << 15 // vmulwod.d.wu
|
||||
case AVMULWODQVU:
|
||||
return 0xe137 << 15 // vmulwod.q.du
|
||||
case AVMULWEVHBUB:
|
||||
return 0xe140 << 15 // vmulwev.h.bu.b
|
||||
case AVMULWEVWHUH:
|
||||
return 0xe141 << 15 // vmulwev.w.hu.h
|
||||
case AVMULWEVVWUW:
|
||||
return 0xe142 << 15 // vmulwev.d.wu.w
|
||||
case AVMULWEVQVUV:
|
||||
return 0xe143 << 15 // vmulwev.q.du.d
|
||||
case AVMULWODHBUB:
|
||||
return 0xe144 << 15 // vmulwod.h.bu.b
|
||||
case AVMULWODWHUH:
|
||||
return 0xe145 << 15 // vmulwod.w.hu.h
|
||||
case AVMULWODVWUW:
|
||||
return 0xe146 << 15 // vmulwod.d.wu.w
|
||||
case AVMULWODQVUV:
|
||||
return 0xe147 << 15 // vmulwod.q.du.d
|
||||
case AXVMULWEVHB:
|
||||
return 0xe920 << 15 // xvmulwev.h.b
|
||||
case AXVMULWEVWH:
|
||||
return 0xe921 << 15 // xvmulwev.w.h
|
||||
case AXVMULWEVVW:
|
||||
return 0xe922 << 15 // xvmulwev.d.w
|
||||
case AXVMULWEVQV:
|
||||
return 0xe923 << 15 // xvmulwev.q.d
|
||||
case AXVMULWODHB:
|
||||
return 0xe924 << 15 // xvmulwod.h.b
|
||||
case AXVMULWODWH:
|
||||
return 0xe925 << 15 // xvmulwod.w.h
|
||||
case AXVMULWODVW:
|
||||
return 0xe926 << 15 // xvmulwod.d.w
|
||||
case AXVMULWODQV:
|
||||
return 0xe927 << 15 // xvmulwod.q.d
|
||||
case AXVMULWEVHBU:
|
||||
return 0xe930 << 15 // xvmulwev.h.bu
|
||||
case AXVMULWEVWHU:
|
||||
return 0xe931 << 15 // xvmulwev.w.hu
|
||||
case AXVMULWEVVWU:
|
||||
return 0xe932 << 15 // xvmulwev.d.wu
|
||||
case AXVMULWEVQVU:
|
||||
return 0xe933 << 15 // xvmulwev.q.du
|
||||
case AXVMULWODHBU:
|
||||
return 0xe934 << 15 // xvmulwod.h.bu
|
||||
case AXVMULWODWHU:
|
||||
return 0xe935 << 15 // xvmulwod.w.hu
|
||||
case AXVMULWODVWU:
|
||||
return 0xe936 << 15 // xvmulwod.d.wu
|
||||
case AXVMULWODQVU:
|
||||
return 0xe937 << 15 // xvmulwod.q.du
|
||||
case AXVMULWEVHBUB:
|
||||
return 0xe940 << 15 // xvmulwev.h.bu.b
|
||||
case AXVMULWEVWHUH:
|
||||
return 0xe941 << 15 // xvmulwev.w.hu.h
|
||||
case AXVMULWEVVWUW:
|
||||
return 0xe942 << 15 // xvmulwev.d.wu.w
|
||||
case AXVMULWEVQVUV:
|
||||
return 0xe943 << 15 // xvmulwev.q.du.d
|
||||
case AXVMULWODHBUB:
|
||||
return 0xe944 << 15 // xvmulwod.h.bu.b
|
||||
case AXVMULWODWHUH:
|
||||
return 0xe945 << 15 // xvmulwod.w.hu.h
|
||||
case AXVMULWODVWUW:
|
||||
return 0xe946 << 15 // xvmulwod.d.wu.w
|
||||
case AXVMULWODQVUV:
|
||||
return 0xe947 << 15 // xvmulwod.q.du.d
|
||||
case AVSLLB:
|
||||
return 0xe1d0 << 15 // vsll.b
|
||||
case AVSLLH:
|
||||
|
Loading…
x
Reference in New Issue
Block a user