]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/asm: add s390x VMSLG instruction variants
authorbill_ofarrell <billo@ca.ibm.com>
Fri, 26 Oct 2018 21:33:51 +0000 (17:33 -0400)
committerMichael Munday <mike.munday@ibm.com>
Mon, 29 Oct 2018 09:54:51 +0000 (09:54 +0000)
VMSLG has three variants on z14 and later machines. These variants are used in "limbified" squaring:
VMSLEG: Even Shift Indication -- the even-indexed intermediate result is doubled
VMSLOG: Odd Shift Indication -- the odd-indexed intermediate result is doubled
VMSLEOG: Even and Odd Shift Indication -- both intermediate results are doubled
Limbified squaring is very useful for high performance cryptographic algorithms, such as
elliptic curve. This change allows these instructions to be used in Go assembly.

Change-Id: Iaad577b07320205539f99b3cb37a2a984882721b
Reviewed-on: https://go-review.googlesource.com/c/145180
Reviewed-by: Michael Munday <mike.munday@ibm.com>
src/cmd/asm/internal/asm/testdata/s390x.s
src/cmd/internal/obj/s390x/a.out.go
src/cmd/internal/obj/s390x/anames.go
src/cmd/internal/obj/s390x/asmz.go
src/cmd/internal/obj/s390x/vector.go

index ad70d2af44822671a99de6f2cd8694c704ef4a7d..0e50303d70e34b3af652087ce571b8b9d9859a33 100644 (file)
@@ -369,6 +369,9 @@ TEXT main·foo(SB),DUPOK|NOSPLIT,$16-0 // TEXT main.foo(SB), DUPOK|NOSPLIT, $16-
        VSTEH   $7, V31, (R2)           // e7f020007809
        VSTEB   $15, V29, 4094(R12)     // e7d0cffef808
        VMSLG   V21, V22, V23, V24      // e78563007fb8
+       VMSLEG  V21, V22, V23, V24      // e78563807fb8
+       VMSLOG  V21, V22, V23, V24      // e78563407fb8
+       VMSLEOG V21, V22, V23, V24      // e78563c07fb8
 
        RET
        RET     foo(SB)
index 9ee02a2d0d72e219df459da24d3815620609496a..af321f6131a96d76691eb6bf746693bd980567d1 100644 (file)
@@ -945,6 +945,9 @@ const (
        AVUPLHW
        AVUPLF
        AVMSLG
+       AVMSLEG
+       AVMSLOG
+       AVMSLEOG
 
        // binary
        ABYTE
index 2d6ea5abb4431444d3f5435d4aca591812f80cf6..9cea9f962d93d776cb75848e80f0b451f2df06e6 100644 (file)
@@ -678,6 +678,9 @@ var Anames = []string{
        "VUPLHW",
        "VUPLF",
        "VMSLG",
+       "VMSLEG",
+       "VMSLOG",
+       "VMSLEOG",
        "BYTE",
        "WORD",
        "DWORD",
index 359610c41df15371ef64d391dbf0d30aae2ba47b..4e43d2779005570c9d655af5232a862af34beba6 100644 (file)
@@ -1379,6 +1379,9 @@ func buildop(ctxt *obj.Link) {
                        opset(AVSBCBIQ, r)
                        opset(AVSBIQ, r)
                        opset(AVMSLG, r)
+                       opset(AVMSLEG, r)
+                       opset(AVMSLOG, r)
+                       opset(AVMSLEOG, r)
                case AVSEL:
                        opset(AVFMADB, r)
                        opset(AWFMADB, r)
index 3f1d900367d3b6d6e6c1c28badd9ed77c1156c8e..62adcf6d4a523f98a75cbd5bb08b34cb01651976 100644 (file)
@@ -45,7 +45,7 @@ func vop(as obj.As) (opcode, es, cs uint32) {
                return op_VAC, 0, 0
        case AVACQ:
                return op_VAC, 4, 0
-       case AVMSLG:
+       case AVMSLG, AVMSLEG, AVMSLOG, AVMSLEOG:
                return op_VMSL, 3, 0
        case AVACCC:
                return op_VACCC, 0, 0
@@ -1058,6 +1058,12 @@ func singleElementMask(as obj.As) uint32 {
                AWFTCIDB,
                AWFIDB:
                return 8
+       case AVMSLEG:
+               return 8
+       case AVMSLOG:
+               return 4
+       case AVMSLEOG:
+               return 12
        }
        return 0
 }