...

Text file src/crypto/sha1/sha1block_arm64.s

Documentation: crypto/sha1

     1// Copyright 2017 The Go Authors. All rights reserved.
     2// Use of this source code is governed by a BSD-style
     3// license that can be found in the LICENSE file.
     4
     5//go:build !purego
     6
     7#include "textflag.h"
     8
     9#define HASHUPDATECHOOSE \
    10	SHA1C	V16.S4, V1, V2 \
    11	SHA1H	V3, V1 \
    12	VMOV	V2.B16, V3.B16
    13
    14#define HASHUPDATEPARITY \
    15	SHA1P	V16.S4, V1, V2 \
    16	SHA1H	V3, V1 \
    17	VMOV	V2.B16, V3.B16
    18
    19#define HASHUPDATEMAJ \
    20	SHA1M	V16.S4, V1, V2 \
    21	SHA1H	V3, V1 \
    22	VMOV	V2.B16, V3.B16
    23
    24// func sha1block(h []uint32, p []byte, k []uint32)
    25TEXT ·sha1block(SB),NOSPLIT,$0
    26	MOVD	h_base+0(FP), R0                             // hash value first address
    27	MOVD	p_base+24(FP), R1                            // message first address
    28	MOVD	k_base+48(FP), R2                            // k constants first address
    29	MOVD	p_len+32(FP), R3                             // message length
    30	VLD1.P	16(R0), [V0.S4]
    31	FMOVS	(R0), F20
    32	SUB	$16, R0, R0
    33
    34blockloop:
    35
    36	VLD1.P	16(R1), [V4.B16]                             // load message
    37	VLD1.P	16(R1), [V5.B16]
    38	VLD1.P	16(R1), [V6.B16]
    39	VLD1.P	16(R1), [V7.B16]
    40	VLD1	(R2), [V19.S4]                               // load constant k0-k79
    41	VMOV	V0.B16, V2.B16
    42	VMOV	V20.S[0], V1
    43	VMOV	V2.B16, V3.B16
    44	VDUP	V19.S[0], V17.S4
    45	VREV32	V4.B16, V4.B16                               // prepare for using message in Byte format
    46	VREV32	V5.B16, V5.B16
    47	VREV32	V6.B16, V6.B16
    48	VREV32	V7.B16, V7.B16
    49
    50
    51	VDUP	V19.S[1], V18.S4
    52	VADD	V17.S4, V4.S4, V16.S4
    53	SHA1SU0	V6.S4, V5.S4, V4.S4
    54	HASHUPDATECHOOSE
    55	SHA1SU1	V7.S4, V4.S4
    56
    57	VADD	V17.S4, V5.S4, V16.S4
    58	SHA1SU0	V7.S4, V6.S4, V5.S4
    59	HASHUPDATECHOOSE
    60	SHA1SU1	V4.S4, V5.S4
    61	VADD	V17.S4, V6.S4, V16.S4
    62	SHA1SU0	V4.S4, V7.S4, V6.S4
    63	HASHUPDATECHOOSE
    64	SHA1SU1	V5.S4, V6.S4
    65
    66	VADD	V17.S4, V7.S4, V16.S4
    67	SHA1SU0	V5.S4, V4.S4, V7.S4
    68	HASHUPDATECHOOSE
    69	SHA1SU1	V6.S4, V7.S4
    70
    71	VADD	V17.S4, V4.S4, V16.S4
    72	SHA1SU0	V6.S4, V5.S4, V4.S4
    73	HASHUPDATECHOOSE
    74	SHA1SU1	V7.S4, V4.S4
    75
    76	VDUP	V19.S[2], V17.S4
    77	VADD	V18.S4, V5.S4, V16.S4
    78	SHA1SU0	V7.S4, V6.S4, V5.S4
    79	HASHUPDATEPARITY
    80	SHA1SU1	V4.S4, V5.S4
    81
    82	VADD	V18.S4, V6.S4, V16.S4
    83	SHA1SU0	V4.S4, V7.S4, V6.S4
    84	HASHUPDATEPARITY
    85	SHA1SU1	V5.S4, V6.S4
    86
    87	VADD	V18.S4, V7.S4, V16.S4
    88	SHA1SU0	V5.S4, V4.S4, V7.S4
    89	HASHUPDATEPARITY
    90	SHA1SU1	V6.S4, V7.S4
    91
    92	VADD	V18.S4, V4.S4, V16.S4
    93	SHA1SU0	V6.S4, V5.S4, V4.S4
    94	HASHUPDATEPARITY
    95	SHA1SU1	V7.S4, V4.S4
    96
    97	VADD	V18.S4, V5.S4, V16.S4
    98	SHA1SU0	V7.S4, V6.S4, V5.S4
    99	HASHUPDATEPARITY
   100	SHA1SU1	V4.S4, V5.S4
   101
   102	VDUP	V19.S[3], V18.S4
   103	VADD	V17.S4, V6.S4, V16.S4
   104	SHA1SU0	V4.S4, V7.S4, V6.S4
   105	HASHUPDATEMAJ
   106	SHA1SU1	V5.S4, V6.S4
   107
   108	VADD	V17.S4, V7.S4, V16.S4
   109	SHA1SU0	V5.S4, V4.S4, V7.S4
   110	HASHUPDATEMAJ
   111	SHA1SU1	V6.S4, V7.S4
   112
   113	VADD	V17.S4, V4.S4, V16.S4
   114	SHA1SU0	V6.S4, V5.S4, V4.S4
   115	HASHUPDATEMAJ
   116	SHA1SU1	V7.S4, V4.S4
   117
   118	VADD	V17.S4, V5.S4, V16.S4
   119	SHA1SU0	V7.S4, V6.S4, V5.S4
   120	HASHUPDATEMAJ
   121	SHA1SU1	V4.S4, V5.S4
   122
   123	VADD	V17.S4, V6.S4, V16.S4
   124	SHA1SU0	V4.S4, V7.S4, V6.S4
   125	HASHUPDATEMAJ
   126	SHA1SU1	V5.S4, V6.S4
   127
   128	VADD	V18.S4, V7.S4, V16.S4
   129	SHA1SU0	V5.S4, V4.S4, V7.S4
   130	HASHUPDATEPARITY
   131	SHA1SU1	V6.S4, V7.S4
   132
   133	VADD	V18.S4, V4.S4, V16.S4
   134	HASHUPDATEPARITY
   135
   136	VADD	V18.S4, V5.S4, V16.S4
   137	HASHUPDATEPARITY
   138
   139	VADD	V18.S4, V6.S4, V16.S4
   140	HASHUPDATEPARITY
   141
   142	VADD	V18.S4, V7.S4, V16.S4
   143	HASHUPDATEPARITY
   144
   145	SUB	$64, R3, R3                                  // message length - 64bytes, then compare with 64bytes
   146	VADD	V2.S4, V0.S4, V0.S4
   147	VADD	V1.S4, V20.S4, V20.S4
   148	CBNZ	R3, blockloop
   149
   150sha1ret:
   151
   152	VST1.P	[V0.S4], 16(R0)                               // store hash value H(dcba)
   153	FMOVS	F20, (R0)                                     // store hash value H(e)
   154	RET

View as plain text