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