1
0
mirror of https://github.com/golang/go synced 2024-11-23 00:10:07 -07:00

cmd/asm: add VSRI instruction on ARM64

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>
This commit is contained in:
Balaram Makam 2018-04-25 15:33:35 -04:00 committed by Cherry Zhang
parent b4ac02972f
commit bf6530a25b
4 changed files with 18 additions and 4 deletions

View 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

View File

@ -897,6 +897,7 @@ const (
AVRBIT
AVUSHR
AVSHL
AVSRI
ALAST
AB = obj.AJMP
ABL = obj.ACALL

View File

@ -399,5 +399,6 @@ var Anames = []string{
"VRBIT",
"VUSHR",
"VSHL",
"VSRI",
"LAST",
}

View 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)