github.com/bir3/gocompiler@v0.3.205/src/cmd/internal/notsha256/sha256block_amd64.s (about)

     1  // Copyright 2013 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  // +build !purego
     7  
     8  #include "textflag.h"
     9  
    10  // SHA256 block routine. See sha256block.go for Go equivalent.
    11  //
    12  // The algorithm is detailed in FIPS 180-4:
    13  //
    14  //  https://csrc.nist.gov/publications/fips/fips180-4/fips-180-4.pdf
    15  
    16  // Wt = Mt; for 0 <= t <= 15
    17  // Wt = SIGMA1(Wt-2) + SIGMA0(Wt-15) + Wt-16; for 16 <= t <= 63
    18  //
    19  // a = H0
    20  // b = H1
    21  // c = H2
    22  // d = H3
    23  // e = H4
    24  // f = H5
    25  // g = H6
    26  // h = H7
    27  //
    28  // for t = 0 to 63 {
    29  //    T1 = h + BIGSIGMA1(e) + Ch(e,f,g) + Kt + Wt
    30  //    T2 = BIGSIGMA0(a) + Maj(a,b,c)
    31  //    h = g
    32  //    g = f
    33  //    f = e
    34  //    e = d + T1
    35  //    d = c
    36  //    c = b
    37  //    b = a
    38  //    a = T1 + T2
    39  // }
    40  //
    41  // H0 = a + H0
    42  // H1 = b + H1
    43  // H2 = c + H2
    44  // H3 = d + H3
    45  // H4 = e + H4
    46  // H5 = f + H5
    47  // H6 = g + H6
    48  // H7 = h + H7
    49  
    50  // Wt = Mt; for 0 <= t <= 15
    51  #define MSGSCHEDULE0(index) \
    52  	MOVL	(index*4)(SI), AX; \
    53  	BSWAPL	AX; \
    54  	MOVL	AX, (index*4)(BP)
    55  
    56  // Wt = SIGMA1(Wt-2) + Wt-7 + SIGMA0(Wt-15) + Wt-16; for 16 <= t <= 63
    57  //   SIGMA0(x) = ROTR(7,x) XOR ROTR(18,x) XOR SHR(3,x)
    58  //   SIGMA1(x) = ROTR(17,x) XOR ROTR(19,x) XOR SHR(10,x)
    59  #define MSGSCHEDULE1(index) \
    60  	MOVL	((index-2)*4)(BP), AX; \
    61  	MOVL	AX, CX; \
    62  	RORL	$17, AX; \
    63  	MOVL	CX, DX; \
    64  	RORL	$19, CX; \
    65  	SHRL	$10, DX; \
    66  	MOVL	((index-15)*4)(BP), BX; \
    67  	XORL	CX, AX; \
    68  	MOVL	BX, CX; \
    69  	XORL	DX, AX; \
    70  	RORL	$7, BX; \
    71  	MOVL	CX, DX; \
    72  	SHRL	$3, DX; \
    73  	RORL	$18, CX; \
    74  	ADDL	((index-7)*4)(BP), AX; \
    75  	XORL	CX, BX; \
    76  	XORL	DX, BX; \
    77  	ADDL	((index-16)*4)(BP), BX; \
    78  	ADDL	BX, AX; \
    79  	MOVL	AX, ((index)*4)(BP)
    80  
    81  // Calculate T1 in AX - uses AX, CX and DX registers.
    82  // h is also used as an accumulator. Wt is passed in AX.
    83  //   T1 = h + BIGSIGMA1(e) + Ch(e, f, g) + Kt + Wt
    84  //     BIGSIGMA1(x) = ROTR(6,x) XOR ROTR(11,x) XOR ROTR(25,x)
    85  //     Ch(x, y, z) = (x AND y) XOR (NOT x AND z)
    86  #define SHA256T1(const, e, f, g, h) \
    87  	ADDL	AX, h; \
    88  	MOVL	e, AX; \
    89  	ADDL	$const, h; \
    90  	MOVL	e, CX; \
    91  	RORL	$6, AX; \
    92  	MOVL	e, DX; \
    93  	RORL	$11, CX; \
    94  	XORL	CX, AX; \
    95  	MOVL	e, CX; \
    96  	RORL	$25, DX; \
    97  	ANDL	f, CX; \
    98  	XORL	AX, DX; \
    99  	MOVL	e, AX; \
   100  	NOTL	AX; \
   101  	ADDL	DX, h; \
   102  	ANDL	g, AX; \
   103  	XORL	CX, AX; \
   104  	ADDL	h, AX
   105  
   106  // Calculate T2 in BX - uses BX, CX, DX and DI registers.
   107  //   T2 = BIGSIGMA0(a) + Maj(a, b, c)
   108  //     BIGSIGMA0(x) = ROTR(2,x) XOR ROTR(13,x) XOR ROTR(22,x)
   109  //     Maj(x, y, z) = (x AND y) XOR (x AND z) XOR (y AND z)
   110  #define SHA256T2(a, b, c) \
   111  	MOVL	a, DI; \
   112  	MOVL	c, BX; \
   113  	RORL	$2, DI; \
   114  	MOVL	a, DX; \
   115  	ANDL	b, BX; \
   116  	RORL	$13, DX; \
   117  	MOVL	a, CX; \
   118  	ANDL	c, CX; \
   119  	XORL	DX, DI; \
   120  	XORL	CX, BX; \
   121  	MOVL	a, DX; \
   122  	MOVL	b, CX; \
   123  	RORL	$22, DX; \
   124  	ANDL	a, CX; \
   125  	XORL	CX, BX; \
   126  	XORL	DX, DI; \
   127  	ADDL	DI, BX
   128  
   129  // Calculate T1 and T2, then e = d + T1 and a = T1 + T2.
   130  // The values for e and a are stored in d and h, ready for rotation.
   131  #define SHA256ROUND(index, const, a, b, c, d, e, f, g, h) \
   132  	SHA256T1(const, e, f, g, h); \
   133  	SHA256T2(a, b, c); \
   134  	MOVL	BX, h; \
   135  	ADDL	AX, d; \
   136  	ADDL	AX, h
   137  
   138  #define SHA256ROUND0(index, const, a, b, c, d, e, f, g, h) \
   139  	MSGSCHEDULE0(index); \
   140  	SHA256ROUND(index, const, a, b, c, d, e, f, g, h)
   141  
   142  #define SHA256ROUND1(index, const, a, b, c, d, e, f, g, h) \
   143  	MSGSCHEDULE1(index); \
   144  	SHA256ROUND(index, const, a, b, c, d, e, f, g, h)
   145  
   146  TEXT ·block(SB), 0, $536-32
   147  	MOVQ p_base+8(FP), SI
   148  	MOVQ p_len+16(FP), DX
   149  	SHRQ $6, DX
   150  	SHLQ $6, DX
   151  
   152  	LEAQ (SI)(DX*1), DI
   153  	MOVQ DI, 256(SP)
   154  	CMPQ SI, DI
   155  	JEQ  end
   156  
   157  	MOVQ dig+0(FP), BP
   158  	MOVL (0*4)(BP), R8  // a = H0
   159  	MOVL (1*4)(BP), R9  // b = H1
   160  	MOVL (2*4)(BP), R10 // c = H2
   161  	MOVL (3*4)(BP), R11 // d = H3
   162  	MOVL (4*4)(BP), R12 // e = H4
   163  	MOVL (5*4)(BP), R13 // f = H5
   164  	MOVL (6*4)(BP), R14 // g = H6
   165  	MOVL (7*4)(BP), R15 // h = H7
   166  
   167  loop:
   168  	MOVQ SP, BP
   169  
   170  	SHA256ROUND0(0, 0x428a2f98, R8, R9, R10, R11, R12, R13, R14, R15)
   171  	SHA256ROUND0(1, 0x71374491, R15, R8, R9, R10, R11, R12, R13, R14)
   172  	SHA256ROUND0(2, 0xb5c0fbcf, R14, R15, R8, R9, R10, R11, R12, R13)
   173  	SHA256ROUND0(3, 0xe9b5dba5, R13, R14, R15, R8, R9, R10, R11, R12)
   174  	SHA256ROUND0(4, 0x3956c25b, R12, R13, R14, R15, R8, R9, R10, R11)
   175  	SHA256ROUND0(5, 0x59f111f1, R11, R12, R13, R14, R15, R8, R9, R10)
   176  	SHA256ROUND0(6, 0x923f82a4, R10, R11, R12, R13, R14, R15, R8, R9)
   177  	SHA256ROUND0(7, 0xab1c5ed5, R9, R10, R11, R12, R13, R14, R15, R8)
   178  	SHA256ROUND0(8, 0xd807aa98, R8, R9, R10, R11, R12, R13, R14, R15)
   179  	SHA256ROUND0(9, 0x12835b01, R15, R8, R9, R10, R11, R12, R13, R14)
   180  	SHA256ROUND0(10, 0x243185be, R14, R15, R8, R9, R10, R11, R12, R13)
   181  	SHA256ROUND0(11, 0x550c7dc3, R13, R14, R15, R8, R9, R10, R11, R12)
   182  	SHA256ROUND0(12, 0x72be5d74, R12, R13, R14, R15, R8, R9, R10, R11)
   183  	SHA256ROUND0(13, 0x80deb1fe, R11, R12, R13, R14, R15, R8, R9, R10)
   184  	SHA256ROUND0(14, 0x9bdc06a7, R10, R11, R12, R13, R14, R15, R8, R9)
   185  	SHA256ROUND0(15, 0xc19bf174, R9, R10, R11, R12, R13, R14, R15, R8)
   186  
   187  	SHA256ROUND1(16, 0xe49b69c1, R8, R9, R10, R11, R12, R13, R14, R15)
   188  	SHA256ROUND1(17, 0xefbe4786, R15, R8, R9, R10, R11, R12, R13, R14)
   189  	SHA256ROUND1(18, 0x0fc19dc6, R14, R15, R8, R9, R10, R11, R12, R13)
   190  	SHA256ROUND1(19, 0x240ca1cc, R13, R14, R15, R8, R9, R10, R11, R12)
   191  	SHA256ROUND1(20, 0x2de92c6f, R12, R13, R14, R15, R8, R9, R10, R11)
   192  	SHA256ROUND1(21, 0x4a7484aa, R11, R12, R13, R14, R15, R8, R9, R10)
   193  	SHA256ROUND1(22, 0x5cb0a9dc, R10, R11, R12, R13, R14, R15, R8, R9)
   194  	SHA256ROUND1(23, 0x76f988da, R9, R10, R11, R12, R13, R14, R15, R8)
   195  	SHA256ROUND1(24, 0x983e5152, R8, R9, R10, R11, R12, R13, R14, R15)
   196  	SHA256ROUND1(25, 0xa831c66d, R15, R8, R9, R10, R11, R12, R13, R14)
   197  	SHA256ROUND1(26, 0xb00327c8, R14, R15, R8, R9, R10, R11, R12, R13)
   198  	SHA256ROUND1(27, 0xbf597fc7, R13, R14, R15, R8, R9, R10, R11, R12)
   199  	SHA256ROUND1(28, 0xc6e00bf3, R12, R13, R14, R15, R8, R9, R10, R11)
   200  	SHA256ROUND1(29, 0xd5a79147, R11, R12, R13, R14, R15, R8, R9, R10)
   201  	SHA256ROUND1(30, 0x06ca6351, R10, R11, R12, R13, R14, R15, R8, R9)
   202  	SHA256ROUND1(31, 0x14292967, R9, R10, R11, R12, R13, R14, R15, R8)
   203  	SHA256ROUND1(32, 0x27b70a85, R8, R9, R10, R11, R12, R13, R14, R15)
   204  	SHA256ROUND1(33, 0x2e1b2138, R15, R8, R9, R10, R11, R12, R13, R14)
   205  	SHA256ROUND1(34, 0x4d2c6dfc, R14, R15, R8, R9, R10, R11, R12, R13)
   206  	SHA256ROUND1(35, 0x53380d13, R13, R14, R15, R8, R9, R10, R11, R12)
   207  	SHA256ROUND1(36, 0x650a7354, R12, R13, R14, R15, R8, R9, R10, R11)
   208  	SHA256ROUND1(37, 0x766a0abb, R11, R12, R13, R14, R15, R8, R9, R10)
   209  	SHA256ROUND1(38, 0x81c2c92e, R10, R11, R12, R13, R14, R15, R8, R9)
   210  	SHA256ROUND1(39, 0x92722c85, R9, R10, R11, R12, R13, R14, R15, R8)
   211  	SHA256ROUND1(40, 0xa2bfe8a1, R8, R9, R10, R11, R12, R13, R14, R15)
   212  	SHA256ROUND1(41, 0xa81a664b, R15, R8, R9, R10, R11, R12, R13, R14)
   213  	SHA256ROUND1(42, 0xc24b8b70, R14, R15, R8, R9, R10, R11, R12, R13)
   214  	SHA256ROUND1(43, 0xc76c51a3, R13, R14, R15, R8, R9, R10, R11, R12)
   215  	SHA256ROUND1(44, 0xd192e819, R12, R13, R14, R15, R8, R9, R10, R11)
   216  	SHA256ROUND1(45, 0xd6990624, R11, R12, R13, R14, R15, R8, R9, R10)
   217  	SHA256ROUND1(46, 0xf40e3585, R10, R11, R12, R13, R14, R15, R8, R9)
   218  	SHA256ROUND1(47, 0x106aa070, R9, R10, R11, R12, R13, R14, R15, R8)
   219  	SHA256ROUND1(48, 0x19a4c116, R8, R9, R10, R11, R12, R13, R14, R15)
   220  	SHA256ROUND1(49, 0x1e376c08, R15, R8, R9, R10, R11, R12, R13, R14)
   221  	SHA256ROUND1(50, 0x2748774c, R14, R15, R8, R9, R10, R11, R12, R13)
   222  	SHA256ROUND1(51, 0x34b0bcb5, R13, R14, R15, R8, R9, R10, R11, R12)
   223  	SHA256ROUND1(52, 0x391c0cb3, R12, R13, R14, R15, R8, R9, R10, R11)
   224  	SHA256ROUND1(53, 0x4ed8aa4a, R11, R12, R13, R14, R15, R8, R9, R10)
   225  	SHA256ROUND1(54, 0x5b9cca4f, R10, R11, R12, R13, R14, R15, R8, R9)
   226  	SHA256ROUND1(55, 0x682e6ff3, R9, R10, R11, R12, R13, R14, R15, R8)
   227  	SHA256ROUND1(56, 0x748f82ee, R8, R9, R10, R11, R12, R13, R14, R15)
   228  	SHA256ROUND1(57, 0x78a5636f, R15, R8, R9, R10, R11, R12, R13, R14)
   229  	SHA256ROUND1(58, 0x84c87814, R14, R15, R8, R9, R10, R11, R12, R13)
   230  	SHA256ROUND1(59, 0x8cc70208, R13, R14, R15, R8, R9, R10, R11, R12)
   231  	SHA256ROUND1(60, 0x90befffa, R12, R13, R14, R15, R8, R9, R10, R11)
   232  	SHA256ROUND1(61, 0xa4506ceb, R11, R12, R13, R14, R15, R8, R9, R10)
   233  	SHA256ROUND1(62, 0xbef9a3f7, R10, R11, R12, R13, R14, R15, R8, R9)
   234  	SHA256ROUND1(63, 0xc67178f2, R9, R10, R11, R12, R13, R14, R15, R8)
   235  
   236  	MOVQ dig+0(FP), BP
   237  	ADDL (0*4)(BP), R8  // H0 = a + H0
   238  	MOVL R8, (0*4)(BP)
   239  	ADDL (1*4)(BP), R9  // H1 = b + H1
   240  	MOVL R9, (1*4)(BP)
   241  	ADDL (2*4)(BP), R10 // H2 = c + H2
   242  	MOVL R10, (2*4)(BP)
   243  	ADDL (3*4)(BP), R11 // H3 = d + H3
   244  	MOVL R11, (3*4)(BP)
   245  	ADDL (4*4)(BP), R12 // H4 = e + H4
   246  	MOVL R12, (4*4)(BP)
   247  	ADDL (5*4)(BP), R13 // H5 = f + H5
   248  	MOVL R13, (5*4)(BP)
   249  	ADDL (6*4)(BP), R14 // H6 = g + H6
   250  	MOVL R14, (6*4)(BP)
   251  	ADDL (7*4)(BP), R15 // H7 = h + H7
   252  	MOVL R15, (7*4)(BP)
   253  
   254  	ADDQ $64, SI
   255  	CMPQ SI, 256(SP)
   256  	JB   loop
   257  
   258  end:
   259  	RET
   260  
   261  // shuffle byte order from LE to BE
   262  DATA flip_mask<>+0x00(SB)/8, $0x0405060700010203
   263  DATA flip_mask<>+0x08(SB)/8, $0x0c0d0e0f08090a0b
   264  DATA flip_mask<>+0x10(SB)/8, $0x0405060700010203
   265  DATA flip_mask<>+0x18(SB)/8, $0x0c0d0e0f08090a0b
   266  GLOBL flip_mask<>(SB), 8, $32
   267  
   268  // shuffle xBxA -> 00BA
   269  DATA shuff_00BA<>+0x00(SB)/8, $0x0b0a090803020100
   270  DATA shuff_00BA<>+0x08(SB)/8, $0xFFFFFFFFFFFFFFFF
   271  DATA shuff_00BA<>+0x10(SB)/8, $0x0b0a090803020100
   272  DATA shuff_00BA<>+0x18(SB)/8, $0xFFFFFFFFFFFFFFFF
   273  GLOBL shuff_00BA<>(SB), 8, $32
   274  
   275  // shuffle xDxC -> DC00
   276  DATA shuff_DC00<>+0x00(SB)/8, $0xFFFFFFFFFFFFFFFF
   277  DATA shuff_DC00<>+0x08(SB)/8, $0x0b0a090803020100
   278  DATA shuff_DC00<>+0x10(SB)/8, $0xFFFFFFFFFFFFFFFF
   279  DATA shuff_DC00<>+0x18(SB)/8, $0x0b0a090803020100
   280  GLOBL shuff_DC00<>(SB), 8, $32
   281  
   282  // Round specific constants
   283  DATA K256<>+0x00(SB)/4, $0x428a2f98 // k1
   284  DATA K256<>+0x04(SB)/4, $0x71374491 // k2
   285  DATA K256<>+0x08(SB)/4, $0xb5c0fbcf // k3
   286  DATA K256<>+0x0c(SB)/4, $0xe9b5dba5 // k4
   287  DATA K256<>+0x10(SB)/4, $0x428a2f98 // k1
   288  DATA K256<>+0x14(SB)/4, $0x71374491 // k2
   289  DATA K256<>+0x18(SB)/4, $0xb5c0fbcf // k3
   290  DATA K256<>+0x1c(SB)/4, $0xe9b5dba5 // k4
   291  
   292  DATA K256<>+0x20(SB)/4, $0x3956c25b // k5 - k8
   293  DATA K256<>+0x24(SB)/4, $0x59f111f1
   294  DATA K256<>+0x28(SB)/4, $0x923f82a4
   295  DATA K256<>+0x2c(SB)/4, $0xab1c5ed5
   296  DATA K256<>+0x30(SB)/4, $0x3956c25b
   297  DATA K256<>+0x34(SB)/4, $0x59f111f1
   298  DATA K256<>+0x38(SB)/4, $0x923f82a4
   299  DATA K256<>+0x3c(SB)/4, $0xab1c5ed5
   300  
   301  DATA K256<>+0x40(SB)/4, $0xd807aa98 // k9 - k12
   302  DATA K256<>+0x44(SB)/4, $0x12835b01
   303  DATA K256<>+0x48(SB)/4, $0x243185be
   304  DATA K256<>+0x4c(SB)/4, $0x550c7dc3
   305  DATA K256<>+0x50(SB)/4, $0xd807aa98
   306  DATA K256<>+0x54(SB)/4, $0x12835b01
   307  DATA K256<>+0x58(SB)/4, $0x243185be
   308  DATA K256<>+0x5c(SB)/4, $0x550c7dc3
   309  
   310  DATA K256<>+0x60(SB)/4, $0x72be5d74 // k13 - k16
   311  DATA K256<>+0x64(SB)/4, $0x80deb1fe
   312  DATA K256<>+0x68(SB)/4, $0x9bdc06a7
   313  DATA K256<>+0x6c(SB)/4, $0xc19bf174
   314  DATA K256<>+0x70(SB)/4, $0x72be5d74
   315  DATA K256<>+0x74(SB)/4, $0x80deb1fe
   316  DATA K256<>+0x78(SB)/4, $0x9bdc06a7
   317  DATA K256<>+0x7c(SB)/4, $0xc19bf174
   318  
   319  DATA K256<>+0x80(SB)/4, $0xe49b69c1 // k17 - k20
   320  DATA K256<>+0x84(SB)/4, $0xefbe4786
   321  DATA K256<>+0x88(SB)/4, $0x0fc19dc6
   322  DATA K256<>+0x8c(SB)/4, $0x240ca1cc
   323  DATA K256<>+0x90(SB)/4, $0xe49b69c1
   324  DATA K256<>+0x94(SB)/4, $0xefbe4786
   325  DATA K256<>+0x98(SB)/4, $0x0fc19dc6
   326  DATA K256<>+0x9c(SB)/4, $0x240ca1cc
   327  
   328  DATA K256<>+0xa0(SB)/4, $0x2de92c6f // k21 - k24
   329  DATA K256<>+0xa4(SB)/4, $0x4a7484aa
   330  DATA K256<>+0xa8(SB)/4, $0x5cb0a9dc
   331  DATA K256<>+0xac(SB)/4, $0x76f988da
   332  DATA K256<>+0xb0(SB)/4, $0x2de92c6f
   333  DATA K256<>+0xb4(SB)/4, $0x4a7484aa
   334  DATA K256<>+0xb8(SB)/4, $0x5cb0a9dc
   335  DATA K256<>+0xbc(SB)/4, $0x76f988da
   336  
   337  DATA K256<>+0xc0(SB)/4, $0x983e5152 // k25 - k28
   338  DATA K256<>+0xc4(SB)/4, $0xa831c66d
   339  DATA K256<>+0xc8(SB)/4, $0xb00327c8
   340  DATA K256<>+0xcc(SB)/4, $0xbf597fc7
   341  DATA K256<>+0xd0(SB)/4, $0x983e5152
   342  DATA K256<>+0xd4(SB)/4, $0xa831c66d
   343  DATA K256<>+0xd8(SB)/4, $0xb00327c8
   344  DATA K256<>+0xdc(SB)/4, $0xbf597fc7
   345  
   346  DATA K256<>+0xe0(SB)/4, $0xc6e00bf3 // k29 - k32
   347  DATA K256<>+0xe4(SB)/4, $0xd5a79147
   348  DATA K256<>+0xe8(SB)/4, $0x06ca6351
   349  DATA K256<>+0xec(SB)/4, $0x14292967
   350  DATA K256<>+0xf0(SB)/4, $0xc6e00bf3
   351  DATA K256<>+0xf4(SB)/4, $0xd5a79147
   352  DATA K256<>+0xf8(SB)/4, $0x06ca6351
   353  DATA K256<>+0xfc(SB)/4, $0x14292967
   354  
   355  DATA K256<>+0x100(SB)/4, $0x27b70a85
   356  DATA K256<>+0x104(SB)/4, $0x2e1b2138
   357  DATA K256<>+0x108(SB)/4, $0x4d2c6dfc
   358  DATA K256<>+0x10c(SB)/4, $0x53380d13
   359  DATA K256<>+0x110(SB)/4, $0x27b70a85
   360  DATA K256<>+0x114(SB)/4, $0x2e1b2138
   361  DATA K256<>+0x118(SB)/4, $0x4d2c6dfc
   362  DATA K256<>+0x11c(SB)/4, $0x53380d13
   363  
   364  DATA K256<>+0x120(SB)/4, $0x650a7354
   365  DATA K256<>+0x124(SB)/4, $0x766a0abb
   366  DATA K256<>+0x128(SB)/4, $0x81c2c92e
   367  DATA K256<>+0x12c(SB)/4, $0x92722c85
   368  DATA K256<>+0x130(SB)/4, $0x650a7354
   369  DATA K256<>+0x134(SB)/4, $0x766a0abb
   370  DATA K256<>+0x138(SB)/4, $0x81c2c92e
   371  DATA K256<>+0x13c(SB)/4, $0x92722c85
   372  
   373  DATA K256<>+0x140(SB)/4, $0xa2bfe8a1
   374  DATA K256<>+0x144(SB)/4, $0xa81a664b
   375  DATA K256<>+0x148(SB)/4, $0xc24b8b70
   376  DATA K256<>+0x14c(SB)/4, $0xc76c51a3
   377  DATA K256<>+0x150(SB)/4, $0xa2bfe8a1
   378  DATA K256<>+0x154(SB)/4, $0xa81a664b
   379  DATA K256<>+0x158(SB)/4, $0xc24b8b70
   380  DATA K256<>+0x15c(SB)/4, $0xc76c51a3
   381  
   382  DATA K256<>+0x160(SB)/4, $0xd192e819
   383  DATA K256<>+0x164(SB)/4, $0xd6990624
   384  DATA K256<>+0x168(SB)/4, $0xf40e3585
   385  DATA K256<>+0x16c(SB)/4, $0x106aa070
   386  DATA K256<>+0x170(SB)/4, $0xd192e819
   387  DATA K256<>+0x174(SB)/4, $0xd6990624
   388  DATA K256<>+0x178(SB)/4, $0xf40e3585
   389  DATA K256<>+0x17c(SB)/4, $0x106aa070
   390  
   391  DATA K256<>+0x180(SB)/4, $0x19a4c116
   392  DATA K256<>+0x184(SB)/4, $0x1e376c08
   393  DATA K256<>+0x188(SB)/4, $0x2748774c
   394  DATA K256<>+0x18c(SB)/4, $0x34b0bcb5
   395  DATA K256<>+0x190(SB)/4, $0x19a4c116
   396  DATA K256<>+0x194(SB)/4, $0x1e376c08
   397  DATA K256<>+0x198(SB)/4, $0x2748774c
   398  DATA K256<>+0x19c(SB)/4, $0x34b0bcb5
   399  
   400  DATA K256<>+0x1a0(SB)/4, $0x391c0cb3
   401  DATA K256<>+0x1a4(SB)/4, $0x4ed8aa4a
   402  DATA K256<>+0x1a8(SB)/4, $0x5b9cca4f
   403  DATA K256<>+0x1ac(SB)/4, $0x682e6ff3
   404  DATA K256<>+0x1b0(SB)/4, $0x391c0cb3
   405  DATA K256<>+0x1b4(SB)/4, $0x4ed8aa4a
   406  DATA K256<>+0x1b8(SB)/4, $0x5b9cca4f
   407  DATA K256<>+0x1bc(SB)/4, $0x682e6ff3
   408  
   409  DATA K256<>+0x1c0(SB)/4, $0x748f82ee
   410  DATA K256<>+0x1c4(SB)/4, $0x78a5636f
   411  DATA K256<>+0x1c8(SB)/4, $0x84c87814
   412  DATA K256<>+0x1cc(SB)/4, $0x8cc70208
   413  DATA K256<>+0x1d0(SB)/4, $0x748f82ee
   414  DATA K256<>+0x1d4(SB)/4, $0x78a5636f
   415  DATA K256<>+0x1d8(SB)/4, $0x84c87814
   416  DATA K256<>+0x1dc(SB)/4, $0x8cc70208
   417  
   418  DATA K256<>+0x1e0(SB)/4, $0x90befffa
   419  DATA K256<>+0x1e4(SB)/4, $0xa4506ceb
   420  DATA K256<>+0x1e8(SB)/4, $0xbef9a3f7
   421  DATA K256<>+0x1ec(SB)/4, $0xc67178f2
   422  DATA K256<>+0x1f0(SB)/4, $0x90befffa
   423  DATA K256<>+0x1f4(SB)/4, $0xa4506ceb
   424  DATA K256<>+0x1f8(SB)/4, $0xbef9a3f7
   425  DATA K256<>+0x1fc(SB)/4, $0xc67178f2
   426  
   427  GLOBL K256<>(SB), (NOPTR + RODATA), $512