mirror of https://github.com/golang/go.git
cmd/internal/obj/loong64: add {V,XV}ILV{L/H}.{B/H/W/D} instructions support
Go asm syntax:
VILV{L/H}{B/H/W/V} VK, VJ, VD
XVILV{L/H}{B/H/W/V} XK, XJ, XD
Equivalent platform assembler syntax:
vilv{l/h}.{b/h/w/d} vd, vj, vk
xvilv{l/h}.{b/h/w/d} xd, xj, xk
Change-Id: I40e21737649d9fdbbc9a423e859f4c0a56d069fb
Reviewed-on: https://go-review.googlesource.com/c/go/+/635936
Reviewed-by: Junyang Shao <shaojunyang@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: abner chenc <chenguoqi@loongson.cn>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Auto-Submit: Junyang Shao <shaojunyang@google.com>
This commit is contained in:
parent
3aef716168
commit
53d689ce99
|
|
@ -719,3 +719,21 @@ lable2:
|
||||||
XVSUBHU $14, X1, X2 // 22b88c76
|
XVSUBHU $14, X1, X2 // 22b88c76
|
||||||
XVSUBWU $15, X1, X2 // 223c8d76
|
XVSUBWU $15, X1, X2 // 223c8d76
|
||||||
XVSUBVU $16, X1, X2 // 22c08d76
|
XVSUBVU $16, X1, X2 // 22c08d76
|
||||||
|
|
||||||
|
// [X]VILV{L/H}{B,H,W,V} instructions
|
||||||
|
VILVLB V1, V2, V3 // 43041a71
|
||||||
|
VILVLH V1, V2, V3 // 43841a71
|
||||||
|
VILVLW V1, V2, V3 // 43041b71
|
||||||
|
VILVLV V1, V2, V3 // 43841b71
|
||||||
|
VILVHB V1, V2, V3 // 43041c71
|
||||||
|
VILVHH V1, V2, V3 // 43841c71
|
||||||
|
VILVHW V1, V2, V3 // 43041d71
|
||||||
|
VILVHV V1, V2, V3 // 43841d71
|
||||||
|
XVILVLB X3, X2, X1 // 410c1a75
|
||||||
|
XVILVLH X3, X2, X1 // 418c1a75
|
||||||
|
XVILVLW X3, X2, X1 // 410c1b75
|
||||||
|
XVILVLV X3, X2, X1 // 418c1b75
|
||||||
|
XVILVHB X3, X2, X1 // 410c1c75
|
||||||
|
XVILVHH X3, X2, X1 // 418c1c75
|
||||||
|
XVILVHW X3, X2, X1 // 410c1d75
|
||||||
|
XVILVHV X3, X2, X1 // 418c1d75
|
||||||
|
|
|
||||||
|
|
@ -837,6 +837,24 @@ const (
|
||||||
AXVROTRW
|
AXVROTRW
|
||||||
AXVROTRV
|
AXVROTRV
|
||||||
|
|
||||||
|
// LSX and LASX move and shuffle instructions
|
||||||
|
AVILVLB
|
||||||
|
AVILVLH
|
||||||
|
AVILVLW
|
||||||
|
AVILVLV
|
||||||
|
AVILVHB
|
||||||
|
AVILVHH
|
||||||
|
AVILVHW
|
||||||
|
AVILVHV
|
||||||
|
AXVILVLB
|
||||||
|
AXVILVLH
|
||||||
|
AXVILVLW
|
||||||
|
AXVILVLV
|
||||||
|
AXVILVHB
|
||||||
|
AXVILVHH
|
||||||
|
AXVILVHW
|
||||||
|
AXVILVHV
|
||||||
|
|
||||||
ALAST
|
ALAST
|
||||||
|
|
||||||
// aliases
|
// aliases
|
||||||
|
|
|
||||||
|
|
@ -345,5 +345,21 @@ var Anames = []string{
|
||||||
"XVROTRH",
|
"XVROTRH",
|
||||||
"XVROTRW",
|
"XVROTRW",
|
||||||
"XVROTRV",
|
"XVROTRV",
|
||||||
|
"VILVLB",
|
||||||
|
"VILVLH",
|
||||||
|
"VILVLW",
|
||||||
|
"VILVLV",
|
||||||
|
"VILVHB",
|
||||||
|
"VILVHH",
|
||||||
|
"VILVHW",
|
||||||
|
"VILVHV",
|
||||||
|
"XVILVLB",
|
||||||
|
"XVILVLH",
|
||||||
|
"XVILVLW",
|
||||||
|
"XVILVLV",
|
||||||
|
"XVILVHB",
|
||||||
|
"XVILVHH",
|
||||||
|
"XVILVHW",
|
||||||
|
"XVILVHV",
|
||||||
"LAST",
|
"LAST",
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1539,11 +1539,27 @@ func buildop(ctxt *obj.Link) {
|
||||||
opset(AVSEQH, r0)
|
opset(AVSEQH, r0)
|
||||||
opset(AVSEQW, r0)
|
opset(AVSEQW, r0)
|
||||||
opset(AVSEQV, r0)
|
opset(AVSEQV, r0)
|
||||||
|
opset(AVILVLB, r0)
|
||||||
|
opset(AVILVLH, r0)
|
||||||
|
opset(AVILVLW, r0)
|
||||||
|
opset(AVILVLV, r0)
|
||||||
|
opset(AVILVHB, r0)
|
||||||
|
opset(AVILVHH, r0)
|
||||||
|
opset(AVILVHW, r0)
|
||||||
|
opset(AVILVHV, r0)
|
||||||
|
|
||||||
case AXVSEQB:
|
case AXVSEQB:
|
||||||
opset(AXVSEQH, r0)
|
opset(AXVSEQH, r0)
|
||||||
opset(AXVSEQW, r0)
|
opset(AXVSEQW, r0)
|
||||||
opset(AXVSEQV, r0)
|
opset(AXVSEQV, r0)
|
||||||
|
opset(AXVILVLB, r0)
|
||||||
|
opset(AXVILVLH, r0)
|
||||||
|
opset(AXVILVLW, r0)
|
||||||
|
opset(AXVILVLV, r0)
|
||||||
|
opset(AXVILVHB, r0)
|
||||||
|
opset(AXVILVHH, r0)
|
||||||
|
opset(AXVILVHW, r0)
|
||||||
|
opset(AXVILVHV, r0)
|
||||||
|
|
||||||
case AVPCNTB:
|
case AVPCNTB:
|
||||||
opset(AVPCNTH, r0)
|
opset(AVPCNTH, r0)
|
||||||
|
|
@ -2862,6 +2878,38 @@ func (c *ctxt0) oprrr(a obj.As) uint32 {
|
||||||
return 0xe81b << 15 // xvsub.d
|
return 0xe81b << 15 // xvsub.d
|
||||||
case AXVSUBQ:
|
case AXVSUBQ:
|
||||||
return 0xea5b << 15 // xvsub.q
|
return 0xea5b << 15 // xvsub.q
|
||||||
|
case AVILVLB:
|
||||||
|
return 0xe234 << 15 // vilvl.b
|
||||||
|
case AVILVLH:
|
||||||
|
return 0xe235 << 15 // vilvl.h
|
||||||
|
case AVILVLW:
|
||||||
|
return 0xe236 << 15 // vilvl.w
|
||||||
|
case AVILVLV:
|
||||||
|
return 0xe237 << 15 // vilvl.d
|
||||||
|
case AVILVHB:
|
||||||
|
return 0xe238 << 15 // vilvh.b
|
||||||
|
case AVILVHH:
|
||||||
|
return 0xe239 << 15 // vilvh.h
|
||||||
|
case AVILVHW:
|
||||||
|
return 0xe23a << 15 // vilvh.w
|
||||||
|
case AVILVHV:
|
||||||
|
return 0xe23b << 15 // vilvh.d
|
||||||
|
case AXVILVLB:
|
||||||
|
return 0xea34 << 15 // xvilvl.b
|
||||||
|
case AXVILVLH:
|
||||||
|
return 0xea35 << 15 // xvilvl.h
|
||||||
|
case AXVILVLW:
|
||||||
|
return 0xea36 << 15 // xvilvl.w
|
||||||
|
case AXVILVLV:
|
||||||
|
return 0xea37 << 15 // xvilvl.d
|
||||||
|
case AXVILVHB:
|
||||||
|
return 0xea38 << 15 // xvilvh.b
|
||||||
|
case AXVILVHH:
|
||||||
|
return 0xea39 << 15 // xvilvh.h
|
||||||
|
case AXVILVHW:
|
||||||
|
return 0xea3a << 15 // xvilvh.w
|
||||||
|
case AXVILVHV:
|
||||||
|
return 0xea3b << 15 // xvilvh.d
|
||||||
}
|
}
|
||||||
|
|
||||||
if a < 0 {
|
if a < 0 {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue