Commit 3c65bb5b authored by bill_ofarrell's avatar bill_ofarrell Committed by Michael Munday

cmd/asm: add s390x VMSLG instruction

This instruction was introduced on the z14 to accelerate "limbified"
multiplications for certain cryptographic algorithms. This change allows
it to be used in Go assembly.

Change-Id: Ic93dae7fec1756f662874c08a5abc435bce9dd9e
Reviewed-on: https://go-review.googlesource.com/109695
Run-TryBot: Michael Munday <mike.munday@ibm.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
parent d7f5c036
...@@ -367,6 +367,7 @@ TEXT main·foo(SB),DUPOK|NOSPLIT,$16-0 // TEXT main.foo(SB), DUPOK|NOSPLIT, $16- ...@@ -367,6 +367,7 @@ TEXT main·foo(SB),DUPOK|NOSPLIT,$16-0 // TEXT main.foo(SB), DUPOK|NOSPLIT, $16-
VSTEF $3, V2, (R9) // e7209000300b VSTEF $3, V2, (R9) // e7209000300b
VSTEH $7, V31, (R2) // e7f020007809 VSTEH $7, V31, (R2) // e7f020007809
VSTEB $15, V29, 4094(R12) // e7d0cffef808 VSTEB $15, V29, 4094(R12) // e7d0cffef808
VMSLG V21, V22, V23, V24 // e78563007fb8
RET RET
RET foo(SB) RET foo(SB)
......
...@@ -941,6 +941,7 @@ const ( ...@@ -941,6 +941,7 @@ const (
AVUPLB AVUPLB
AVUPLHW AVUPLHW
AVUPLF AVUPLF
AVMSLG
// binary // binary
ABYTE ABYTE
......
...@@ -677,6 +677,7 @@ var Anames = []string{ ...@@ -677,6 +677,7 @@ var Anames = []string{
"VUPLB", "VUPLB",
"VUPLHW", "VUPLHW",
"VUPLF", "VUPLF",
"VMSLG",
"BYTE", "BYTE",
"WORD", "WORD",
"DWORD", "DWORD",
......
...@@ -1376,6 +1376,7 @@ func buildop(ctxt *obj.Link) { ...@@ -1376,6 +1376,7 @@ func buildop(ctxt *obj.Link) {
opset(AVSTRCZFS, r) opset(AVSTRCZFS, r)
opset(AVSBCBIQ, r) opset(AVSBCBIQ, r)
opset(AVSBIQ, r) opset(AVSBIQ, r)
opset(AVMSLG, r)
case AVSEL: case AVSEL:
opset(AVFMADB, r) opset(AVFMADB, r)
opset(AWFMADB, r) opset(AWFMADB, r)
...@@ -2529,6 +2530,7 @@ const ( ...@@ -2529,6 +2530,7 @@ const (
op_VUPLH uint32 = 0xE7D5 // VRR-a VECTOR UNPACK LOGICAL HIGH op_VUPLH uint32 = 0xE7D5 // VRR-a VECTOR UNPACK LOGICAL HIGH
op_VUPLL uint32 = 0xE7D4 // VRR-a VECTOR UNPACK LOGICAL LOW op_VUPLL uint32 = 0xE7D4 // VRR-a VECTOR UNPACK LOGICAL LOW
op_VUPL uint32 = 0xE7D6 // VRR-a VECTOR UNPACK LOW op_VUPL uint32 = 0xE7D6 // VRR-a VECTOR UNPACK LOW
op_VMSL uint32 = 0xE7B8 // VRR-d VECTOR MULTIPLY SUM LOGICAL
) )
func oclass(a *obj.Addr) int { func oclass(a *obj.Addr) int {
......
...@@ -45,6 +45,8 @@ func vop(as obj.As) (opcode, es, cs uint32) { ...@@ -45,6 +45,8 @@ func vop(as obj.As) (opcode, es, cs uint32) {
return op_VAC, 0, 0 return op_VAC, 0, 0
case AVACQ: case AVACQ:
return op_VAC, 4, 0 return op_VAC, 4, 0
case AVMSLG:
return op_VMSL, 3, 0
case AVACCC: case AVACCC:
return op_VACCC, 0, 0 return op_VACCC, 0, 0
case AVACCCQ: case AVACCCQ:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment