]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/asm: add VSRI instruction on ARM64
authorBalaram Makam <bmakam.qdt@qualcommdatacenter.com>
Wed, 25 Apr 2018 19:33:35 +0000 (15:33 -0400)
committerCherry Zhang <cherryyz@google.com>
Thu, 26 Apr 2018 15:03:21 +0000 (15:03 +0000)
This change provides VSRI instruction for ChaCha20Poly1305 implementation.

Change-Id: Ifee727b6f3982b629b44a67cac5bbe87ca59027b
Reviewed-on: https://go-review.googlesource.com/109342
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Cherry Zhang <cherryyz@google.com>
src/cmd/asm/internal/asm/testdata/arm64.s
src/cmd/internal/obj/arm64/a.out.go
src/cmd/internal/obj/arm64/anames.go
src/cmd/internal/obj/arm64/asm7.go

index 1dc437830fa962e169adce4dba00fe33fec71995..c61d22051d143510e5f177f18d087cf9a0a12aed 100644 (file)
@@ -100,6 +100,13 @@ TEXT       foo(SB), DUPOK|NOSPLIT, $-8
        VSHL    $8, V1.H8, V2.H8                // 2254184f
        VSHL    $2, V1.B8, V2.B8                // 22540a0f
        VSHL    $2, V1.B16, V2.B16              // 22540a4f
+       VSRI    $56, V1.D2, V2.D2               // 2244486f
+       VSRI    $24, V1.S4, V2.S4               // 2244286f
+       VSRI    $24, V1.S2, V2.S2               // 2244282f
+       VSRI    $8, V1.H4, V2.H4                // 2244182f
+       VSRI    $8, V1.H8, V2.H8                // 2244186f
+       VSRI    $2, V1.B8, V2.B8                // 22440e2f
+       VSRI    $2, V1.B16, V2.B16              // 22440e6f
        MOVD    (R2)(R6.SXTW), R4               // 44c866f8
        MOVD    (R3)(R6), R5                    // MOVD (R3)(R6*1), R5                  // 656866f8
        MOVD    (R2)(R6), R4                    // MOVD (R2)(R6*1), R4                  // 446866f8
index 44a912e33f3e8f8a1e7bb2ddff260c43fb7dd065..af57dfefed75dbce2f9dddfbbae8d4b83c8daf59 100644 (file)
@@ -897,6 +897,7 @@ const (
        AVRBIT
        AVUSHR
        AVSHL
+       AVSRI
        ALAST
        AB  = obj.AJMP
        ABL = obj.ACALL
index 88300fc8cd657385220544771bc2e15f22dc194d..aee409e94b871db76b552961cb3cc4fb24382b15 100644 (file)
@@ -399,5 +399,6 @@ var Anames = []string{
        "VRBIT",
        "VUSHR",
        "VSHL",
+       "VSRI",
        "LAST",
 }
index 2b5ee28ddb3a43b3a167befd33be8d1a47f1a4db..1db61d1a45ced4f8e2726b7561a2f7549ed86399 100644 (file)
@@ -2386,6 +2386,7 @@ func buildop(ctxt *obj.Link) {
 
                case AVUSHR:
                        oprangeset(AVSHL, t)
+                       oprangeset(AVSRI, t)
 
                case AVREV32:
                        oprangeset(AVRBIT, t)
@@ -4319,18 +4320,19 @@ func (c *ctxt7) asmout(p *obj.Prog, o *Optab, out []uint32) {
 
                imm := 0
 
-               if p.As == AVUSHR {
+               switch p.As {
+               case AVUSHR, AVSRI:
                        imm = esize*2 - shift
                        if imm < esize || imm > imax {
                                c.ctxt.Diag("shift out of range: %v", p)
                        }
-               }
-
-               if p.As == AVSHL {
+               case AVSHL:
                        imm = esize + shift
                        if imm > imax {
                                c.ctxt.Diag("shift out of range: %v", p)
                        }
+               default:
+                       c.ctxt.Diag("invalid instruction %v\n", p)
                }
 
                o1 = c.opirr(p, p.As)
@@ -5310,6 +5312,9 @@ func (c *ctxt7) opirr(p *obj.Prog, a obj.As) uint32 {
 
        case AVSHL:
                return 0x1E<<23 | 21<<10
+
+       case AVSRI:
+               return 0x5E<<23 | 17<<10
        }
 
        c.ctxt.Diag("%v: bad irr %v", p, a)