github.com/insolar/x-crypto@v0.0.0-20191031140942-75fab8a325f6/sha1/sha1block_arm64.s (about)

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