diff --git a/HashLib.Tests/src/Hash64Tests.pas b/HashLib.Tests/src/Hash64Tests.pas index 265998ce..0fe379a0 100644 --- a/HashLib.Tests/src/Hash64Tests.pas +++ b/HashLib.Tests/src/Hash64Tests.pas @@ -3,6 +3,7 @@ interface uses + SysUtils, {$IFDEF FPC} fpcunit, testregistry, @@ -10,6 +11,7 @@ interface TestFramework, {$ENDIF FPC} HashLibTestBase, + HlpIHashInfo, HlpHashFactory; // Hash64 @@ -70,6 +72,18 @@ TTestXXHash3 = class(THashWithUInt64AsKeyAlgorithmTestCase) procedure SetUp; override; procedure TearDown; override; + published + // Known-answer tests for the long-input paths (values cross-checked + // against the official xxHash implementation): the self-consistency + // chunked tests alone cannot catch a wrong SIMD kernel because both + // sides run the same code. + procedure TestChunkedDataKnownAnswer; // 299 bytes: accumulate512 + procedure TestTwoKiBDataKnownAnswer; // 2048 bytes: scrambleAcc + procedure TestChunkedDataWithMaxUInt64AsKeyKnownAnswer; // seeded: initSecret + // An asymmetric key (lo32 <> hi32) - a symmetric one like MaxUInt64 + // cannot catch seed dword swaps or wrong hi/lo pickup in the kernels. + procedure TestChunkedDataWithAsymmetricKeyKnownAnswer; + end; implementation @@ -188,6 +202,69 @@ procedure TTestXXHash3.TearDown; inherited; end; +procedure TTestXXHash3.TestChunkedDataKnownAnswer; +begin + ExpectedString := '3D3D7245B763ACE8'; + ActualString := HashInstance.ComputeString(ChunkedData, TEncoding.UTF8) + .ToString(); + CheckEquals(ExpectedString, ActualString, Format('Expected %s but got %s.', + [ExpectedString, ActualString])); +end; + +procedure TTestXXHash3.TestTwoKiBDataKnownAnswer; +var + LData: TBytes; + LIdx: Int32; +begin + System.SetLength(LData, 2048); + for LIdx := 0 to 2047 do + begin + LData[LIdx] := Byte(LIdx and $FF); + end; + ExpectedString := 'DD420471FF96BD00'; + ActualString := HashInstance.ComputeBytes(LData).ToString(); + CheckEquals(ExpectedString, ActualString, Format('Expected %s but got %s.', + [ExpectedString, ActualString])); +end; + +procedure TTestXXHash3.TestChunkedDataWithAsymmetricKeyKnownAnswer; +var + LIHashWithKey: IHashWithKey; + LKey: TBytes; +begin + // key = $0123456789ABCDEF (little-endian bytes below) + ExpectedString := 'FBF9CD92890CC82A'; + CheckTrue(Supports(HashInstance, IHashWithKey, LIHashWithKey), + 'HashInstance must support IHashWithKey'); + LKey := TBytes.Create($EF, $CD, $AB, $89, $67, $45, $23, $01); + LIHashWithKey.Key := LKey; + ActualString := LIHashWithKey.ComputeString(ChunkedData, TEncoding.UTF8) + .ToString(); + CheckEquals(ExpectedString, ActualString, Format('Expected %s but got %s.', + [ExpectedString, ActualString])); +end; + +procedure TTestXXHash3.TestChunkedDataWithMaxUInt64AsKeyKnownAnswer; +var + LIHashWithKey: IHashWithKey; + LKey: TBytes; + LIdx: Int32; +begin + ExpectedString := '7DEFEE70FC854900'; + CheckTrue(Supports(HashInstance, IHashWithKey, LIHashWithKey), + 'HashInstance must support IHashWithKey'); + System.SetLength(LKey, System.SizeOf(UInt64)); + for LIdx := 0 to System.High(LKey) do + begin + LKey[LIdx] := $FF; + end; + LIHashWithKey.Key := LKey; + ActualString := LIHashWithKey.ComputeString(ChunkedData, TEncoding.UTF8) + .ToString(); + CheckEquals(ExpectedString, ActualString, Format('Expected %s but got %s.', + [ExpectedString, ActualString])); +end; + initialization // Register any test cases with the test runner diff --git a/HashLib/src/Hash64/HlpXXHash3.pas b/HashLib/src/Hash64/HlpXXHash3.pas index e6aaab6d..b6ca698c 100644 --- a/HashLib/src/Hash64/HlpXXHash3.pas +++ b/HashLib/src/Hash64/HlpXXHash3.pas @@ -21,7 +21,7 @@ interface ASecret: Pointer; ANbStripes: Int32); TXXH3ScrambleAccProc = procedure(AAcc: Pointer; ASecret: Pointer); TXXH3InitSecretProc = procedure(ACustomSecret: Pointer; - ADefaultSecret: Pointer; ASeed: UInt64); + ADefaultSecret: Pointer; ASeedPtr: PUInt64); var XXH3_Accumulate512: TXXH3Accumulate512Proc; @@ -208,60 +208,66 @@ implementation procedure XXH3_Accumulate512_Scalar(AAcc: Pointer; AInput: Pointer; ASecret: Pointer); var - LPAcc: PUInt64; - LPInput, LPSecret: PByte; + LPAcc, LPInput, LPSecret: PByte; + LPLane: PUInt64; I: Int32; LDataVal, LDataKey: UInt64; begin - LPAcc := PUInt64(AAcc); + LPAcc := PByte(AAcc); LPInput := PByte(AInput); LPSecret := PByte(ASecret); for I := 0 to XXH_ACC_NB - 1 do begin LDataVal := TBinaryPrimitives.ReadUInt64LittleEndian(LPInput, I * 8); LDataKey := LDataVal xor TBinaryPrimitives.ReadUInt64LittleEndian(LPSecret, I * 8); - PUInt64(PByte(LPAcc) + (I xor 1) * 8)^ := - PUInt64(PByte(LPAcc) + (I xor 1) * 8)^ + LDataVal; - PUInt64(PByte(LPAcc) + I * 8)^ := - PUInt64(PByte(LPAcc) + I * 8)^ + - UInt64(UInt32(LDataKey)) * UInt64(UInt32(LDataKey shr 32)); + LPLane := PUInt64(LPAcc + (I xor 1) * 8); + TBinaryPrimitives.StoreUInt64(LPLane, + TBinaryPrimitives.LoadUInt64(LPLane) + LDataVal); + LPLane := PUInt64(LPAcc + I * 8); + TBinaryPrimitives.StoreUInt64(LPLane, + TBinaryPrimitives.LoadUInt64(LPLane) + + UInt64(UInt32(LDataKey)) * UInt64(UInt32(LDataKey shr 32))); end; end; procedure XXH3_ScrambleAcc_Scalar(AAcc: Pointer; ASecret: Pointer); var - LPAcc: PUInt64; - LPSecret: PByte; + LPAcc, LPSecret: PByte; + LPLane: PUInt64; I: Int32; LKey64, LAcc64: UInt64; begin - LPAcc := PUInt64(AAcc); + LPAcc := PByte(AAcc); LPSecret := PByte(ASecret); for I := 0 to XXH_ACC_NB - 1 do begin LKey64 := TBinaryPrimitives.ReadUInt64LittleEndian(LPSecret, I * 8); - LAcc64 := PUInt64(PByte(LPAcc) + I * 8)^; + LPLane := PUInt64(LPAcc + I * 8); + LAcc64 := TBinaryPrimitives.LoadUInt64(LPLane); LAcc64 := LAcc64 xor (LAcc64 shr 47); LAcc64 := LAcc64 xor LKey64; LAcc64 := LAcc64 * XXH_PRIME32_1; - PUInt64(PByte(LPAcc) + I * 8)^ := LAcc64; + TBinaryPrimitives.StoreUInt64(LPLane, LAcc64); end; end; procedure XXH3_InitSecret_Scalar(ACustomSecret: Pointer; - ADefaultSecret: Pointer; ASeed: UInt64); + ADefaultSecret: Pointer; ASeedPtr: PUInt64); var I: Int32; LPSrc, LPDst: PByte; + ASeed: UInt64; begin + ASeed := ASeedPtr^; LPSrc := PByte(ADefaultSecret); LPDst := PByte(ACustomSecret); + for I := 0 to (192 div 16) - 1 do begin - PUInt64(LPDst + 16 * I)^ := - TBinaryPrimitives.ReadUInt64LittleEndian(LPSrc, 16 * I) + ASeed; - PUInt64(LPDst + 16 * I + 8)^ := - TBinaryPrimitives.ReadUInt64LittleEndian(LPSrc, 16 * I + 8) - ASeed; + TBinaryPrimitives.WriteUInt64LittleEndian(LPDst, 16 * I, + TBinaryPrimitives.ReadUInt64LittleEndian(LPSrc, 16 * I) + ASeed); + TBinaryPrimitives.WriteUInt64LittleEndian(LPDst, 16 * I + 8, + TBinaryPrimitives.ReadUInt64LittleEndian(LPSrc, 16 * I + 8) - ASeed); end; end; @@ -448,7 +454,7 @@ class procedure TXXH3Core.XXH3_hashLong_internal_loop( class procedure TXXH3Core.XXH3_initCustomSecret(ACustomSecret: PByte; ASeed: UInt64); begin - HlpXXHash3.XXH3_InitSecret(ACustomSecret, @XXH3_SECRET[0], ASeed); + HlpXXHash3.XXH3_InitSecret(ACustomSecret, @XXH3_SECRET[0], @ASeed); end; class procedure TXXH3Core.XXH3_consumeStripes(var AAcc: TXXH3AccArray; diff --git a/HashLib/src/Include/HashLib.inc b/HashLib/src/Include/HashLib.inc index 2e90f935..ff32f557 100644 --- a/HashLib/src/Include/HashLib.inc +++ b/HashLib/src/Include/HashLib.inc @@ -173,7 +173,7 @@ {$IFDEF HASHLIB_ARM_SIMD} // Uncomment at most ONE to force a specific Arm SIMD dispatch level: -// {$DEFINE HASHLIB_FORCE_NEON} + {$DEFINE HASHLIB_FORCE_NEON} // {$DEFINE HASHLIB_FORCE_SVE} {$IF (DEFINED(HASHLIB_FORCE_SCALAR) AND DEFINED(HASHLIB_FORCE_NEON)) diff --git a/HashLib/src/Include/Simd/Argon2/Argon2FillBlockNeon_aarch64.inc b/HashLib/src/Include/Simd/Argon2/Argon2FillBlockNeon_aarch64.inc index 7f6bc0a9..a9ed74a2 100644 --- a/HashLib/src/Include/Simd/Argon2/Argon2FillBlockNeon_aarch64.inc +++ b/HashLib/src/Include/Simd/Argon2/Argon2FillBlockNeon_aarch64.inc @@ -11,12 +11,14 @@ // v2-v3 = B0, B1 // v4-v5 = C0, C1 // v6-v7 = D0, D1 -// v16-v18 = fBlaMka / rotr temps +// v16-v18 = fBlaMka / rotate temps (2-op insert rotates rename B/D rows +// through v16/v17; rows return home before each slice store) // x9 = R_buf base ([sp+64]) // x10 = loop byte offset (steps 1-5) // x11 = Z_buf base ([sp+1088]) // x12 = Z slice pointer (column/row load/store) // w3 = WithXor (0 or 1) + sub sp, sp, #2128 add x9, sp, #64 mov x10, #0 @@ -78,138 +80,126 @@ .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b .long 0x6f680450 // ushr v16.2d, v2.2d, #24 - .long 0x4f685451 // shl v17.2d, v2.2d, #40 - .long 0x4eb11e02 // orr v2.16b, v16.16b, v17.16b - .long 0x6f680470 // ushr v16.2d, v3.2d, #24 - .long 0x4f685471 // shl v17.2d, v3.2d, #40 - .long 0x4eb11e03 // orr v3.16b, v16.16b, v17.16b - .long 0x0ea12810 // xtn v16.2s, v0.2d - .long 0x0ea12851 // xtn v17.2s, v2.2d - .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s - .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee28400 // add v0.2d, v0.2d, v2.2d + .long 0x6f685450 // sli v16.2d, v2.2d, #40 + .long 0x6f680471 // ushr v17.2d, v3.2d, #24 + .long 0x6f685471 // sli v17.2d, v3.2d, #40 + .long 0x0ea12802 // xtn v2.2s, v0.2d + .long 0x0ea12a03 // xtn v3.2s, v16.2d + .long 0x2ea3c052 // umull v18.2d, v2.2s, v3.2s + .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d + .long 0x4ef08400 // add v0.2d, v0.2d, v16.2d .long 0x4ef28400 // add v0.2d, v0.2d, v18.2d - .long 0x0ea12830 // xtn v16.2s, v1.2d - .long 0x0ea12871 // xtn v17.2s, v3.2d - .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s + .long 0x0ea12822 // xtn v2.2s, v1.2d + .long 0x0ea12a23 // xtn v3.2s, v17.2d + .long 0x2ea3c052 // umull v18.2d, v2.2s, v3.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee38421 // add v1.2d, v1.2d, v3.2d + .long 0x4ef18421 // add v1.2d, v1.2d, v17.2d .long 0x4ef28421 // add v1.2d, v1.2d, v18.2d .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d0 // ushr v16.2d, v6.2d, #16 - .long 0x4f7054d1 // shl v17.2d, v6.2d, #48 - .long 0x4eb11e06 // orr v6.16b, v16.16b, v17.16b - .long 0x6f7004f0 // ushr v16.2d, v7.2d, #16 - .long 0x4f7054f1 // shl v17.2d, v7.2d, #48 - .long 0x4eb11e07 // orr v7.16b, v16.16b, v17.16b - .long 0x0ea12890 // xtn v16.2s, v4.2d - .long 0x0ea128d1 // xtn v17.2s, v6.2d - .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s - .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d + .long 0x6f7004c2 // ushr v2.2d, v6.2d, #16 + .long 0x6f7054c2 // sli v2.2d, v6.2d, #48 + .long 0x6f7004e3 // ushr v3.2d, v7.2d, #16 + .long 0x6f7054e3 // sli v3.2d, v7.2d, #48 + .long 0x0ea12886 // xtn v6.2s, v4.2d + .long 0x0ea12847 // xtn v7.2s, v2.2d + .long 0x2ea7c0d2 // umull v18.2d, v6.2s, v7.2s + .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d .long 0x4ef28484 // add v4.2d, v4.2d, v18.2d - .long 0x0ea128b0 // xtn v16.2s, v5.2d - .long 0x0ea128f1 // xtn v17.2s, v7.2d - .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s + .long 0x0ea128a6 // xtn v6.2s, v5.2d + .long 0x0ea12867 // xtn v7.2s, v3.2d + .long 0x2ea7c0d2 // umull v18.2d, v6.2s, v7.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d .long 0x4ef284a5 // add v5.2d, v5.2d, v18.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28450 // add v16.2d, v2.2d, v2.2d - .long 0x6f410451 // ushr v17.2d, v2.2d, #63 - .long 0x4eb11e02 // orr v2.16b, v16.16b, v17.16b - .long 0x4ee38470 // add v16.2d, v3.2d, v3.2d - .long 0x6f410471 // ushr v17.2d, v3.2d, #63 - .long 0x4eb11e03 // orr v3.16b, v16.16b, v17.16b - .long 0x6e034050 // ext v16.16b, v2.16b, v3.16b, #8 - .long 0x6e024071 // ext v17.16b, v3.16b, v2.16b, #8 - .long 0x4eb01e02 // orr v2.16b, v16.16b, v16.16b - .long 0x4eb11e23 // orr v3.16b, v17.16b, v17.16b + .long 0x6e241e10 // eor v16.16b, v16.16b, v4.16b + .long 0x6e251e31 // eor v17.16b, v17.16b, v5.16b + .long 0x4ef08606 // add v6.2d, v16.2d, v16.2d + .long 0x6f414606 // sri v6.2d, v16.2d, #63 + .long 0x4ef18627 // add v7.2d, v17.2d, v17.2d + .long 0x6f414627 // sri v7.2d, v17.2d, #63 + .long 0x6e0740d0 // ext v16.16b, v6.16b, v7.16b, #8 + .long 0x6e0640f1 // ext v17.16b, v7.16b, v6.16b, #8 + .long 0x4eb01e06 // orr v6.16b, v16.16b, v16.16b + .long 0x4eb11e27 // orr v7.16b, v17.16b, v17.16b .long 0x4ea41c90 // orr v16.16b, v4.16b, v4.16b .long 0x4ea51ca4 // orr v4.16b, v5.16b, v5.16b .long 0x4eb01e05 // orr v5.16b, v16.16b, v16.16b - .long 0x6e0740d0 // ext v16.16b, v6.16b, v7.16b, #8 - .long 0x6e0640f1 // ext v17.16b, v7.16b, v6.16b, #8 - .long 0x4eb11e26 // orr v6.16b, v17.16b, v17.16b - .long 0x4eb01e07 // orr v7.16b, v16.16b, v16.16b + .long 0x6e034050 // ext v16.16b, v2.16b, v3.16b, #8 + .long 0x6e024071 // ext v17.16b, v3.16b, v2.16b, #8 + .long 0x4eb11e22 // orr v2.16b, v17.16b, v17.16b + .long 0x4eb01e03 // orr v3.16b, v16.16b, v16.16b .long 0x0ea12810 // xtn v16.2s, v0.2d - .long 0x0ea12851 // xtn v17.2s, v2.2d + .long 0x0ea128d1 // xtn v17.2s, v6.2d .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee28400 // add v0.2d, v0.2d, v2.2d + .long 0x4ee68400 // add v0.2d, v0.2d, v6.2d .long 0x4ef28400 // add v0.2d, v0.2d, v18.2d .long 0x0ea12830 // xtn v16.2s, v1.2d - .long 0x0ea12871 // xtn v17.2s, v3.2d + .long 0x0ea128f1 // xtn v17.2s, v7.2d .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee38421 // add v1.2d, v1.2d, v3.2d + .long 0x4ee78421 // add v1.2d, v1.2d, v7.2d .long 0x4ef28421 // add v1.2d, v1.2d, v18.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x4ea008c6 // rev64 v6.4s, v6.4s - .long 0x4ea008e7 // rev64 v7.4s, v7.4s + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x4ea00842 // rev64 v2.4s, v2.4s + .long 0x4ea00863 // rev64 v3.4s, v3.4s .long 0x0ea12890 // xtn v16.2s, v4.2d - .long 0x0ea128d1 // xtn v17.2s, v6.2d + .long 0x0ea12851 // xtn v17.2s, v2.2d .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d .long 0x4ef28484 // add v4.2d, v4.2d, v18.2d .long 0x0ea128b0 // xtn v16.2s, v5.2d - .long 0x0ea128f1 // xtn v17.2s, v7.2d + .long 0x0ea12871 // xtn v17.2s, v3.2d .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d .long 0x4ef284a5 // add v5.2d, v5.2d, v18.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x6f680450 // ushr v16.2d, v2.2d, #24 - .long 0x4f685451 // shl v17.2d, v2.2d, #40 - .long 0x4eb11e02 // orr v2.16b, v16.16b, v17.16b - .long 0x6f680470 // ushr v16.2d, v3.2d, #24 - .long 0x4f685471 // shl v17.2d, v3.2d, #40 - .long 0x4eb11e03 // orr v3.16b, v16.16b, v17.16b - .long 0x0ea12810 // xtn v16.2s, v0.2d - .long 0x0ea12851 // xtn v17.2s, v2.2d - .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s - .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee28400 // add v0.2d, v0.2d, v2.2d + .long 0x6e241cc6 // eor v6.16b, v6.16b, v4.16b + .long 0x6e251ce7 // eor v7.16b, v7.16b, v5.16b + .long 0x6f6804d0 // ushr v16.2d, v6.2d, #24 + .long 0x6f6854d0 // sli v16.2d, v6.2d, #40 + .long 0x6f6804f1 // ushr v17.2d, v7.2d, #24 + .long 0x6f6854f1 // sli v17.2d, v7.2d, #40 + .long 0x0ea12806 // xtn v6.2s, v0.2d + .long 0x0ea12a07 // xtn v7.2s, v16.2d + .long 0x2ea7c0d2 // umull v18.2d, v6.2s, v7.2s + .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d + .long 0x4ef08400 // add v0.2d, v0.2d, v16.2d .long 0x4ef28400 // add v0.2d, v0.2d, v18.2d - .long 0x0ea12830 // xtn v16.2s, v1.2d - .long 0x0ea12871 // xtn v17.2s, v3.2d - .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s + .long 0x0ea12826 // xtn v6.2s, v1.2d + .long 0x0ea12a27 // xtn v7.2s, v17.2d + .long 0x2ea7c0d2 // umull v18.2d, v6.2s, v7.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee38421 // add v1.2d, v1.2d, v3.2d + .long 0x4ef18421 // add v1.2d, v1.2d, v17.2d .long 0x4ef28421 // add v1.2d, v1.2d, v18.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d0 // ushr v16.2d, v6.2d, #16 - .long 0x4f7054d1 // shl v17.2d, v6.2d, #48 - .long 0x4eb11e06 // orr v6.16b, v16.16b, v17.16b - .long 0x6f7004f0 // ushr v16.2d, v7.2d, #16 - .long 0x4f7054f1 // shl v17.2d, v7.2d, #48 - .long 0x4eb11e07 // orr v7.16b, v16.16b, v17.16b - .long 0x0ea12890 // xtn v16.2s, v4.2d - .long 0x0ea128d1 // xtn v17.2s, v6.2d - .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x6f700446 // ushr v6.2d, v2.2d, #16 + .long 0x6f705446 // sli v6.2d, v2.2d, #48 + .long 0x6f700467 // ushr v7.2d, v3.2d, #16 + .long 0x6f705467 // sli v7.2d, v3.2d, #48 + .long 0x0ea12882 // xtn v2.2s, v4.2d + .long 0x0ea128c3 // xtn v3.2s, v6.2d + .long 0x2ea3c052 // umull v18.2d, v2.2s, v3.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d .long 0x4ef28484 // add v4.2d, v4.2d, v18.2d - .long 0x0ea128b0 // xtn v16.2s, v5.2d - .long 0x0ea128f1 // xtn v17.2s, v7.2d - .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s + .long 0x0ea128a2 // xtn v2.2s, v5.2d + .long 0x0ea128e3 // xtn v3.2s, v7.2d + .long 0x2ea3c052 // umull v18.2d, v2.2s, v3.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d .long 0x4ef284a5 // add v5.2d, v5.2d, v18.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28450 // add v16.2d, v2.2d, v2.2d - .long 0x6f410451 // ushr v17.2d, v2.2d, #63 - .long 0x4eb11e02 // orr v2.16b, v16.16b, v17.16b - .long 0x4ee38470 // add v16.2d, v3.2d, v3.2d - .long 0x6f410471 // ushr v17.2d, v3.2d, #63 - .long 0x4eb11e03 // orr v3.16b, v16.16b, v17.16b + .long 0x6e241e10 // eor v16.16b, v16.16b, v4.16b + .long 0x6e251e31 // eor v17.16b, v17.16b, v5.16b + .long 0x4ef08602 // add v2.2d, v16.2d, v16.2d + .long 0x6f414602 // sri v2.2d, v16.2d, #63 + .long 0x4ef18623 // add v3.2d, v17.2d, v17.2d + .long 0x6f414623 // sri v3.2d, v17.2d, #63 .long 0x6e024070 // ext v16.16b, v3.16b, v2.16b, #8 .long 0x6e034051 // ext v17.16b, v2.16b, v3.16b, #8 .long 0x4eb01e02 // orr v2.16b, v16.16b, v16.16b @@ -275,138 +265,126 @@ .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b .long 0x6f680450 // ushr v16.2d, v2.2d, #24 - .long 0x4f685451 // shl v17.2d, v2.2d, #40 - .long 0x4eb11e02 // orr v2.16b, v16.16b, v17.16b - .long 0x6f680470 // ushr v16.2d, v3.2d, #24 - .long 0x4f685471 // shl v17.2d, v3.2d, #40 - .long 0x4eb11e03 // orr v3.16b, v16.16b, v17.16b - .long 0x0ea12810 // xtn v16.2s, v0.2d - .long 0x0ea12851 // xtn v17.2s, v2.2d - .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s - .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee28400 // add v0.2d, v0.2d, v2.2d + .long 0x6f685450 // sli v16.2d, v2.2d, #40 + .long 0x6f680471 // ushr v17.2d, v3.2d, #24 + .long 0x6f685471 // sli v17.2d, v3.2d, #40 + .long 0x0ea12802 // xtn v2.2s, v0.2d + .long 0x0ea12a03 // xtn v3.2s, v16.2d + .long 0x2ea3c052 // umull v18.2d, v2.2s, v3.2s + .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d + .long 0x4ef08400 // add v0.2d, v0.2d, v16.2d .long 0x4ef28400 // add v0.2d, v0.2d, v18.2d - .long 0x0ea12830 // xtn v16.2s, v1.2d - .long 0x0ea12871 // xtn v17.2s, v3.2d - .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s + .long 0x0ea12822 // xtn v2.2s, v1.2d + .long 0x0ea12a23 // xtn v3.2s, v17.2d + .long 0x2ea3c052 // umull v18.2d, v2.2s, v3.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee38421 // add v1.2d, v1.2d, v3.2d + .long 0x4ef18421 // add v1.2d, v1.2d, v17.2d .long 0x4ef28421 // add v1.2d, v1.2d, v18.2d .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d0 // ushr v16.2d, v6.2d, #16 - .long 0x4f7054d1 // shl v17.2d, v6.2d, #48 - .long 0x4eb11e06 // orr v6.16b, v16.16b, v17.16b - .long 0x6f7004f0 // ushr v16.2d, v7.2d, #16 - .long 0x4f7054f1 // shl v17.2d, v7.2d, #48 - .long 0x4eb11e07 // orr v7.16b, v16.16b, v17.16b - .long 0x0ea12890 // xtn v16.2s, v4.2d - .long 0x0ea128d1 // xtn v17.2s, v6.2d - .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s - .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d + .long 0x6f7004c2 // ushr v2.2d, v6.2d, #16 + .long 0x6f7054c2 // sli v2.2d, v6.2d, #48 + .long 0x6f7004e3 // ushr v3.2d, v7.2d, #16 + .long 0x6f7054e3 // sli v3.2d, v7.2d, #48 + .long 0x0ea12886 // xtn v6.2s, v4.2d + .long 0x0ea12847 // xtn v7.2s, v2.2d + .long 0x2ea7c0d2 // umull v18.2d, v6.2s, v7.2s + .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d .long 0x4ef28484 // add v4.2d, v4.2d, v18.2d - .long 0x0ea128b0 // xtn v16.2s, v5.2d - .long 0x0ea128f1 // xtn v17.2s, v7.2d - .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s + .long 0x0ea128a6 // xtn v6.2s, v5.2d + .long 0x0ea12867 // xtn v7.2s, v3.2d + .long 0x2ea7c0d2 // umull v18.2d, v6.2s, v7.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d .long 0x4ef284a5 // add v5.2d, v5.2d, v18.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28450 // add v16.2d, v2.2d, v2.2d - .long 0x6f410451 // ushr v17.2d, v2.2d, #63 - .long 0x4eb11e02 // orr v2.16b, v16.16b, v17.16b - .long 0x4ee38470 // add v16.2d, v3.2d, v3.2d - .long 0x6f410471 // ushr v17.2d, v3.2d, #63 - .long 0x4eb11e03 // orr v3.16b, v16.16b, v17.16b - .long 0x6e034050 // ext v16.16b, v2.16b, v3.16b, #8 - .long 0x6e024071 // ext v17.16b, v3.16b, v2.16b, #8 - .long 0x4eb01e02 // orr v2.16b, v16.16b, v16.16b - .long 0x4eb11e23 // orr v3.16b, v17.16b, v17.16b + .long 0x6e241e10 // eor v16.16b, v16.16b, v4.16b + .long 0x6e251e31 // eor v17.16b, v17.16b, v5.16b + .long 0x4ef08606 // add v6.2d, v16.2d, v16.2d + .long 0x6f414606 // sri v6.2d, v16.2d, #63 + .long 0x4ef18627 // add v7.2d, v17.2d, v17.2d + .long 0x6f414627 // sri v7.2d, v17.2d, #63 + .long 0x6e0740d0 // ext v16.16b, v6.16b, v7.16b, #8 + .long 0x6e0640f1 // ext v17.16b, v7.16b, v6.16b, #8 + .long 0x4eb01e06 // orr v6.16b, v16.16b, v16.16b + .long 0x4eb11e27 // orr v7.16b, v17.16b, v17.16b .long 0x4ea41c90 // orr v16.16b, v4.16b, v4.16b .long 0x4ea51ca4 // orr v4.16b, v5.16b, v5.16b .long 0x4eb01e05 // orr v5.16b, v16.16b, v16.16b - .long 0x6e0740d0 // ext v16.16b, v6.16b, v7.16b, #8 - .long 0x6e0640f1 // ext v17.16b, v7.16b, v6.16b, #8 - .long 0x4eb11e26 // orr v6.16b, v17.16b, v17.16b - .long 0x4eb01e07 // orr v7.16b, v16.16b, v16.16b + .long 0x6e034050 // ext v16.16b, v2.16b, v3.16b, #8 + .long 0x6e024071 // ext v17.16b, v3.16b, v2.16b, #8 + .long 0x4eb11e22 // orr v2.16b, v17.16b, v17.16b + .long 0x4eb01e03 // orr v3.16b, v16.16b, v16.16b .long 0x0ea12810 // xtn v16.2s, v0.2d - .long 0x0ea12851 // xtn v17.2s, v2.2d + .long 0x0ea128d1 // xtn v17.2s, v6.2d .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee28400 // add v0.2d, v0.2d, v2.2d + .long 0x4ee68400 // add v0.2d, v0.2d, v6.2d .long 0x4ef28400 // add v0.2d, v0.2d, v18.2d .long 0x0ea12830 // xtn v16.2s, v1.2d - .long 0x0ea12871 // xtn v17.2s, v3.2d + .long 0x0ea128f1 // xtn v17.2s, v7.2d .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee38421 // add v1.2d, v1.2d, v3.2d + .long 0x4ee78421 // add v1.2d, v1.2d, v7.2d .long 0x4ef28421 // add v1.2d, v1.2d, v18.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x4ea008c6 // rev64 v6.4s, v6.4s - .long 0x4ea008e7 // rev64 v7.4s, v7.4s + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x4ea00842 // rev64 v2.4s, v2.4s + .long 0x4ea00863 // rev64 v3.4s, v3.4s .long 0x0ea12890 // xtn v16.2s, v4.2d - .long 0x0ea128d1 // xtn v17.2s, v6.2d + .long 0x0ea12851 // xtn v17.2s, v2.2d .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d .long 0x4ef28484 // add v4.2d, v4.2d, v18.2d .long 0x0ea128b0 // xtn v16.2s, v5.2d - .long 0x0ea128f1 // xtn v17.2s, v7.2d + .long 0x0ea12871 // xtn v17.2s, v3.2d .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d .long 0x4ef284a5 // add v5.2d, v5.2d, v18.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x6f680450 // ushr v16.2d, v2.2d, #24 - .long 0x4f685451 // shl v17.2d, v2.2d, #40 - .long 0x4eb11e02 // orr v2.16b, v16.16b, v17.16b - .long 0x6f680470 // ushr v16.2d, v3.2d, #24 - .long 0x4f685471 // shl v17.2d, v3.2d, #40 - .long 0x4eb11e03 // orr v3.16b, v16.16b, v17.16b - .long 0x0ea12810 // xtn v16.2s, v0.2d - .long 0x0ea12851 // xtn v17.2s, v2.2d - .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s - .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee28400 // add v0.2d, v0.2d, v2.2d + .long 0x6e241cc6 // eor v6.16b, v6.16b, v4.16b + .long 0x6e251ce7 // eor v7.16b, v7.16b, v5.16b + .long 0x6f6804d0 // ushr v16.2d, v6.2d, #24 + .long 0x6f6854d0 // sli v16.2d, v6.2d, #40 + .long 0x6f6804f1 // ushr v17.2d, v7.2d, #24 + .long 0x6f6854f1 // sli v17.2d, v7.2d, #40 + .long 0x0ea12806 // xtn v6.2s, v0.2d + .long 0x0ea12a07 // xtn v7.2s, v16.2d + .long 0x2ea7c0d2 // umull v18.2d, v6.2s, v7.2s + .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d + .long 0x4ef08400 // add v0.2d, v0.2d, v16.2d .long 0x4ef28400 // add v0.2d, v0.2d, v18.2d - .long 0x0ea12830 // xtn v16.2s, v1.2d - .long 0x0ea12871 // xtn v17.2s, v3.2d - .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s + .long 0x0ea12826 // xtn v6.2s, v1.2d + .long 0x0ea12a27 // xtn v7.2s, v17.2d + .long 0x2ea7c0d2 // umull v18.2d, v6.2s, v7.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d - .long 0x4ee38421 // add v1.2d, v1.2d, v3.2d + .long 0x4ef18421 // add v1.2d, v1.2d, v17.2d .long 0x4ef28421 // add v1.2d, v1.2d, v18.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d0 // ushr v16.2d, v6.2d, #16 - .long 0x4f7054d1 // shl v17.2d, v6.2d, #48 - .long 0x4eb11e06 // orr v6.16b, v16.16b, v17.16b - .long 0x6f7004f0 // ushr v16.2d, v7.2d, #16 - .long 0x4f7054f1 // shl v17.2d, v7.2d, #48 - .long 0x4eb11e07 // orr v7.16b, v16.16b, v17.16b - .long 0x0ea12890 // xtn v16.2s, v4.2d - .long 0x0ea128d1 // xtn v17.2s, v6.2d - .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x6f700446 // ushr v6.2d, v2.2d, #16 + .long 0x6f705446 // sli v6.2d, v2.2d, #48 + .long 0x6f700467 // ushr v7.2d, v3.2d, #16 + .long 0x6f705467 // sli v7.2d, v3.2d, #48 + .long 0x0ea12882 // xtn v2.2s, v4.2d + .long 0x0ea128c3 // xtn v3.2s, v6.2d + .long 0x2ea3c052 // umull v18.2d, v2.2s, v3.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d .long 0x4ef28484 // add v4.2d, v4.2d, v18.2d - .long 0x0ea128b0 // xtn v16.2s, v5.2d - .long 0x0ea128f1 // xtn v17.2s, v7.2d - .long 0x2eb1c212 // umull v18.2d, v16.2s, v17.2s + .long 0x0ea128a2 // xtn v2.2s, v5.2d + .long 0x0ea128e3 // xtn v3.2s, v7.2d + .long 0x2ea3c052 // umull v18.2d, v2.2s, v3.2s .long 0x4ef28652 // add v18.2d, v18.2d, v18.2d .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d .long 0x4ef284a5 // add v5.2d, v5.2d, v18.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28450 // add v16.2d, v2.2d, v2.2d - .long 0x6f410451 // ushr v17.2d, v2.2d, #63 - .long 0x4eb11e02 // orr v2.16b, v16.16b, v17.16b - .long 0x4ee38470 // add v16.2d, v3.2d, v3.2d - .long 0x6f410471 // ushr v17.2d, v3.2d, #63 - .long 0x4eb11e03 // orr v3.16b, v16.16b, v17.16b + .long 0x6e241e10 // eor v16.16b, v16.16b, v4.16b + .long 0x6e251e31 // eor v17.16b, v17.16b, v5.16b + .long 0x4ef08602 // add v2.2d, v16.2d, v16.2d + .long 0x6f414602 // sri v2.2d, v16.2d, #63 + .long 0x4ef18623 // add v3.2d, v17.2d, v17.2d + .long 0x6f414623 // sri v3.2d, v17.2d, #63 .long 0x6e024070 // ext v16.16b, v3.16b, v2.16b, #8 .long 0x6e034051 // ext v17.16b, v2.16b, v3.16b, #8 .long 0x4eb01e02 // orr v2.16b, v16.16b, v16.16b diff --git a/HashLib/src/Include/Simd/Blake2B/Blake2BCompressNeon_aarch64.inc b/HashLib/src/Include/Simd/Blake2B/Blake2BCompressNeon_aarch64.inc index 1eb793dc..4c005c1f 100644 --- a/HashLib/src/Include/Simd/Blake2B/Blake2BCompressNeon_aarch64.inc +++ b/HashLib/src/Include/Simd/Blake2B/Blake2BCompressNeon_aarch64.inc @@ -12,7 +12,8 @@ // v8-v15 = message block (16 x UInt64) // v16-v19 = saved initial row1l/h, row2l/h for the final feed-forward XOR // v20 = message gather temp b0 (G function) -// v21-v23 = rotate / diagonalize temps (b1 gather uses v23) +// v21-v23 = rotate / diagonalize temps (2-op insert rotates rename the +// rotated row halves through v21/v22; b1 gather uses v23) // u64 ror-by-32 uses rev64.4s (vrev64q_u32), not rev64.16b. {$I ..\..\Include\Simd\Common\HlpSimdNonVolatileSave_aarch64.inc} @@ -49,94 +50,82 @@ .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6f685455 // sli v21.2d, v2.2d, #40 + .long 0x6f680476 // ushr v22.2d, v3.2d, #24 + .long 0x6f685476 // sli v22.2d, v3.2d, #40 .long 0x6e084514 // ins v20.d[0], v8.d[1] .long 0x6e184534 // ins v20.d[1], v9.d[1] .long 0x6e084557 // ins v23.d[0], v10.d[1] .long 0x6e184577 // ins v23.d[1], v11.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x6e034055 // ext v21.16b, v2.16b, v3.16b, #8 - .long 0x6e024063 // ext v3.16b, v3.16b, v2.16b, #8 - .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b + .long 0x6f7004c2 // ushr v2.2d, v6.2d, #16 + .long 0x6f7054c2 // sli v2.2d, v6.2d, #48 + .long 0x6f7004e3 // ushr v3.2d, v7.2d, #16 + .long 0x6f7054e3 // sli v3.2d, v7.2d, #48 + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a6 // add v6.2d, v21.2d, v21.2d + .long 0x6f4146a6 // sri v6.2d, v21.2d, #63 + .long 0x4ef686c7 // add v7.2d, v22.2d, v22.2d + .long 0x6f4146c7 // sri v7.2d, v22.2d, #63 + .long 0x6e0740d5 // ext v21.16b, v6.16b, v7.16b, #8 + .long 0x6e0640e7 // ext v7.16b, v7.16b, v6.16b, #8 + .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b .long 0x4ea41c95 // orr v21.16b, v4.16b, v4.16b .long 0x4ea51ca4 // orr v4.16b, v5.16b, v5.16b .long 0x4eb51ea5 // orr v5.16b, v21.16b, v21.16b - .long 0x6e0640f5 // ext v21.16b, v7.16b, v6.16b, #8 - .long 0x6e0740c7 // ext v7.16b, v6.16b, v7.16b, #8 - .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b + .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 + .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 + .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b .long 0x6e080594 // ins v20.d[0], v12.d[0] .long 0x6e1805b4 // ins v20.d[1], v13.d[0] .long 0x6e0805d7 // ins v23.d[0], v14.d[0] .long 0x6e1805f7 // ins v23.d[1], v15.d[0] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ee68694 // add v20.2d, v20.2d, v6.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ee786f7 // add v23.2d, v23.2d, v7.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x4ea008c6 // rev64 v6.4s, v6.4s - .long 0x4ea008e7 // rev64 v7.4s, v7.4s - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x4ea00842 // rev64 v2.4s, v2.4s + .long 0x4ea00863 // rev64 v3.4s, v3.4s + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241cc6 // eor v6.16b, v6.16b, v4.16b + .long 0x6e251ce7 // eor v7.16b, v7.16b, v5.16b + .long 0x6f6804d5 // ushr v21.2d, v6.2d, #24 + .long 0x6f6854d5 // sli v21.2d, v6.2d, #40 + .long 0x6f6804f6 // ushr v22.2d, v7.2d, #24 + .long 0x6f6854f6 // sli v22.2d, v7.2d, #40 .long 0x6e084594 // ins v20.d[0], v12.d[1] .long 0x6e1845b4 // ins v20.d[1], v13.d[1] .long 0x6e0845d7 // ins v23.d[0], v14.d[1] .long 0x6e1845f7 // ins v23.d[1], v15.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x6f700446 // ushr v6.2d, v2.2d, #16 + .long 0x6f705446 // sli v6.2d, v2.2d, #48 + .long 0x6f700467 // ushr v7.2d, v3.2d, #16 + .long 0x6f705467 // sli v7.2d, v3.2d, #48 .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a2 // add v2.2d, v21.2d, v21.2d + .long 0x6f4146a2 // sri v2.2d, v21.2d, #63 + .long 0x4ef686c3 // add v3.2d, v22.2d, v22.2d + .long 0x6f4146c3 // sri v3.2d, v22.2d, #63 .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b @@ -163,92 +152,80 @@ .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6f685455 // sli v21.2d, v2.2d, #40 + .long 0x6f680476 // ushr v22.2d, v3.2d, #24 + .long 0x6f685476 // sli v22.2d, v3.2d, #40 .long 0x6e0805b4 // ins v20.d[0], v13.d[0] .long 0x6e180594 // ins v20.d[1], v12.d[0] .long 0x6e0b41f7 // ext v23.16b, v15.16b, v11.16b, #8 - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x6e034055 // ext v21.16b, v2.16b, v3.16b, #8 - .long 0x6e024063 // ext v3.16b, v3.16b, v2.16b, #8 - .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b + .long 0x6f7004c2 // ushr v2.2d, v6.2d, #16 + .long 0x6f7054c2 // sli v2.2d, v6.2d, #48 + .long 0x6f7004e3 // ushr v3.2d, v7.2d, #16 + .long 0x6f7054e3 // sli v3.2d, v7.2d, #48 + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a6 // add v6.2d, v21.2d, v21.2d + .long 0x6f4146a6 // sri v6.2d, v21.2d, #63 + .long 0x4ef686c7 // add v7.2d, v22.2d, v22.2d + .long 0x6f4146c7 // sri v7.2d, v22.2d, #63 + .long 0x6e0740d5 // ext v21.16b, v6.16b, v7.16b, #8 + .long 0x6e0640e7 // ext v7.16b, v7.16b, v6.16b, #8 + .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b .long 0x4ea41c95 // orr v21.16b, v4.16b, v4.16b .long 0x4ea51ca4 // orr v4.16b, v5.16b, v5.16b .long 0x4eb51ea5 // orr v5.16b, v21.16b, v21.16b - .long 0x6e0640f5 // ext v21.16b, v7.16b, v6.16b, #8 - .long 0x6e0740c7 // ext v7.16b, v6.16b, v7.16b, #8 - .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b + .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 + .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 + .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b .long 0x6e084114 // ext v20.16b, v8.16b, v8.16b, #8 .long 0x6e0845b7 // ins v23.d[0], v13.d[1] .long 0x6e184557 // ins v23.d[1], v10.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ee68694 // add v20.2d, v20.2d, v6.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ee786f7 // add v23.2d, v23.2d, v7.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x4ea008c6 // rev64 v6.4s, v6.4s - .long 0x4ea008e7 // rev64 v7.4s, v7.4s - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x4ea00842 // rev64 v2.4s, v2.4s + .long 0x4ea00863 // rev64 v3.4s, v3.4s + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241cc6 // eor v6.16b, v6.16b, v4.16b + .long 0x6e251ce7 // eor v7.16b, v7.16b, v5.16b + .long 0x6f6804d5 // ushr v21.2d, v6.2d, #24 + .long 0x6f6854d5 // sli v21.2d, v6.2d, #40 + .long 0x6f6804f6 // ushr v22.2d, v7.2d, #24 + .long 0x6f6854f6 // sli v22.2d, v7.2d, #40 .long 0x6e0805d4 // ins v20.d[0], v14.d[0] .long 0x6e180534 // ins v20.d[1], v9.d[0] .long 0x6e084577 // ins v23.d[0], v11.d[1] .long 0x6e184537 // ins v23.d[1], v9.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x6f700446 // ushr v6.2d, v2.2d, #16 + .long 0x6f705446 // sli v6.2d, v2.2d, #48 + .long 0x6f700467 // ushr v7.2d, v3.2d, #16 + .long 0x6f705467 // sli v7.2d, v3.2d, #48 .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a2 // add v2.2d, v21.2d, v21.2d + .long 0x6f4146a2 // sri v2.2d, v21.2d, #63 + .long 0x4ef686c3 // add v3.2d, v22.2d, v22.2d + .long 0x6f4146c3 // sri v3.2d, v22.2d, #63 .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b @@ -274,93 +251,81 @@ .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6f685455 // sli v21.2d, v2.2d, #40 + .long 0x6f680476 // ushr v22.2d, v3.2d, #24 + .long 0x6f685476 // sli v22.2d, v3.2d, #40 .long 0x6e080594 // ins v20.d[0], v12.d[0] .long 0x6e180514 // ins v20.d[1], v8.d[0] .long 0x6e080537 // ins v23.d[0], v9.d[0] .long 0x6e1845d7 // ins v23.d[1], v14.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x6e034055 // ext v21.16b, v2.16b, v3.16b, #8 - .long 0x6e024063 // ext v3.16b, v3.16b, v2.16b, #8 - .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b + .long 0x6f7004c2 // ushr v2.2d, v6.2d, #16 + .long 0x6f7054c2 // sli v2.2d, v6.2d, #48 + .long 0x6f7004e3 // ushr v3.2d, v7.2d, #16 + .long 0x6f7054e3 // sli v3.2d, v7.2d, #48 + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a6 // add v6.2d, v21.2d, v21.2d + .long 0x6f4146a6 // sri v6.2d, v21.2d, #63 + .long 0x4ef686c7 // add v7.2d, v22.2d, v22.2d + .long 0x6f4146c7 // sri v7.2d, v22.2d, #63 + .long 0x6e0740d5 // ext v21.16b, v6.16b, v7.16b, #8 + .long 0x6e0640e7 // ext v7.16b, v7.16b, v6.16b, #8 + .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b .long 0x4ea41c95 // orr v21.16b, v4.16b, v4.16b .long 0x4ea51ca4 // orr v4.16b, v5.16b, v5.16b .long 0x4eb51ea5 // orr v5.16b, v21.16b, v21.16b - .long 0x6e0640f5 // ext v21.16b, v7.16b, v6.16b, #8 - .long 0x6e0740c7 // ext v7.16b, v6.16b, v7.16b, #8 - .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b + .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 + .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 + .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b .long 0x6e0805b4 // ins v20.d[0], v13.d[0] .long 0x6e184534 // ins v20.d[1], v9.d[1] .long 0x6e084577 // ins v23.d[0], v11.d[1] .long 0x6e184597 // ins v23.d[1], v12.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ee68694 // add v20.2d, v20.2d, v6.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ee786f7 // add v23.2d, v23.2d, v7.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x4ea008c6 // rev64 v6.4s, v6.4s - .long 0x4ea008e7 // rev64 v7.4s, v7.4s - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x4ea00842 // rev64 v2.4s, v2.4s + .long 0x4ea00863 // rev64 v3.4s, v3.4s + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241cc6 // eor v6.16b, v6.16b, v4.16b + .long 0x6e251ce7 // eor v7.16b, v7.16b, v5.16b + .long 0x6f6804d5 // ushr v21.2d, v6.2d, #24 + .long 0x6f6854d5 // sli v21.2d, v6.2d, #40 + .long 0x6f6804f6 // ushr v22.2d, v7.2d, #24 + .long 0x6f6854f6 // sli v22.2d, v7.2d, #40 .long 0x6e0805f4 // ins v20.d[0], v15.d[0] .long 0x6e180574 // ins v20.d[1], v11.d[0] .long 0x6e0a4117 // ext v23.16b, v8.16b, v10.16b, #8 - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x6f700446 // ushr v6.2d, v2.2d, #16 + .long 0x6f705446 // sli v6.2d, v2.2d, #48 + .long 0x6f700467 // ushr v7.2d, v3.2d, #16 + .long 0x6f705467 // sli v7.2d, v3.2d, #48 .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a2 // add v2.2d, v21.2d, v21.2d + .long 0x6f4146a2 // sri v2.2d, v21.2d, #63 + .long 0x4ef686c3 // add v3.2d, v22.2d, v22.2d + .long 0x6f4146c3 // sri v3.2d, v22.2d, #63 .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b @@ -387,94 +352,82 @@ .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6f685455 // sli v21.2d, v2.2d, #40 + .long 0x6f680476 // ushr v22.2d, v3.2d, #24 + .long 0x6f685476 // sli v22.2d, v3.2d, #40 .long 0x6e084594 // ins v20.d[0], v12.d[1] .long 0x6e184514 // ins v20.d[1], v8.d[1] .long 0x6e0805d7 // ins v23.d[0], v14.d[0] .long 0x6e1805f7 // ins v23.d[1], v15.d[0] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x6e034055 // ext v21.16b, v2.16b, v3.16b, #8 - .long 0x6e024063 // ext v3.16b, v3.16b, v2.16b, #8 - .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b + .long 0x6f7004c2 // ushr v2.2d, v6.2d, #16 + .long 0x6f7054c2 // sli v2.2d, v6.2d, #48 + .long 0x6f7004e3 // ushr v3.2d, v7.2d, #16 + .long 0x6f7054e3 // sli v3.2d, v7.2d, #48 + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a6 // add v6.2d, v21.2d, v21.2d + .long 0x6f4146a6 // sri v6.2d, v21.2d, #63 + .long 0x4ef686c7 // add v7.2d, v22.2d, v22.2d + .long 0x6f4146c7 // sri v7.2d, v22.2d, #63 + .long 0x6e0740d5 // ext v21.16b, v6.16b, v7.16b, #8 + .long 0x6e0640e7 // ext v7.16b, v7.16b, v6.16b, #8 + .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b .long 0x4ea41c95 // orr v21.16b, v4.16b, v4.16b .long 0x4ea51ca4 // orr v4.16b, v5.16b, v5.16b .long 0x4eb51ea5 // orr v5.16b, v21.16b, v21.16b - .long 0x6e0640f5 // ext v21.16b, v7.16b, v6.16b, #8 - .long 0x6e0740c7 // ext v7.16b, v6.16b, v7.16b, #8 - .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b + .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 + .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 + .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b .long 0x6e080534 // ins v20.d[0], v9.d[0] .long 0x6e184554 // ins v20.d[1], v10.d[1] .long 0x6e080557 // ins v23.d[0], v10.d[0] .long 0x6e1845f7 // ins v23.d[1], v15.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ee68694 // add v20.2d, v20.2d, v6.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ee786f7 // add v23.2d, v23.2d, v7.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x4ea008c6 // rev64 v6.4s, v6.4s - .long 0x4ea008e7 // rev64 v7.4s, v7.4s - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x4ea00842 // rev64 v2.4s, v2.4s + .long 0x4ea00863 // rev64 v3.4s, v3.4s + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241cc6 // eor v6.16b, v6.16b, v4.16b + .long 0x6e251ce7 // eor v7.16b, v7.16b, v5.16b + .long 0x6f6804d5 // ushr v21.2d, v6.2d, #24 + .long 0x6f6854d5 // sli v21.2d, v6.2d, #40 + .long 0x6f6804f6 // ushr v22.2d, v7.2d, #24 + .long 0x6f6854f6 // sli v22.2d, v7.2d, #40 .long 0x6e080574 // ins v20.d[0], v11.d[0] .long 0x6e1805b4 // ins v20.d[1], v13.d[0] .long 0x6e080517 // ins v23.d[0], v8.d[0] .long 0x6e180597 // ins v23.d[1], v12.d[0] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x6f700446 // ushr v6.2d, v2.2d, #16 + .long 0x6f705446 // sli v6.2d, v2.2d, #48 + .long 0x6f700467 // ushr v7.2d, v3.2d, #16 + .long 0x6f705467 // sli v7.2d, v3.2d, #48 .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a2 // add v2.2d, v21.2d, v21.2d + .long 0x6f4146a2 // sri v2.2d, v21.2d, #63 + .long 0x4ef686c3 // add v3.2d, v22.2d, v22.2d + .long 0x6f4146c3 // sri v3.2d, v22.2d, #63 .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b @@ -501,93 +454,81 @@ .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6f685455 // sli v21.2d, v2.2d, #40 + .long 0x6f680476 // ushr v22.2d, v3.2d, #24 + .long 0x6f685476 // sli v22.2d, v3.2d, #40 .long 0x6e080514 // ins v20.d[0], v8.d[0] .long 0x6e184574 // ins v20.d[1], v11.d[1] .long 0x6e080557 // ins v23.d[0], v10.d[0] .long 0x6e1845f7 // ins v23.d[1], v15.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x6e034055 // ext v21.16b, v2.16b, v3.16b, #8 - .long 0x6e024063 // ext v3.16b, v3.16b, v2.16b, #8 - .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b + .long 0x6f7004c2 // ushr v2.2d, v6.2d, #16 + .long 0x6f7054c2 // sli v2.2d, v6.2d, #48 + .long 0x6f7004e3 // ushr v3.2d, v7.2d, #16 + .long 0x6f7054e3 // sli v3.2d, v7.2d, #48 + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a6 // add v6.2d, v21.2d, v21.2d + .long 0x6f4146a6 // sri v6.2d, v21.2d, #63 + .long 0x4ef686c7 // add v7.2d, v22.2d, v22.2d + .long 0x6f4146c7 // sri v7.2d, v22.2d, #63 + .long 0x6e0740d5 // ext v21.16b, v6.16b, v7.16b, #8 + .long 0x6e0640e7 // ext v7.16b, v7.16b, v6.16b, #8 + .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b .long 0x4ea41c95 // orr v21.16b, v4.16b, v4.16b .long 0x4ea51ca4 // orr v4.16b, v5.16b, v5.16b .long 0x4eb51ea5 // orr v5.16b, v21.16b, v21.16b - .long 0x6e0640f5 // ext v21.16b, v7.16b, v6.16b, #8 - .long 0x6e0740c7 // ext v7.16b, v6.16b, v7.16b, #8 - .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b + .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 + .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 + .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b .long 0x6e0805f4 // ins v20.d[0], v15.d[0] .long 0x6e1845b4 // ins v20.d[1], v13.d[1] .long 0x6e080577 // ins v23.d[0], v11.d[0] .long 0x6e184537 // ins v23.d[1], v9.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ee68694 // add v20.2d, v20.2d, v6.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ee786f7 // add v23.2d, v23.2d, v7.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x4ea008c6 // rev64 v6.4s, v6.4s - .long 0x4ea008e7 // rev64 v7.4s, v7.4s - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x4ea00842 // rev64 v2.4s, v2.4s + .long 0x4ea00863 // rev64 v3.4s, v3.4s + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241cc6 // eor v6.16b, v6.16b, v4.16b + .long 0x6e251ce7 // eor v7.16b, v7.16b, v5.16b + .long 0x6f6804d5 // ushr v21.2d, v6.2d, #24 + .long 0x6f6854d5 // sli v21.2d, v6.2d, #40 + .long 0x6f6804f6 // ushr v22.2d, v7.2d, #24 + .long 0x6f6854f6 // sli v22.2d, v7.2d, #40 .long 0x6e0e4114 // ext v20.16b, v8.16b, v14.16b, #8 .long 0x6e080597 // ins v23.d[0], v12.d[0] .long 0x6e1845d7 // ins v23.d[1], v14.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x6f700446 // ushr v6.2d, v2.2d, #16 + .long 0x6f705446 // sli v6.2d, v2.2d, #48 + .long 0x6f700467 // ushr v7.2d, v3.2d, #16 + .long 0x6f705467 // sli v7.2d, v3.2d, #48 .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a2 // add v2.2d, v21.2d, v21.2d + .long 0x6f4146a2 // sri v2.2d, v21.2d, #63 + .long 0x4ef686c3 // add v3.2d, v22.2d, v22.2d + .long 0x6f4146c3 // sri v3.2d, v22.2d, #63 .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b @@ -614,94 +555,82 @@ .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6f685455 // sli v21.2d, v2.2d, #40 + .long 0x6f680476 // ushr v22.2d, v3.2d, #24 + .long 0x6f685476 // sli v22.2d, v3.2d, #40 .long 0x6e0805d4 // ins v20.d[0], v14.d[0] .long 0x6e1805b4 // ins v20.d[1], v13.d[0] .long 0x6e0845b7 // ins v23.d[0], v13.d[1] .long 0x6e184537 // ins v23.d[1], v9.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x6e034055 // ext v21.16b, v2.16b, v3.16b, #8 - .long 0x6e024063 // ext v3.16b, v3.16b, v2.16b, #8 - .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b + .long 0x6f7004c2 // ushr v2.2d, v6.2d, #16 + .long 0x6f7054c2 // sli v2.2d, v6.2d, #48 + .long 0x6f7004e3 // ushr v3.2d, v7.2d, #16 + .long 0x6f7054e3 // sli v3.2d, v7.2d, #48 + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a6 // add v6.2d, v21.2d, v21.2d + .long 0x6f4146a6 // sri v6.2d, v21.2d, #63 + .long 0x4ef686c7 // add v7.2d, v22.2d, v22.2d + .long 0x6f4146c7 // sri v7.2d, v22.2d, #63 + .long 0x6e0740d5 // ext v21.16b, v6.16b, v7.16b, #8 + .long 0x6e0640e7 // ext v7.16b, v7.16b, v6.16b, #8 + .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b .long 0x4ea41c95 // orr v21.16b, v4.16b, v4.16b .long 0x4ea51ca4 // orr v4.16b, v5.16b, v5.16b .long 0x4eb51ea5 // orr v5.16b, v21.16b, v21.16b - .long 0x6e0640f5 // ext v21.16b, v7.16b, v6.16b, #8 - .long 0x6e0740c7 // ext v7.16b, v6.16b, v7.16b, #8 - .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b + .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 + .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 + .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b .long 0x6e080554 // ins v20.d[0], v10.d[0] .long 0x6e184574 // ins v20.d[1], v11.d[1] .long 0x6e0845f7 // ins v23.d[0], v15.d[1] .long 0x6e184517 // ins v23.d[1], v8.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ee68694 // add v20.2d, v20.2d, v6.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ee786f7 // add v23.2d, v23.2d, v7.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x4ea008c6 // rev64 v6.4s, v6.4s - .long 0x4ea008e7 // rev64 v7.4s, v7.4s - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x4ea00842 // rev64 v2.4s, v2.4s + .long 0x4ea00863 // rev64 v3.4s, v3.4s + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241cc6 // eor v6.16b, v6.16b, v4.16b + .long 0x6e251ce7 // eor v7.16b, v7.16b, v5.16b + .long 0x6f6804d5 // ushr v21.2d, v6.2d, #24 + .long 0x6f6854d5 // sli v21.2d, v6.2d, #40 + .long 0x6f6804f6 // ushr v22.2d, v7.2d, #24 + .long 0x6f6854f6 // sli v22.2d, v7.2d, #40 .long 0x6e0845d4 // ins v20.d[0], v14.d[1] .long 0x6e184554 // ins v20.d[1], v10.d[1] .long 0x6e0805f7 // ins v23.d[0], v15.d[0] .long 0x6e184597 // ins v23.d[1], v12.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x6f700446 // ushr v6.2d, v2.2d, #16 + .long 0x6f705446 // sli v6.2d, v2.2d, #48 + .long 0x6f700467 // ushr v7.2d, v3.2d, #16 + .long 0x6f705467 // sli v7.2d, v3.2d, #48 .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a2 // add v2.2d, v21.2d, v21.2d + .long 0x6f4146a2 // sri v2.2d, v21.2d, #63 + .long 0x4ef686c3 // add v3.2d, v22.2d, v22.2d + .long 0x6f4146c3 // sri v3.2d, v22.2d, #63 .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b @@ -728,92 +657,80 @@ .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6f685455 // sli v21.2d, v2.2d, #40 + .long 0x6f680476 // ushr v22.2d, v3.2d, #24 + .long 0x6f685476 // sli v22.2d, v3.2d, #40 .long 0x6e084554 // ins v20.d[0], v10.d[1] .long 0x6e1845f4 // ins v20.d[1], v15.d[1] .long 0x6e0d41d7 // ext v23.16b, v14.16b, v13.16b, #8 - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x6e034055 // ext v21.16b, v2.16b, v3.16b, #8 - .long 0x6e024063 // ext v3.16b, v3.16b, v2.16b, #8 - .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b + .long 0x6f7004c2 // ushr v2.2d, v6.2d, #16 + .long 0x6f7054c2 // sli v2.2d, v6.2d, #48 + .long 0x6f7004e3 // ushr v3.2d, v7.2d, #16 + .long 0x6f7054e3 // sli v3.2d, v7.2d, #48 + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a6 // add v6.2d, v21.2d, v21.2d + .long 0x6f4146a6 // sri v6.2d, v21.2d, #63 + .long 0x4ef686c7 // add v7.2d, v22.2d, v22.2d + .long 0x6f4146c7 // sri v7.2d, v22.2d, #63 + .long 0x6e0740d5 // ext v21.16b, v6.16b, v7.16b, #8 + .long 0x6e0640e7 // ext v7.16b, v7.16b, v6.16b, #8 + .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b .long 0x4ea41c95 // orr v21.16b, v4.16b, v4.16b .long 0x4ea51ca4 // orr v4.16b, v5.16b, v5.16b .long 0x4eb51ea5 // orr v5.16b, v21.16b, v21.16b - .long 0x6e0640f5 // ext v21.16b, v7.16b, v6.16b, #8 - .long 0x6e0740c7 // ext v7.16b, v6.16b, v7.16b, #8 - .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b + .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 + .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 + .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b .long 0x6e080514 // ins v20.d[0], v8.d[0] .long 0x6e180574 // ins v20.d[1], v11.d[0] .long 0x6e0c4197 // ext v23.16b, v12.16b, v12.16b, #8 - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ee68694 // add v20.2d, v20.2d, v6.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ee786f7 // add v23.2d, v23.2d, v7.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x4ea008c6 // rev64 v6.4s, v6.4s - .long 0x4ea008e7 // rev64 v7.4s, v7.4s - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x4ea00842 // rev64 v2.4s, v2.4s + .long 0x4ea00863 // rev64 v3.4s, v3.4s + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241cc6 // eor v6.16b, v6.16b, v4.16b + .long 0x6e251ce7 // eor v7.16b, v7.16b, v5.16b + .long 0x6f6804d5 // ushr v21.2d, v6.2d, #24 + .long 0x6f6854d5 // sli v21.2d, v6.2d, #40 + .long 0x6f6804f6 // ushr v22.2d, v7.2d, #24 + .long 0x6f6854f6 // sli v22.2d, v7.2d, #40 .long 0x6e084574 // ins v20.d[0], v11.d[1] .long 0x6e184534 // ins v20.d[1], v9.d[1] .long 0x6e080537 // ins v23.d[0], v9.d[0] .long 0x6e1845b7 // ins v23.d[1], v13.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x6f700446 // ushr v6.2d, v2.2d, #16 + .long 0x6f705446 // sli v6.2d, v2.2d, #48 + .long 0x6f700467 // ushr v7.2d, v3.2d, #16 + .long 0x6f705467 // sli v7.2d, v3.2d, #48 .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a2 // add v2.2d, v21.2d, v21.2d + .long 0x6f4146a2 // sri v2.2d, v21.2d, #63 + .long 0x4ef686c3 // add v3.2d, v22.2d, v22.2d + .long 0x6f4146c3 // sri v3.2d, v22.2d, #63 .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b @@ -840,93 +757,81 @@ .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6f685455 // sli v21.2d, v2.2d, #40 + .long 0x6f680476 // ushr v22.2d, v3.2d, #24 + .long 0x6f685476 // sli v22.2d, v3.2d, #40 .long 0x6e0f41b4 // ext v20.16b, v13.16b, v15.16b, #8 .long 0x6e084517 // ins v23.d[0], v8.d[1] .long 0x6e184597 // ins v23.d[1], v12.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x6e034055 // ext v21.16b, v2.16b, v3.16b, #8 - .long 0x6e024063 // ext v3.16b, v3.16b, v2.16b, #8 - .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b + .long 0x6f7004c2 // ushr v2.2d, v6.2d, #16 + .long 0x6f7054c2 // sli v2.2d, v6.2d, #48 + .long 0x6f7004e3 // ushr v3.2d, v7.2d, #16 + .long 0x6f7054e3 // sli v3.2d, v7.2d, #48 + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a6 // add v6.2d, v21.2d, v21.2d + .long 0x6f4146a6 // sri v6.2d, v21.2d, #63 + .long 0x4ef686c7 // add v7.2d, v22.2d, v22.2d + .long 0x6f4146c7 // sri v7.2d, v22.2d, #63 + .long 0x6e0740d5 // ext v21.16b, v6.16b, v7.16b, #8 + .long 0x6e0640e7 // ext v7.16b, v7.16b, v6.16b, #8 + .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b .long 0x4ea41c95 // orr v21.16b, v4.16b, v4.16b .long 0x4ea51ca4 // orr v4.16b, v5.16b, v5.16b .long 0x4eb51ea5 // orr v5.16b, v21.16b, v21.16b - .long 0x6e0640f5 // ext v21.16b, v7.16b, v6.16b, #8 - .long 0x6e0740c7 // ext v7.16b, v6.16b, v7.16b, #8 - .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b + .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 + .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 + .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b .long 0x6e084554 // ins v20.d[0], v10.d[1] .long 0x6e1845f4 // ins v20.d[1], v15.d[1] .long 0x6e080597 // ins v23.d[0], v12.d[0] .long 0x6e180537 // ins v23.d[1], v9.d[0] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ee68694 // add v20.2d, v20.2d, v6.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ee786f7 // add v23.2d, v23.2d, v7.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x4ea008c6 // rev64 v6.4s, v6.4s - .long 0x4ea008e7 // rev64 v7.4s, v7.4s - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x4ea00842 // rev64 v2.4s, v2.4s + .long 0x4ea00863 // rev64 v3.4s, v3.4s + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241cc6 // eor v6.16b, v6.16b, v4.16b + .long 0x6e251ce7 // eor v7.16b, v7.16b, v5.16b + .long 0x6f6804d5 // ushr v21.2d, v6.2d, #24 + .long 0x6f6854d5 // sli v21.2d, v6.2d, #40 + .long 0x6f6804f6 // ushr v22.2d, v7.2d, #24 + .long 0x6f6854f6 // sli v22.2d, v7.2d, #40 .long 0x6e080514 // ins v20.d[0], v8.d[0] .long 0x6e180554 // ins v20.d[1], v10.d[0] .long 0x6e080577 // ins v23.d[0], v11.d[0] .long 0x6e1805b7 // ins v23.d[1], v13.d[0] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x6f700446 // ushr v6.2d, v2.2d, #16 + .long 0x6f705446 // sli v6.2d, v2.2d, #48 + .long 0x6f700467 // ushr v7.2d, v3.2d, #16 + .long 0x6f705467 // sli v7.2d, v3.2d, #48 .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a2 // add v2.2d, v21.2d, v21.2d + .long 0x6f4146a2 // sri v2.2d, v21.2d, #63 + .long 0x4ef686c3 // add v3.2d, v22.2d, v22.2d + .long 0x6f4146c3 // sri v3.2d, v22.2d, #63 .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b @@ -952,90 +857,78 @@ .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6f685455 // sli v21.2d, v2.2d, #40 + .long 0x6f680476 // ushr v22.2d, v3.2d, #24 + .long 0x6f685476 // sli v22.2d, v3.2d, #40 .long 0x6e0845f4 // ins v20.d[0], v15.d[1] .long 0x6e184594 // ins v20.d[1], v12.d[1] .long 0x6e0c4137 // ext v23.16b, v9.16b, v12.16b, #8 - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x6e034055 // ext v21.16b, v2.16b, v3.16b, #8 - .long 0x6e024063 // ext v3.16b, v3.16b, v2.16b, #8 - .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b + .long 0x6f7004c2 // ushr v2.2d, v6.2d, #16 + .long 0x6f7054c2 // sli v2.2d, v6.2d, #48 + .long 0x6f7004e3 // ushr v3.2d, v7.2d, #16 + .long 0x6f7054e3 // sli v3.2d, v7.2d, #48 + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a6 // add v6.2d, v21.2d, v21.2d + .long 0x6f4146a6 // sri v6.2d, v21.2d, #63 + .long 0x4ef686c7 // add v7.2d, v22.2d, v22.2d + .long 0x6f4146c7 // sri v7.2d, v22.2d, #63 + .long 0x6e0740d5 // ext v21.16b, v6.16b, v7.16b, #8 + .long 0x6e0640e7 // ext v7.16b, v7.16b, v6.16b, #8 + .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b .long 0x4ea41c95 // orr v21.16b, v4.16b, v4.16b .long 0x4ea51ca4 // orr v4.16b, v5.16b, v5.16b .long 0x4eb51ea5 // orr v5.16b, v21.16b, v21.16b - .long 0x6e0640f5 // ext v21.16b, v7.16b, v6.16b, #8 - .long 0x6e0740c7 // ext v7.16b, v6.16b, v7.16b, #8 - .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b + .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 + .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 + .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b .long 0x4eae1dd4 // orr v20.16b, v14.16b, v14.16b .long 0x6e0d4117 // ext v23.16b, v8.16b, v13.16b, #8 - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ee68694 // add v20.2d, v20.2d, v6.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ee786f7 // add v23.2d, v23.2d, v7.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x4ea008c6 // rev64 v6.4s, v6.4s - .long 0x4ea008e7 // rev64 v7.4s, v7.4s - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x4ea00842 // rev64 v2.4s, v2.4s + .long 0x4ea00863 // rev64 v3.4s, v3.4s + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241cc6 // eor v6.16b, v6.16b, v4.16b + .long 0x6e251ce7 // eor v7.16b, v7.16b, v5.16b + .long 0x6f6804d5 // ushr v21.2d, v6.2d, #24 + .long 0x6f6854d5 // sli v21.2d, v6.2d, #40 + .long 0x6f6804f6 // ushr v22.2d, v7.2d, #24 + .long 0x6f6854f6 // sli v22.2d, v7.2d, #40 .long 0x6e080534 // ins v20.d[0], v9.d[0] .long 0x6e184574 // ins v20.d[1], v11.d[1] .long 0x4eaa1d57 // orr v23.16b, v10.16b, v10.16b - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x6f700446 // ushr v6.2d, v2.2d, #16 + .long 0x6f705446 // sli v6.2d, v2.2d, #48 + .long 0x6f700467 // ushr v7.2d, v3.2d, #16 + .long 0x6f705467 // sli v7.2d, v3.2d, #48 .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a2 // add v2.2d, v21.2d, v21.2d + .long 0x6f4146a2 // sri v2.2d, v21.2d, #63 + .long 0x4ef686c3 // add v3.2d, v22.2d, v22.2d + .long 0x6f4146c3 // sri v3.2d, v22.2d, #63 .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b @@ -1062,93 +955,81 @@ .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6f685455 // sli v21.2d, v2.2d, #40 + .long 0x6f680476 // ushr v22.2d, v3.2d, #24 + .long 0x6f685476 // sli v22.2d, v3.2d, #40 .long 0x6e080534 // ins v20.d[0], v9.d[0] .long 0x6e180554 // ins v20.d[1], v10.d[0] .long 0x6e080577 // ins v23.d[0], v11.d[0] .long 0x6e184557 // ins v23.d[1], v10.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x6e034055 // ext v21.16b, v2.16b, v3.16b, #8 - .long 0x6e024063 // ext v3.16b, v3.16b, v2.16b, #8 - .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b + .long 0x6f7004c2 // ushr v2.2d, v6.2d, #16 + .long 0x6f7054c2 // sli v2.2d, v6.2d, #48 + .long 0x6f7004e3 // ushr v3.2d, v7.2d, #16 + .long 0x6f7054e3 // sli v3.2d, v7.2d, #48 + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a6 // add v6.2d, v21.2d, v21.2d + .long 0x6f4146a6 // sri v6.2d, v21.2d, #63 + .long 0x4ef686c7 // add v7.2d, v22.2d, v22.2d + .long 0x6f4146c7 // sri v7.2d, v22.2d, #63 + .long 0x6e0740d5 // ext v21.16b, v6.16b, v7.16b, #8 + .long 0x6e0640e7 // ext v7.16b, v7.16b, v6.16b, #8 + .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b .long 0x4ea41c95 // orr v21.16b, v4.16b, v4.16b .long 0x4ea51ca4 // orr v4.16b, v5.16b, v5.16b .long 0x4eb51ea5 // orr v5.16b, v21.16b, v21.16b - .long 0x6e0640f5 // ext v21.16b, v7.16b, v6.16b, #8 - .long 0x6e0740c7 // ext v7.16b, v6.16b, v7.16b, #8 - .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b + .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 + .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 + .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b .long 0x6e0845f4 // ins v20.d[0], v15.d[1] .long 0x6e184594 // ins v20.d[1], v12.d[1] .long 0x6e084537 // ins v23.d[0], v9.d[1] .long 0x6e1845d7 // ins v23.d[1], v14.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ee68694 // add v20.2d, v20.2d, v6.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ee786f7 // add v23.2d, v23.2d, v7.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x4ea008c6 // rev64 v6.4s, v6.4s - .long 0x4ea008e7 // rev64 v7.4s, v7.4s - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x4ea00842 // rev64 v2.4s, v2.4s + .long 0x4ea00863 // rev64 v3.4s, v3.4s + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241cc6 // eor v6.16b, v6.16b, v4.16b + .long 0x6e251ce7 // eor v7.16b, v7.16b, v5.16b + .long 0x6f6804d5 // ushr v21.2d, v6.2d, #24 + .long 0x6f6854d5 // sli v21.2d, v6.2d, #40 + .long 0x6f6804f6 // ushr v22.2d, v7.2d, #24 + .long 0x6f6854f6 // sli v22.2d, v7.2d, #40 .long 0x6e0f41b4 // ext v20.16b, v13.16b, v15.16b, #8 .long 0x6e0805d7 // ins v23.d[0], v14.d[0] .long 0x6e180517 // ins v23.d[1], v8.d[0] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x6f700446 // ushr v6.2d, v2.2d, #16 + .long 0x6f705446 // sli v6.2d, v2.2d, #48 + .long 0x6f700467 // ushr v7.2d, v3.2d, #16 + .long 0x6f705467 // sli v7.2d, v3.2d, #48 .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a2 // add v2.2d, v21.2d, v21.2d + .long 0x6f4146a2 // sri v2.2d, v21.2d, #63 + .long 0x4ef686c3 // add v3.2d, v22.2d, v22.2d + .long 0x6f4146c3 // sri v3.2d, v22.2d, #63 .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b @@ -1175,94 +1056,82 @@ .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6f685455 // sli v21.2d, v2.2d, #40 + .long 0x6f680476 // ushr v22.2d, v3.2d, #24 + .long 0x6f685476 // sli v22.2d, v3.2d, #40 .long 0x6e084514 // ins v20.d[0], v8.d[1] .long 0x6e184534 // ins v20.d[1], v9.d[1] .long 0x6e084557 // ins v23.d[0], v10.d[1] .long 0x6e184577 // ins v23.d[1], v11.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x6e034055 // ext v21.16b, v2.16b, v3.16b, #8 - .long 0x6e024063 // ext v3.16b, v3.16b, v2.16b, #8 - .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b + .long 0x6f7004c2 // ushr v2.2d, v6.2d, #16 + .long 0x6f7054c2 // sli v2.2d, v6.2d, #48 + .long 0x6f7004e3 // ushr v3.2d, v7.2d, #16 + .long 0x6f7054e3 // sli v3.2d, v7.2d, #48 + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a6 // add v6.2d, v21.2d, v21.2d + .long 0x6f4146a6 // sri v6.2d, v21.2d, #63 + .long 0x4ef686c7 // add v7.2d, v22.2d, v22.2d + .long 0x6f4146c7 // sri v7.2d, v22.2d, #63 + .long 0x6e0740d5 // ext v21.16b, v6.16b, v7.16b, #8 + .long 0x6e0640e7 // ext v7.16b, v7.16b, v6.16b, #8 + .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b .long 0x4ea41c95 // orr v21.16b, v4.16b, v4.16b .long 0x4ea51ca4 // orr v4.16b, v5.16b, v5.16b .long 0x4eb51ea5 // orr v5.16b, v21.16b, v21.16b - .long 0x6e0640f5 // ext v21.16b, v7.16b, v6.16b, #8 - .long 0x6e0740c7 // ext v7.16b, v6.16b, v7.16b, #8 - .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b + .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 + .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 + .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b .long 0x6e080594 // ins v20.d[0], v12.d[0] .long 0x6e1805b4 // ins v20.d[1], v13.d[0] .long 0x6e0805d7 // ins v23.d[0], v14.d[0] .long 0x6e1805f7 // ins v23.d[1], v15.d[0] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ee68694 // add v20.2d, v20.2d, v6.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ee786f7 // add v23.2d, v23.2d, v7.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x4ea008c6 // rev64 v6.4s, v6.4s - .long 0x4ea008e7 // rev64 v7.4s, v7.4s - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x4ea00842 // rev64 v2.4s, v2.4s + .long 0x4ea00863 // rev64 v3.4s, v3.4s + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241cc6 // eor v6.16b, v6.16b, v4.16b + .long 0x6e251ce7 // eor v7.16b, v7.16b, v5.16b + .long 0x6f6804d5 // ushr v21.2d, v6.2d, #24 + .long 0x6f6854d5 // sli v21.2d, v6.2d, #40 + .long 0x6f6804f6 // ushr v22.2d, v7.2d, #24 + .long 0x6f6854f6 // sli v22.2d, v7.2d, #40 .long 0x6e084594 // ins v20.d[0], v12.d[1] .long 0x6e1845b4 // ins v20.d[1], v13.d[1] .long 0x6e0845d7 // ins v23.d[0], v14.d[1] .long 0x6e1845f7 // ins v23.d[1], v15.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x6f700446 // ushr v6.2d, v2.2d, #16 + .long 0x6f705446 // sli v6.2d, v2.2d, #48 + .long 0x6f700467 // ushr v7.2d, v3.2d, #16 + .long 0x6f705467 // sli v7.2d, v3.2d, #48 .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a2 // add v2.2d, v21.2d, v21.2d + .long 0x6f4146a2 // sri v2.2d, v21.2d, #63 + .long 0x4ef686c3 // add v3.2d, v22.2d, v22.2d + .long 0x6f4146c3 // sri v3.2d, v22.2d, #63 .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b @@ -1289,92 +1158,80 @@ .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6f685455 // sli v21.2d, v2.2d, #40 + .long 0x6f680476 // ushr v22.2d, v3.2d, #24 + .long 0x6f685476 // sli v22.2d, v3.2d, #40 .long 0x6e0805b4 // ins v20.d[0], v13.d[0] .long 0x6e180594 // ins v20.d[1], v12.d[0] .long 0x6e0b41f7 // ext v23.16b, v15.16b, v11.16b, #8 - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x6e034055 // ext v21.16b, v2.16b, v3.16b, #8 - .long 0x6e024063 // ext v3.16b, v3.16b, v2.16b, #8 - .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b + .long 0x6f7004c2 // ushr v2.2d, v6.2d, #16 + .long 0x6f7054c2 // sli v2.2d, v6.2d, #48 + .long 0x6f7004e3 // ushr v3.2d, v7.2d, #16 + .long 0x6f7054e3 // sli v3.2d, v7.2d, #48 + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a6 // add v6.2d, v21.2d, v21.2d + .long 0x6f4146a6 // sri v6.2d, v21.2d, #63 + .long 0x4ef686c7 // add v7.2d, v22.2d, v22.2d + .long 0x6f4146c7 // sri v7.2d, v22.2d, #63 + .long 0x6e0740d5 // ext v21.16b, v6.16b, v7.16b, #8 + .long 0x6e0640e7 // ext v7.16b, v7.16b, v6.16b, #8 + .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b .long 0x4ea41c95 // orr v21.16b, v4.16b, v4.16b .long 0x4ea51ca4 // orr v4.16b, v5.16b, v5.16b .long 0x4eb51ea5 // orr v5.16b, v21.16b, v21.16b - .long 0x6e0640f5 // ext v21.16b, v7.16b, v6.16b, #8 - .long 0x6e0740c7 // ext v7.16b, v6.16b, v7.16b, #8 - .long 0x4eb51ea6 // orr v6.16b, v21.16b, v21.16b + .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 + .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 + .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b .long 0x6e084114 // ext v20.16b, v8.16b, v8.16b, #8 .long 0x6e0845b7 // ins v23.d[0], v13.d[1] .long 0x6e184557 // ins v23.d[1], v10.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ee68694 // add v20.2d, v20.2d, v6.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ee786f7 // add v23.2d, v23.2d, v7.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x4ea008c6 // rev64 v6.4s, v6.4s - .long 0x4ea008e7 // rev64 v7.4s, v7.4s - .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d - .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x6f680455 // ushr v21.2d, v2.2d, #24 - .long 0x4f685456 // shl v22.2d, v2.2d, #40 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x6f680475 // ushr v21.2d, v3.2d, #24 - .long 0x4f685476 // shl v22.2d, v3.2d, #40 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x4ea00842 // rev64 v2.4s, v2.4s + .long 0x4ea00863 // rev64 v3.4s, v3.4s + .long 0x4ee28484 // add v4.2d, v4.2d, v2.2d + .long 0x4ee384a5 // add v5.2d, v5.2d, v3.2d + .long 0x6e241cc6 // eor v6.16b, v6.16b, v4.16b + .long 0x6e251ce7 // eor v7.16b, v7.16b, v5.16b + .long 0x6f6804d5 // ushr v21.2d, v6.2d, #24 + .long 0x6f6854d5 // sli v21.2d, v6.2d, #40 + .long 0x6f6804f6 // ushr v22.2d, v7.2d, #24 + .long 0x6f6854f6 // sli v22.2d, v7.2d, #40 .long 0x6e0805d4 // ins v20.d[0], v14.d[0] .long 0x6e180534 // ins v20.d[1], v9.d[0] .long 0x6e084577 // ins v23.d[0], v11.d[1] .long 0x6e184537 // ins v23.d[1], v9.d[1] - .long 0x4ee28694 // add v20.2d, v20.2d, v2.2d + .long 0x4ef58694 // add v20.2d, v20.2d, v21.2d .long 0x4ef48400 // add v0.2d, v0.2d, v20.2d - .long 0x4ee386f7 // add v23.2d, v23.2d, v3.2d + .long 0x4ef686f7 // add v23.2d, v23.2d, v22.2d .long 0x4ef78421 // add v1.2d, v1.2d, v23.2d - .long 0x6e201cc6 // eor v6.16b, v6.16b, v0.16b - .long 0x6e211ce7 // eor v7.16b, v7.16b, v1.16b - .long 0x6f7004d5 // ushr v21.2d, v6.2d, #16 - .long 0x4f7054d6 // shl v22.2d, v6.2d, #48 - .long 0x4eb61ea6 // orr v6.16b, v21.16b, v22.16b - .long 0x6f7004f5 // ushr v21.2d, v7.2d, #16 - .long 0x4f7054f6 // shl v22.2d, v7.2d, #48 - .long 0x4eb61ea7 // orr v7.16b, v21.16b, v22.16b + .long 0x6e201c42 // eor v2.16b, v2.16b, v0.16b + .long 0x6e211c63 // eor v3.16b, v3.16b, v1.16b + .long 0x6f700446 // ushr v6.2d, v2.2d, #16 + .long 0x6f705446 // sli v6.2d, v2.2d, #48 + .long 0x6f700467 // ushr v7.2d, v3.2d, #16 + .long 0x6f705467 // sli v7.2d, v3.2d, #48 .long 0x4ee68484 // add v4.2d, v4.2d, v6.2d .long 0x4ee784a5 // add v5.2d, v5.2d, v7.2d - .long 0x6e241c42 // eor v2.16b, v2.16b, v4.16b - .long 0x6e251c63 // eor v3.16b, v3.16b, v5.16b - .long 0x4ee28455 // add v21.2d, v2.2d, v2.2d - .long 0x6f410456 // ushr v22.2d, v2.2d, #63 - .long 0x4eb61ea2 // orr v2.16b, v21.16b, v22.16b - .long 0x4ee38475 // add v21.2d, v3.2d, v3.2d - .long 0x6f410476 // ushr v22.2d, v3.2d, #63 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e241eb5 // eor v21.16b, v21.16b, v4.16b + .long 0x6e251ed6 // eor v22.16b, v22.16b, v5.16b + .long 0x4ef586a2 // add v2.2d, v21.2d, v21.2d + .long 0x6f4146a2 // sri v2.2d, v21.2d, #63 + .long 0x4ef686c3 // add v3.2d, v22.2d, v22.2d + .long 0x6f4146c3 // sri v3.2d, v22.2d, #63 .long 0x6e024075 // ext v21.16b, v3.16b, v2.16b, #8 .long 0x6e034043 // ext v3.16b, v2.16b, v3.16b, #8 .long 0x4eb51ea2 // orr v2.16b, v21.16b, v21.16b diff --git a/HashLib/src/Include/Simd/Blake2S/Blake2SCompressAvx2_i386.inc b/HashLib/src/Include/Simd/Blake2S/Blake2SCompressAvx_i386.inc similarity index 99% rename from HashLib/src/Include/Simd/Blake2S/Blake2SCompressAvx2_i386.inc rename to HashLib/src/Include/Simd/Blake2S/Blake2SCompressAvx_i386.inc index 09ea7434..3e248c90 100644 --- a/HashLib/src/Include/Simd/Blake2S/Blake2SCompressAvx2_i386.inc +++ b/HashLib/src/Include/Simd/Blake2S/Blake2SCompressAvx_i386.inc @@ -1,5 +1,5 @@ -// AVX2 implementation of BLAKE2s compress (IA-32; VEX-encoded 128-bit, fully -// unrolled 10 rounds). Same structure as Blake2SCompressAvx2_x86_64.inc, +// AVX (VEX-128) implementation of BLAKE2s compress (IA-32; fully unrolled +// 10 rounds). Same structure as Blake2SCompressAvx_x86_64.inc, // with the rot8 mask read as a VEX memory operand per site (IA-32 has only // xmm0-7, so no register is free to keep it resident; VEX memory operands // are read unaligned, so the Pascal const needs no special alignment). diff --git a/HashLib/src/Include/Simd/Blake2S/Blake2SCompressAvx2_x86_64.inc b/HashLib/src/Include/Simd/Blake2S/Blake2SCompressAvx_x86_64.inc similarity index 99% rename from HashLib/src/Include/Simd/Blake2S/Blake2SCompressAvx2_x86_64.inc rename to HashLib/src/Include/Simd/Blake2S/Blake2SCompressAvx_x86_64.inc index 93381de4..e12d64ea 100644 --- a/HashLib/src/Include/Simd/Blake2S/Blake2SCompressAvx2_x86_64.inc +++ b/HashLib/src/Include/Simd/Blake2S/Blake2SCompressAvx_x86_64.inc @@ -1,4 +1,4 @@ -// AVX2 implementation of BLAKE2s compress (VEX-encoded 128-bit, fully unrolled 10 rounds). +// AVX (VEX-128) implementation of BLAKE2s compress (fully unrolled 10 rounds). // Expects MS x64 ABI (after HlpSimdProc5Begin): rcx = state ptr, rdx = msg ptr, // r8 = counter+flags ptr, r9 = IV ptr, r10 = byte-rotation masks ptr // (see BLAKE2S_ROT_MASKS: rot16 at +0, rot8 at +16; read unaligned, so the diff --git a/HashLib/src/Include/Simd/Blake2S/Blake2SCompressNeon_aarch64.inc b/HashLib/src/Include/Simd/Blake2S/Blake2SCompressNeon_aarch64.inc index 6d024a8f..d9045a6b 100644 --- a/HashLib/src/Include/Simd/Blake2S/Blake2SCompressNeon_aarch64.inc +++ b/HashLib/src/Include/Simd/Blake2S/Blake2SCompressNeon_aarch64.inc @@ -12,7 +12,8 @@ // v4-v7 = message block (16 x UInt32) // v16, v17 = saved initial row1/row2 for the final feed-forward XOR // v20 = message gather temp (G function) -// v21-v23 = rotate temps (ushr/shl/orr) +// v21-v23 = rotate temps (2-op ushr+sli rotates rename the rotated row +// through them; rows return home before the final feed-forward) .long 0xad400400 // ldp q0, q1, [x0] .long 0x4ea01c10 // orr v16.16b, v0.16b, v0.16b @@ -32,85 +33,76 @@ .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f345435 // sli v21.4s, v1.4s, #20 .long 0x6e042494 // ins v20.s[0], v4.s[1] .long 0x6e0c6494 // ins v20.s[1], v4.s[3] .long 0x6e1424b4 // ins v20.s[2], v5.s[1] .long 0x6e1c64b4 // ins v20.s[3], v5.s[3] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s + .long 0x4eb58694 // add v20.4s, v20.4s, v21.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f380476 // ushr v22.4s, v3.4s, #8 + .long 0x6f385476 // sli v22.4s, v3.4s, #24 + .long 0x4eb68442 // add v2.4s, v2.4s, v22.4s + .long 0x6e221eb5 // eor v21.16b, v21.16b, v2.16b + .long 0x6f3906a1 // ushr v1.4s, v21.4s, #7 + .long 0x6f3956a1 // sli v1.4s, v21.4s, #25 .long 0x6e012021 // ext v1.16b, v1.16b, v1.16b, #4 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 - .long 0x6e036063 // ext v3.16b, v3.16b, v3.16b, #12 + .long 0x6e1662d6 // ext v22.16b, v22.16b, v22.16b, #12 .long 0x6e0404d4 // ins v20.s[0], v6.s[0] .long 0x6e0c44d4 // ins v20.s[1], v6.s[2] .long 0x6e1404f4 // ins v20.s[2], v7.s[0] .long 0x6e1c44f4 // ins v20.s[3], v7.s[2] .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201ed6 // eor v22.16b, v22.16b, v0.16b + .long 0x6e600ad6 // rev32 v22.8h, v22.8h + .long 0x4eb68442 // add v2.4s, v2.4s, v22.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f340423 // ushr v3.4s, v1.4s, #12 + .long 0x6f345423 // sli v3.4s, v1.4s, #20 .long 0x6e0424d4 // ins v20.s[0], v6.s[1] .long 0x6e0c64d4 // ins v20.s[1], v6.s[3] .long 0x6e1424f4 // ins v20.s[2], v7.s[1] .long 0x6e1c64f4 // ins v20.s[3], v7.s[3] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s - .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x4ea38694 // add v20.4s, v20.4s, v3.4s + .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s + .long 0x6e201ed6 // eor v22.16b, v22.16b, v0.16b + .long 0x6f3806d5 // ushr v21.4s, v22.4s, #8 + .long 0x6f3856d5 // sli v21.4s, v22.4s, #24 + .long 0x4eb58442 // add v2.4s, v2.4s, v21.4s + .long 0x6e221c63 // eor v3.16b, v3.16b, v2.16b + .long 0x6f390461 // ushr v1.4s, v3.4s, #7 + .long 0x6f395461 // sli v1.4s, v3.4s, #25 .long 0x6e016021 // ext v1.16b, v1.16b, v1.16b, #12 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 - .long 0x6e032063 // ext v3.16b, v3.16b, v3.16b, #4 + .long 0x6e1522b5 // ext v21.16b, v21.16b, v21.16b, #4 .long 0x6e0444f4 // ins v20.s[0], v7.s[2] .long 0x6e0c04b4 // ins v20.s[1], v5.s[0] .long 0x6e1424d4 // ins v20.s[2], v6.s[1] .long 0x6e1c24f4 // ins v20.s[3], v7.s[1] .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201eb5 // eor v21.16b, v21.16b, v0.16b + .long 0x6e600ab5 // rev32 v21.8h, v21.8h + .long 0x4eb58442 // add v2.4s, v2.4s, v21.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f340436 // ushr v22.4s, v1.4s, #12 + .long 0x6f345436 // sli v22.4s, v1.4s, #20 .long 0x6e0444d4 // ins v20.s[0], v6.s[2] .long 0x6e0c04d4 // ins v20.s[1], v6.s[0] .long 0x6e1464f4 // ins v20.s[2], v7.s[3] .long 0x6e1c44b4 // ins v20.s[3], v5.s[2] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s + .long 0x4eb68694 // add v20.4s, v20.4s, v22.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201eb5 // eor v21.16b, v21.16b, v0.16b + .long 0x6f3806a3 // ushr v3.4s, v21.4s, #8 + .long 0x6f3856a3 // sli v3.4s, v21.4s, #24 .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6e221ed6 // eor v22.16b, v22.16b, v2.16b + .long 0x6f3906c1 // ushr v1.4s, v22.4s, #7 + .long 0x6f3956c1 // sli v1.4s, v22.4s, #25 .long 0x6e012021 // ext v1.16b, v1.16b, v1.16b, #4 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 .long 0x6e036063 // ext v3.16b, v3.16b, v3.16b, #12 @@ -125,85 +117,76 @@ .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f345435 // sli v21.4s, v1.4s, #20 .long 0x6e0404f4 // ins v20.s[0], v7.s[0] .long 0x6e0c4494 // ins v20.s[1], v4.s[2] .long 0x6e1464b4 // ins v20.s[2], v5.s[3] .long 0x6e1c6494 // ins v20.s[3], v4.s[3] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s + .long 0x4eb58694 // add v20.4s, v20.4s, v21.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f380476 // ushr v22.4s, v3.4s, #8 + .long 0x6f385476 // sli v22.4s, v3.4s, #24 + .long 0x4eb68442 // add v2.4s, v2.4s, v22.4s + .long 0x6e221eb5 // eor v21.16b, v21.16b, v2.16b + .long 0x6f3906a1 // ushr v1.4s, v21.4s, #7 + .long 0x6f3956a1 // sli v1.4s, v21.4s, #25 .long 0x6e016021 // ext v1.16b, v1.16b, v1.16b, #12 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 - .long 0x6e032063 // ext v3.16b, v3.16b, v3.16b, #4 + .long 0x6e1622d6 // ext v22.16b, v22.16b, v22.16b, #4 .long 0x6e0464d4 // ins v20.s[0], v6.s[3] .long 0x6e0c04f4 // ins v20.s[1], v7.s[0] .long 0x6e1424b4 // ins v20.s[2], v5.s[1] .long 0x6e1c64f4 // ins v20.s[3], v7.s[3] .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201ed6 // eor v22.16b, v22.16b, v0.16b + .long 0x6e600ad6 // rev32 v22.8h, v22.8h + .long 0x4eb68442 // add v2.4s, v2.4s, v22.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f340423 // ushr v3.4s, v1.4s, #12 + .long 0x6f345423 // sli v3.4s, v1.4s, #20 .long 0x6e0404d4 // ins v20.s[0], v6.s[0] .long 0x6e0c0494 // ins v20.s[1], v4.s[0] .long 0x6e144494 // ins v20.s[2], v4.s[2] .long 0x6e1c24f4 // ins v20.s[3], v7.s[1] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s - .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x4ea38694 // add v20.4s, v20.4s, v3.4s + .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s + .long 0x6e201ed6 // eor v22.16b, v22.16b, v0.16b + .long 0x6f3806d5 // ushr v21.4s, v22.4s, #8 + .long 0x6f3856d5 // sli v21.4s, v22.4s, #24 + .long 0x4eb58442 // add v2.4s, v2.4s, v21.4s + .long 0x6e221c63 // eor v3.16b, v3.16b, v2.16b + .long 0x6f390461 // ushr v1.4s, v3.4s, #7 + .long 0x6f395461 // sli v1.4s, v3.4s, #25 .long 0x6e012021 // ext v1.16b, v1.16b, v1.16b, #4 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 - .long 0x6e036063 // ext v3.16b, v3.16b, v3.16b, #12 + .long 0x6e1562b5 // ext v21.16b, v21.16b, v21.16b, #12 .long 0x6e0444d4 // ins v20.s[0], v6.s[2] .long 0x6e0c6494 // ins v20.s[1], v4.s[3] .long 0x6e1464b4 // ins v20.s[2], v5.s[3] .long 0x6e1c24d4 // ins v20.s[3], v6.s[1] .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201eb5 // eor v21.16b, v21.16b, v0.16b + .long 0x6e600ab5 // rev32 v21.8h, v21.8h + .long 0x4eb58442 // add v2.4s, v2.4s, v21.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f340436 // ushr v22.4s, v1.4s, #12 + .long 0x6f345436 // sli v22.4s, v1.4s, #20 .long 0x6e0444f4 // ins v20.s[0], v7.s[2] .long 0x6e0c44b4 // ins v20.s[1], v5.s[2] .long 0x6e142494 // ins v20.s[2], v4.s[1] .long 0x6e1c04b4 // ins v20.s[3], v5.s[0] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s + .long 0x4eb68694 // add v20.4s, v20.4s, v22.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201eb5 // eor v21.16b, v21.16b, v0.16b + .long 0x6f3806a3 // ushr v3.4s, v21.4s, #8 + .long 0x6f3856a3 // sli v3.4s, v21.4s, #24 .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6e221ed6 // eor v22.16b, v22.16b, v2.16b + .long 0x6f3906c1 // ushr v1.4s, v22.4s, #7 + .long 0x6f3956c1 // sli v1.4s, v22.4s, #25 .long 0x6e016021 // ext v1.16b, v1.16b, v1.16b, #12 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 .long 0x6e032063 // ext v3.16b, v3.16b, v3.16b, #4 @@ -218,85 +201,76 @@ .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f345435 // sli v21.4s, v1.4s, #20 .long 0x6e0424d4 // ins v20.s[0], v6.s[1] .long 0x6e0c2494 // ins v20.s[1], v4.s[1] .long 0x6e1404f4 // ins v20.s[2], v7.s[0] .long 0x6e1c44f4 // ins v20.s[3], v7.s[2] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s + .long 0x4eb58694 // add v20.4s, v20.4s, v21.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f380476 // ushr v22.4s, v3.4s, #8 + .long 0x6f385476 // sli v22.4s, v3.4s, #24 + .long 0x4eb68442 // add v2.4s, v2.4s, v22.4s + .long 0x6e221eb5 // eor v21.16b, v21.16b, v2.16b + .long 0x6f3906a1 // ushr v1.4s, v21.4s, #7 + .long 0x6f3956a1 // sli v1.4s, v21.4s, #25 .long 0x6e012021 // ext v1.16b, v1.16b, v1.16b, #4 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 - .long 0x6e036063 // ext v3.16b, v3.16b, v3.16b, #12 + .long 0x6e1662d6 // ext v22.16b, v22.16b, v22.16b, #12 .long 0x6e044494 // ins v20.s[0], v4.s[2] .long 0x6e0c24b4 // ins v20.s[1], v5.s[1] .long 0x6e1404b4 // ins v20.s[2], v5.s[0] .long 0x6e1c64f4 // ins v20.s[3], v7.s[3] .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201ed6 // eor v22.16b, v22.16b, v0.16b + .long 0x6e600ad6 // rev32 v22.8h, v22.8h + .long 0x4eb68442 // add v2.4s, v2.4s, v22.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f340423 // ushr v3.4s, v1.4s, #12 + .long 0x6f345423 // sli v3.4s, v1.4s, #20 .long 0x6e0444b4 // ins v20.s[0], v5.s[2] .long 0x6e0c44d4 // ins v20.s[1], v6.s[2] .long 0x6e140494 // ins v20.s[2], v4.s[0] .long 0x6e1c04d4 // ins v20.s[3], v6.s[0] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s - .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x4ea38694 // add v20.4s, v20.4s, v3.4s + .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s + .long 0x6e201ed6 // eor v22.16b, v22.16b, v0.16b + .long 0x6f3806d5 // ushr v21.4s, v22.4s, #8 + .long 0x6f3856d5 // sli v21.4s, v22.4s, #24 + .long 0x4eb58442 // add v2.4s, v2.4s, v21.4s + .long 0x6e221c63 // eor v3.16b, v3.16b, v2.16b + .long 0x6f390461 // ushr v1.4s, v3.4s, #7 + .long 0x6f395461 // sli v1.4s, v3.4s, #25 .long 0x6e016021 // ext v1.16b, v1.16b, v1.16b, #12 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 - .long 0x6e032063 // ext v3.16b, v3.16b, v3.16b, #4 + .long 0x6e1522b5 // ext v21.16b, v21.16b, v21.16b, #4 .long 0x6e0424d4 // ins v20.s[0], v6.s[1] .long 0x6e0c24b4 // ins v20.s[1], v5.s[1] .long 0x6e144494 // ins v20.s[2], v4.s[2] .long 0x6e1c44d4 // ins v20.s[3], v6.s[2] .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201eb5 // eor v21.16b, v21.16b, v0.16b + .long 0x6e600ab5 // rev32 v21.8h, v21.8h + .long 0x4eb58442 // add v2.4s, v2.4s, v21.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f340436 // ushr v22.4s, v1.4s, #12 + .long 0x6f345436 // sli v22.4s, v1.4s, #20 .long 0x6e040494 // ins v20.s[0], v4.s[0] .long 0x6e0c64b4 // ins v20.s[1], v5.s[3] .long 0x6e1404b4 // ins v20.s[2], v5.s[0] .long 0x6e1c64f4 // ins v20.s[3], v7.s[3] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s + .long 0x4eb68694 // add v20.4s, v20.4s, v22.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201eb5 // eor v21.16b, v21.16b, v0.16b + .long 0x6f3806a3 // ushr v3.4s, v21.4s, #8 + .long 0x6f3856a3 // sli v3.4s, v21.4s, #24 .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6e221ed6 // eor v22.16b, v22.16b, v2.16b + .long 0x6f3906c1 // ushr v1.4s, v22.4s, #7 + .long 0x6f3956c1 // sli v1.4s, v22.4s, #25 .long 0x6e012021 // ext v1.16b, v1.16b, v1.16b, #4 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 .long 0x6e036063 // ext v3.16b, v3.16b, v3.16b, #12 @@ -311,85 +285,76 @@ .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f345435 // sli v21.4s, v1.4s, #20 .long 0x6e042494 // ins v20.s[0], v4.s[1] .long 0x6e0c04f4 // ins v20.s[1], v7.s[0] .long 0x6e1404d4 // ins v20.s[2], v6.s[0] .long 0x6e1c24f4 // ins v20.s[3], v7.s[1] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s + .long 0x4eb58694 // add v20.4s, v20.4s, v21.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f380476 // ushr v22.4s, v3.4s, #8 + .long 0x6f385476 // sli v22.4s, v3.4s, #24 + .long 0x4eb68442 // add v2.4s, v2.4s, v22.4s + .long 0x6e221eb5 // eor v21.16b, v21.16b, v2.16b + .long 0x6f3906a1 // ushr v1.4s, v21.4s, #7 + .long 0x6f3956a1 // sli v1.4s, v21.4s, #25 .long 0x6e016021 // ext v1.16b, v1.16b, v1.16b, #12 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 - .long 0x6e032063 // ext v3.16b, v3.16b, v3.16b, #4 + .long 0x6e1622d6 // ext v22.16b, v22.16b, v22.16b, #4 .long 0x6e044494 // ins v20.s[0], v4.s[2] .long 0x6e0c44b4 // ins v20.s[1], v5.s[2] .long 0x6e140494 // ins v20.s[2], v4.s[0] .long 0x6e1c04d4 // ins v20.s[3], v6.s[0] .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201ed6 // eor v22.16b, v22.16b, v0.16b + .long 0x6e600ad6 // rev32 v22.8h, v22.8h + .long 0x4eb68442 // add v2.4s, v2.4s, v22.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f340423 // ushr v3.4s, v1.4s, #12 + .long 0x6f345423 // sli v3.4s, v1.4s, #20 .long 0x6e0404f4 // ins v20.s[0], v7.s[0] .long 0x6e0c44d4 // ins v20.s[1], v6.s[2] .long 0x6e1464d4 // ins v20.s[2], v6.s[3] .long 0x6e1c6494 // ins v20.s[3], v4.s[3] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s - .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x4ea38694 // add v20.4s, v20.4s, v3.4s + .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s + .long 0x6e201ed6 // eor v22.16b, v22.16b, v0.16b + .long 0x6f3806d5 // ushr v21.4s, v22.4s, #8 + .long 0x6f3856d5 // sli v21.4s, v22.4s, #24 + .long 0x4eb58442 // add v2.4s, v2.4s, v21.4s + .long 0x6e221c63 // eor v3.16b, v3.16b, v2.16b + .long 0x6f390461 // ushr v1.4s, v3.4s, #7 + .long 0x6f395461 // sli v1.4s, v3.4s, #25 .long 0x6e012021 // ext v1.16b, v1.16b, v1.16b, #4 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 - .long 0x6e036063 // ext v3.16b, v3.16b, v3.16b, #12 + .long 0x6e1562b5 // ext v21.16b, v21.16b, v21.16b, #12 .long 0x6e0404b4 // ins v20.s[0], v5.s[0] .long 0x6e0c64b4 // ins v20.s[1], v5.s[3] .long 0x6e1464f4 // ins v20.s[2], v7.s[3] .long 0x6e1c2494 // ins v20.s[3], v4.s[1] .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201eb5 // eor v21.16b, v21.16b, v0.16b + .long 0x6e600ab5 // rev32 v21.8h, v21.8h + .long 0x4eb58442 // add v2.4s, v2.4s, v21.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f340436 // ushr v22.4s, v1.4s, #12 + .long 0x6f345436 // sli v22.4s, v1.4s, #20 .long 0x6e0424f4 // ins v20.s[0], v7.s[1] .long 0x6e0c24b4 // ins v20.s[1], v5.s[1] .long 0x6e1444f4 // ins v20.s[2], v7.s[2] .long 0x6e1c24d4 // ins v20.s[3], v6.s[1] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s + .long 0x4eb68694 // add v20.4s, v20.4s, v22.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201eb5 // eor v21.16b, v21.16b, v0.16b + .long 0x6f3806a3 // ushr v3.4s, v21.4s, #8 + .long 0x6f3856a3 // sli v3.4s, v21.4s, #24 .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6e221ed6 // eor v22.16b, v22.16b, v2.16b + .long 0x6f3906c1 // ushr v1.4s, v22.4s, #7 + .long 0x6f3956c1 // sli v1.4s, v22.4s, #25 .long 0x6e016021 // ext v1.16b, v1.16b, v1.16b, #12 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 .long 0x6e032063 // ext v3.16b, v3.16b, v3.16b, #4 @@ -404,85 +369,76 @@ .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f345435 // sli v21.4s, v1.4s, #20 .long 0x6e0424b4 // ins v20.s[0], v5.s[1] .long 0x6e0c64f4 // ins v20.s[1], v7.s[3] .long 0x6e1424f4 // ins v20.s[2], v7.s[1] .long 0x6e1c44d4 // ins v20.s[3], v6.s[2] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s + .long 0x4eb58694 // add v20.4s, v20.4s, v21.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f380476 // ushr v22.4s, v3.4s, #8 + .long 0x6f385476 // sli v22.4s, v3.4s, #24 + .long 0x4eb68442 // add v2.4s, v2.4s, v22.4s + .long 0x6e221eb5 // eor v21.16b, v21.16b, v2.16b + .long 0x6f3906a1 // ushr v1.4s, v21.4s, #7 + .long 0x6f3956a1 // sli v1.4s, v21.4s, #25 .long 0x6e012021 // ext v1.16b, v1.16b, v1.16b, #4 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 - .long 0x6e036063 // ext v3.16b, v3.16b, v3.16b, #12 + .long 0x6e1662d6 // ext v22.16b, v22.16b, v22.16b, #12 .long 0x6e040494 // ins v20.s[0], v4.s[0] .long 0x6e0c44b4 // ins v20.s[1], v5.s[2] .long 0x6e1424d4 // ins v20.s[2], v6.s[1] .long 0x6e1c04d4 // ins v20.s[3], v6.s[0] .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201ed6 // eor v22.16b, v22.16b, v0.16b + .long 0x6e600ad6 // rev32 v22.8h, v22.8h + .long 0x4eb68442 // add v2.4s, v2.4s, v22.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f340423 // ushr v3.4s, v1.4s, #12 + .long 0x6f345423 // sli v3.4s, v1.4s, #20 .long 0x6e0464b4 // ins v20.s[0], v5.s[3] .long 0x6e0c6494 // ins v20.s[1], v4.s[3] .long 0x6e144494 // ins v20.s[2], v4.s[2] .long 0x6e1c64d4 // ins v20.s[3], v6.s[3] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s - .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x4ea38694 // add v20.4s, v20.4s, v3.4s + .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s + .long 0x6e201ed6 // eor v22.16b, v22.16b, v0.16b + .long 0x6f3806d5 // ushr v21.4s, v22.4s, #8 + .long 0x6f3856d5 // sli v21.4s, v22.4s, #24 + .long 0x4eb58442 // add v2.4s, v2.4s, v21.4s + .long 0x6e221c63 // eor v3.16b, v3.16b, v2.16b + .long 0x6f390461 // ushr v1.4s, v3.4s, #7 + .long 0x6f395461 // sli v1.4s, v3.4s, #25 .long 0x6e016021 // ext v1.16b, v1.16b, v1.16b, #12 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 - .long 0x6e032063 // ext v3.16b, v3.16b, v3.16b, #4 + .long 0x6e1522b5 // ext v21.16b, v21.16b, v21.16b, #4 .long 0x6e0424f4 // ins v20.s[0], v7.s[1] .long 0x6e0c64b4 // ins v20.s[1], v5.s[3] .long 0x6e1404f4 // ins v20.s[2], v7.s[0] .long 0x6e1c6494 // ins v20.s[3], v4.s[3] .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201eb5 // eor v21.16b, v21.16b, v0.16b + .long 0x6e600ab5 // rev32 v21.8h, v21.8h + .long 0x4eb58442 // add v2.4s, v2.4s, v21.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f340436 // ushr v22.4s, v1.4s, #12 + .long 0x6f345436 // sli v22.4s, v1.4s, #20 .long 0x6e0464d4 // ins v20.s[0], v6.s[3] .long 0x6e0c44f4 // ins v20.s[1], v7.s[2] .long 0x6e142494 // ins v20.s[2], v4.s[1] .long 0x6e1c24d4 // ins v20.s[3], v6.s[1] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s + .long 0x4eb68694 // add v20.4s, v20.4s, v22.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201eb5 // eor v21.16b, v21.16b, v0.16b + .long 0x6f3806a3 // ushr v3.4s, v21.4s, #8 + .long 0x6f3856a3 // sli v3.4s, v21.4s, #24 .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6e221ed6 // eor v22.16b, v22.16b, v2.16b + .long 0x6f3906c1 // ushr v1.4s, v22.4s, #7 + .long 0x6f3956c1 // sli v1.4s, v22.4s, #25 .long 0x6e012021 // ext v1.16b, v1.16b, v1.16b, #4 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 .long 0x6e036063 // ext v3.16b, v3.16b, v3.16b, #12 @@ -497,85 +453,76 @@ .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f345435 // sli v21.4s, v1.4s, #20 .long 0x6e040494 // ins v20.s[0], v4.s[0] .long 0x6e0c04b4 // ins v20.s[1], v5.s[0] .long 0x6e1444b4 // ins v20.s[2], v5.s[2] .long 0x6e1c44d4 // ins v20.s[3], v6.s[2] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s + .long 0x4eb58694 // add v20.4s, v20.4s, v21.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f380476 // ushr v22.4s, v3.4s, #8 + .long 0x6f385476 // sli v22.4s, v3.4s, #24 + .long 0x4eb68442 // add v2.4s, v2.4s, v22.4s + .long 0x6e221eb5 // eor v21.16b, v21.16b, v2.16b + .long 0x6f3906a1 // ushr v1.4s, v21.4s, #7 + .long 0x6f3956a1 // sli v1.4s, v21.4s, #25 .long 0x6e016021 // ext v1.16b, v1.16b, v1.16b, #12 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 - .long 0x6e032063 // ext v3.16b, v3.16b, v3.16b, #4 + .long 0x6e1622d6 // ext v22.16b, v22.16b, v22.16b, #4 .long 0x6e0444b4 // ins v20.s[0], v5.s[2] .long 0x6e0c44f4 // ins v20.s[1], v7.s[2] .long 0x6e1464d4 // ins v20.s[2], v6.s[3] .long 0x6e1c0494 // ins v20.s[3], v4.s[0] .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201ed6 // eor v22.16b, v22.16b, v0.16b + .long 0x6e600ad6 // rev32 v22.8h, v22.8h + .long 0x4eb68442 // add v2.4s, v2.4s, v22.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f340423 // ushr v3.4s, v1.4s, #12 + .long 0x6f345423 // sli v3.4s, v1.4s, #20 .long 0x6e0464f4 // ins v20.s[0], v7.s[3] .long 0x6e0c24d4 // ins v20.s[1], v6.s[1] .long 0x6e146494 // ins v20.s[2], v4.s[3] .long 0x6e1c04d4 // ins v20.s[3], v6.s[0] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s - .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x4ea38694 // add v20.4s, v20.4s, v3.4s + .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s + .long 0x6e201ed6 // eor v22.16b, v22.16b, v0.16b + .long 0x6f3806d5 // ushr v21.4s, v22.4s, #8 + .long 0x6f3856d5 // sli v21.4s, v22.4s, #24 + .long 0x4eb58442 // add v2.4s, v2.4s, v21.4s + .long 0x6e221c63 // eor v3.16b, v3.16b, v2.16b + .long 0x6f390461 // ushr v1.4s, v3.4s, #7 + .long 0x6f395461 // sli v1.4s, v3.4s, #25 .long 0x6e012021 // ext v1.16b, v1.16b, v1.16b, #4 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 - .long 0x6e036063 // ext v3.16b, v3.16b, v3.16b, #12 + .long 0x6e1562b5 // ext v21.16b, v21.16b, v21.16b, #12 .long 0x6e0404f4 // ins v20.s[0], v7.s[0] .long 0x6e0c24f4 // ins v20.s[1], v7.s[1] .long 0x6e142494 // ins v20.s[2], v4.s[1] .long 0x6e1c44d4 // ins v20.s[3], v6.s[2] .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201eb5 // eor v21.16b, v21.16b, v0.16b + .long 0x6e600ab5 // rev32 v21.8h, v21.8h + .long 0x4eb58442 // add v2.4s, v2.4s, v21.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f340436 // ushr v22.4s, v1.4s, #12 + .long 0x6f345436 // sli v22.4s, v1.4s, #20 .long 0x6e044494 // ins v20.s[0], v4.s[2] .long 0x6e0c64b4 // ins v20.s[1], v5.s[3] .long 0x6e1404b4 // ins v20.s[2], v5.s[0] .long 0x6e1c24b4 // ins v20.s[3], v5.s[1] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s + .long 0x4eb68694 // add v20.4s, v20.4s, v22.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b + .long 0x6e201eb5 // eor v21.16b, v21.16b, v0.16b + .long 0x6f3806a3 // ushr v3.4s, v21.4s, #8 + .long 0x6f3856a3 // sli v3.4s, v21.4s, #24 .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6e221ed6 // eor v22.16b, v22.16b, v2.16b + .long 0x6f3906c1 // ushr v1.4s, v22.4s, #7 + .long 0x6f3956c1 // sli v1.4s, v22.4s, #25 .long 0x6e016021 // ext v1.16b, v1.16b, v1.16b, #12 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 .long 0x6e032063 // ext v3.16b, v3.16b, v3.16b, #4 @@ -590,57 +537,52 @@ .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f345435 // sli v21.4s, v1.4s, #20 .long 0x6e044494 // ins v20.s[0], v4.s[2] .long 0x6e0c04b4 // ins v20.s[1], v5.s[0] .long 0x6e1444b4 // ins v20.s[2], v5.s[2] .long 0x6e1c24b4 // ins v20.s[3], v5.s[1] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s + .long 0x4eb58694 // add v20.4s, v20.4s, v21.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f380476 // ushr v22.4s, v3.4s, #8 + .long 0x6f385476 // sli v22.4s, v3.4s, #24 + .long 0x4eb68442 // add v2.4s, v2.4s, v22.4s + .long 0x6e221eb5 // eor v21.16b, v21.16b, v2.16b + .long 0x6f3906a1 // ushr v1.4s, v21.4s, #7 + .long 0x6f3956a1 // sli v1.4s, v21.4s, #25 .long 0x6e012021 // ext v1.16b, v1.16b, v1.16b, #4 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 - .long 0x6e036063 // ext v3.16b, v3.16b, v3.16b, #12 + .long 0x6e1662d6 // ext v22.16b, v22.16b, v22.16b, #12 .long 0x6e0464f4 // ins v20.s[0], v7.s[3] .long 0x6e0c24d4 // ins v20.s[1], v6.s[1] .long 0x6e146494 // ins v20.s[2], v4.s[3] .long 0x6e1c24f4 // ins v20.s[3], v7.s[1] .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201ed6 // eor v22.16b, v22.16b, v0.16b + .long 0x6e600ad6 // rev32 v22.8h, v22.8h + .long 0x4eb68442 // add v2.4s, v2.4s, v22.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f340435 // ushr v21.4s, v1.4s, #12 - .long 0x4f345436 // shl v22.4s, v1.4s, #20 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x6f340423 // ushr v3.4s, v1.4s, #12 + .long 0x6f345423 // sli v3.4s, v1.4s, #20 .long 0x6e0464d4 // ins v20.s[0], v6.s[3] .long 0x6e0c44f4 // ins v20.s[1], v7.s[2] .long 0x6e1404f4 // ins v20.s[2], v7.s[0] .long 0x6e1c0494 // ins v20.s[3], v4.s[0] - .long 0x4ea18694 // add v20.4s, v20.4s, v1.4s - .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380475 // ushr v21.4s, v3.4s, #8 - .long 0x4f385476 // shl v22.4s, v3.4s, #24 - .long 0x4eb61ea3 // orr v3.16b, v21.16b, v22.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x6f390435 // ushr v21.4s, v1.4s, #7 - .long 0x4f395436 // shl v22.4s, v1.4s, #25 - .long 0x4eb61ea1 // orr v1.16b, v21.16b, v22.16b + .long 0x4ea38694 // add v20.4s, v20.4s, v3.4s + .long 0x4eb48400 // add v0.4s, v0.4s, v20.4s + .long 0x6e201ed6 // eor v22.16b, v22.16b, v0.16b + .long 0x6f3806d5 // ushr v21.4s, v22.4s, #8 + .long 0x6f3856d5 // sli v21.4s, v22.4s, #24 + .long 0x4eb58442 // add v2.4s, v2.4s, v21.4s + .long 0x6e221c63 // eor v3.16b, v3.16b, v2.16b + .long 0x6f390461 // ushr v1.4s, v3.4s, #7 + .long 0x6f395461 // sli v1.4s, v3.4s, #25 .long 0x6e016021 // ext v1.16b, v1.16b, v1.16b, #12 .long 0x6e024042 // ext v2.16b, v2.16b, v2.16b, #8 - .long 0x6e032063 // ext v3.16b, v3.16b, v3.16b, #4 + .long 0x6e1522b5 // ext v21.16b, v21.16b, v21.16b, #4 + .long 0x4eb51ea3 // orr v3.16b, v21.16b, v21.16b .long 0x6e221c00 // eor v0.16b, v0.16b, v2.16b .long 0x6e201e00 // eor v0.16b, v16.16b, v0.16b .long 0x6e231c21 // eor v1.16b, v1.16b, v3.16b diff --git a/HashLib/src/Include/Simd/Blake3/Blake3CompressAvx2_x86_64.inc b/HashLib/src/Include/Simd/Blake3/Blake3CompressAvx_x86_64.inc similarity index 99% rename from HashLib/src/Include/Simd/Blake3/Blake3CompressAvx2_x86_64.inc rename to HashLib/src/Include/Simd/Blake3/Blake3CompressAvx_x86_64.inc index b622420b..2ff5db88 100644 --- a/HashLib/src/Include/Simd/Blake3/Blake3CompressAvx2_x86_64.inc +++ b/HashLib/src/Include/Simd/Blake3/Blake3CompressAvx_x86_64.inc @@ -1,4 +1,4 @@ -// AVX2 implementation of BLAKE3 compress (VEX-encoded 128-bit, 7 rounds with register-based +// AVX (VEX-128) implementation of BLAKE3 compress (7 rounds with register-based // message scheduling). // AVX/AVX2 instructions are db-encoded for broad assembler compatibility. // Reference: BLAKE3-team/BLAKE3 official SSE2/AVX2 implementation. diff --git a/HashLib/src/Include/Simd/Blake3/Blake3CompressNeon_aarch64.inc b/HashLib/src/Include/Simd/Blake3/Blake3CompressNeon_aarch64.inc index 3a4e9b07..540b75ed 100644 --- a/HashLib/src/Include/Simd/Blake3/Blake3CompressNeon_aarch64.inc +++ b/HashLib/src/Include/Simd/Blake3/Blake3CompressNeon_aarch64.inc @@ -12,7 +12,7 @@ // v4-v7 = message schedule registers m0..m3 // v16-v17 = permute temps t8/t9; v17 saved to stack mid-permute when shufps // needs v17 as scratch (see [sp, #0] spill below) -// v18-v19 = rotate temps (vsri path) +// v18-v19 = rotate temps (2-op ushr+sli rotates rename rows b/d through them) // v20 = shufps / non-cyclic pshufd scratch (t14); cyclic diagonalize // shuffles use in-place 'ext' instead // Stack (128 bytes): [sp, #0] transient t9 (v17) spill during inter-round permute; @@ -64,49 +64,39 @@ .long 0x6e600863 // rev32 v3.8h, v3.8h .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344432 // sri v18.4s, v1.4s, #12 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f340432 // ushr v18.4s, v1.4s, #12 + .long 0x6f345432 // sli v18.4s, v1.4s, #20 .long 0x4ea58400 // add v0.4s, v0.4s, v5.4s - .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s + .long 0x4eb28400 // add v0.4s, v0.4s, v18.4s .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380472 // ushr v18.4s, v3.4s, #8 - .long 0x4f385473 // shl v19.4s, v3.4s, #24 - .long 0x4eb31e43 // orr v3.16b, v18.16b, v19.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394432 // sri v18.4s, v1.4s, #7 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f380473 // ushr v19.4s, v3.4s, #8 + .long 0x6f385473 // sli v19.4s, v3.4s, #24 + .long 0x4eb38442 // add v2.4s, v2.4s, v19.4s + .long 0x6e221e52 // eor v18.16b, v18.16b, v2.16b + .long 0x6f390641 // ushr v1.4s, v18.4s, #7 + .long 0x6f395641 // sli v1.4s, v18.4s, #25 .long 0x6e006000 // ext v0.16b, v0.16b, v0.16b, #12 - .long 0x6e034063 // ext v3.16b, v3.16b, v3.16b, #8 + .long 0x6e134273 // ext v19.16b, v19.16b, v19.16b, #8 .long 0x6e022042 // ext v2.16b, v2.16b, v2.16b, #4 .long 0x4ea68400 // add v0.4s, v0.4s, v6.4s .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201e73 // eor v19.16b, v19.16b, v0.16b + .long 0x6e600a73 // rev32 v19.8h, v19.8h + .long 0x4eb38442 // add v2.4s, v2.4s, v19.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344432 // sri v18.4s, v1.4s, #12 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f340423 // ushr v3.4s, v1.4s, #12 + .long 0x6f345423 // sli v3.4s, v1.4s, #20 .long 0x4ea78400 // add v0.4s, v0.4s, v7.4s - .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380472 // ushr v18.4s, v3.4s, #8 - .long 0x4f385473 // shl v19.4s, v3.4s, #24 - .long 0x4eb31e43 // orr v3.16b, v18.16b, v19.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394432 // sri v18.4s, v1.4s, #7 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x4ea38400 // add v0.4s, v0.4s, v3.4s + .long 0x6e201e73 // eor v19.16b, v19.16b, v0.16b + .long 0x6f380672 // ushr v18.4s, v19.4s, #8 + .long 0x6f385672 // sli v18.4s, v19.4s, #24 + .long 0x4eb28442 // add v2.4s, v2.4s, v18.4s + .long 0x6e221c63 // eor v3.16b, v3.16b, v2.16b + .long 0x6f390461 // ushr v1.4s, v3.4s, #7 + .long 0x6f395461 // sli v1.4s, v3.4s, #25 .long 0x6e002000 // ext v0.16b, v0.16b, v0.16b, #4 - .long 0x6e034063 // ext v3.16b, v3.16b, v3.16b, #8 + .long 0x6e124252 // ext v18.16b, v18.16b, v18.16b, #8 .long 0x6e026042 // ext v2.16b, v2.16b, v2.16b, #12 .long 0x4ea41c90 // orr v16.16b, v4.16b, v4.16b .long 0x6e044614 // ins v20.s[0], v16.s[2] @@ -163,26 +153,21 @@ .long 0x4eb01e06 // orr v6.16b, v16.16b, v16.16b .long 0x4ea48400 // add v0.4s, v0.4s, v4.4s .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201e52 // eor v18.16b, v18.16b, v0.16b + .long 0x6e600a52 // rev32 v18.8h, v18.8h + .long 0x4eb28442 // add v2.4s, v2.4s, v18.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344432 // sri v18.4s, v1.4s, #12 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f340433 // ushr v19.4s, v1.4s, #12 + .long 0x6f345433 // sli v19.4s, v1.4s, #20 .long 0x4ea58400 // add v0.4s, v0.4s, v5.4s - .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380472 // ushr v18.4s, v3.4s, #8 - .long 0x4f385473 // shl v19.4s, v3.4s, #24 - .long 0x4eb31e43 // orr v3.16b, v18.16b, v19.16b + .long 0x4eb38400 // add v0.4s, v0.4s, v19.4s + .long 0x6e201e52 // eor v18.16b, v18.16b, v0.16b + .long 0x6f380643 // ushr v3.4s, v18.4s, #8 + .long 0x6f385643 // sli v3.4s, v18.4s, #24 .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394432 // sri v18.4s, v1.4s, #7 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6e221e73 // eor v19.16b, v19.16b, v2.16b + .long 0x6f390661 // ushr v1.4s, v19.4s, #7 + .long 0x6f395661 // sli v1.4s, v19.4s, #25 .long 0x6e006000 // ext v0.16b, v0.16b, v0.16b, #12 .long 0x6e034063 // ext v3.16b, v3.16b, v3.16b, #8 .long 0x6e022042 // ext v2.16b, v2.16b, v2.16b, #4 @@ -192,24 +177,19 @@ .long 0x6e600863 // rev32 v3.8h, v3.8h .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344432 // sri v18.4s, v1.4s, #12 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f340432 // ushr v18.4s, v1.4s, #12 + .long 0x6f345432 // sli v18.4s, v1.4s, #20 .long 0x4ea78400 // add v0.4s, v0.4s, v7.4s - .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s + .long 0x4eb28400 // add v0.4s, v0.4s, v18.4s .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380472 // ushr v18.4s, v3.4s, #8 - .long 0x4f385473 // shl v19.4s, v3.4s, #24 - .long 0x4eb31e43 // orr v3.16b, v18.16b, v19.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394432 // sri v18.4s, v1.4s, #7 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f380473 // ushr v19.4s, v3.4s, #8 + .long 0x6f385473 // sli v19.4s, v3.4s, #24 + .long 0x4eb38442 // add v2.4s, v2.4s, v19.4s + .long 0x6e221e52 // eor v18.16b, v18.16b, v2.16b + .long 0x6f390641 // ushr v1.4s, v18.4s, #7 + .long 0x6f395641 // sli v1.4s, v18.4s, #25 .long 0x6e002000 // ext v0.16b, v0.16b, v0.16b, #4 - .long 0x6e034063 // ext v3.16b, v3.16b, v3.16b, #8 + .long 0x6e134273 // ext v19.16b, v19.16b, v19.16b, #8 .long 0x6e026042 // ext v2.16b, v2.16b, v2.16b, #12 .long 0x4ea41c90 // orr v16.16b, v4.16b, v4.16b .long 0x6e044614 // ins v20.s[0], v16.s[2] @@ -266,51 +246,41 @@ .long 0x4eb01e06 // orr v6.16b, v16.16b, v16.16b .long 0x4ea48400 // add v0.4s, v0.4s, v4.4s .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201e73 // eor v19.16b, v19.16b, v0.16b + .long 0x6e600a73 // rev32 v19.8h, v19.8h + .long 0x4eb38442 // add v2.4s, v2.4s, v19.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344432 // sri v18.4s, v1.4s, #12 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f340423 // ushr v3.4s, v1.4s, #12 + .long 0x6f345423 // sli v3.4s, v1.4s, #20 .long 0x4ea58400 // add v0.4s, v0.4s, v5.4s - .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380472 // ushr v18.4s, v3.4s, #8 - .long 0x4f385473 // shl v19.4s, v3.4s, #24 - .long 0x4eb31e43 // orr v3.16b, v18.16b, v19.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394432 // sri v18.4s, v1.4s, #7 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x4ea38400 // add v0.4s, v0.4s, v3.4s + .long 0x6e201e73 // eor v19.16b, v19.16b, v0.16b + .long 0x6f380672 // ushr v18.4s, v19.4s, #8 + .long 0x6f385672 // sli v18.4s, v19.4s, #24 + .long 0x4eb28442 // add v2.4s, v2.4s, v18.4s + .long 0x6e221c63 // eor v3.16b, v3.16b, v2.16b + .long 0x6f390461 // ushr v1.4s, v3.4s, #7 + .long 0x6f395461 // sli v1.4s, v3.4s, #25 .long 0x6e006000 // ext v0.16b, v0.16b, v0.16b, #12 - .long 0x6e034063 // ext v3.16b, v3.16b, v3.16b, #8 + .long 0x6e124252 // ext v18.16b, v18.16b, v18.16b, #8 .long 0x6e022042 // ext v2.16b, v2.16b, v2.16b, #4 .long 0x4ea68400 // add v0.4s, v0.4s, v6.4s .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201e52 // eor v18.16b, v18.16b, v0.16b + .long 0x6e600a52 // rev32 v18.8h, v18.8h + .long 0x4eb28442 // add v2.4s, v2.4s, v18.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344432 // sri v18.4s, v1.4s, #12 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f340433 // ushr v19.4s, v1.4s, #12 + .long 0x6f345433 // sli v19.4s, v1.4s, #20 .long 0x4ea78400 // add v0.4s, v0.4s, v7.4s - .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380472 // ushr v18.4s, v3.4s, #8 - .long 0x4f385473 // shl v19.4s, v3.4s, #24 - .long 0x4eb31e43 // orr v3.16b, v18.16b, v19.16b + .long 0x4eb38400 // add v0.4s, v0.4s, v19.4s + .long 0x6e201e52 // eor v18.16b, v18.16b, v0.16b + .long 0x6f380643 // ushr v3.4s, v18.4s, #8 + .long 0x6f385643 // sli v3.4s, v18.4s, #24 .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394432 // sri v18.4s, v1.4s, #7 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6e221e73 // eor v19.16b, v19.16b, v2.16b + .long 0x6f390661 // ushr v1.4s, v19.4s, #7 + .long 0x6f395661 // sli v1.4s, v19.4s, #25 .long 0x6e002000 // ext v0.16b, v0.16b, v0.16b, #4 .long 0x6e034063 // ext v3.16b, v3.16b, v3.16b, #8 .long 0x6e026042 // ext v2.16b, v2.16b, v2.16b, #12 @@ -373,49 +343,39 @@ .long 0x6e600863 // rev32 v3.8h, v3.8h .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344432 // sri v18.4s, v1.4s, #12 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f340432 // ushr v18.4s, v1.4s, #12 + .long 0x6f345432 // sli v18.4s, v1.4s, #20 .long 0x4ea58400 // add v0.4s, v0.4s, v5.4s - .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s + .long 0x4eb28400 // add v0.4s, v0.4s, v18.4s .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380472 // ushr v18.4s, v3.4s, #8 - .long 0x4f385473 // shl v19.4s, v3.4s, #24 - .long 0x4eb31e43 // orr v3.16b, v18.16b, v19.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394432 // sri v18.4s, v1.4s, #7 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f380473 // ushr v19.4s, v3.4s, #8 + .long 0x6f385473 // sli v19.4s, v3.4s, #24 + .long 0x4eb38442 // add v2.4s, v2.4s, v19.4s + .long 0x6e221e52 // eor v18.16b, v18.16b, v2.16b + .long 0x6f390641 // ushr v1.4s, v18.4s, #7 + .long 0x6f395641 // sli v1.4s, v18.4s, #25 .long 0x6e006000 // ext v0.16b, v0.16b, v0.16b, #12 - .long 0x6e034063 // ext v3.16b, v3.16b, v3.16b, #8 + .long 0x6e134273 // ext v19.16b, v19.16b, v19.16b, #8 .long 0x6e022042 // ext v2.16b, v2.16b, v2.16b, #4 .long 0x4ea68400 // add v0.4s, v0.4s, v6.4s .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201e73 // eor v19.16b, v19.16b, v0.16b + .long 0x6e600a73 // rev32 v19.8h, v19.8h + .long 0x4eb38442 // add v2.4s, v2.4s, v19.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344432 // sri v18.4s, v1.4s, #12 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f340423 // ushr v3.4s, v1.4s, #12 + .long 0x6f345423 // sli v3.4s, v1.4s, #20 .long 0x4ea78400 // add v0.4s, v0.4s, v7.4s - .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380472 // ushr v18.4s, v3.4s, #8 - .long 0x4f385473 // shl v19.4s, v3.4s, #24 - .long 0x4eb31e43 // orr v3.16b, v18.16b, v19.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394432 // sri v18.4s, v1.4s, #7 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x4ea38400 // add v0.4s, v0.4s, v3.4s + .long 0x6e201e73 // eor v19.16b, v19.16b, v0.16b + .long 0x6f380672 // ushr v18.4s, v19.4s, #8 + .long 0x6f385672 // sli v18.4s, v19.4s, #24 + .long 0x4eb28442 // add v2.4s, v2.4s, v18.4s + .long 0x6e221c63 // eor v3.16b, v3.16b, v2.16b + .long 0x6f390461 // ushr v1.4s, v3.4s, #7 + .long 0x6f395461 // sli v1.4s, v3.4s, #25 .long 0x6e002000 // ext v0.16b, v0.16b, v0.16b, #4 - .long 0x6e034063 // ext v3.16b, v3.16b, v3.16b, #8 + .long 0x6e124252 // ext v18.16b, v18.16b, v18.16b, #8 .long 0x6e026042 // ext v2.16b, v2.16b, v2.16b, #12 .long 0x4ea41c90 // orr v16.16b, v4.16b, v4.16b .long 0x6e044614 // ins v20.s[0], v16.s[2] @@ -472,26 +432,21 @@ .long 0x4eb01e06 // orr v6.16b, v16.16b, v16.16b .long 0x4ea48400 // add v0.4s, v0.4s, v4.4s .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201e52 // eor v18.16b, v18.16b, v0.16b + .long 0x6e600a52 // rev32 v18.8h, v18.8h + .long 0x4eb28442 // add v2.4s, v2.4s, v18.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344432 // sri v18.4s, v1.4s, #12 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f340433 // ushr v19.4s, v1.4s, #12 + .long 0x6f345433 // sli v19.4s, v1.4s, #20 .long 0x4ea58400 // add v0.4s, v0.4s, v5.4s - .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380472 // ushr v18.4s, v3.4s, #8 - .long 0x4f385473 // shl v19.4s, v3.4s, #24 - .long 0x4eb31e43 // orr v3.16b, v18.16b, v19.16b + .long 0x4eb38400 // add v0.4s, v0.4s, v19.4s + .long 0x6e201e52 // eor v18.16b, v18.16b, v0.16b + .long 0x6f380643 // ushr v3.4s, v18.4s, #8 + .long 0x6f385643 // sli v3.4s, v18.4s, #24 .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394432 // sri v18.4s, v1.4s, #7 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6e221e73 // eor v19.16b, v19.16b, v2.16b + .long 0x6f390661 // ushr v1.4s, v19.4s, #7 + .long 0x6f395661 // sli v1.4s, v19.4s, #25 .long 0x6e006000 // ext v0.16b, v0.16b, v0.16b, #12 .long 0x6e034063 // ext v3.16b, v3.16b, v3.16b, #8 .long 0x6e022042 // ext v2.16b, v2.16b, v2.16b, #4 @@ -501,24 +456,19 @@ .long 0x6e600863 // rev32 v3.8h, v3.8h .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344432 // sri v18.4s, v1.4s, #12 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f340432 // ushr v18.4s, v1.4s, #12 + .long 0x6f345432 // sli v18.4s, v1.4s, #20 .long 0x4ea78400 // add v0.4s, v0.4s, v7.4s - .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s + .long 0x4eb28400 // add v0.4s, v0.4s, v18.4s .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380472 // ushr v18.4s, v3.4s, #8 - .long 0x4f385473 // shl v19.4s, v3.4s, #24 - .long 0x4eb31e43 // orr v3.16b, v18.16b, v19.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394432 // sri v18.4s, v1.4s, #7 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f380473 // ushr v19.4s, v3.4s, #8 + .long 0x6f385473 // sli v19.4s, v3.4s, #24 + .long 0x4eb38442 // add v2.4s, v2.4s, v19.4s + .long 0x6e221e52 // eor v18.16b, v18.16b, v2.16b + .long 0x6f390641 // ushr v1.4s, v18.4s, #7 + .long 0x6f395641 // sli v1.4s, v18.4s, #25 .long 0x6e002000 // ext v0.16b, v0.16b, v0.16b, #4 - .long 0x6e034063 // ext v3.16b, v3.16b, v3.16b, #8 + .long 0x6e134273 // ext v19.16b, v19.16b, v19.16b, #8 .long 0x6e026042 // ext v2.16b, v2.16b, v2.16b, #12 .long 0x4ea41c90 // orr v16.16b, v4.16b, v4.16b .long 0x6e044614 // ins v20.s[0], v16.s[2] @@ -575,51 +525,41 @@ .long 0x4eb01e06 // orr v6.16b, v16.16b, v16.16b .long 0x4ea48400 // add v0.4s, v0.4s, v4.4s .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201e73 // eor v19.16b, v19.16b, v0.16b + .long 0x6e600a73 // rev32 v19.8h, v19.8h + .long 0x4eb38442 // add v2.4s, v2.4s, v19.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344432 // sri v18.4s, v1.4s, #12 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f340423 // ushr v3.4s, v1.4s, #12 + .long 0x6f345423 // sli v3.4s, v1.4s, #20 .long 0x4ea58400 // add v0.4s, v0.4s, v5.4s - .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380472 // ushr v18.4s, v3.4s, #8 - .long 0x4f385473 // shl v19.4s, v3.4s, #24 - .long 0x4eb31e43 // orr v3.16b, v18.16b, v19.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394432 // sri v18.4s, v1.4s, #7 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x4ea38400 // add v0.4s, v0.4s, v3.4s + .long 0x6e201e73 // eor v19.16b, v19.16b, v0.16b + .long 0x6f380672 // ushr v18.4s, v19.4s, #8 + .long 0x6f385672 // sli v18.4s, v19.4s, #24 + .long 0x4eb28442 // add v2.4s, v2.4s, v18.4s + .long 0x6e221c63 // eor v3.16b, v3.16b, v2.16b + .long 0x6f390461 // ushr v1.4s, v3.4s, #7 + .long 0x6f395461 // sli v1.4s, v3.4s, #25 .long 0x6e006000 // ext v0.16b, v0.16b, v0.16b, #12 - .long 0x6e034063 // ext v3.16b, v3.16b, v3.16b, #8 + .long 0x6e124252 // ext v18.16b, v18.16b, v18.16b, #8 .long 0x6e022042 // ext v2.16b, v2.16b, v2.16b, #4 .long 0x4ea68400 // add v0.4s, v0.4s, v6.4s .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201e52 // eor v18.16b, v18.16b, v0.16b + .long 0x6e600a52 // rev32 v18.8h, v18.8h + .long 0x4eb28442 // add v2.4s, v2.4s, v18.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344432 // sri v18.4s, v1.4s, #12 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f340433 // ushr v19.4s, v1.4s, #12 + .long 0x6f345433 // sli v19.4s, v1.4s, #20 .long 0x4ea78400 // add v0.4s, v0.4s, v7.4s - .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380472 // ushr v18.4s, v3.4s, #8 - .long 0x4f385473 // shl v19.4s, v3.4s, #24 - .long 0x4eb31e43 // orr v3.16b, v18.16b, v19.16b + .long 0x4eb38400 // add v0.4s, v0.4s, v19.4s + .long 0x6e201e52 // eor v18.16b, v18.16b, v0.16b + .long 0x6f380643 // ushr v3.4s, v18.4s, #8 + .long 0x6f385643 // sli v3.4s, v18.4s, #24 .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394432 // sri v18.4s, v1.4s, #7 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6e221e73 // eor v19.16b, v19.16b, v2.16b + .long 0x6f390661 // ushr v1.4s, v19.4s, #7 + .long 0x6f395661 // sli v1.4s, v19.4s, #25 .long 0x6e002000 // ext v0.16b, v0.16b, v0.16b, #4 .long 0x6e034063 // ext v3.16b, v3.16b, v3.16b, #8 .long 0x6e026042 // ext v2.16b, v2.16b, v2.16b, #12 @@ -682,50 +622,41 @@ .long 0x6e600863 // rev32 v3.8h, v3.8h .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344432 // sri v18.4s, v1.4s, #12 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f340432 // ushr v18.4s, v1.4s, #12 + .long 0x6f345432 // sli v18.4s, v1.4s, #20 .long 0x4ea58400 // add v0.4s, v0.4s, v5.4s - .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s + .long 0x4eb28400 // add v0.4s, v0.4s, v18.4s .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380472 // ushr v18.4s, v3.4s, #8 - .long 0x4f385473 // shl v19.4s, v3.4s, #24 - .long 0x4eb31e43 // orr v3.16b, v18.16b, v19.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394432 // sri v18.4s, v1.4s, #7 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f380473 // ushr v19.4s, v3.4s, #8 + .long 0x6f385473 // sli v19.4s, v3.4s, #24 + .long 0x4eb38442 // add v2.4s, v2.4s, v19.4s + .long 0x6e221e52 // eor v18.16b, v18.16b, v2.16b + .long 0x6f390641 // ushr v1.4s, v18.4s, #7 + .long 0x6f395641 // sli v1.4s, v18.4s, #25 .long 0x6e006000 // ext v0.16b, v0.16b, v0.16b, #12 - .long 0x6e034063 // ext v3.16b, v3.16b, v3.16b, #8 + .long 0x6e134273 // ext v19.16b, v19.16b, v19.16b, #8 .long 0x6e022042 // ext v2.16b, v2.16b, v2.16b, #4 .long 0x4ea68400 // add v0.4s, v0.4s, v6.4s .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6e600863 // rev32 v3.8h, v3.8h - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s + .long 0x6e201e73 // eor v19.16b, v19.16b, v0.16b + .long 0x6e600a73 // rev32 v19.8h, v19.8h + .long 0x4eb38442 // add v2.4s, v2.4s, v19.4s .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344432 // sri v18.4s, v1.4s, #12 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x6f340423 // ushr v3.4s, v1.4s, #12 + .long 0x6f345423 // sli v3.4s, v1.4s, #20 .long 0x4ea78400 // add v0.4s, v0.4s, v7.4s - .long 0x4ea18400 // add v0.4s, v0.4s, v1.4s - .long 0x6e201c63 // eor v3.16b, v3.16b, v0.16b - .long 0x6f380472 // ushr v18.4s, v3.4s, #8 - .long 0x4f385473 // shl v19.4s, v3.4s, #24 - .long 0x4eb31e43 // orr v3.16b, v18.16b, v19.16b - .long 0x4ea38442 // add v2.4s, v2.4s, v3.4s - .long 0x6e221c21 // eor v1.16b, v1.16b, v2.16b - .long 0x4ea11c32 // orr v18.16b, v1.16b, v1.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394432 // sri v18.4s, v1.4s, #7 - .long 0x4eb21e41 // orr v1.16b, v18.16b, v18.16b + .long 0x4ea38400 // add v0.4s, v0.4s, v3.4s + .long 0x6e201e73 // eor v19.16b, v19.16b, v0.16b + .long 0x6f380672 // ushr v18.4s, v19.4s, #8 + .long 0x6f385672 // sli v18.4s, v19.4s, #24 + .long 0x4eb28442 // add v2.4s, v2.4s, v18.4s + .long 0x6e221c63 // eor v3.16b, v3.16b, v2.16b + .long 0x6f390461 // ushr v1.4s, v3.4s, #7 + .long 0x6f395461 // sli v1.4s, v3.4s, #25 .long 0x6e002000 // ext v0.16b, v0.16b, v0.16b, #4 - .long 0x6e034063 // ext v3.16b, v3.16b, v3.16b, #8 + .long 0x6e124252 // ext v18.16b, v18.16b, v18.16b, #8 .long 0x6e026042 // ext v2.16b, v2.16b, v2.16b, #12 + .long 0x4eb21e43 // orr v3.16b, v18.16b, v18.16b .long 0x6e221c00 // eor v0.16b, v0.16b, v2.16b .long 0x6e231c21 // eor v1.16b, v1.16b, v3.16b .long 0xad404450 // ldp q16, q17, [x2] diff --git a/HashLib/src/Include/Simd/Blake3/Blake3Hash4Neon_aarch64.inc b/HashLib/src/Include/Simd/Blake3/Blake3Hash4Neon_aarch64.inc index 2aec2588..3763f140 100644 --- a/HashLib/src/Include/Simd/Blake3/Blake3Hash4Neon_aarch64.inc +++ b/HashLib/src/Include/Simd/Blake3/Blake3Hash4Neon_aarch64.inc @@ -9,7 +9,8 @@ // v0-v7 = state v0..v7 (CV rows, 4-wide) // v8-v11 = state v8..v11 (IV rows, updated each round) // v16-v17 = G temps (v12/v13 analog; d lane spilled via stack v12-v15 slots) -// v18-v19 = rotate temps (vsri path inside G) +// v16-v17 double as G temps; every rotate is the 2-op insert form and the +// rotating values (d and b) migrate v_b -> t13 -> v_b within each G // v20-v23 = transpose / block temps // x19 = block index (0..15), x20 = block byte offset within chunk // Stack frame 720 bytes (712B SSE2 layout + 8B align): @@ -203,24 +204,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s .long 0x6e281c84 // eor v4.16b, v4.16b, v8.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344492 // sri v18.4s, v4.4s, #12 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3dc007f1 // ldr q17, [sp, #16] - .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s + .long 0x4f345491 // shl v17.4s, v4.4s, #20 + .long 0x6f344491 // sri v17.4s, v4.4s, #12 + .long 0x3dc007e4 // ldr q4, [sp, #16] .long 0x4ea48400 // add v0.4s, v0.4s, v4.4s + .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s .long 0x6e201e10 // eor v16.16b, v16.16b, v0.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s - .long 0x6e281c84 // eor v4.16b, v4.16b, v8.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394492 // sri v18.4s, v4.4s, #7 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3d8043f0 // str q16, [sp, #256] + .long 0x6f380604 // ushr v4.4s, v16.4s, #8 + .long 0x6f385604 // sli v4.4s, v16.4s, #24 + .long 0x4ea48508 // add v8.4s, v8.4s, v4.4s + .long 0x3d8043e4 // str q4, [sp, #256] + .long 0x6e281e31 // eor v17.16b, v17.16b, v8.16b + .long 0x4f395624 // shl v4.4s, v17.4s, #25 + .long 0x6f394624 // sri v4.4s, v17.4s, #7 .long 0x3dc047f0 // ldr q16, [sp, #272] .long 0x3dc00bf1 // ldr q17, [sp, #32] .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s @@ -229,24 +225,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s .long 0x6e291ca5 // eor v5.16b, v5.16b, v9.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444b2 // sri v18.4s, v5.4s, #12 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3dc00ff1 // ldr q17, [sp, #48] - .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s + .long 0x4f3454b1 // shl v17.4s, v5.4s, #20 + .long 0x6f3444b1 // sri v17.4s, v5.4s, #12 + .long 0x3dc00fe5 // ldr q5, [sp, #48] .long 0x4ea58421 // add v1.4s, v1.4s, v5.4s + .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s .long 0x6e211e10 // eor v16.16b, v16.16b, v1.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s - .long 0x6e291ca5 // eor v5.16b, v5.16b, v9.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944b2 // sri v18.4s, v5.4s, #7 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3d8047f0 // str q16, [sp, #272] + .long 0x6f380605 // ushr v5.4s, v16.4s, #8 + .long 0x6f385605 // sli v5.4s, v16.4s, #24 + .long 0x4ea58529 // add v9.4s, v9.4s, v5.4s + .long 0x3d8047e5 // str q5, [sp, #272] + .long 0x6e291e31 // eor v17.16b, v17.16b, v9.16b + .long 0x4f395625 // shl v5.4s, v17.4s, #25 + .long 0x6f394625 // sri v5.4s, v17.4s, #7 .long 0x3dc04bf0 // ldr q16, [sp, #288] .long 0x3dc013f1 // ldr q17, [sp, #64] .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s @@ -255,24 +246,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s .long 0x6e2a1cc6 // eor v6.16b, v6.16b, v10.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444d2 // sri v18.4s, v6.4s, #12 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3dc017f1 // ldr q17, [sp, #80] - .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s + .long 0x4f3454d1 // shl v17.4s, v6.4s, #20 + .long 0x6f3444d1 // sri v17.4s, v6.4s, #12 + .long 0x3dc017e6 // ldr q6, [sp, #80] .long 0x4ea68442 // add v2.4s, v2.4s, v6.4s + .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s .long 0x6e221e10 // eor v16.16b, v16.16b, v2.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s - .long 0x6e2a1cc6 // eor v6.16b, v6.16b, v10.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944d2 // sri v18.4s, v6.4s, #7 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3d804bf0 // str q16, [sp, #288] + .long 0x6f380606 // ushr v6.4s, v16.4s, #8 + .long 0x6f385606 // sli v6.4s, v16.4s, #24 + .long 0x4ea6854a // add v10.4s, v10.4s, v6.4s + .long 0x3d804be6 // str q6, [sp, #288] + .long 0x6e2a1e31 // eor v17.16b, v17.16b, v10.16b + .long 0x4f395626 // shl v6.4s, v17.4s, #25 + .long 0x6f394626 // sri v6.4s, v17.4s, #7 .long 0x3dc04ff0 // ldr q16, [sp, #304] .long 0x3dc01bf1 // ldr q17, [sp, #96] .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s @@ -281,24 +267,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s .long 0x6e2b1ce7 // eor v7.16b, v7.16b, v11.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444f2 // sri v18.4s, v7.4s, #12 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3dc01ff1 // ldr q17, [sp, #112] - .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s + .long 0x4f3454f1 // shl v17.4s, v7.4s, #20 + .long 0x6f3444f1 // sri v17.4s, v7.4s, #12 + .long 0x3dc01fe7 // ldr q7, [sp, #112] .long 0x4ea78463 // add v3.4s, v3.4s, v7.4s + .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s .long 0x6e231e10 // eor v16.16b, v16.16b, v3.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s - .long 0x6e2b1ce7 // eor v7.16b, v7.16b, v11.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944f2 // sri v18.4s, v7.4s, #7 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3d804ff0 // str q16, [sp, #304] + .long 0x6f380607 // ushr v7.4s, v16.4s, #8 + .long 0x6f385607 // sli v7.4s, v16.4s, #24 + .long 0x4ea7856b // add v11.4s, v11.4s, v7.4s + .long 0x3d804fe7 // str q7, [sp, #304] + .long 0x6e2b1e31 // eor v17.16b, v17.16b, v11.16b + .long 0x4f395627 // shl v7.4s, v17.4s, #25 + .long 0x6f394627 // sri v7.4s, v17.4s, #7 .long 0x3dc04ff0 // ldr q16, [sp, #304] .long 0x3dc023f1 // ldr q17, [sp, #128] .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s @@ -307,24 +288,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s .long 0x6e2a1ca5 // eor v5.16b, v5.16b, v10.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444b2 // sri v18.4s, v5.4s, #12 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3dc027f1 // ldr q17, [sp, #144] - .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s + .long 0x4f3454b1 // shl v17.4s, v5.4s, #20 + .long 0x6f3444b1 // sri v17.4s, v5.4s, #12 + .long 0x3dc027e5 // ldr q5, [sp, #144] .long 0x4ea58400 // add v0.4s, v0.4s, v5.4s + .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s .long 0x6e201e10 // eor v16.16b, v16.16b, v0.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s - .long 0x6e2a1ca5 // eor v5.16b, v5.16b, v10.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944b2 // sri v18.4s, v5.4s, #7 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3d804ff0 // str q16, [sp, #304] + .long 0x6f380605 // ushr v5.4s, v16.4s, #8 + .long 0x6f385605 // sli v5.4s, v16.4s, #24 + .long 0x4ea5854a // add v10.4s, v10.4s, v5.4s + .long 0x3d804fe5 // str q5, [sp, #304] + .long 0x6e2a1e31 // eor v17.16b, v17.16b, v10.16b + .long 0x4f395625 // shl v5.4s, v17.4s, #25 + .long 0x6f394625 // sri v5.4s, v17.4s, #7 .long 0x3dc043f0 // ldr q16, [sp, #256] .long 0x3dc02bf1 // ldr q17, [sp, #160] .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s @@ -333,24 +309,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s .long 0x6e2b1cc6 // eor v6.16b, v6.16b, v11.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444d2 // sri v18.4s, v6.4s, #12 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3dc02ff1 // ldr q17, [sp, #176] - .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s + .long 0x4f3454d1 // shl v17.4s, v6.4s, #20 + .long 0x6f3444d1 // sri v17.4s, v6.4s, #12 + .long 0x3dc02fe6 // ldr q6, [sp, #176] .long 0x4ea68421 // add v1.4s, v1.4s, v6.4s + .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s .long 0x6e211e10 // eor v16.16b, v16.16b, v1.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s - .long 0x6e2b1cc6 // eor v6.16b, v6.16b, v11.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944d2 // sri v18.4s, v6.4s, #7 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3d8043f0 // str q16, [sp, #256] + .long 0x6f380606 // ushr v6.4s, v16.4s, #8 + .long 0x6f385606 // sli v6.4s, v16.4s, #24 + .long 0x4ea6856b // add v11.4s, v11.4s, v6.4s + .long 0x3d8043e6 // str q6, [sp, #256] + .long 0x6e2b1e31 // eor v17.16b, v17.16b, v11.16b + .long 0x4f395626 // shl v6.4s, v17.4s, #25 + .long 0x6f394626 // sri v6.4s, v17.4s, #7 .long 0x3dc047f0 // ldr q16, [sp, #272] .long 0x3dc033f1 // ldr q17, [sp, #192] .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s @@ -359,24 +330,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s .long 0x6e281ce7 // eor v7.16b, v7.16b, v8.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444f2 // sri v18.4s, v7.4s, #12 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3dc037f1 // ldr q17, [sp, #208] - .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s + .long 0x4f3454f1 // shl v17.4s, v7.4s, #20 + .long 0x6f3444f1 // sri v17.4s, v7.4s, #12 + .long 0x3dc037e7 // ldr q7, [sp, #208] .long 0x4ea78442 // add v2.4s, v2.4s, v7.4s + .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s .long 0x6e221e10 // eor v16.16b, v16.16b, v2.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s - .long 0x6e281ce7 // eor v7.16b, v7.16b, v8.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944f2 // sri v18.4s, v7.4s, #7 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3d8047f0 // str q16, [sp, #272] + .long 0x6f380607 // ushr v7.4s, v16.4s, #8 + .long 0x6f385607 // sli v7.4s, v16.4s, #24 + .long 0x4ea78508 // add v8.4s, v8.4s, v7.4s + .long 0x3d8047e7 // str q7, [sp, #272] + .long 0x6e281e31 // eor v17.16b, v17.16b, v8.16b + .long 0x4f395627 // shl v7.4s, v17.4s, #25 + .long 0x6f394627 // sri v7.4s, v17.4s, #7 .long 0x3dc04bf0 // ldr q16, [sp, #288] .long 0x3dc03bf1 // ldr q17, [sp, #224] .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s @@ -385,24 +351,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s .long 0x6e291c84 // eor v4.16b, v4.16b, v9.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344492 // sri v18.4s, v4.4s, #12 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3dc03ff1 // ldr q17, [sp, #240] - .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s + .long 0x4f345491 // shl v17.4s, v4.4s, #20 + .long 0x6f344491 // sri v17.4s, v4.4s, #12 + .long 0x3dc03fe4 // ldr q4, [sp, #240] .long 0x4ea48463 // add v3.4s, v3.4s, v4.4s + .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s .long 0x6e231e10 // eor v16.16b, v16.16b, v3.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s - .long 0x6e291c84 // eor v4.16b, v4.16b, v9.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394492 // sri v18.4s, v4.4s, #7 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3d804bf0 // str q16, [sp, #288] + .long 0x6f380604 // ushr v4.4s, v16.4s, #8 + .long 0x6f385604 // sli v4.4s, v16.4s, #24 + .long 0x4ea48529 // add v9.4s, v9.4s, v4.4s + .long 0x3d804be4 // str q4, [sp, #288] + .long 0x6e291e31 // eor v17.16b, v17.16b, v9.16b + .long 0x4f395624 // shl v4.4s, v17.4s, #25 + .long 0x6f394624 // sri v4.4s, v17.4s, #7 .long 0x3dc043f0 // ldr q16, [sp, #256] .long 0x3dc00bf1 // ldr q17, [sp, #32] .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s @@ -411,24 +372,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s .long 0x6e281c84 // eor v4.16b, v4.16b, v8.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344492 // sri v18.4s, v4.4s, #12 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3dc01bf1 // ldr q17, [sp, #96] - .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s + .long 0x4f345491 // shl v17.4s, v4.4s, #20 + .long 0x6f344491 // sri v17.4s, v4.4s, #12 + .long 0x3dc01be4 // ldr q4, [sp, #96] .long 0x4ea48400 // add v0.4s, v0.4s, v4.4s + .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s .long 0x6e201e10 // eor v16.16b, v16.16b, v0.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s - .long 0x6e281c84 // eor v4.16b, v4.16b, v8.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394492 // sri v18.4s, v4.4s, #7 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3d8043f0 // str q16, [sp, #256] + .long 0x6f380604 // ushr v4.4s, v16.4s, #8 + .long 0x6f385604 // sli v4.4s, v16.4s, #24 + .long 0x4ea48508 // add v8.4s, v8.4s, v4.4s + .long 0x3d8043e4 // str q4, [sp, #256] + .long 0x6e281e31 // eor v17.16b, v17.16b, v8.16b + .long 0x4f395624 // shl v4.4s, v17.4s, #25 + .long 0x6f394624 // sri v4.4s, v17.4s, #7 .long 0x3dc047f0 // ldr q16, [sp, #272] .long 0x3dc00ff1 // ldr q17, [sp, #48] .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s @@ -437,24 +393,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s .long 0x6e291ca5 // eor v5.16b, v5.16b, v9.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444b2 // sri v18.4s, v5.4s, #12 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3dc02bf1 // ldr q17, [sp, #160] - .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s + .long 0x4f3454b1 // shl v17.4s, v5.4s, #20 + .long 0x6f3444b1 // sri v17.4s, v5.4s, #12 + .long 0x3dc02be5 // ldr q5, [sp, #160] .long 0x4ea58421 // add v1.4s, v1.4s, v5.4s + .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s .long 0x6e211e10 // eor v16.16b, v16.16b, v1.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s - .long 0x6e291ca5 // eor v5.16b, v5.16b, v9.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944b2 // sri v18.4s, v5.4s, #7 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3d8047f0 // str q16, [sp, #272] + .long 0x6f380605 // ushr v5.4s, v16.4s, #8 + .long 0x6f385605 // sli v5.4s, v16.4s, #24 + .long 0x4ea58529 // add v9.4s, v9.4s, v5.4s + .long 0x3d8047e5 // str q5, [sp, #272] + .long 0x6e291e31 // eor v17.16b, v17.16b, v9.16b + .long 0x4f395625 // shl v5.4s, v17.4s, #25 + .long 0x6f394625 // sri v5.4s, v17.4s, #7 .long 0x3dc04bf0 // ldr q16, [sp, #288] .long 0x3dc01ff1 // ldr q17, [sp, #112] .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s @@ -463,24 +414,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s .long 0x6e2a1cc6 // eor v6.16b, v6.16b, v10.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444d2 // sri v18.4s, v6.4s, #12 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3dc003f1 // ldr q17, [sp, #0] - .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s + .long 0x4f3454d1 // shl v17.4s, v6.4s, #20 + .long 0x6f3444d1 // sri v17.4s, v6.4s, #12 + .long 0x3dc003e6 // ldr q6, [sp, #0] .long 0x4ea68442 // add v2.4s, v2.4s, v6.4s + .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s .long 0x6e221e10 // eor v16.16b, v16.16b, v2.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s - .long 0x6e2a1cc6 // eor v6.16b, v6.16b, v10.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944d2 // sri v18.4s, v6.4s, #7 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3d804bf0 // str q16, [sp, #288] + .long 0x6f380606 // ushr v6.4s, v16.4s, #8 + .long 0x6f385606 // sli v6.4s, v16.4s, #24 + .long 0x4ea6854a // add v10.4s, v10.4s, v6.4s + .long 0x3d804be6 // str q6, [sp, #288] + .long 0x6e2a1e31 // eor v17.16b, v17.16b, v10.16b + .long 0x4f395626 // shl v6.4s, v17.4s, #25 + .long 0x6f394626 // sri v6.4s, v17.4s, #7 .long 0x3dc04ff0 // ldr q16, [sp, #304] .long 0x3dc013f1 // ldr q17, [sp, #64] .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s @@ -489,24 +435,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s .long 0x6e2b1ce7 // eor v7.16b, v7.16b, v11.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444f2 // sri v18.4s, v7.4s, #12 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3dc037f1 // ldr q17, [sp, #208] - .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s + .long 0x4f3454f1 // shl v17.4s, v7.4s, #20 + .long 0x6f3444f1 // sri v17.4s, v7.4s, #12 + .long 0x3dc037e7 // ldr q7, [sp, #208] .long 0x4ea78463 // add v3.4s, v3.4s, v7.4s + .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s .long 0x6e231e10 // eor v16.16b, v16.16b, v3.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s - .long 0x6e2b1ce7 // eor v7.16b, v7.16b, v11.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944f2 // sri v18.4s, v7.4s, #7 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3d804ff0 // str q16, [sp, #304] + .long 0x6f380607 // ushr v7.4s, v16.4s, #8 + .long 0x6f385607 // sli v7.4s, v16.4s, #24 + .long 0x4ea7856b // add v11.4s, v11.4s, v7.4s + .long 0x3d804fe7 // str q7, [sp, #304] + .long 0x6e2b1e31 // eor v17.16b, v17.16b, v11.16b + .long 0x4f395627 // shl v7.4s, v17.4s, #25 + .long 0x6f394627 // sri v7.4s, v17.4s, #7 .long 0x3dc04ff0 // ldr q16, [sp, #304] .long 0x3dc007f1 // ldr q17, [sp, #16] .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s @@ -515,24 +456,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s .long 0x6e2a1ca5 // eor v5.16b, v5.16b, v10.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444b2 // sri v18.4s, v5.4s, #12 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3dc02ff1 // ldr q17, [sp, #176] - .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s + .long 0x4f3454b1 // shl v17.4s, v5.4s, #20 + .long 0x6f3444b1 // sri v17.4s, v5.4s, #12 + .long 0x3dc02fe5 // ldr q5, [sp, #176] .long 0x4ea58400 // add v0.4s, v0.4s, v5.4s + .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s .long 0x6e201e10 // eor v16.16b, v16.16b, v0.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s - .long 0x6e2a1ca5 // eor v5.16b, v5.16b, v10.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944b2 // sri v18.4s, v5.4s, #7 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3d804ff0 // str q16, [sp, #304] + .long 0x6f380605 // ushr v5.4s, v16.4s, #8 + .long 0x6f385605 // sli v5.4s, v16.4s, #24 + .long 0x4ea5854a // add v10.4s, v10.4s, v5.4s + .long 0x3d804fe5 // str q5, [sp, #304] + .long 0x6e2a1e31 // eor v17.16b, v17.16b, v10.16b + .long 0x4f395625 // shl v5.4s, v17.4s, #25 + .long 0x6f394625 // sri v5.4s, v17.4s, #7 .long 0x3dc043f0 // ldr q16, [sp, #256] .long 0x3dc033f1 // ldr q17, [sp, #192] .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s @@ -541,24 +477,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s .long 0x6e2b1cc6 // eor v6.16b, v6.16b, v11.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444d2 // sri v18.4s, v6.4s, #12 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3dc017f1 // ldr q17, [sp, #80] - .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s + .long 0x4f3454d1 // shl v17.4s, v6.4s, #20 + .long 0x6f3444d1 // sri v17.4s, v6.4s, #12 + .long 0x3dc017e6 // ldr q6, [sp, #80] .long 0x4ea68421 // add v1.4s, v1.4s, v6.4s + .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s .long 0x6e211e10 // eor v16.16b, v16.16b, v1.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s - .long 0x6e2b1cc6 // eor v6.16b, v6.16b, v11.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944d2 // sri v18.4s, v6.4s, #7 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3d8043f0 // str q16, [sp, #256] + .long 0x6f380606 // ushr v6.4s, v16.4s, #8 + .long 0x6f385606 // sli v6.4s, v16.4s, #24 + .long 0x4ea6856b // add v11.4s, v11.4s, v6.4s + .long 0x3d8043e6 // str q6, [sp, #256] + .long 0x6e2b1e31 // eor v17.16b, v17.16b, v11.16b + .long 0x4f395626 // shl v6.4s, v17.4s, #25 + .long 0x6f394626 // sri v6.4s, v17.4s, #7 .long 0x3dc047f0 // ldr q16, [sp, #272] .long 0x3dc027f1 // ldr q17, [sp, #144] .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s @@ -567,24 +498,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s .long 0x6e281ce7 // eor v7.16b, v7.16b, v8.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444f2 // sri v18.4s, v7.4s, #12 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3dc03bf1 // ldr q17, [sp, #224] - .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s + .long 0x4f3454f1 // shl v17.4s, v7.4s, #20 + .long 0x6f3444f1 // sri v17.4s, v7.4s, #12 + .long 0x3dc03be7 // ldr q7, [sp, #224] .long 0x4ea78442 // add v2.4s, v2.4s, v7.4s + .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s .long 0x6e221e10 // eor v16.16b, v16.16b, v2.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s - .long 0x6e281ce7 // eor v7.16b, v7.16b, v8.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944f2 // sri v18.4s, v7.4s, #7 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3d8047f0 // str q16, [sp, #272] + .long 0x6f380607 // ushr v7.4s, v16.4s, #8 + .long 0x6f385607 // sli v7.4s, v16.4s, #24 + .long 0x4ea78508 // add v8.4s, v8.4s, v7.4s + .long 0x3d8047e7 // str q7, [sp, #272] + .long 0x6e281e31 // eor v17.16b, v17.16b, v8.16b + .long 0x4f395627 // shl v7.4s, v17.4s, #25 + .long 0x6f394627 // sri v7.4s, v17.4s, #7 .long 0x3dc04bf0 // ldr q16, [sp, #288] .long 0x3dc03ff1 // ldr q17, [sp, #240] .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s @@ -593,24 +519,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s .long 0x6e291c84 // eor v4.16b, v4.16b, v9.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344492 // sri v18.4s, v4.4s, #12 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3dc023f1 // ldr q17, [sp, #128] - .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s + .long 0x4f345491 // shl v17.4s, v4.4s, #20 + .long 0x6f344491 // sri v17.4s, v4.4s, #12 + .long 0x3dc023e4 // ldr q4, [sp, #128] .long 0x4ea48463 // add v3.4s, v3.4s, v4.4s + .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s .long 0x6e231e10 // eor v16.16b, v16.16b, v3.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s - .long 0x6e291c84 // eor v4.16b, v4.16b, v9.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394492 // sri v18.4s, v4.4s, #7 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3d804bf0 // str q16, [sp, #288] + .long 0x6f380604 // ushr v4.4s, v16.4s, #8 + .long 0x6f385604 // sli v4.4s, v16.4s, #24 + .long 0x4ea48529 // add v9.4s, v9.4s, v4.4s + .long 0x3d804be4 // str q4, [sp, #288] + .long 0x6e291e31 // eor v17.16b, v17.16b, v9.16b + .long 0x4f395624 // shl v4.4s, v17.4s, #25 + .long 0x6f394624 // sri v4.4s, v17.4s, #7 .long 0x3dc043f0 // ldr q16, [sp, #256] .long 0x3dc00ff1 // ldr q17, [sp, #48] .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s @@ -619,24 +540,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s .long 0x6e281c84 // eor v4.16b, v4.16b, v8.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344492 // sri v18.4s, v4.4s, #12 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3dc013f1 // ldr q17, [sp, #64] - .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s + .long 0x4f345491 // shl v17.4s, v4.4s, #20 + .long 0x6f344491 // sri v17.4s, v4.4s, #12 + .long 0x3dc013e4 // ldr q4, [sp, #64] .long 0x4ea48400 // add v0.4s, v0.4s, v4.4s + .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s .long 0x6e201e10 // eor v16.16b, v16.16b, v0.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s - .long 0x6e281c84 // eor v4.16b, v4.16b, v8.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394492 // sri v18.4s, v4.4s, #7 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3d8043f0 // str q16, [sp, #256] + .long 0x6f380604 // ushr v4.4s, v16.4s, #8 + .long 0x6f385604 // sli v4.4s, v16.4s, #24 + .long 0x4ea48508 // add v8.4s, v8.4s, v4.4s + .long 0x3d8043e4 // str q4, [sp, #256] + .long 0x6e281e31 // eor v17.16b, v17.16b, v8.16b + .long 0x4f395624 // shl v4.4s, v17.4s, #25 + .long 0x6f394624 // sri v4.4s, v17.4s, #7 .long 0x3dc047f0 // ldr q16, [sp, #272] .long 0x3dc02bf1 // ldr q17, [sp, #160] .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s @@ -645,24 +561,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s .long 0x6e291ca5 // eor v5.16b, v5.16b, v9.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444b2 // sri v18.4s, v5.4s, #12 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3dc033f1 // ldr q17, [sp, #192] - .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s + .long 0x4f3454b1 // shl v17.4s, v5.4s, #20 + .long 0x6f3444b1 // sri v17.4s, v5.4s, #12 + .long 0x3dc033e5 // ldr q5, [sp, #192] .long 0x4ea58421 // add v1.4s, v1.4s, v5.4s + .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s .long 0x6e211e10 // eor v16.16b, v16.16b, v1.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s - .long 0x6e291ca5 // eor v5.16b, v5.16b, v9.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944b2 // sri v18.4s, v5.4s, #7 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3d8047f0 // str q16, [sp, #272] + .long 0x6f380605 // ushr v5.4s, v16.4s, #8 + .long 0x6f385605 // sli v5.4s, v16.4s, #24 + .long 0x4ea58529 // add v9.4s, v9.4s, v5.4s + .long 0x3d8047e5 // str q5, [sp, #272] + .long 0x6e291e31 // eor v17.16b, v17.16b, v9.16b + .long 0x4f395625 // shl v5.4s, v17.4s, #25 + .long 0x6f394625 // sri v5.4s, v17.4s, #7 .long 0x3dc04bf0 // ldr q16, [sp, #288] .long 0x3dc037f1 // ldr q17, [sp, #208] .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s @@ -671,24 +582,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s .long 0x6e2a1cc6 // eor v6.16b, v6.16b, v10.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444d2 // sri v18.4s, v6.4s, #12 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3dc00bf1 // ldr q17, [sp, #32] - .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s + .long 0x4f3454d1 // shl v17.4s, v6.4s, #20 + .long 0x6f3444d1 // sri v17.4s, v6.4s, #12 + .long 0x3dc00be6 // ldr q6, [sp, #32] .long 0x4ea68442 // add v2.4s, v2.4s, v6.4s + .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s .long 0x6e221e10 // eor v16.16b, v16.16b, v2.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s - .long 0x6e2a1cc6 // eor v6.16b, v6.16b, v10.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944d2 // sri v18.4s, v6.4s, #7 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3d804bf0 // str q16, [sp, #288] + .long 0x6f380606 // ushr v6.4s, v16.4s, #8 + .long 0x6f385606 // sli v6.4s, v16.4s, #24 + .long 0x4ea6854a // add v10.4s, v10.4s, v6.4s + .long 0x3d804be6 // str q6, [sp, #288] + .long 0x6e2a1e31 // eor v17.16b, v17.16b, v10.16b + .long 0x4f395626 // shl v6.4s, v17.4s, #25 + .long 0x6f394626 // sri v6.4s, v17.4s, #7 .long 0x3dc04ff0 // ldr q16, [sp, #304] .long 0x3dc01ff1 // ldr q17, [sp, #112] .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s @@ -697,24 +603,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s .long 0x6e2b1ce7 // eor v7.16b, v7.16b, v11.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444f2 // sri v18.4s, v7.4s, #12 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3dc03bf1 // ldr q17, [sp, #224] - .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s + .long 0x4f3454f1 // shl v17.4s, v7.4s, #20 + .long 0x6f3444f1 // sri v17.4s, v7.4s, #12 + .long 0x3dc03be7 // ldr q7, [sp, #224] .long 0x4ea78463 // add v3.4s, v3.4s, v7.4s + .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s .long 0x6e231e10 // eor v16.16b, v16.16b, v3.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s - .long 0x6e2b1ce7 // eor v7.16b, v7.16b, v11.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944f2 // sri v18.4s, v7.4s, #7 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3d804ff0 // str q16, [sp, #304] + .long 0x6f380607 // ushr v7.4s, v16.4s, #8 + .long 0x6f385607 // sli v7.4s, v16.4s, #24 + .long 0x4ea7856b // add v11.4s, v11.4s, v7.4s + .long 0x3d804fe7 // str q7, [sp, #304] + .long 0x6e2b1e31 // eor v17.16b, v17.16b, v11.16b + .long 0x4f395627 // shl v7.4s, v17.4s, #25 + .long 0x6f394627 // sri v7.4s, v17.4s, #7 .long 0x3dc04ff0 // ldr q16, [sp, #304] .long 0x3dc01bf1 // ldr q17, [sp, #96] .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s @@ -723,24 +624,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s .long 0x6e2a1ca5 // eor v5.16b, v5.16b, v10.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444b2 // sri v18.4s, v5.4s, #12 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3dc017f1 // ldr q17, [sp, #80] - .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s + .long 0x4f3454b1 // shl v17.4s, v5.4s, #20 + .long 0x6f3444b1 // sri v17.4s, v5.4s, #12 + .long 0x3dc017e5 // ldr q5, [sp, #80] .long 0x4ea58400 // add v0.4s, v0.4s, v5.4s + .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s .long 0x6e201e10 // eor v16.16b, v16.16b, v0.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s - .long 0x6e2a1ca5 // eor v5.16b, v5.16b, v10.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944b2 // sri v18.4s, v5.4s, #7 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3d804ff0 // str q16, [sp, #304] + .long 0x6f380605 // ushr v5.4s, v16.4s, #8 + .long 0x6f385605 // sli v5.4s, v16.4s, #24 + .long 0x4ea5854a // add v10.4s, v10.4s, v5.4s + .long 0x3d804fe5 // str q5, [sp, #304] + .long 0x6e2a1e31 // eor v17.16b, v17.16b, v10.16b + .long 0x4f395625 // shl v5.4s, v17.4s, #25 + .long 0x6f394625 // sri v5.4s, v17.4s, #7 .long 0x3dc043f0 // ldr q16, [sp, #256] .long 0x3dc027f1 // ldr q17, [sp, #144] .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s @@ -749,24 +645,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s .long 0x6e2b1cc6 // eor v6.16b, v6.16b, v11.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444d2 // sri v18.4s, v6.4s, #12 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3dc003f1 // ldr q17, [sp, #0] - .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s + .long 0x4f3454d1 // shl v17.4s, v6.4s, #20 + .long 0x6f3444d1 // sri v17.4s, v6.4s, #12 + .long 0x3dc003e6 // ldr q6, [sp, #0] .long 0x4ea68421 // add v1.4s, v1.4s, v6.4s + .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s .long 0x6e211e10 // eor v16.16b, v16.16b, v1.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s - .long 0x6e2b1cc6 // eor v6.16b, v6.16b, v11.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944d2 // sri v18.4s, v6.4s, #7 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3d8043f0 // str q16, [sp, #256] + .long 0x6f380606 // ushr v6.4s, v16.4s, #8 + .long 0x6f385606 // sli v6.4s, v16.4s, #24 + .long 0x4ea6856b // add v11.4s, v11.4s, v6.4s + .long 0x3d8043e6 // str q6, [sp, #256] + .long 0x6e2b1e31 // eor v17.16b, v17.16b, v11.16b + .long 0x4f395626 // shl v6.4s, v17.4s, #25 + .long 0x6f394626 // sri v6.4s, v17.4s, #7 .long 0x3dc047f0 // ldr q16, [sp, #272] .long 0x3dc02ff1 // ldr q17, [sp, #176] .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s @@ -775,24 +666,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s .long 0x6e281ce7 // eor v7.16b, v7.16b, v8.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444f2 // sri v18.4s, v7.4s, #12 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3dc03ff1 // ldr q17, [sp, #240] - .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s + .long 0x4f3454f1 // shl v17.4s, v7.4s, #20 + .long 0x6f3444f1 // sri v17.4s, v7.4s, #12 + .long 0x3dc03fe7 // ldr q7, [sp, #240] .long 0x4ea78442 // add v2.4s, v2.4s, v7.4s + .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s .long 0x6e221e10 // eor v16.16b, v16.16b, v2.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s - .long 0x6e281ce7 // eor v7.16b, v7.16b, v8.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944f2 // sri v18.4s, v7.4s, #7 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3d8047f0 // str q16, [sp, #272] + .long 0x6f380607 // ushr v7.4s, v16.4s, #8 + .long 0x6f385607 // sli v7.4s, v16.4s, #24 + .long 0x4ea78508 // add v8.4s, v8.4s, v7.4s + .long 0x3d8047e7 // str q7, [sp, #272] + .long 0x6e281e31 // eor v17.16b, v17.16b, v8.16b + .long 0x4f395627 // shl v7.4s, v17.4s, #25 + .long 0x6f394627 // sri v7.4s, v17.4s, #7 .long 0x3dc04bf0 // ldr q16, [sp, #288] .long 0x3dc023f1 // ldr q17, [sp, #128] .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s @@ -801,24 +687,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s .long 0x6e291c84 // eor v4.16b, v4.16b, v9.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344492 // sri v18.4s, v4.4s, #12 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3dc007f1 // ldr q17, [sp, #16] - .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s + .long 0x4f345491 // shl v17.4s, v4.4s, #20 + .long 0x6f344491 // sri v17.4s, v4.4s, #12 + .long 0x3dc007e4 // ldr q4, [sp, #16] .long 0x4ea48463 // add v3.4s, v3.4s, v4.4s + .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s .long 0x6e231e10 // eor v16.16b, v16.16b, v3.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s - .long 0x6e291c84 // eor v4.16b, v4.16b, v9.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394492 // sri v18.4s, v4.4s, #7 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3d804bf0 // str q16, [sp, #288] + .long 0x6f380604 // ushr v4.4s, v16.4s, #8 + .long 0x6f385604 // sli v4.4s, v16.4s, #24 + .long 0x4ea48529 // add v9.4s, v9.4s, v4.4s + .long 0x3d804be4 // str q4, [sp, #288] + .long 0x6e291e31 // eor v17.16b, v17.16b, v9.16b + .long 0x4f395624 // shl v4.4s, v17.4s, #25 + .long 0x6f394624 // sri v4.4s, v17.4s, #7 .long 0x3dc043f0 // ldr q16, [sp, #256] .long 0x3dc02bf1 // ldr q17, [sp, #160] .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s @@ -827,24 +708,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s .long 0x6e281c84 // eor v4.16b, v4.16b, v8.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344492 // sri v18.4s, v4.4s, #12 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3dc01ff1 // ldr q17, [sp, #112] - .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s + .long 0x4f345491 // shl v17.4s, v4.4s, #20 + .long 0x6f344491 // sri v17.4s, v4.4s, #12 + .long 0x3dc01fe4 // ldr q4, [sp, #112] .long 0x4ea48400 // add v0.4s, v0.4s, v4.4s + .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s .long 0x6e201e10 // eor v16.16b, v16.16b, v0.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s - .long 0x6e281c84 // eor v4.16b, v4.16b, v8.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394492 // sri v18.4s, v4.4s, #7 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3d8043f0 // str q16, [sp, #256] + .long 0x6f380604 // ushr v4.4s, v16.4s, #8 + .long 0x6f385604 // sli v4.4s, v16.4s, #24 + .long 0x4ea48508 // add v8.4s, v8.4s, v4.4s + .long 0x3d8043e4 // str q4, [sp, #256] + .long 0x6e281e31 // eor v17.16b, v17.16b, v8.16b + .long 0x4f395624 // shl v4.4s, v17.4s, #25 + .long 0x6f394624 // sri v4.4s, v17.4s, #7 .long 0x3dc047f0 // ldr q16, [sp, #272] .long 0x3dc033f1 // ldr q17, [sp, #192] .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s @@ -853,24 +729,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s .long 0x6e291ca5 // eor v5.16b, v5.16b, v9.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444b2 // sri v18.4s, v5.4s, #12 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3dc027f1 // ldr q17, [sp, #144] - .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s + .long 0x4f3454b1 // shl v17.4s, v5.4s, #20 + .long 0x6f3444b1 // sri v17.4s, v5.4s, #12 + .long 0x3dc027e5 // ldr q5, [sp, #144] .long 0x4ea58421 // add v1.4s, v1.4s, v5.4s + .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s .long 0x6e211e10 // eor v16.16b, v16.16b, v1.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s - .long 0x6e291ca5 // eor v5.16b, v5.16b, v9.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944b2 // sri v18.4s, v5.4s, #7 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3d8047f0 // str q16, [sp, #272] + .long 0x6f380605 // ushr v5.4s, v16.4s, #8 + .long 0x6f385605 // sli v5.4s, v16.4s, #24 + .long 0x4ea58529 // add v9.4s, v9.4s, v5.4s + .long 0x3d8047e5 // str q5, [sp, #272] + .long 0x6e291e31 // eor v17.16b, v17.16b, v9.16b + .long 0x4f395625 // shl v5.4s, v17.4s, #25 + .long 0x6f394625 // sri v5.4s, v17.4s, #7 .long 0x3dc04bf0 // ldr q16, [sp, #288] .long 0x3dc03bf1 // ldr q17, [sp, #224] .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s @@ -879,24 +750,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s .long 0x6e2a1cc6 // eor v6.16b, v6.16b, v10.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444d2 // sri v18.4s, v6.4s, #12 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3dc00ff1 // ldr q17, [sp, #48] - .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s + .long 0x4f3454d1 // shl v17.4s, v6.4s, #20 + .long 0x6f3444d1 // sri v17.4s, v6.4s, #12 + .long 0x3dc00fe6 // ldr q6, [sp, #48] .long 0x4ea68442 // add v2.4s, v2.4s, v6.4s + .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s .long 0x6e221e10 // eor v16.16b, v16.16b, v2.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s - .long 0x6e2a1cc6 // eor v6.16b, v6.16b, v10.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944d2 // sri v18.4s, v6.4s, #7 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3d804bf0 // str q16, [sp, #288] + .long 0x6f380606 // ushr v6.4s, v16.4s, #8 + .long 0x6f385606 // sli v6.4s, v16.4s, #24 + .long 0x4ea6854a // add v10.4s, v10.4s, v6.4s + .long 0x3d804be6 // str q6, [sp, #288] + .long 0x6e2a1e31 // eor v17.16b, v17.16b, v10.16b + .long 0x4f395626 // shl v6.4s, v17.4s, #25 + .long 0x6f394626 // sri v6.4s, v17.4s, #7 .long 0x3dc04ff0 // ldr q16, [sp, #304] .long 0x3dc037f1 // ldr q17, [sp, #208] .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s @@ -905,24 +771,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s .long 0x6e2b1ce7 // eor v7.16b, v7.16b, v11.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444f2 // sri v18.4s, v7.4s, #12 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3dc03ff1 // ldr q17, [sp, #240] - .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s + .long 0x4f3454f1 // shl v17.4s, v7.4s, #20 + .long 0x6f3444f1 // sri v17.4s, v7.4s, #12 + .long 0x3dc03fe7 // ldr q7, [sp, #240] .long 0x4ea78463 // add v3.4s, v3.4s, v7.4s + .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s .long 0x6e231e10 // eor v16.16b, v16.16b, v3.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s - .long 0x6e2b1ce7 // eor v7.16b, v7.16b, v11.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944f2 // sri v18.4s, v7.4s, #7 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3d804ff0 // str q16, [sp, #304] + .long 0x6f380607 // ushr v7.4s, v16.4s, #8 + .long 0x6f385607 // sli v7.4s, v16.4s, #24 + .long 0x4ea7856b // add v11.4s, v11.4s, v7.4s + .long 0x3d804fe7 // str q7, [sp, #304] + .long 0x6e2b1e31 // eor v17.16b, v17.16b, v11.16b + .long 0x4f395627 // shl v7.4s, v17.4s, #25 + .long 0x6f394627 // sri v7.4s, v17.4s, #7 .long 0x3dc04ff0 // ldr q16, [sp, #304] .long 0x3dc013f1 // ldr q17, [sp, #64] .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s @@ -931,24 +792,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s .long 0x6e2a1ca5 // eor v5.16b, v5.16b, v10.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444b2 // sri v18.4s, v5.4s, #12 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3dc003f1 // ldr q17, [sp, #0] - .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s + .long 0x4f3454b1 // shl v17.4s, v5.4s, #20 + .long 0x6f3444b1 // sri v17.4s, v5.4s, #12 + .long 0x3dc003e5 // ldr q5, [sp, #0] .long 0x4ea58400 // add v0.4s, v0.4s, v5.4s + .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s .long 0x6e201e10 // eor v16.16b, v16.16b, v0.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s - .long 0x6e2a1ca5 // eor v5.16b, v5.16b, v10.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944b2 // sri v18.4s, v5.4s, #7 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3d804ff0 // str q16, [sp, #304] + .long 0x6f380605 // ushr v5.4s, v16.4s, #8 + .long 0x6f385605 // sli v5.4s, v16.4s, #24 + .long 0x4ea5854a // add v10.4s, v10.4s, v5.4s + .long 0x3d804fe5 // str q5, [sp, #304] + .long 0x6e2a1e31 // eor v17.16b, v17.16b, v10.16b + .long 0x4f395625 // shl v5.4s, v17.4s, #25 + .long 0x6f394625 // sri v5.4s, v17.4s, #7 .long 0x3dc043f0 // ldr q16, [sp, #256] .long 0x3dc02ff1 // ldr q17, [sp, #176] .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s @@ -957,24 +813,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s .long 0x6e2b1cc6 // eor v6.16b, v6.16b, v11.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444d2 // sri v18.4s, v6.4s, #12 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3dc00bf1 // ldr q17, [sp, #32] - .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s + .long 0x4f3454d1 // shl v17.4s, v6.4s, #20 + .long 0x6f3444d1 // sri v17.4s, v6.4s, #12 + .long 0x3dc00be6 // ldr q6, [sp, #32] .long 0x4ea68421 // add v1.4s, v1.4s, v6.4s + .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s .long 0x6e211e10 // eor v16.16b, v16.16b, v1.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s - .long 0x6e2b1cc6 // eor v6.16b, v6.16b, v11.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944d2 // sri v18.4s, v6.4s, #7 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3d8043f0 // str q16, [sp, #256] + .long 0x6f380606 // ushr v6.4s, v16.4s, #8 + .long 0x6f385606 // sli v6.4s, v16.4s, #24 + .long 0x4ea6856b // add v11.4s, v11.4s, v6.4s + .long 0x3d8043e6 // str q6, [sp, #256] + .long 0x6e2b1e31 // eor v17.16b, v17.16b, v11.16b + .long 0x4f395626 // shl v6.4s, v17.4s, #25 + .long 0x6f394626 // sri v6.4s, v17.4s, #7 .long 0x3dc047f0 // ldr q16, [sp, #272] .long 0x3dc017f1 // ldr q17, [sp, #80] .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s @@ -983,24 +834,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s .long 0x6e281ce7 // eor v7.16b, v7.16b, v8.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444f2 // sri v18.4s, v7.4s, #12 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3dc023f1 // ldr q17, [sp, #128] - .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s + .long 0x4f3454f1 // shl v17.4s, v7.4s, #20 + .long 0x6f3444f1 // sri v17.4s, v7.4s, #12 + .long 0x3dc023e7 // ldr q7, [sp, #128] .long 0x4ea78442 // add v2.4s, v2.4s, v7.4s + .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s .long 0x6e221e10 // eor v16.16b, v16.16b, v2.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s - .long 0x6e281ce7 // eor v7.16b, v7.16b, v8.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944f2 // sri v18.4s, v7.4s, #7 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3d8047f0 // str q16, [sp, #272] + .long 0x6f380607 // ushr v7.4s, v16.4s, #8 + .long 0x6f385607 // sli v7.4s, v16.4s, #24 + .long 0x4ea78508 // add v8.4s, v8.4s, v7.4s + .long 0x3d8047e7 // str q7, [sp, #272] + .long 0x6e281e31 // eor v17.16b, v17.16b, v8.16b + .long 0x4f395627 // shl v7.4s, v17.4s, #25 + .long 0x6f394627 // sri v7.4s, v17.4s, #7 .long 0x3dc04bf0 // ldr q16, [sp, #288] .long 0x3dc007f1 // ldr q17, [sp, #16] .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s @@ -1009,24 +855,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s .long 0x6e291c84 // eor v4.16b, v4.16b, v9.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344492 // sri v18.4s, v4.4s, #12 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3dc01bf1 // ldr q17, [sp, #96] - .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s + .long 0x4f345491 // shl v17.4s, v4.4s, #20 + .long 0x6f344491 // sri v17.4s, v4.4s, #12 + .long 0x3dc01be4 // ldr q4, [sp, #96] .long 0x4ea48463 // add v3.4s, v3.4s, v4.4s + .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s .long 0x6e231e10 // eor v16.16b, v16.16b, v3.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s - .long 0x6e291c84 // eor v4.16b, v4.16b, v9.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394492 // sri v18.4s, v4.4s, #7 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3d804bf0 // str q16, [sp, #288] + .long 0x6f380604 // ushr v4.4s, v16.4s, #8 + .long 0x6f385604 // sli v4.4s, v16.4s, #24 + .long 0x4ea48529 // add v9.4s, v9.4s, v4.4s + .long 0x3d804be4 // str q4, [sp, #288] + .long 0x6e291e31 // eor v17.16b, v17.16b, v9.16b + .long 0x4f395624 // shl v4.4s, v17.4s, #25 + .long 0x6f394624 // sri v4.4s, v17.4s, #7 .long 0x3dc043f0 // ldr q16, [sp, #256] .long 0x3dc033f1 // ldr q17, [sp, #192] .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s @@ -1035,24 +876,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s .long 0x6e281c84 // eor v4.16b, v4.16b, v8.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344492 // sri v18.4s, v4.4s, #12 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3dc037f1 // ldr q17, [sp, #208] - .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s + .long 0x4f345491 // shl v17.4s, v4.4s, #20 + .long 0x6f344491 // sri v17.4s, v4.4s, #12 + .long 0x3dc037e4 // ldr q4, [sp, #208] .long 0x4ea48400 // add v0.4s, v0.4s, v4.4s + .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s .long 0x6e201e10 // eor v16.16b, v16.16b, v0.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s - .long 0x6e281c84 // eor v4.16b, v4.16b, v8.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394492 // sri v18.4s, v4.4s, #7 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3d8043f0 // str q16, [sp, #256] + .long 0x6f380604 // ushr v4.4s, v16.4s, #8 + .long 0x6f385604 // sli v4.4s, v16.4s, #24 + .long 0x4ea48508 // add v8.4s, v8.4s, v4.4s + .long 0x3d8043e4 // str q4, [sp, #256] + .long 0x6e281e31 // eor v17.16b, v17.16b, v8.16b + .long 0x4f395624 // shl v4.4s, v17.4s, #25 + .long 0x6f394624 // sri v4.4s, v17.4s, #7 .long 0x3dc047f0 // ldr q16, [sp, #272] .long 0x3dc027f1 // ldr q17, [sp, #144] .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s @@ -1061,24 +897,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s .long 0x6e291ca5 // eor v5.16b, v5.16b, v9.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444b2 // sri v18.4s, v5.4s, #12 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3dc02ff1 // ldr q17, [sp, #176] - .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s + .long 0x4f3454b1 // shl v17.4s, v5.4s, #20 + .long 0x6f3444b1 // sri v17.4s, v5.4s, #12 + .long 0x3dc02fe5 // ldr q5, [sp, #176] .long 0x4ea58421 // add v1.4s, v1.4s, v5.4s + .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s .long 0x6e211e10 // eor v16.16b, v16.16b, v1.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s - .long 0x6e291ca5 // eor v5.16b, v5.16b, v9.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944b2 // sri v18.4s, v5.4s, #7 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3d8047f0 // str q16, [sp, #272] + .long 0x6f380605 // ushr v5.4s, v16.4s, #8 + .long 0x6f385605 // sli v5.4s, v16.4s, #24 + .long 0x4ea58529 // add v9.4s, v9.4s, v5.4s + .long 0x3d8047e5 // str q5, [sp, #272] + .long 0x6e291e31 // eor v17.16b, v17.16b, v9.16b + .long 0x4f395625 // shl v5.4s, v17.4s, #25 + .long 0x6f394625 // sri v5.4s, v17.4s, #7 .long 0x3dc04bf0 // ldr q16, [sp, #288] .long 0x3dc03ff1 // ldr q17, [sp, #240] .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s @@ -1087,24 +918,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s .long 0x6e2a1cc6 // eor v6.16b, v6.16b, v10.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444d2 // sri v18.4s, v6.4s, #12 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3dc02bf1 // ldr q17, [sp, #160] - .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s + .long 0x4f3454d1 // shl v17.4s, v6.4s, #20 + .long 0x6f3444d1 // sri v17.4s, v6.4s, #12 + .long 0x3dc02be6 // ldr q6, [sp, #160] .long 0x4ea68442 // add v2.4s, v2.4s, v6.4s + .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s .long 0x6e221e10 // eor v16.16b, v16.16b, v2.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s - .long 0x6e2a1cc6 // eor v6.16b, v6.16b, v10.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944d2 // sri v18.4s, v6.4s, #7 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3d804bf0 // str q16, [sp, #288] + .long 0x6f380606 // ushr v6.4s, v16.4s, #8 + .long 0x6f385606 // sli v6.4s, v16.4s, #24 + .long 0x4ea6854a // add v10.4s, v10.4s, v6.4s + .long 0x3d804be6 // str q6, [sp, #288] + .long 0x6e2a1e31 // eor v17.16b, v17.16b, v10.16b + .long 0x4f395626 // shl v6.4s, v17.4s, #25 + .long 0x6f394626 // sri v6.4s, v17.4s, #7 .long 0x3dc04ff0 // ldr q16, [sp, #304] .long 0x3dc03bf1 // ldr q17, [sp, #224] .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s @@ -1113,24 +939,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s .long 0x6e2b1ce7 // eor v7.16b, v7.16b, v11.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444f2 // sri v18.4s, v7.4s, #12 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3dc023f1 // ldr q17, [sp, #128] - .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s + .long 0x4f3454f1 // shl v17.4s, v7.4s, #20 + .long 0x6f3444f1 // sri v17.4s, v7.4s, #12 + .long 0x3dc023e7 // ldr q7, [sp, #128] .long 0x4ea78463 // add v3.4s, v3.4s, v7.4s + .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s .long 0x6e231e10 // eor v16.16b, v16.16b, v3.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s - .long 0x6e2b1ce7 // eor v7.16b, v7.16b, v11.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944f2 // sri v18.4s, v7.4s, #7 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3d804ff0 // str q16, [sp, #304] + .long 0x6f380607 // ushr v7.4s, v16.4s, #8 + .long 0x6f385607 // sli v7.4s, v16.4s, #24 + .long 0x4ea7856b // add v11.4s, v11.4s, v7.4s + .long 0x3d804fe7 // str q7, [sp, #304] + .long 0x6e2b1e31 // eor v17.16b, v17.16b, v11.16b + .long 0x4f395627 // shl v7.4s, v17.4s, #25 + .long 0x6f394627 // sri v7.4s, v17.4s, #7 .long 0x3dc04ff0 // ldr q16, [sp, #304] .long 0x3dc01ff1 // ldr q17, [sp, #112] .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s @@ -1139,24 +960,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s .long 0x6e2a1ca5 // eor v5.16b, v5.16b, v10.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444b2 // sri v18.4s, v5.4s, #12 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3dc00bf1 // ldr q17, [sp, #32] - .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s + .long 0x4f3454b1 // shl v17.4s, v5.4s, #20 + .long 0x6f3444b1 // sri v17.4s, v5.4s, #12 + .long 0x3dc00be5 // ldr q5, [sp, #32] .long 0x4ea58400 // add v0.4s, v0.4s, v5.4s + .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s .long 0x6e201e10 // eor v16.16b, v16.16b, v0.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s - .long 0x6e2a1ca5 // eor v5.16b, v5.16b, v10.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944b2 // sri v18.4s, v5.4s, #7 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3d804ff0 // str q16, [sp, #304] + .long 0x6f380605 // ushr v5.4s, v16.4s, #8 + .long 0x6f385605 // sli v5.4s, v16.4s, #24 + .long 0x4ea5854a // add v10.4s, v10.4s, v5.4s + .long 0x3d804fe5 // str q5, [sp, #304] + .long 0x6e2a1e31 // eor v17.16b, v17.16b, v10.16b + .long 0x4f395625 // shl v5.4s, v17.4s, #25 + .long 0x6f394625 // sri v5.4s, v17.4s, #7 .long 0x3dc043f0 // ldr q16, [sp, #256] .long 0x3dc017f1 // ldr q17, [sp, #80] .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s @@ -1165,24 +981,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s .long 0x6e2b1cc6 // eor v6.16b, v6.16b, v11.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444d2 // sri v18.4s, v6.4s, #12 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3dc00ff1 // ldr q17, [sp, #48] - .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s + .long 0x4f3454d1 // shl v17.4s, v6.4s, #20 + .long 0x6f3444d1 // sri v17.4s, v6.4s, #12 + .long 0x3dc00fe6 // ldr q6, [sp, #48] .long 0x4ea68421 // add v1.4s, v1.4s, v6.4s + .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s .long 0x6e211e10 // eor v16.16b, v16.16b, v1.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s - .long 0x6e2b1cc6 // eor v6.16b, v6.16b, v11.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944d2 // sri v18.4s, v6.4s, #7 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3d8043f0 // str q16, [sp, #256] + .long 0x6f380606 // ushr v6.4s, v16.4s, #8 + .long 0x6f385606 // sli v6.4s, v16.4s, #24 + .long 0x4ea6856b // add v11.4s, v11.4s, v6.4s + .long 0x3d8043e6 // str q6, [sp, #256] + .long 0x6e2b1e31 // eor v17.16b, v17.16b, v11.16b + .long 0x4f395626 // shl v6.4s, v17.4s, #25 + .long 0x6f394626 // sri v6.4s, v17.4s, #7 .long 0x3dc047f0 // ldr q16, [sp, #272] .long 0x3dc003f1 // ldr q17, [sp, #0] .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s @@ -1191,24 +1002,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s .long 0x6e281ce7 // eor v7.16b, v7.16b, v8.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444f2 // sri v18.4s, v7.4s, #12 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3dc007f1 // ldr q17, [sp, #16] - .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s + .long 0x4f3454f1 // shl v17.4s, v7.4s, #20 + .long 0x6f3444f1 // sri v17.4s, v7.4s, #12 + .long 0x3dc007e7 // ldr q7, [sp, #16] .long 0x4ea78442 // add v2.4s, v2.4s, v7.4s + .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s .long 0x6e221e10 // eor v16.16b, v16.16b, v2.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s - .long 0x6e281ce7 // eor v7.16b, v7.16b, v8.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944f2 // sri v18.4s, v7.4s, #7 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3d8047f0 // str q16, [sp, #272] + .long 0x6f380607 // ushr v7.4s, v16.4s, #8 + .long 0x6f385607 // sli v7.4s, v16.4s, #24 + .long 0x4ea78508 // add v8.4s, v8.4s, v7.4s + .long 0x3d8047e7 // str q7, [sp, #272] + .long 0x6e281e31 // eor v17.16b, v17.16b, v8.16b + .long 0x4f395627 // shl v7.4s, v17.4s, #25 + .long 0x6f394627 // sri v7.4s, v17.4s, #7 .long 0x3dc04bf0 // ldr q16, [sp, #288] .long 0x3dc01bf1 // ldr q17, [sp, #96] .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s @@ -1217,24 +1023,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s .long 0x6e291c84 // eor v4.16b, v4.16b, v9.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344492 // sri v18.4s, v4.4s, #12 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3dc013f1 // ldr q17, [sp, #64] - .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s + .long 0x4f345491 // shl v17.4s, v4.4s, #20 + .long 0x6f344491 // sri v17.4s, v4.4s, #12 + .long 0x3dc013e4 // ldr q4, [sp, #64] .long 0x4ea48463 // add v3.4s, v3.4s, v4.4s + .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s .long 0x6e231e10 // eor v16.16b, v16.16b, v3.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s - .long 0x6e291c84 // eor v4.16b, v4.16b, v9.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394492 // sri v18.4s, v4.4s, #7 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3d804bf0 // str q16, [sp, #288] + .long 0x6f380604 // ushr v4.4s, v16.4s, #8 + .long 0x6f385604 // sli v4.4s, v16.4s, #24 + .long 0x4ea48529 // add v9.4s, v9.4s, v4.4s + .long 0x3d804be4 // str q4, [sp, #288] + .long 0x6e291e31 // eor v17.16b, v17.16b, v9.16b + .long 0x4f395624 // shl v4.4s, v17.4s, #25 + .long 0x6f394624 // sri v4.4s, v17.4s, #7 .long 0x3dc043f0 // ldr q16, [sp, #256] .long 0x3dc027f1 // ldr q17, [sp, #144] .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s @@ -1243,24 +1044,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s .long 0x6e281c84 // eor v4.16b, v4.16b, v8.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344492 // sri v18.4s, v4.4s, #12 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3dc03bf1 // ldr q17, [sp, #224] - .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s + .long 0x4f345491 // shl v17.4s, v4.4s, #20 + .long 0x6f344491 // sri v17.4s, v4.4s, #12 + .long 0x3dc03be4 // ldr q4, [sp, #224] .long 0x4ea48400 // add v0.4s, v0.4s, v4.4s + .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s .long 0x6e201e10 // eor v16.16b, v16.16b, v0.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s - .long 0x6e281c84 // eor v4.16b, v4.16b, v8.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394492 // sri v18.4s, v4.4s, #7 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3d8043f0 // str q16, [sp, #256] + .long 0x6f380604 // ushr v4.4s, v16.4s, #8 + .long 0x6f385604 // sli v4.4s, v16.4s, #24 + .long 0x4ea48508 // add v8.4s, v8.4s, v4.4s + .long 0x3d8043e4 // str q4, [sp, #256] + .long 0x6e281e31 // eor v17.16b, v17.16b, v8.16b + .long 0x4f395624 // shl v4.4s, v17.4s, #25 + .long 0x6f394624 // sri v4.4s, v17.4s, #7 .long 0x3dc047f0 // ldr q16, [sp, #272] .long 0x3dc02ff1 // ldr q17, [sp, #176] .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s @@ -1269,24 +1065,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s .long 0x6e291ca5 // eor v5.16b, v5.16b, v9.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444b2 // sri v18.4s, v5.4s, #12 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3dc017f1 // ldr q17, [sp, #80] - .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s + .long 0x4f3454b1 // shl v17.4s, v5.4s, #20 + .long 0x6f3444b1 // sri v17.4s, v5.4s, #12 + .long 0x3dc017e5 // ldr q5, [sp, #80] .long 0x4ea58421 // add v1.4s, v1.4s, v5.4s + .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s .long 0x6e211e10 // eor v16.16b, v16.16b, v1.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s - .long 0x6e291ca5 // eor v5.16b, v5.16b, v9.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944b2 // sri v18.4s, v5.4s, #7 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3d8047f0 // str q16, [sp, #272] + .long 0x6f380605 // ushr v5.4s, v16.4s, #8 + .long 0x6f385605 // sli v5.4s, v16.4s, #24 + .long 0x4ea58529 // add v9.4s, v9.4s, v5.4s + .long 0x3d8047e5 // str q5, [sp, #272] + .long 0x6e291e31 // eor v17.16b, v17.16b, v9.16b + .long 0x4f395625 // shl v5.4s, v17.4s, #25 + .long 0x6f394625 // sri v5.4s, v17.4s, #7 .long 0x3dc04bf0 // ldr q16, [sp, #288] .long 0x3dc023f1 // ldr q17, [sp, #128] .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s @@ -1295,24 +1086,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s .long 0x6e2a1cc6 // eor v6.16b, v6.16b, v10.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444d2 // sri v18.4s, v6.4s, #12 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3dc033f1 // ldr q17, [sp, #192] - .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s + .long 0x4f3454d1 // shl v17.4s, v6.4s, #20 + .long 0x6f3444d1 // sri v17.4s, v6.4s, #12 + .long 0x3dc033e6 // ldr q6, [sp, #192] .long 0x4ea68442 // add v2.4s, v2.4s, v6.4s + .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s .long 0x6e221e10 // eor v16.16b, v16.16b, v2.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s - .long 0x6e2a1cc6 // eor v6.16b, v6.16b, v10.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944d2 // sri v18.4s, v6.4s, #7 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3d804bf0 // str q16, [sp, #288] + .long 0x6f380606 // ushr v6.4s, v16.4s, #8 + .long 0x6f385606 // sli v6.4s, v16.4s, #24 + .long 0x4ea6854a // add v10.4s, v10.4s, v6.4s + .long 0x3d804be6 // str q6, [sp, #288] + .long 0x6e2a1e31 // eor v17.16b, v17.16b, v10.16b + .long 0x4f395626 // shl v6.4s, v17.4s, #25 + .long 0x6f394626 // sri v6.4s, v17.4s, #7 .long 0x3dc04ff0 // ldr q16, [sp, #304] .long 0x3dc03ff1 // ldr q17, [sp, #240] .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s @@ -1321,24 +1107,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s .long 0x6e2b1ce7 // eor v7.16b, v7.16b, v11.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444f2 // sri v18.4s, v7.4s, #12 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3dc007f1 // ldr q17, [sp, #16] - .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s + .long 0x4f3454f1 // shl v17.4s, v7.4s, #20 + .long 0x6f3444f1 // sri v17.4s, v7.4s, #12 + .long 0x3dc007e7 // ldr q7, [sp, #16] .long 0x4ea78463 // add v3.4s, v3.4s, v7.4s + .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s .long 0x6e231e10 // eor v16.16b, v16.16b, v3.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s - .long 0x6e2b1ce7 // eor v7.16b, v7.16b, v11.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944f2 // sri v18.4s, v7.4s, #7 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3d804ff0 // str q16, [sp, #304] + .long 0x6f380607 // ushr v7.4s, v16.4s, #8 + .long 0x6f385607 // sli v7.4s, v16.4s, #24 + .long 0x4ea7856b // add v11.4s, v11.4s, v7.4s + .long 0x3d804fe7 // str q7, [sp, #304] + .long 0x6e2b1e31 // eor v17.16b, v17.16b, v11.16b + .long 0x4f395627 // shl v7.4s, v17.4s, #25 + .long 0x6f394627 // sri v7.4s, v17.4s, #7 .long 0x3dc04ff0 // ldr q16, [sp, #304] .long 0x3dc037f1 // ldr q17, [sp, #208] .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s @@ -1347,24 +1128,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s .long 0x6e2a1ca5 // eor v5.16b, v5.16b, v10.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444b2 // sri v18.4s, v5.4s, #12 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3dc00ff1 // ldr q17, [sp, #48] - .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s + .long 0x4f3454b1 // shl v17.4s, v5.4s, #20 + .long 0x6f3444b1 // sri v17.4s, v5.4s, #12 + .long 0x3dc00fe5 // ldr q5, [sp, #48] .long 0x4ea58400 // add v0.4s, v0.4s, v5.4s + .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s .long 0x6e201e10 // eor v16.16b, v16.16b, v0.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s - .long 0x6e2a1ca5 // eor v5.16b, v5.16b, v10.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944b2 // sri v18.4s, v5.4s, #7 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3d804ff0 // str q16, [sp, #304] + .long 0x6f380605 // ushr v5.4s, v16.4s, #8 + .long 0x6f385605 // sli v5.4s, v16.4s, #24 + .long 0x4ea5854a // add v10.4s, v10.4s, v5.4s + .long 0x3d804fe5 // str q5, [sp, #304] + .long 0x6e2a1e31 // eor v17.16b, v17.16b, v10.16b + .long 0x4f395625 // shl v5.4s, v17.4s, #25 + .long 0x6f394625 // sri v5.4s, v17.4s, #7 .long 0x3dc043f0 // ldr q16, [sp, #256] .long 0x3dc003f1 // ldr q17, [sp, #0] .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s @@ -1373,24 +1149,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s .long 0x6e2b1cc6 // eor v6.16b, v6.16b, v11.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444d2 // sri v18.4s, v6.4s, #12 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3dc02bf1 // ldr q17, [sp, #160] - .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s + .long 0x4f3454d1 // shl v17.4s, v6.4s, #20 + .long 0x6f3444d1 // sri v17.4s, v6.4s, #12 + .long 0x3dc02be6 // ldr q6, [sp, #160] .long 0x4ea68421 // add v1.4s, v1.4s, v6.4s + .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s .long 0x6e211e10 // eor v16.16b, v16.16b, v1.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s - .long 0x6e2b1cc6 // eor v6.16b, v6.16b, v11.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944d2 // sri v18.4s, v6.4s, #7 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3d8043f0 // str q16, [sp, #256] + .long 0x6f380606 // ushr v6.4s, v16.4s, #8 + .long 0x6f385606 // sli v6.4s, v16.4s, #24 + .long 0x4ea6856b // add v11.4s, v11.4s, v6.4s + .long 0x3d8043e6 // str q6, [sp, #256] + .long 0x6e2b1e31 // eor v17.16b, v17.16b, v11.16b + .long 0x4f395626 // shl v6.4s, v17.4s, #25 + .long 0x6f394626 // sri v6.4s, v17.4s, #7 .long 0x3dc047f0 // ldr q16, [sp, #272] .long 0x3dc00bf1 // ldr q17, [sp, #32] .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s @@ -1399,24 +1170,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s .long 0x6e281ce7 // eor v7.16b, v7.16b, v8.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444f2 // sri v18.4s, v7.4s, #12 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3dc01bf1 // ldr q17, [sp, #96] - .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s + .long 0x4f3454f1 // shl v17.4s, v7.4s, #20 + .long 0x6f3444f1 // sri v17.4s, v7.4s, #12 + .long 0x3dc01be7 // ldr q7, [sp, #96] .long 0x4ea78442 // add v2.4s, v2.4s, v7.4s + .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s .long 0x6e221e10 // eor v16.16b, v16.16b, v2.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s - .long 0x6e281ce7 // eor v7.16b, v7.16b, v8.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944f2 // sri v18.4s, v7.4s, #7 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3d8047f0 // str q16, [sp, #272] + .long 0x6f380607 // ushr v7.4s, v16.4s, #8 + .long 0x6f385607 // sli v7.4s, v16.4s, #24 + .long 0x4ea78508 // add v8.4s, v8.4s, v7.4s + .long 0x3d8047e7 // str q7, [sp, #272] + .long 0x6e281e31 // eor v17.16b, v17.16b, v8.16b + .long 0x4f395627 // shl v7.4s, v17.4s, #25 + .long 0x6f394627 // sri v7.4s, v17.4s, #7 .long 0x3dc04bf0 // ldr q16, [sp, #288] .long 0x3dc013f1 // ldr q17, [sp, #64] .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s @@ -1425,24 +1191,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s .long 0x6e291c84 // eor v4.16b, v4.16b, v9.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344492 // sri v18.4s, v4.4s, #12 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3dc01ff1 // ldr q17, [sp, #112] - .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s + .long 0x4f345491 // shl v17.4s, v4.4s, #20 + .long 0x6f344491 // sri v17.4s, v4.4s, #12 + .long 0x3dc01fe4 // ldr q4, [sp, #112] .long 0x4ea48463 // add v3.4s, v3.4s, v4.4s + .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s .long 0x6e231e10 // eor v16.16b, v16.16b, v3.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s - .long 0x6e291c84 // eor v4.16b, v4.16b, v9.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394492 // sri v18.4s, v4.4s, #7 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3d804bf0 // str q16, [sp, #288] + .long 0x6f380604 // ushr v4.4s, v16.4s, #8 + .long 0x6f385604 // sli v4.4s, v16.4s, #24 + .long 0x4ea48529 // add v9.4s, v9.4s, v4.4s + .long 0x3d804be4 // str q4, [sp, #288] + .long 0x6e291e31 // eor v17.16b, v17.16b, v9.16b + .long 0x4f395624 // shl v4.4s, v17.4s, #25 + .long 0x6f394624 // sri v4.4s, v17.4s, #7 .long 0x3dc043f0 // ldr q16, [sp, #256] .long 0x3dc02ff1 // ldr q17, [sp, #176] .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s @@ -1451,24 +1212,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s .long 0x6e281c84 // eor v4.16b, v4.16b, v8.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344492 // sri v18.4s, v4.4s, #12 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3dc03ff1 // ldr q17, [sp, #240] - .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s + .long 0x4f345491 // shl v17.4s, v4.4s, #20 + .long 0x6f344491 // sri v17.4s, v4.4s, #12 + .long 0x3dc03fe4 // ldr q4, [sp, #240] .long 0x4ea48400 // add v0.4s, v0.4s, v4.4s + .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s .long 0x6e201e10 // eor v16.16b, v16.16b, v0.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s - .long 0x6e281c84 // eor v4.16b, v4.16b, v8.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394492 // sri v18.4s, v4.4s, #7 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3d8043f0 // str q16, [sp, #256] + .long 0x6f380604 // ushr v4.4s, v16.4s, #8 + .long 0x6f385604 // sli v4.4s, v16.4s, #24 + .long 0x4ea48508 // add v8.4s, v8.4s, v4.4s + .long 0x3d8043e4 // str q4, [sp, #256] + .long 0x6e281e31 // eor v17.16b, v17.16b, v8.16b + .long 0x4f395624 // shl v4.4s, v17.4s, #25 + .long 0x6f394624 // sri v4.4s, v17.4s, #7 .long 0x3dc047f0 // ldr q16, [sp, #272] .long 0x3dc017f1 // ldr q17, [sp, #80] .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s @@ -1477,24 +1233,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s .long 0x6e291ca5 // eor v5.16b, v5.16b, v9.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444b2 // sri v18.4s, v5.4s, #12 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3dc003f1 // ldr q17, [sp, #0] - .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s + .long 0x4f3454b1 // shl v17.4s, v5.4s, #20 + .long 0x6f3444b1 // sri v17.4s, v5.4s, #12 + .long 0x3dc003e5 // ldr q5, [sp, #0] .long 0x4ea58421 // add v1.4s, v1.4s, v5.4s + .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s .long 0x6e211e10 // eor v16.16b, v16.16b, v1.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s - .long 0x6e291ca5 // eor v5.16b, v5.16b, v9.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944b2 // sri v18.4s, v5.4s, #7 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3d8047f0 // str q16, [sp, #272] + .long 0x6f380605 // ushr v5.4s, v16.4s, #8 + .long 0x6f385605 // sli v5.4s, v16.4s, #24 + .long 0x4ea58529 // add v9.4s, v9.4s, v5.4s + .long 0x3d8047e5 // str q5, [sp, #272] + .long 0x6e291e31 // eor v17.16b, v17.16b, v9.16b + .long 0x4f395625 // shl v5.4s, v17.4s, #25 + .long 0x6f394625 // sri v5.4s, v17.4s, #7 .long 0x3dc04bf0 // ldr q16, [sp, #288] .long 0x3dc007f1 // ldr q17, [sp, #16] .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s @@ -1503,24 +1254,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s .long 0x6e2a1cc6 // eor v6.16b, v6.16b, v10.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444d2 // sri v18.4s, v6.4s, #12 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3dc027f1 // ldr q17, [sp, #144] - .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s + .long 0x4f3454d1 // shl v17.4s, v6.4s, #20 + .long 0x6f3444d1 // sri v17.4s, v6.4s, #12 + .long 0x3dc027e6 // ldr q6, [sp, #144] .long 0x4ea68442 // add v2.4s, v2.4s, v6.4s + .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s .long 0x6e221e10 // eor v16.16b, v16.16b, v2.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s - .long 0x6e2a1cc6 // eor v6.16b, v6.16b, v10.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944d2 // sri v18.4s, v6.4s, #7 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3d804bf0 // str q16, [sp, #288] + .long 0x6f380606 // ushr v6.4s, v16.4s, #8 + .long 0x6f385606 // sli v6.4s, v16.4s, #24 + .long 0x4ea6854a // add v10.4s, v10.4s, v6.4s + .long 0x3d804be6 // str q6, [sp, #288] + .long 0x6e2a1e31 // eor v17.16b, v17.16b, v10.16b + .long 0x4f395626 // shl v6.4s, v17.4s, #25 + .long 0x6f394626 // sri v6.4s, v17.4s, #7 .long 0x3dc04ff0 // ldr q16, [sp, #304] .long 0x3dc023f1 // ldr q17, [sp, #128] .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s @@ -1529,24 +1275,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s .long 0x6e2b1ce7 // eor v7.16b, v7.16b, v11.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444f2 // sri v18.4s, v7.4s, #12 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3dc01bf1 // ldr q17, [sp, #96] - .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s + .long 0x4f3454f1 // shl v17.4s, v7.4s, #20 + .long 0x6f3444f1 // sri v17.4s, v7.4s, #12 + .long 0x3dc01be7 // ldr q7, [sp, #96] .long 0x4ea78463 // add v3.4s, v3.4s, v7.4s + .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s .long 0x6e231e10 // eor v16.16b, v16.16b, v3.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s - .long 0x6e2b1ce7 // eor v7.16b, v7.16b, v11.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944f2 // sri v18.4s, v7.4s, #7 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3d804ff0 // str q16, [sp, #304] + .long 0x6f380607 // ushr v7.4s, v16.4s, #8 + .long 0x6f385607 // sli v7.4s, v16.4s, #24 + .long 0x4ea7856b // add v11.4s, v11.4s, v7.4s + .long 0x3d804fe7 // str q7, [sp, #304] + .long 0x6e2b1e31 // eor v17.16b, v17.16b, v11.16b + .long 0x4f395627 // shl v7.4s, v17.4s, #25 + .long 0x6f394627 // sri v7.4s, v17.4s, #7 .long 0x3dc04ff0 // ldr q16, [sp, #304] .long 0x3dc03bf1 // ldr q17, [sp, #224] .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s @@ -1555,24 +1296,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s .long 0x6e2a1ca5 // eor v5.16b, v5.16b, v10.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444b2 // sri v18.4s, v5.4s, #12 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3dc02bf1 // ldr q17, [sp, #160] - .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s + .long 0x4f3454b1 // shl v17.4s, v5.4s, #20 + .long 0x6f3444b1 // sri v17.4s, v5.4s, #12 + .long 0x3dc02be5 // ldr q5, [sp, #160] .long 0x4ea58400 // add v0.4s, v0.4s, v5.4s + .long 0x4eb18400 // add v0.4s, v0.4s, v17.4s .long 0x6e201e10 // eor v16.16b, v16.16b, v0.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0854a // add v10.4s, v10.4s, v16.4s - .long 0x6e2a1ca5 // eor v5.16b, v5.16b, v10.16b - .long 0x4ea51cb2 // orr v18.16b, v5.16b, v5.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944b2 // sri v18.4s, v5.4s, #7 - .long 0x4eb21e45 // orr v5.16b, v18.16b, v18.16b - .long 0x3d804ff0 // str q16, [sp, #304] + .long 0x6f380605 // ushr v5.4s, v16.4s, #8 + .long 0x6f385605 // sli v5.4s, v16.4s, #24 + .long 0x4ea5854a // add v10.4s, v10.4s, v5.4s + .long 0x3d804fe5 // str q5, [sp, #304] + .long 0x6e2a1e31 // eor v17.16b, v17.16b, v10.16b + .long 0x4f395625 // shl v5.4s, v17.4s, #25 + .long 0x6f394625 // sri v5.4s, v17.4s, #7 .long 0x3dc043f0 // ldr q16, [sp, #256] .long 0x3dc00bf1 // ldr q17, [sp, #32] .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s @@ -1581,24 +1317,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s .long 0x6e2b1cc6 // eor v6.16b, v6.16b, v11.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444d2 // sri v18.4s, v6.4s, #12 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3dc033f1 // ldr q17, [sp, #192] - .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s + .long 0x4f3454d1 // shl v17.4s, v6.4s, #20 + .long 0x6f3444d1 // sri v17.4s, v6.4s, #12 + .long 0x3dc033e6 // ldr q6, [sp, #192] .long 0x4ea68421 // add v1.4s, v1.4s, v6.4s + .long 0x4eb18421 // add v1.4s, v1.4s, v17.4s .long 0x6e211e10 // eor v16.16b, v16.16b, v1.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb0856b // add v11.4s, v11.4s, v16.4s - .long 0x6e2b1cc6 // eor v6.16b, v6.16b, v11.16b - .long 0x4ea61cd2 // orr v18.16b, v6.16b, v6.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944d2 // sri v18.4s, v6.4s, #7 - .long 0x4eb21e46 // orr v6.16b, v18.16b, v18.16b - .long 0x3d8043f0 // str q16, [sp, #256] + .long 0x6f380606 // ushr v6.4s, v16.4s, #8 + .long 0x6f385606 // sli v6.4s, v16.4s, #24 + .long 0x4ea6856b // add v11.4s, v11.4s, v6.4s + .long 0x3d8043e6 // str q6, [sp, #256] + .long 0x6e2b1e31 // eor v17.16b, v17.16b, v11.16b + .long 0x4f395626 // shl v6.4s, v17.4s, #25 + .long 0x6f394626 // sri v6.4s, v17.4s, #7 .long 0x3dc047f0 // ldr q16, [sp, #272] .long 0x3dc00ff1 // ldr q17, [sp, #48] .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s @@ -1607,24 +1338,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s .long 0x6e281ce7 // eor v7.16b, v7.16b, v8.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f3444f2 // sri v18.4s, v7.4s, #12 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3dc013f1 // ldr q17, [sp, #64] - .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s + .long 0x4f3454f1 // shl v17.4s, v7.4s, #20 + .long 0x6f3444f1 // sri v17.4s, v7.4s, #12 + .long 0x3dc013e7 // ldr q7, [sp, #64] .long 0x4ea78442 // add v2.4s, v2.4s, v7.4s + .long 0x4eb18442 // add v2.4s, v2.4s, v17.4s .long 0x6e221e10 // eor v16.16b, v16.16b, v2.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08508 // add v8.4s, v8.4s, v16.4s - .long 0x6e281ce7 // eor v7.16b, v7.16b, v8.16b - .long 0x4ea71cf2 // orr v18.16b, v7.16b, v7.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f3944f2 // sri v18.4s, v7.4s, #7 - .long 0x4eb21e47 // orr v7.16b, v18.16b, v18.16b - .long 0x3d8047f0 // str q16, [sp, #272] + .long 0x6f380607 // ushr v7.4s, v16.4s, #8 + .long 0x6f385607 // sli v7.4s, v16.4s, #24 + .long 0x4ea78508 // add v8.4s, v8.4s, v7.4s + .long 0x3d8047e7 // str q7, [sp, #272] + .long 0x6e281e31 // eor v17.16b, v17.16b, v8.16b + .long 0x4f395627 // shl v7.4s, v17.4s, #25 + .long 0x6f394627 // sri v7.4s, v17.4s, #7 .long 0x3dc04bf0 // ldr q16, [sp, #288] .long 0x3dc01ff1 // ldr q17, [sp, #112] .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s @@ -1633,24 +1359,19 @@ .long 0x6e600a10 // rev32 v16.8h, v16.8h .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s .long 0x6e291c84 // eor v4.16b, v4.16b, v9.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f345652 // shl v18.4s, v18.4s, #20 - .long 0x6f344492 // sri v18.4s, v4.4s, #12 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3dc037f1 // ldr q17, [sp, #208] - .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s + .long 0x4f345491 // shl v17.4s, v4.4s, #20 + .long 0x6f344491 // sri v17.4s, v4.4s, #12 + .long 0x3dc037e4 // ldr q4, [sp, #208] .long 0x4ea48463 // add v3.4s, v3.4s, v4.4s + .long 0x4eb18463 // add v3.4s, v3.4s, v17.4s .long 0x6e231e10 // eor v16.16b, v16.16b, v3.16b - .long 0x6f380612 // ushr v18.4s, v16.4s, #8 - .long 0x4f385613 // shl v19.4s, v16.4s, #24 - .long 0x4eb31e50 // orr v16.16b, v18.16b, v19.16b - .long 0x4eb08529 // add v9.4s, v9.4s, v16.4s - .long 0x6e291c84 // eor v4.16b, v4.16b, v9.16b - .long 0x4ea41c92 // orr v18.16b, v4.16b, v4.16b - .long 0x4f395652 // shl v18.4s, v18.4s, #25 - .long 0x6f394492 // sri v18.4s, v4.4s, #7 - .long 0x4eb21e44 // orr v4.16b, v18.16b, v18.16b - .long 0x3d804bf0 // str q16, [sp, #288] + .long 0x6f380604 // ushr v4.4s, v16.4s, #8 + .long 0x6f385604 // sli v4.4s, v16.4s, #24 + .long 0x4ea48529 // add v9.4s, v9.4s, v4.4s + .long 0x3d804be4 // str q4, [sp, #288] + .long 0x6e291e31 // eor v17.16b, v17.16b, v9.16b + .long 0x4f395624 // shl v4.4s, v17.4s, #25 + .long 0x6f394624 // sri v4.4s, v17.4s, #7 .long 0x6e281c00 // eor v0.16b, v0.16b, v8.16b .long 0x6e291c21 // eor v1.16b, v1.16b, v9.16b .long 0x6e2a1c42 // eor v2.16b, v2.16b, v10.16b diff --git a/HashLib/src/Include/Simd/CRC/CRCFoldForwardSse2_i386.inc b/HashLib/src/Include/Simd/CRC/CRCFoldForwardGpr_i386.inc similarity index 98% rename from HashLib/src/Include/Simd/CRC/CRCFoldForwardSse2_i386.inc rename to HashLib/src/Include/Simd/CRC/CRCFoldForwardGpr_i386.inc index 5128fb1b..ce9d58cd 100644 --- a/HashLib/src/Include/Simd/CRC/CRCFoldForwardSse2_i386.inc +++ b/HashLib/src/Include/Simd/CRC/CRCFoldForwardGpr_i386.inc @@ -1,5 +1,5 @@ // MSB-first 64-bit CRC: 16-byte slice (IA-32; SSE2 not required — same as x64 MSB path). -// x64 counterpart: CRCFoldForwardSse2_x86_64.inc. +// x64 counterpart: CRCFoldForwardGpr_x86_64.inc. // After HlpSimdProc4Begin_i386: ebx = AData, esi = ALength, edi = AState, eax = Ctx. // Ctx: FoldConstants.CrcBits at +80, TableRow at +96. CrcMask derived from width. // Result UInt64 in edx:eax. diff --git a/HashLib/src/Include/Simd/CRC/CRCFoldForwardSse2_x86_64.inc b/HashLib/src/Include/Simd/CRC/CRCFoldForwardGpr_x86_64.inc similarity index 87% rename from HashLib/src/Include/Simd/CRC/CRCFoldForwardSse2_x86_64.inc rename to HashLib/src/Include/Simd/CRC/CRCFoldForwardGpr_x86_64.inc index 80aef2a4..391c5526 100644 --- a/HashLib/src/Include/Simd/CRC/CRCFoldForwardSse2_x86_64.inc +++ b/HashLib/src/Include/Simd/CRC/CRCFoldForwardGpr_x86_64.inc @@ -1,7 +1,8 @@ -// MSB-first 64-bit CRC: 16-byte slice (slicing-by-16) using SSE2 for load only. -// IA-32 counterpart: CRCFoldForwardSse2_i386.inc. +// MSB-first 64-bit CRC: 16-byte slice (slicing-by-16), pure GPR - no vector +// instructions (the Gpr name states the ISA requirement: none beyond base x86-64). +// IA-32 counterpart: CRCFoldForwardGpr_i386.inc. // Signature (after HlpSimdProc4Begin_x86_64.inc): -// function CRC_Fold_Forward_Sse2(AData: PByte; ALength: UInt32; +// function CRC_Fold_Forward_Gpr(AData: PByte; ALength: UInt32; // AState: Pointer; AConstants: Pointer): UInt64; // MS x64: rcx=AData, edx=ALength, r8=AState, r9=Ctx. // Callee-saved: rsi/rdi must be preserved (used as LTempCopy / LBIdx scratch). diff --git a/HashLib/src/Include/Simd/CRC/CRCFoldReflectedSse2_i386.inc b/HashLib/src/Include/Simd/CRC/CRCFoldReflectedSse2_i386.inc index e8612d10..9e1efacf 100644 --- a/HashLib/src/Include/Simd/CRC/CRCFoldReflectedSse2_i386.inc +++ b/HashLib/src/Include/Simd/CRC/CRCFoldReflectedSse2_i386.inc @@ -1,4 +1,6 @@ // Reflected (LSB-first) 64-bit CRC: 16-byte slice (IA-32 SSE2 + GPR table XOR). +// GPR slicing core; SSE2 is genuinely required for the 128-bit loads and the +// CRC state shuttle - the Sse2 name states the ISA requirement. // After HlpSimdProc4Begin_i386: ebx = AData, esi = ALength, edi = AState, eax = Ctx. // TableRow[i] at Ctx + 96; each entry is a 32-bit (untyped) Pointer. // Result UInt64 in edx:eax (high:low). Preserves Delphi/FPC i386 frame via push/pop ebp. diff --git a/HashLib/src/Include/Simd/CRC/CRCFoldReflectedSse2_x86_64.inc b/HashLib/src/Include/Simd/CRC/CRCFoldReflectedSse2_x86_64.inc index 3aa4034a..47cd99d2 100644 --- a/HashLib/src/Include/Simd/CRC/CRCFoldReflectedSse2_x86_64.inc +++ b/HashLib/src/Include/Simd/CRC/CRCFoldReflectedSse2_x86_64.inc @@ -1,4 +1,6 @@ // Reflected (LSB-first) 64-bit CRC: 16-byte slice using SSE2 loads + GPR table XOR. +// GPR slicing core; SSE2 is genuinely required for the 128-bit loads and the +// CRC state shuttle - the Sse2 name states the ISA requirement. // Signature (after HlpSimdProc4Begin_x86_64.inc): // function CRC_Fold_Reflected_Sse2(AData: PByte; ALength: UInt32; // AState: Pointer; AConstants: Pointer): UInt64; diff --git a/HashLib/src/Include/Simd/SHA1/SHA1CompressAvx2_i386.inc b/HashLib/src/Include/Simd/SHA1/SHA1CompressAvx_i386.inc similarity index 99% rename from HashLib/src/Include/Simd/SHA1/SHA1CompressAvx2_i386.inc rename to HashLib/src/Include/Simd/SHA1/SHA1CompressAvx_i386.inc index 10a8b4d3..9a987080 100644 --- a/HashLib/src/Include/Simd/SHA1/SHA1CompressAvx2_i386.inc +++ b/HashLib/src/Include/Simd/SHA1/SHA1CompressAvx_i386.inc @@ -1,7 +1,6 @@ // SHA-1 AVX SIMD-schedule implementation (IA-32). VEX-128 (AVX1) -// instructions only - there is no i386 AVX2 SHA-1 upstream - dispatched at -// the AVX2 tier (every AVX2 CPU has AVX1; AVX1-only CPUs fall to the SSSE3 -// tier). The 3-operand VEX forms eliminate the SSSE3 kernel's register-copy +// instructions only - there is no i386 AVX2 SHA-1 upstream. The 3-operand +// VEX forms eliminate the SSSE3 kernel's register-copy // movdqa traffic in the interleaved message schedule. All VEX instructions // are db-encoded for broad assembler compatibility. // The four round constants and the byte-swap mask are read from diff --git a/HashLib/src/Include/Simd/SHA1/SHA1CompressGpr_aarch64.inc b/HashLib/src/Include/Simd/SHA1/SHA1CompressGpr_aarch64.inc new file mode 100644 index 00000000..e5617ff9 --- /dev/null +++ b/HashLib/src/Include/Simd/SHA1/SHA1CompressGpr_aarch64.inc @@ -0,0 +1,1038 @@ +// SHA-1 pure-GPR implementation (AArch64) for cores without the SHA-1 +// crypto extension; the Gpr name states the ISA requirement: none beyond +// base AArch64. Serial SHA maps better onto the 31 GPRs than onto NEON +// lanes (single dependency chain, 1-op ror, rotate-folded eor operands). +// The four round constants are materialized as movz/movk immediates - no +// K table is read. +// Expects AAPCS64 (after HlpSimdProc3Begin_aarch64): x0 = state ptr +// (5 x UInt32), x1 = data ptr, w2 = numblocks. +// Frame: 96-byte AAPCS64 frame (x29/x30 + x19-x28 callee-saved). +// AArch64 instructions are .long-encoded for broad assembler compatibility. +// Reference: OpenSSL CRYPTOGAMS sha1-armv8.pl (sha1_block_data_order, the +// plain path). + + .long 0x2a0203e2 // mov w2,w2 // zero-extend ANumBlocks (AAPCS64 leaves x2's top half undefined) + + .long 0xa9ba7bfd // stp x29,x30,[sp,#-96]! + .long 0x910003fd // add x29,sp,#0 + .long 0xa90153f3 // stp x19,x20,[sp,#16] + .long 0xa9025bf5 // stp x21,x22,[sp,#32] + .long 0xa90363f7 // stp x23,x24,[sp,#48] + .long 0xa9046bf9 // stp x25,x26,[sp,#64] + .long 0xa90573fb // stp x27,x28,[sp,#80] + + .long 0x29405414 // ldp w20,w21,[x0] + .long 0x29415c16 // ldp w22,w23,[x0,#8] + .long 0xb9401018 // ldr w24,[x0,#16] + + +.Lsha1_gpr_loop: + .long 0xf8440423 // ldr x3,[x1],#64 + .long 0x528f333c // movz w28,#0x7999 + .long 0xd1000442 // sub x2,x2,#1 + .long 0x72ab505c // movk w28,#0x5a82, lsl #16 + .long 0xdac00863 // rev32 x3,x3 + .long 0x0b1c0318 // add w24,w24,w28 // warm it up + .long 0x0b030318 // add w24,w24,w3 + .long 0xd360fc64 // lsr x4,x3,#32 + .long 0xf85c8025 // ldr x5,[x1,#-56] + .long 0x0a3502f9 // bic w25,w23,w21 + .long 0x0a1502da // and w26,w22,w21 + .long 0x13946e9b // ror w27,w20,#27 + .long 0x0b1c02f7 // add w23,w23,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b0318 // add w24,w24,w27 // e+=rot(a,5) + .long 0x13950ab5 // ror w21,w21,#2 + .long 0x0b0402f7 // add w23,w23,w4 // future e+=X[i] + .long 0x0b190318 // add w24,w24,w25 // e+=F(b,c,d) + .long 0xdac008a5 // rev32 x5,x5 + .long 0x0a3402d9 // bic w25,w22,w20 + .long 0x0a1402ba // and w26,w21,w20 + .long 0x13986f1b // ror w27,w24,#27 + .long 0x0b1c02d6 // add w22,w22,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b02f7 // add w23,w23,w27 // e+=rot(a,5) + .long 0x13940a94 // ror w20,w20,#2 + .long 0x0b0502d6 // add w22,w22,w5 // future e+=X[i] + .long 0x0b1902f7 // add w23,w23,w25 // e+=F(b,c,d) + .long 0xd360fca6 // lsr x6,x5,#32 + .long 0xf85d0027 // ldr x7,[x1,#-48] + .long 0x0a3802b9 // bic w25,w21,w24 + .long 0x0a18029a // and w26,w20,w24 + .long 0x13976efb // ror w27,w23,#27 + .long 0x0b1c02b5 // add w21,w21,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b02d6 // add w22,w22,w27 // e+=rot(a,5) + .long 0x13980b18 // ror w24,w24,#2 + .long 0x0b0602b5 // add w21,w21,w6 // future e+=X[i] + .long 0x0b1902d6 // add w22,w22,w25 // e+=F(b,c,d) + .long 0xdac008e7 // rev32 x7,x7 + .long 0x0a370299 // bic w25,w20,w23 + .long 0x0a17031a // and w26,w24,w23 + .long 0x13966edb // ror w27,w22,#27 + .long 0x0b1c0294 // add w20,w20,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b02b5 // add w21,w21,w27 // e+=rot(a,5) + .long 0x13970af7 // ror w23,w23,#2 + .long 0x0b070294 // add w20,w20,w7 // future e+=X[i] + .long 0x0b1902b5 // add w21,w21,w25 // e+=F(b,c,d) + .long 0xd360fce8 // lsr x8,x7,#32 + .long 0xf85d8029 // ldr x9,[x1,#-40] + .long 0x0a360319 // bic w25,w24,w22 + .long 0x0a1602fa // and w26,w23,w22 + .long 0x13956ebb // ror w27,w21,#27 + .long 0x0b1c0318 // add w24,w24,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b0294 // add w20,w20,w27 // e+=rot(a,5) + .long 0x13960ad6 // ror w22,w22,#2 + .long 0x0b080318 // add w24,w24,w8 // future e+=X[i] + .long 0x0b190294 // add w20,w20,w25 // e+=F(b,c,d) + .long 0xdac00929 // rev32 x9,x9 + .long 0x0a3502f9 // bic w25,w23,w21 + .long 0x0a1502da // and w26,w22,w21 + .long 0x13946e9b // ror w27,w20,#27 + .long 0x0b1c02f7 // add w23,w23,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b0318 // add w24,w24,w27 // e+=rot(a,5) + .long 0x13950ab5 // ror w21,w21,#2 + .long 0x0b0902f7 // add w23,w23,w9 // future e+=X[i] + .long 0x0b190318 // add w24,w24,w25 // e+=F(b,c,d) + .long 0xd360fd2a // lsr x10,x9,#32 + .long 0xf85e002b // ldr x11,[x1,#-32] + .long 0x0a3402d9 // bic w25,w22,w20 + .long 0x0a1402ba // and w26,w21,w20 + .long 0x13986f1b // ror w27,w24,#27 + .long 0x0b1c02d6 // add w22,w22,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b02f7 // add w23,w23,w27 // e+=rot(a,5) + .long 0x13940a94 // ror w20,w20,#2 + .long 0x0b0a02d6 // add w22,w22,w10 // future e+=X[i] + .long 0x0b1902f7 // add w23,w23,w25 // e+=F(b,c,d) + .long 0xdac0096b // rev32 x11,x11 + .long 0x0a3802b9 // bic w25,w21,w24 + .long 0x0a18029a // and w26,w20,w24 + .long 0x13976efb // ror w27,w23,#27 + .long 0x0b1c02b5 // add w21,w21,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b02d6 // add w22,w22,w27 // e+=rot(a,5) + .long 0x13980b18 // ror w24,w24,#2 + .long 0x0b0b02b5 // add w21,w21,w11 // future e+=X[i] + .long 0x0b1902d6 // add w22,w22,w25 // e+=F(b,c,d) + .long 0xd360fd6c // lsr x12,x11,#32 + .long 0xf85e802d // ldr x13,[x1,#-24] + .long 0x0a370299 // bic w25,w20,w23 + .long 0x0a17031a // and w26,w24,w23 + .long 0x13966edb // ror w27,w22,#27 + .long 0x0b1c0294 // add w20,w20,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b02b5 // add w21,w21,w27 // e+=rot(a,5) + .long 0x13970af7 // ror w23,w23,#2 + .long 0x0b0c0294 // add w20,w20,w12 // future e+=X[i] + .long 0x0b1902b5 // add w21,w21,w25 // e+=F(b,c,d) + .long 0xdac009ad // rev32 x13,x13 + .long 0x0a360319 // bic w25,w24,w22 + .long 0x0a1602fa // and w26,w23,w22 + .long 0x13956ebb // ror w27,w21,#27 + .long 0x0b1c0318 // add w24,w24,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b0294 // add w20,w20,w27 // e+=rot(a,5) + .long 0x13960ad6 // ror w22,w22,#2 + .long 0x0b0d0318 // add w24,w24,w13 // future e+=X[i] + .long 0x0b190294 // add w20,w20,w25 // e+=F(b,c,d) + .long 0xd360fdae // lsr x14,x13,#32 + .long 0xf85f002f // ldr x15,[x1,#-16] + .long 0x0a3502f9 // bic w25,w23,w21 + .long 0x0a1502da // and w26,w22,w21 + .long 0x13946e9b // ror w27,w20,#27 + .long 0x0b1c02f7 // add w23,w23,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b0318 // add w24,w24,w27 // e+=rot(a,5) + .long 0x13950ab5 // ror w21,w21,#2 + .long 0x0b0e02f7 // add w23,w23,w14 // future e+=X[i] + .long 0x0b190318 // add w24,w24,w25 // e+=F(b,c,d) + .long 0xdac009ef // rev32 x15,x15 + .long 0x0a3402d9 // bic w25,w22,w20 + .long 0x0a1402ba // and w26,w21,w20 + .long 0x13986f1b // ror w27,w24,#27 + .long 0x0b1c02d6 // add w22,w22,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b02f7 // add w23,w23,w27 // e+=rot(a,5) + .long 0x13940a94 // ror w20,w20,#2 + .long 0x0b0f02d6 // add w22,w22,w15 // future e+=X[i] + .long 0x0b1902f7 // add w23,w23,w25 // e+=F(b,c,d) + .long 0xd360fdf0 // lsr x16,x15,#32 + .long 0xf85f8031 // ldr x17,[x1,#-8] + .long 0x0a3802b9 // bic w25,w21,w24 + .long 0x0a18029a // and w26,w20,w24 + .long 0x13976efb // ror w27,w23,#27 + .long 0x0b1c02b5 // add w21,w21,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b02d6 // add w22,w22,w27 // e+=rot(a,5) + .long 0x13980b18 // ror w24,w24,#2 + .long 0x0b1002b5 // add w21,w21,w16 // future e+=X[i] + .long 0x0b1902d6 // add w22,w22,w25 // e+=F(b,c,d) + .long 0xdac00a31 // rev32 x17,x17 + .long 0x0a370299 // bic w25,w20,w23 + .long 0x0a17031a // and w26,w24,w23 + .long 0x13966edb // ror w27,w22,#27 + .long 0x0b1c0294 // add w20,w20,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b02b5 // add w21,w21,w27 // e+=rot(a,5) + .long 0x13970af7 // ror w23,w23,#2 + .long 0x0b110294 // add w20,w20,w17 // future e+=X[i] + .long 0x0b1902b5 // add w21,w21,w25 // e+=F(b,c,d) + .long 0xd360fe33 // lsr x19,x17,#32 + .long 0x4a050063 // eor w3,w3,w5 + .long 0x0a360319 // bic w25,w24,w22 + .long 0x0a1602fa // and w26,w23,w22 + .long 0x13956ebb // ror w27,w21,#27 + .long 0x4a0b0063 // eor w3,w3,w11 + .long 0x0b1c0318 // add w24,w24,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b0294 // add w20,w20,w27 // e+=rot(a,5) + .long 0x4a100063 // eor w3,w3,w16 + .long 0x13960ad6 // ror w22,w22,#2 + .long 0x0b130318 // add w24,w24,w19 // future e+=X[i] + .long 0x0b190294 // add w20,w20,w25 // e+=F(b,c,d) + .long 0x13837c63 // ror w3,w3,#31 + .long 0x4a060084 // eor w4,w4,w6 + .long 0x0a3502f9 // bic w25,w23,w21 + .long 0x0a1502da // and w26,w22,w21 + .long 0x13946e9b // ror w27,w20,#27 + .long 0x4a0c0084 // eor w4,w4,w12 + .long 0x0b1c02f7 // add w23,w23,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b0318 // add w24,w24,w27 // e+=rot(a,5) + .long 0x4a110084 // eor w4,w4,w17 + .long 0x13950ab5 // ror w21,w21,#2 + .long 0x0b0302f7 // add w23,w23,w3 // future e+=X[i] + .long 0x0b190318 // add w24,w24,w25 // e+=F(b,c,d) + .long 0x13847c84 // ror w4,w4,#31 + .long 0x4a0700a5 // eor w5,w5,w7 + .long 0x0a3402d9 // bic w25,w22,w20 + .long 0x0a1402ba // and w26,w21,w20 + .long 0x13986f1b // ror w27,w24,#27 + .long 0x4a0d00a5 // eor w5,w5,w13 + .long 0x0b1c02d6 // add w22,w22,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b02f7 // add w23,w23,w27 // e+=rot(a,5) + .long 0x4a1300a5 // eor w5,w5,w19 + .long 0x13940a94 // ror w20,w20,#2 + .long 0x0b0402d6 // add w22,w22,w4 // future e+=X[i] + .long 0x0b1902f7 // add w23,w23,w25 // e+=F(b,c,d) + .long 0x13857ca5 // ror w5,w5,#31 + .long 0x4a0800c6 // eor w6,w6,w8 + .long 0x0a3802b9 // bic w25,w21,w24 + .long 0x0a18029a // and w26,w20,w24 + .long 0x13976efb // ror w27,w23,#27 + .long 0x4a0e00c6 // eor w6,w6,w14 + .long 0x0b1c02b5 // add w21,w21,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b02d6 // add w22,w22,w27 // e+=rot(a,5) + .long 0x4a0300c6 // eor w6,w6,w3 + .long 0x13980b18 // ror w24,w24,#2 + .long 0x0b0502b5 // add w21,w21,w5 // future e+=X[i] + .long 0x0b1902d6 // add w22,w22,w25 // e+=F(b,c,d) + .long 0x13867cc6 // ror w6,w6,#31 + .long 0x4a0900e7 // eor w7,w7,w9 + .long 0x0a370299 // bic w25,w20,w23 + .long 0x0a17031a // and w26,w24,w23 + .long 0x13966edb // ror w27,w22,#27 + .long 0x4a0f00e7 // eor w7,w7,w15 + .long 0x0b1c0294 // add w20,w20,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b02b5 // add w21,w21,w27 // e+=rot(a,5) + .long 0x4a0400e7 // eor w7,w7,w4 + .long 0x13970af7 // ror w23,w23,#2 + .long 0x0b060294 // add w20,w20,w6 // future e+=X[i] + .long 0x0b1902b5 // add w21,w21,w25 // e+=F(b,c,d) + .long 0x13877ce7 // ror w7,w7,#31 + .long 0x529d743c // movz w28,#0xeba1 + .long 0x72addb3c // movk w28,#0x6ed9, lsl #16 + .long 0x4a0a0108 // eor w8,w8,w10 + .long 0x0a360319 // bic w25,w24,w22 + .long 0x0a1602fa // and w26,w23,w22 + .long 0x13956ebb // ror w27,w21,#27 + .long 0x4a100108 // eor w8,w8,w16 + .long 0x0b1c0318 // add w24,w24,w28 // future e+=K + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x0b1b0294 // add w20,w20,w27 // e+=rot(a,5) + .long 0x4a050108 // eor w8,w8,w5 + .long 0x13960ad6 // ror w22,w22,#2 + .long 0x0b070318 // add w24,w24,w7 // future e+=X[i] + .long 0x0b190294 // add w20,w20,w25 // e+=F(b,c,d) + .long 0x13887d08 // ror w8,w8,#31 + .long 0x4a0b0129 // eor w9,w9,w11 + .long 0x4a1502f9 // eor w25,w23,w21 + .long 0x13946e9b // ror w27,w20,#27 + .long 0x0b1c02f7 // add w23,w23,w28 // future e+=K + .long 0x4a110129 // eor w9,w9,w17 + .long 0x4a160339 // eor w25,w25,w22 + .long 0x0b1b0318 // add w24,w24,w27 // e+=rot(a,5) + .long 0x13950ab5 // ror w21,w21,#2 + .long 0x4a060129 // eor w9,w9,w6 + .long 0x0b0802f7 // add w23,w23,w8 // future e+=X[i] + .long 0x0b190318 // add w24,w24,w25 // e+=F(b,c,d) + .long 0x13897d29 // ror w9,w9,#31 + .long 0x4a0c014a // eor w10,w10,w12 + .long 0x4a1402d9 // eor w25,w22,w20 + .long 0x13986f1b // ror w27,w24,#27 + .long 0x0b1c02d6 // add w22,w22,w28 // future e+=K + .long 0x4a13014a // eor w10,w10,w19 + .long 0x4a150339 // eor w25,w25,w21 + .long 0x0b1b02f7 // add w23,w23,w27 // e+=rot(a,5) + .long 0x13940a94 // ror w20,w20,#2 + .long 0x4a07014a // eor w10,w10,w7 + .long 0x0b0902d6 // add w22,w22,w9 // future e+=X[i] + .long 0x0b1902f7 // add w23,w23,w25 // e+=F(b,c,d) + .long 0x138a7d4a // ror w10,w10,#31 + .long 0x4a0d016b // eor w11,w11,w13 + .long 0x4a1802b9 // eor w25,w21,w24 + .long 0x13976efb // ror w27,w23,#27 + .long 0x0b1c02b5 // add w21,w21,w28 // future e+=K + .long 0x4a03016b // eor w11,w11,w3 + .long 0x4a140339 // eor w25,w25,w20 + .long 0x0b1b02d6 // add w22,w22,w27 // e+=rot(a,5) + .long 0x13980b18 // ror w24,w24,#2 + .long 0x4a08016b // eor w11,w11,w8 + .long 0x0b0a02b5 // add w21,w21,w10 // future e+=X[i] + .long 0x0b1902d6 // add w22,w22,w25 // e+=F(b,c,d) + .long 0x138b7d6b // ror w11,w11,#31 + .long 0x4a0e018c // eor w12,w12,w14 + .long 0x4a170299 // eor w25,w20,w23 + .long 0x13966edb // ror w27,w22,#27 + .long 0x0b1c0294 // add w20,w20,w28 // future e+=K + .long 0x4a04018c // eor w12,w12,w4 + .long 0x4a180339 // eor w25,w25,w24 + .long 0x0b1b02b5 // add w21,w21,w27 // e+=rot(a,5) + .long 0x13970af7 // ror w23,w23,#2 + .long 0x4a09018c // eor w12,w12,w9 + .long 0x0b0b0294 // add w20,w20,w11 // future e+=X[i] + .long 0x0b1902b5 // add w21,w21,w25 // e+=F(b,c,d) + .long 0x138c7d8c // ror w12,w12,#31 + .long 0x4a0f01ad // eor w13,w13,w15 + .long 0x4a160319 // eor w25,w24,w22 + .long 0x13956ebb // ror w27,w21,#27 + .long 0x0b1c0318 // add w24,w24,w28 // future e+=K + .long 0x4a0501ad // eor w13,w13,w5 + .long 0x4a170339 // eor w25,w25,w23 + .long 0x0b1b0294 // add w20,w20,w27 // e+=rot(a,5) + .long 0x13960ad6 // ror w22,w22,#2 + .long 0x4a0a01ad // eor w13,w13,w10 + .long 0x0b0c0318 // add w24,w24,w12 // future e+=X[i] + .long 0x0b190294 // add w20,w20,w25 // e+=F(b,c,d) + .long 0x138d7dad // ror w13,w13,#31 + .long 0x4a1001ce // eor w14,w14,w16 + .long 0x4a1502f9 // eor w25,w23,w21 + .long 0x13946e9b // ror w27,w20,#27 + .long 0x0b1c02f7 // add w23,w23,w28 // future e+=K + .long 0x4a0601ce // eor w14,w14,w6 + .long 0x4a160339 // eor w25,w25,w22 + .long 0x0b1b0318 // add w24,w24,w27 // e+=rot(a,5) + .long 0x13950ab5 // ror w21,w21,#2 + .long 0x4a0b01ce // eor w14,w14,w11 + .long 0x0b0d02f7 // add w23,w23,w13 // future e+=X[i] + .long 0x0b190318 // add w24,w24,w25 // e+=F(b,c,d) + .long 0x138e7dce // ror w14,w14,#31 + .long 0x4a1101ef // eor w15,w15,w17 + .long 0x4a1402d9 // eor w25,w22,w20 + .long 0x13986f1b // ror w27,w24,#27 + .long 0x0b1c02d6 // add w22,w22,w28 // future e+=K + .long 0x4a0701ef // eor w15,w15,w7 + .long 0x4a150339 // eor w25,w25,w21 + .long 0x0b1b02f7 // add w23,w23,w27 // e+=rot(a,5) + .long 0x13940a94 // ror w20,w20,#2 + .long 0x4a0c01ef // eor w15,w15,w12 + .long 0x0b0e02d6 // add w22,w22,w14 // future e+=X[i] + .long 0x0b1902f7 // add w23,w23,w25 // e+=F(b,c,d) + .long 0x138f7def // ror w15,w15,#31 + .long 0x4a130210 // eor w16,w16,w19 + .long 0x4a1802b9 // eor w25,w21,w24 + .long 0x13976efb // ror w27,w23,#27 + .long 0x0b1c02b5 // add w21,w21,w28 // future e+=K + .long 0x4a080210 // eor w16,w16,w8 + .long 0x4a140339 // eor w25,w25,w20 + .long 0x0b1b02d6 // add w22,w22,w27 // e+=rot(a,5) + .long 0x13980b18 // ror w24,w24,#2 + .long 0x4a0d0210 // eor w16,w16,w13 + .long 0x0b0f02b5 // add w21,w21,w15 // future e+=X[i] + .long 0x0b1902d6 // add w22,w22,w25 // e+=F(b,c,d) + .long 0x13907e10 // ror w16,w16,#31 + .long 0x4a030231 // eor w17,w17,w3 + .long 0x4a170299 // eor w25,w20,w23 + .long 0x13966edb // ror w27,w22,#27 + .long 0x0b1c0294 // add w20,w20,w28 // future e+=K + .long 0x4a090231 // eor w17,w17,w9 + .long 0x4a180339 // eor w25,w25,w24 + .long 0x0b1b02b5 // add w21,w21,w27 // e+=rot(a,5) + .long 0x13970af7 // ror w23,w23,#2 + .long 0x4a0e0231 // eor w17,w17,w14 + .long 0x0b100294 // add w20,w20,w16 // future e+=X[i] + .long 0x0b1902b5 // add w21,w21,w25 // e+=F(b,c,d) + .long 0x13917e31 // ror w17,w17,#31 + .long 0x4a040273 // eor w19,w19,w4 + .long 0x4a160319 // eor w25,w24,w22 + .long 0x13956ebb // ror w27,w21,#27 + .long 0x0b1c0318 // add w24,w24,w28 // future e+=K + .long 0x4a0a0273 // eor w19,w19,w10 + .long 0x4a170339 // eor w25,w25,w23 + .long 0x0b1b0294 // add w20,w20,w27 // e+=rot(a,5) + .long 0x13960ad6 // ror w22,w22,#2 + .long 0x4a0f0273 // eor w19,w19,w15 + .long 0x0b110318 // add w24,w24,w17 // future e+=X[i] + .long 0x0b190294 // add w20,w20,w25 // e+=F(b,c,d) + .long 0x13937e73 // ror w19,w19,#31 + .long 0x4a050063 // eor w3,w3,w5 + .long 0x4a1502f9 // eor w25,w23,w21 + .long 0x13946e9b // ror w27,w20,#27 + .long 0x0b1c02f7 // add w23,w23,w28 // future e+=K + .long 0x4a0b0063 // eor w3,w3,w11 + .long 0x4a160339 // eor w25,w25,w22 + .long 0x0b1b0318 // add w24,w24,w27 // e+=rot(a,5) + .long 0x13950ab5 // ror w21,w21,#2 + .long 0x4a100063 // eor w3,w3,w16 + .long 0x0b1302f7 // add w23,w23,w19 // future e+=X[i] + .long 0x0b190318 // add w24,w24,w25 // e+=F(b,c,d) + .long 0x13837c63 // ror w3,w3,#31 + .long 0x4a060084 // eor w4,w4,w6 + .long 0x4a1402d9 // eor w25,w22,w20 + .long 0x13986f1b // ror w27,w24,#27 + .long 0x0b1c02d6 // add w22,w22,w28 // future e+=K + .long 0x4a0c0084 // eor w4,w4,w12 + .long 0x4a150339 // eor w25,w25,w21 + .long 0x0b1b02f7 // add w23,w23,w27 // e+=rot(a,5) + .long 0x13940a94 // ror w20,w20,#2 + .long 0x4a110084 // eor w4,w4,w17 + .long 0x0b0302d6 // add w22,w22,w3 // future e+=X[i] + .long 0x0b1902f7 // add w23,w23,w25 // e+=F(b,c,d) + .long 0x13847c84 // ror w4,w4,#31 + .long 0x4a0700a5 // eor w5,w5,w7 + .long 0x4a1802b9 // eor w25,w21,w24 + .long 0x13976efb // ror w27,w23,#27 + .long 0x0b1c02b5 // add w21,w21,w28 // future e+=K + .long 0x4a0d00a5 // eor w5,w5,w13 + .long 0x4a140339 // eor w25,w25,w20 + .long 0x0b1b02d6 // add w22,w22,w27 // e+=rot(a,5) + .long 0x13980b18 // ror w24,w24,#2 + .long 0x4a1300a5 // eor w5,w5,w19 + .long 0x0b0402b5 // add w21,w21,w4 // future e+=X[i] + .long 0x0b1902d6 // add w22,w22,w25 // e+=F(b,c,d) + .long 0x13857ca5 // ror w5,w5,#31 + .long 0x4a0800c6 // eor w6,w6,w8 + .long 0x4a170299 // eor w25,w20,w23 + .long 0x13966edb // ror w27,w22,#27 + .long 0x0b1c0294 // add w20,w20,w28 // future e+=K + .long 0x4a0e00c6 // eor w6,w6,w14 + .long 0x4a180339 // eor w25,w25,w24 + .long 0x0b1b02b5 // add w21,w21,w27 // e+=rot(a,5) + .long 0x13970af7 // ror w23,w23,#2 + .long 0x4a0300c6 // eor w6,w6,w3 + .long 0x0b050294 // add w20,w20,w5 // future e+=X[i] + .long 0x0b1902b5 // add w21,w21,w25 // e+=F(b,c,d) + .long 0x13867cc6 // ror w6,w6,#31 + .long 0x4a0900e7 // eor w7,w7,w9 + .long 0x4a160319 // eor w25,w24,w22 + .long 0x13956ebb // ror w27,w21,#27 + .long 0x0b1c0318 // add w24,w24,w28 // future e+=K + .long 0x4a0f00e7 // eor w7,w7,w15 + .long 0x4a170339 // eor w25,w25,w23 + .long 0x0b1b0294 // add w20,w20,w27 // e+=rot(a,5) + .long 0x13960ad6 // ror w22,w22,#2 + .long 0x4a0400e7 // eor w7,w7,w4 + .long 0x0b060318 // add w24,w24,w6 // future e+=X[i] + .long 0x0b190294 // add w20,w20,w25 // e+=F(b,c,d) + .long 0x13877ce7 // ror w7,w7,#31 + .long 0x4a0a0108 // eor w8,w8,w10 + .long 0x4a1502f9 // eor w25,w23,w21 + .long 0x13946e9b // ror w27,w20,#27 + .long 0x0b1c02f7 // add w23,w23,w28 // future e+=K + .long 0x4a100108 // eor w8,w8,w16 + .long 0x4a160339 // eor w25,w25,w22 + .long 0x0b1b0318 // add w24,w24,w27 // e+=rot(a,5) + .long 0x13950ab5 // ror w21,w21,#2 + .long 0x4a050108 // eor w8,w8,w5 + .long 0x0b0702f7 // add w23,w23,w7 // future e+=X[i] + .long 0x0b190318 // add w24,w24,w25 // e+=F(b,c,d) + .long 0x13887d08 // ror w8,w8,#31 + .long 0x4a0b0129 // eor w9,w9,w11 + .long 0x4a1402d9 // eor w25,w22,w20 + .long 0x13986f1b // ror w27,w24,#27 + .long 0x0b1c02d6 // add w22,w22,w28 // future e+=K + .long 0x4a110129 // eor w9,w9,w17 + .long 0x4a150339 // eor w25,w25,w21 + .long 0x0b1b02f7 // add w23,w23,w27 // e+=rot(a,5) + .long 0x13940a94 // ror w20,w20,#2 + .long 0x4a060129 // eor w9,w9,w6 + .long 0x0b0802d6 // add w22,w22,w8 // future e+=X[i] + .long 0x0b1902f7 // add w23,w23,w25 // e+=F(b,c,d) + .long 0x13897d29 // ror w9,w9,#31 + .long 0x4a0c014a // eor w10,w10,w12 + .long 0x4a1802b9 // eor w25,w21,w24 + .long 0x13976efb // ror w27,w23,#27 + .long 0x0b1c02b5 // add w21,w21,w28 // future e+=K + .long 0x4a13014a // eor w10,w10,w19 + .long 0x4a140339 // eor w25,w25,w20 + .long 0x0b1b02d6 // add w22,w22,w27 // e+=rot(a,5) + .long 0x13980b18 // ror w24,w24,#2 + .long 0x4a07014a // eor w10,w10,w7 + .long 0x0b0902b5 // add w21,w21,w9 // future e+=X[i] + .long 0x0b1902d6 // add w22,w22,w25 // e+=F(b,c,d) + .long 0x138a7d4a // ror w10,w10,#31 + .long 0x4a0d016b // eor w11,w11,w13 + .long 0x4a170299 // eor w25,w20,w23 + .long 0x13966edb // ror w27,w22,#27 + .long 0x0b1c0294 // add w20,w20,w28 // future e+=K + .long 0x4a03016b // eor w11,w11,w3 + .long 0x4a180339 // eor w25,w25,w24 + .long 0x0b1b02b5 // add w21,w21,w27 // e+=rot(a,5) + .long 0x13970af7 // ror w23,w23,#2 + .long 0x4a08016b // eor w11,w11,w8 + .long 0x0b0a0294 // add w20,w20,w10 // future e+=X[i] + .long 0x0b1902b5 // add w21,w21,w25 // e+=F(b,c,d) + .long 0x138b7d6b // ror w11,w11,#31 + .long 0x52979b9c // movz w28,#0xbcdc + .long 0x72b1e37c // movk w28,#0x8f1b, lsl #16 + .long 0x4a0e018c // eor w12,w12,w14 + .long 0x4a160319 // eor w25,w24,w22 + .long 0x13956ebb // ror w27,w21,#27 + .long 0x0b1c0318 // add w24,w24,w28 // future e+=K + .long 0x4a04018c // eor w12,w12,w4 + .long 0x4a170339 // eor w25,w25,w23 + .long 0x0b1b0294 // add w20,w20,w27 // e+=rot(a,5) + .long 0x13960ad6 // ror w22,w22,#2 + .long 0x4a09018c // eor w12,w12,w9 + .long 0x0b0b0318 // add w24,w24,w11 // future e+=X[i] + .long 0x0b190294 // add w20,w20,w25 // e+=F(b,c,d) + .long 0x138c7d8c // ror w12,w12,#31 + .long 0x2a1602b9 // orr w25,w21,w22 + .long 0x0a1602ba // and w26,w21,w22 + .long 0x4a0f01ad // eor w13,w13,w15 + .long 0x13946e9b // ror w27,w20,#27 + .long 0x0a170339 // and w25,w25,w23 + .long 0x0b1c02f7 // add w23,w23,w28 // future e+=K + .long 0x4a0501ad // eor w13,w13,w5 + .long 0x0b1b0318 // add w24,w24,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13950ab5 // ror w21,w21,#2 + .long 0x4a0a01ad // eor w13,w13,w10 + .long 0x0b0c02f7 // add w23,w23,w12 // future e+=X[i] + .long 0x0b190318 // add w24,w24,w25 // e+=F(b,c,d) + .long 0x138d7dad // ror w13,w13,#31 + .long 0x2a150299 // orr w25,w20,w21 + .long 0x0a15029a // and w26,w20,w21 + .long 0x4a1001ce // eor w14,w14,w16 + .long 0x13986f1b // ror w27,w24,#27 + .long 0x0a160339 // and w25,w25,w22 + .long 0x0b1c02d6 // add w22,w22,w28 // future e+=K + .long 0x4a0601ce // eor w14,w14,w6 + .long 0x0b1b02f7 // add w23,w23,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13940a94 // ror w20,w20,#2 + .long 0x4a0b01ce // eor w14,w14,w11 + .long 0x0b0d02d6 // add w22,w22,w13 // future e+=X[i] + .long 0x0b1902f7 // add w23,w23,w25 // e+=F(b,c,d) + .long 0x138e7dce // ror w14,w14,#31 + .long 0x2a140319 // orr w25,w24,w20 + .long 0x0a14031a // and w26,w24,w20 + .long 0x4a1101ef // eor w15,w15,w17 + .long 0x13976efb // ror w27,w23,#27 + .long 0x0a150339 // and w25,w25,w21 + .long 0x0b1c02b5 // add w21,w21,w28 // future e+=K + .long 0x4a0701ef // eor w15,w15,w7 + .long 0x0b1b02d6 // add w22,w22,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13980b18 // ror w24,w24,#2 + .long 0x4a0c01ef // eor w15,w15,w12 + .long 0x0b0e02b5 // add w21,w21,w14 // future e+=X[i] + .long 0x0b1902d6 // add w22,w22,w25 // e+=F(b,c,d) + .long 0x138f7def // ror w15,w15,#31 + .long 0x2a1802f9 // orr w25,w23,w24 + .long 0x0a1802fa // and w26,w23,w24 + .long 0x4a130210 // eor w16,w16,w19 + .long 0x13966edb // ror w27,w22,#27 + .long 0x0a140339 // and w25,w25,w20 + .long 0x0b1c0294 // add w20,w20,w28 // future e+=K + .long 0x4a080210 // eor w16,w16,w8 + .long 0x0b1b02b5 // add w21,w21,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13970af7 // ror w23,w23,#2 + .long 0x4a0d0210 // eor w16,w16,w13 + .long 0x0b0f0294 // add w20,w20,w15 // future e+=X[i] + .long 0x0b1902b5 // add w21,w21,w25 // e+=F(b,c,d) + .long 0x13907e10 // ror w16,w16,#31 + .long 0x2a1702d9 // orr w25,w22,w23 + .long 0x0a1702da // and w26,w22,w23 + .long 0x4a030231 // eor w17,w17,w3 + .long 0x13956ebb // ror w27,w21,#27 + .long 0x0a180339 // and w25,w25,w24 + .long 0x0b1c0318 // add w24,w24,w28 // future e+=K + .long 0x4a090231 // eor w17,w17,w9 + .long 0x0b1b0294 // add w20,w20,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13960ad6 // ror w22,w22,#2 + .long 0x4a0e0231 // eor w17,w17,w14 + .long 0x0b100318 // add w24,w24,w16 // future e+=X[i] + .long 0x0b190294 // add w20,w20,w25 // e+=F(b,c,d) + .long 0x13917e31 // ror w17,w17,#31 + .long 0x2a1602b9 // orr w25,w21,w22 + .long 0x0a1602ba // and w26,w21,w22 + .long 0x4a040273 // eor w19,w19,w4 + .long 0x13946e9b // ror w27,w20,#27 + .long 0x0a170339 // and w25,w25,w23 + .long 0x0b1c02f7 // add w23,w23,w28 // future e+=K + .long 0x4a0a0273 // eor w19,w19,w10 + .long 0x0b1b0318 // add w24,w24,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13950ab5 // ror w21,w21,#2 + .long 0x4a0f0273 // eor w19,w19,w15 + .long 0x0b1102f7 // add w23,w23,w17 // future e+=X[i] + .long 0x0b190318 // add w24,w24,w25 // e+=F(b,c,d) + .long 0x13937e73 // ror w19,w19,#31 + .long 0x2a150299 // orr w25,w20,w21 + .long 0x0a15029a // and w26,w20,w21 + .long 0x4a050063 // eor w3,w3,w5 + .long 0x13986f1b // ror w27,w24,#27 + .long 0x0a160339 // and w25,w25,w22 + .long 0x0b1c02d6 // add w22,w22,w28 // future e+=K + .long 0x4a0b0063 // eor w3,w3,w11 + .long 0x0b1b02f7 // add w23,w23,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13940a94 // ror w20,w20,#2 + .long 0x4a100063 // eor w3,w3,w16 + .long 0x0b1302d6 // add w22,w22,w19 // future e+=X[i] + .long 0x0b1902f7 // add w23,w23,w25 // e+=F(b,c,d) + .long 0x13837c63 // ror w3,w3,#31 + .long 0x2a140319 // orr w25,w24,w20 + .long 0x0a14031a // and w26,w24,w20 + .long 0x4a060084 // eor w4,w4,w6 + .long 0x13976efb // ror w27,w23,#27 + .long 0x0a150339 // and w25,w25,w21 + .long 0x0b1c02b5 // add w21,w21,w28 // future e+=K + .long 0x4a0c0084 // eor w4,w4,w12 + .long 0x0b1b02d6 // add w22,w22,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13980b18 // ror w24,w24,#2 + .long 0x4a110084 // eor w4,w4,w17 + .long 0x0b0302b5 // add w21,w21,w3 // future e+=X[i] + .long 0x0b1902d6 // add w22,w22,w25 // e+=F(b,c,d) + .long 0x13847c84 // ror w4,w4,#31 + .long 0x2a1802f9 // orr w25,w23,w24 + .long 0x0a1802fa // and w26,w23,w24 + .long 0x4a0700a5 // eor w5,w5,w7 + .long 0x13966edb // ror w27,w22,#27 + .long 0x0a140339 // and w25,w25,w20 + .long 0x0b1c0294 // add w20,w20,w28 // future e+=K + .long 0x4a0d00a5 // eor w5,w5,w13 + .long 0x0b1b02b5 // add w21,w21,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13970af7 // ror w23,w23,#2 + .long 0x4a1300a5 // eor w5,w5,w19 + .long 0x0b040294 // add w20,w20,w4 // future e+=X[i] + .long 0x0b1902b5 // add w21,w21,w25 // e+=F(b,c,d) + .long 0x13857ca5 // ror w5,w5,#31 + .long 0x2a1702d9 // orr w25,w22,w23 + .long 0x0a1702da // and w26,w22,w23 + .long 0x4a0800c6 // eor w6,w6,w8 + .long 0x13956ebb // ror w27,w21,#27 + .long 0x0a180339 // and w25,w25,w24 + .long 0x0b1c0318 // add w24,w24,w28 // future e+=K + .long 0x4a0e00c6 // eor w6,w6,w14 + .long 0x0b1b0294 // add w20,w20,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13960ad6 // ror w22,w22,#2 + .long 0x4a0300c6 // eor w6,w6,w3 + .long 0x0b050318 // add w24,w24,w5 // future e+=X[i] + .long 0x0b190294 // add w20,w20,w25 // e+=F(b,c,d) + .long 0x13867cc6 // ror w6,w6,#31 + .long 0x2a1602b9 // orr w25,w21,w22 + .long 0x0a1602ba // and w26,w21,w22 + .long 0x4a0900e7 // eor w7,w7,w9 + .long 0x13946e9b // ror w27,w20,#27 + .long 0x0a170339 // and w25,w25,w23 + .long 0x0b1c02f7 // add w23,w23,w28 // future e+=K + .long 0x4a0f00e7 // eor w7,w7,w15 + .long 0x0b1b0318 // add w24,w24,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13950ab5 // ror w21,w21,#2 + .long 0x4a0400e7 // eor w7,w7,w4 + .long 0x0b0602f7 // add w23,w23,w6 // future e+=X[i] + .long 0x0b190318 // add w24,w24,w25 // e+=F(b,c,d) + .long 0x13877ce7 // ror w7,w7,#31 + .long 0x2a150299 // orr w25,w20,w21 + .long 0x0a15029a // and w26,w20,w21 + .long 0x4a0a0108 // eor w8,w8,w10 + .long 0x13986f1b // ror w27,w24,#27 + .long 0x0a160339 // and w25,w25,w22 + .long 0x0b1c02d6 // add w22,w22,w28 // future e+=K + .long 0x4a100108 // eor w8,w8,w16 + .long 0x0b1b02f7 // add w23,w23,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13940a94 // ror w20,w20,#2 + .long 0x4a050108 // eor w8,w8,w5 + .long 0x0b0702d6 // add w22,w22,w7 // future e+=X[i] + .long 0x0b1902f7 // add w23,w23,w25 // e+=F(b,c,d) + .long 0x13887d08 // ror w8,w8,#31 + .long 0x2a140319 // orr w25,w24,w20 + .long 0x0a14031a // and w26,w24,w20 + .long 0x4a0b0129 // eor w9,w9,w11 + .long 0x13976efb // ror w27,w23,#27 + .long 0x0a150339 // and w25,w25,w21 + .long 0x0b1c02b5 // add w21,w21,w28 // future e+=K + .long 0x4a110129 // eor w9,w9,w17 + .long 0x0b1b02d6 // add w22,w22,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13980b18 // ror w24,w24,#2 + .long 0x4a060129 // eor w9,w9,w6 + .long 0x0b0802b5 // add w21,w21,w8 // future e+=X[i] + .long 0x0b1902d6 // add w22,w22,w25 // e+=F(b,c,d) + .long 0x13897d29 // ror w9,w9,#31 + .long 0x2a1802f9 // orr w25,w23,w24 + .long 0x0a1802fa // and w26,w23,w24 + .long 0x4a0c014a // eor w10,w10,w12 + .long 0x13966edb // ror w27,w22,#27 + .long 0x0a140339 // and w25,w25,w20 + .long 0x0b1c0294 // add w20,w20,w28 // future e+=K + .long 0x4a13014a // eor w10,w10,w19 + .long 0x0b1b02b5 // add w21,w21,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13970af7 // ror w23,w23,#2 + .long 0x4a07014a // eor w10,w10,w7 + .long 0x0b090294 // add w20,w20,w9 // future e+=X[i] + .long 0x0b1902b5 // add w21,w21,w25 // e+=F(b,c,d) + .long 0x138a7d4a // ror w10,w10,#31 + .long 0x2a1702d9 // orr w25,w22,w23 + .long 0x0a1702da // and w26,w22,w23 + .long 0x4a0d016b // eor w11,w11,w13 + .long 0x13956ebb // ror w27,w21,#27 + .long 0x0a180339 // and w25,w25,w24 + .long 0x0b1c0318 // add w24,w24,w28 // future e+=K + .long 0x4a03016b // eor w11,w11,w3 + .long 0x0b1b0294 // add w20,w20,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13960ad6 // ror w22,w22,#2 + .long 0x4a08016b // eor w11,w11,w8 + .long 0x0b0a0318 // add w24,w24,w10 // future e+=X[i] + .long 0x0b190294 // add w20,w20,w25 // e+=F(b,c,d) + .long 0x138b7d6b // ror w11,w11,#31 + .long 0x2a1602b9 // orr w25,w21,w22 + .long 0x0a1602ba // and w26,w21,w22 + .long 0x4a0e018c // eor w12,w12,w14 + .long 0x13946e9b // ror w27,w20,#27 + .long 0x0a170339 // and w25,w25,w23 + .long 0x0b1c02f7 // add w23,w23,w28 // future e+=K + .long 0x4a04018c // eor w12,w12,w4 + .long 0x0b1b0318 // add w24,w24,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13950ab5 // ror w21,w21,#2 + .long 0x4a09018c // eor w12,w12,w9 + .long 0x0b0b02f7 // add w23,w23,w11 // future e+=X[i] + .long 0x0b190318 // add w24,w24,w25 // e+=F(b,c,d) + .long 0x138c7d8c // ror w12,w12,#31 + .long 0x2a150299 // orr w25,w20,w21 + .long 0x0a15029a // and w26,w20,w21 + .long 0x4a0f01ad // eor w13,w13,w15 + .long 0x13986f1b // ror w27,w24,#27 + .long 0x0a160339 // and w25,w25,w22 + .long 0x0b1c02d6 // add w22,w22,w28 // future e+=K + .long 0x4a0501ad // eor w13,w13,w5 + .long 0x0b1b02f7 // add w23,w23,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13940a94 // ror w20,w20,#2 + .long 0x4a0a01ad // eor w13,w13,w10 + .long 0x0b0c02d6 // add w22,w22,w12 // future e+=X[i] + .long 0x0b1902f7 // add w23,w23,w25 // e+=F(b,c,d) + .long 0x138d7dad // ror w13,w13,#31 + .long 0x2a140319 // orr w25,w24,w20 + .long 0x0a14031a // and w26,w24,w20 + .long 0x4a1001ce // eor w14,w14,w16 + .long 0x13976efb // ror w27,w23,#27 + .long 0x0a150339 // and w25,w25,w21 + .long 0x0b1c02b5 // add w21,w21,w28 // future e+=K + .long 0x4a0601ce // eor w14,w14,w6 + .long 0x0b1b02d6 // add w22,w22,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13980b18 // ror w24,w24,#2 + .long 0x4a0b01ce // eor w14,w14,w11 + .long 0x0b0d02b5 // add w21,w21,w13 // future e+=X[i] + .long 0x0b1902d6 // add w22,w22,w25 // e+=F(b,c,d) + .long 0x138e7dce // ror w14,w14,#31 + .long 0x2a1802f9 // orr w25,w23,w24 + .long 0x0a1802fa // and w26,w23,w24 + .long 0x4a1101ef // eor w15,w15,w17 + .long 0x13966edb // ror w27,w22,#27 + .long 0x0a140339 // and w25,w25,w20 + .long 0x0b1c0294 // add w20,w20,w28 // future e+=K + .long 0x4a0701ef // eor w15,w15,w7 + .long 0x0b1b02b5 // add w21,w21,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13970af7 // ror w23,w23,#2 + .long 0x4a0c01ef // eor w15,w15,w12 + .long 0x0b0e0294 // add w20,w20,w14 // future e+=X[i] + .long 0x0b1902b5 // add w21,w21,w25 // e+=F(b,c,d) + .long 0x138f7def // ror w15,w15,#31 + .long 0x52983adc // movz w28,#0xc1d6 + .long 0x72b94c5c // movk w28,#0xca62, lsl #16 + .long 0x2a1702d9 // orr w25,w22,w23 + .long 0x0a1702da // and w26,w22,w23 + .long 0x4a130210 // eor w16,w16,w19 + .long 0x13956ebb // ror w27,w21,#27 + .long 0x0a180339 // and w25,w25,w24 + .long 0x0b1c0318 // add w24,w24,w28 // future e+=K + .long 0x4a080210 // eor w16,w16,w8 + .long 0x0b1b0294 // add w20,w20,w27 // e+=rot(a,5) + .long 0x2a1a0339 // orr w25,w25,w26 + .long 0x13960ad6 // ror w22,w22,#2 + .long 0x4a0d0210 // eor w16,w16,w13 + .long 0x0b0f0318 // add w24,w24,w15 // future e+=X[i] + .long 0x0b190294 // add w20,w20,w25 // e+=F(b,c,d) + .long 0x13907e10 // ror w16,w16,#31 + .long 0x4a030231 // eor w17,w17,w3 + .long 0x4a1502f9 // eor w25,w23,w21 + .long 0x13946e9b // ror w27,w20,#27 + .long 0x0b1c02f7 // add w23,w23,w28 // future e+=K + .long 0x4a090231 // eor w17,w17,w9 + .long 0x4a160339 // eor w25,w25,w22 + .long 0x0b1b0318 // add w24,w24,w27 // e+=rot(a,5) + .long 0x13950ab5 // ror w21,w21,#2 + .long 0x4a0e0231 // eor w17,w17,w14 + .long 0x0b1002f7 // add w23,w23,w16 // future e+=X[i] + .long 0x0b190318 // add w24,w24,w25 // e+=F(b,c,d) + .long 0x13917e31 // ror w17,w17,#31 + .long 0x4a040273 // eor w19,w19,w4 + .long 0x4a1402d9 // eor w25,w22,w20 + .long 0x13986f1b // ror w27,w24,#27 + .long 0x0b1c02d6 // add w22,w22,w28 // future e+=K + .long 0x4a0a0273 // eor w19,w19,w10 + .long 0x4a150339 // eor w25,w25,w21 + .long 0x0b1b02f7 // add w23,w23,w27 // e+=rot(a,5) + .long 0x13940a94 // ror w20,w20,#2 + .long 0x4a0f0273 // eor w19,w19,w15 + .long 0x0b1102d6 // add w22,w22,w17 // future e+=X[i] + .long 0x0b1902f7 // add w23,w23,w25 // e+=F(b,c,d) + .long 0x13937e73 // ror w19,w19,#31 + .long 0x4a050063 // eor w3,w3,w5 + .long 0x4a1802b9 // eor w25,w21,w24 + .long 0x13976efb // ror w27,w23,#27 + .long 0x0b1c02b5 // add w21,w21,w28 // future e+=K + .long 0x4a0b0063 // eor w3,w3,w11 + .long 0x4a140339 // eor w25,w25,w20 + .long 0x0b1b02d6 // add w22,w22,w27 // e+=rot(a,5) + .long 0x13980b18 // ror w24,w24,#2 + .long 0x4a100063 // eor w3,w3,w16 + .long 0x0b1302b5 // add w21,w21,w19 // future e+=X[i] + .long 0x0b1902d6 // add w22,w22,w25 // e+=F(b,c,d) + .long 0x13837c63 // ror w3,w3,#31 + .long 0x4a060084 // eor w4,w4,w6 + .long 0x4a170299 // eor w25,w20,w23 + .long 0x13966edb // ror w27,w22,#27 + .long 0x0b1c0294 // add w20,w20,w28 // future e+=K + .long 0x4a0c0084 // eor w4,w4,w12 + .long 0x4a180339 // eor w25,w25,w24 + .long 0x0b1b02b5 // add w21,w21,w27 // e+=rot(a,5) + .long 0x13970af7 // ror w23,w23,#2 + .long 0x4a110084 // eor w4,w4,w17 + .long 0x0b030294 // add w20,w20,w3 // future e+=X[i] + .long 0x0b1902b5 // add w21,w21,w25 // e+=F(b,c,d) + .long 0x13847c84 // ror w4,w4,#31 + .long 0x4a0700a5 // eor w5,w5,w7 + .long 0x4a160319 // eor w25,w24,w22 + .long 0x13956ebb // ror w27,w21,#27 + .long 0x0b1c0318 // add w24,w24,w28 // future e+=K + .long 0x4a0d00a5 // eor w5,w5,w13 + .long 0x4a170339 // eor w25,w25,w23 + .long 0x0b1b0294 // add w20,w20,w27 // e+=rot(a,5) + .long 0x13960ad6 // ror w22,w22,#2 + .long 0x4a1300a5 // eor w5,w5,w19 + .long 0x0b040318 // add w24,w24,w4 // future e+=X[i] + .long 0x0b190294 // add w20,w20,w25 // e+=F(b,c,d) + .long 0x13857ca5 // ror w5,w5,#31 + .long 0x4a0800c6 // eor w6,w6,w8 + .long 0x4a1502f9 // eor w25,w23,w21 + .long 0x13946e9b // ror w27,w20,#27 + .long 0x0b1c02f7 // add w23,w23,w28 // future e+=K + .long 0x4a0e00c6 // eor w6,w6,w14 + .long 0x4a160339 // eor w25,w25,w22 + .long 0x0b1b0318 // add w24,w24,w27 // e+=rot(a,5) + .long 0x13950ab5 // ror w21,w21,#2 + .long 0x4a0300c6 // eor w6,w6,w3 + .long 0x0b0502f7 // add w23,w23,w5 // future e+=X[i] + .long 0x0b190318 // add w24,w24,w25 // e+=F(b,c,d) + .long 0x13867cc6 // ror w6,w6,#31 + .long 0x4a0900e7 // eor w7,w7,w9 + .long 0x4a1402d9 // eor w25,w22,w20 + .long 0x13986f1b // ror w27,w24,#27 + .long 0x0b1c02d6 // add w22,w22,w28 // future e+=K + .long 0x4a0f00e7 // eor w7,w7,w15 + .long 0x4a150339 // eor w25,w25,w21 + .long 0x0b1b02f7 // add w23,w23,w27 // e+=rot(a,5) + .long 0x13940a94 // ror w20,w20,#2 + .long 0x4a0400e7 // eor w7,w7,w4 + .long 0x0b0602d6 // add w22,w22,w6 // future e+=X[i] + .long 0x0b1902f7 // add w23,w23,w25 // e+=F(b,c,d) + .long 0x13877ce7 // ror w7,w7,#31 + .long 0x4a0a0108 // eor w8,w8,w10 + .long 0x4a1802b9 // eor w25,w21,w24 + .long 0x13976efb // ror w27,w23,#27 + .long 0x0b1c02b5 // add w21,w21,w28 // future e+=K + .long 0x4a100108 // eor w8,w8,w16 + .long 0x4a140339 // eor w25,w25,w20 + .long 0x0b1b02d6 // add w22,w22,w27 // e+=rot(a,5) + .long 0x13980b18 // ror w24,w24,#2 + .long 0x4a050108 // eor w8,w8,w5 + .long 0x0b0702b5 // add w21,w21,w7 // future e+=X[i] + .long 0x0b1902d6 // add w22,w22,w25 // e+=F(b,c,d) + .long 0x13887d08 // ror w8,w8,#31 + .long 0x4a0b0129 // eor w9,w9,w11 + .long 0x4a170299 // eor w25,w20,w23 + .long 0x13966edb // ror w27,w22,#27 + .long 0x0b1c0294 // add w20,w20,w28 // future e+=K + .long 0x4a110129 // eor w9,w9,w17 + .long 0x4a180339 // eor w25,w25,w24 + .long 0x0b1b02b5 // add w21,w21,w27 // e+=rot(a,5) + .long 0x13970af7 // ror w23,w23,#2 + .long 0x4a060129 // eor w9,w9,w6 + .long 0x0b080294 // add w20,w20,w8 // future e+=X[i] + .long 0x0b1902b5 // add w21,w21,w25 // e+=F(b,c,d) + .long 0x13897d29 // ror w9,w9,#31 + .long 0x4a0c014a // eor w10,w10,w12 + .long 0x4a160319 // eor w25,w24,w22 + .long 0x13956ebb // ror w27,w21,#27 + .long 0x0b1c0318 // add w24,w24,w28 // future e+=K + .long 0x4a13014a // eor w10,w10,w19 + .long 0x4a170339 // eor w25,w25,w23 + .long 0x0b1b0294 // add w20,w20,w27 // e+=rot(a,5) + .long 0x13960ad6 // ror w22,w22,#2 + .long 0x4a07014a // eor w10,w10,w7 + .long 0x0b090318 // add w24,w24,w9 // future e+=X[i] + .long 0x0b190294 // add w20,w20,w25 // e+=F(b,c,d) + .long 0x138a7d4a // ror w10,w10,#31 + .long 0x4a0d016b // eor w11,w11,w13 + .long 0x4a1502f9 // eor w25,w23,w21 + .long 0x13946e9b // ror w27,w20,#27 + .long 0x0b1c02f7 // add w23,w23,w28 // future e+=K + .long 0x4a03016b // eor w11,w11,w3 + .long 0x4a160339 // eor w25,w25,w22 + .long 0x0b1b0318 // add w24,w24,w27 // e+=rot(a,5) + .long 0x13950ab5 // ror w21,w21,#2 + .long 0x4a08016b // eor w11,w11,w8 + .long 0x0b0a02f7 // add w23,w23,w10 // future e+=X[i] + .long 0x0b190318 // add w24,w24,w25 // e+=F(b,c,d) + .long 0x138b7d6b // ror w11,w11,#31 + .long 0x4a0e018c // eor w12,w12,w14 + .long 0x4a1402d9 // eor w25,w22,w20 + .long 0x13986f1b // ror w27,w24,#27 + .long 0x0b1c02d6 // add w22,w22,w28 // future e+=K + .long 0x4a04018c // eor w12,w12,w4 + .long 0x4a150339 // eor w25,w25,w21 + .long 0x0b1b02f7 // add w23,w23,w27 // e+=rot(a,5) + .long 0x13940a94 // ror w20,w20,#2 + .long 0x4a09018c // eor w12,w12,w9 + .long 0x0b0b02d6 // add w22,w22,w11 // future e+=X[i] + .long 0x0b1902f7 // add w23,w23,w25 // e+=F(b,c,d) + .long 0x138c7d8c // ror w12,w12,#31 + .long 0x4a0f01ad // eor w13,w13,w15 + .long 0x4a1802b9 // eor w25,w21,w24 + .long 0x13976efb // ror w27,w23,#27 + .long 0x0b1c02b5 // add w21,w21,w28 // future e+=K + .long 0x4a0501ad // eor w13,w13,w5 + .long 0x4a140339 // eor w25,w25,w20 + .long 0x0b1b02d6 // add w22,w22,w27 // e+=rot(a,5) + .long 0x13980b18 // ror w24,w24,#2 + .long 0x4a0a01ad // eor w13,w13,w10 + .long 0x0b0c02b5 // add w21,w21,w12 // future e+=X[i] + .long 0x0b1902d6 // add w22,w22,w25 // e+=F(b,c,d) + .long 0x138d7dad // ror w13,w13,#31 + .long 0x4a1001ce // eor w14,w14,w16 + .long 0x4a170299 // eor w25,w20,w23 + .long 0x13966edb // ror w27,w22,#27 + .long 0x0b1c0294 // add w20,w20,w28 // future e+=K + .long 0x4a0601ce // eor w14,w14,w6 + .long 0x4a180339 // eor w25,w25,w24 + .long 0x0b1b02b5 // add w21,w21,w27 // e+=rot(a,5) + .long 0x13970af7 // ror w23,w23,#2 + .long 0x4a0b01ce // eor w14,w14,w11 + .long 0x0b0d0294 // add w20,w20,w13 // future e+=X[i] + .long 0x0b1902b5 // add w21,w21,w25 // e+=F(b,c,d) + .long 0x138e7dce // ror w14,w14,#31 + .long 0x4a1101ef // eor w15,w15,w17 + .long 0x4a160319 // eor w25,w24,w22 + .long 0x13956ebb // ror w27,w21,#27 + .long 0x0b1c0318 // add w24,w24,w28 // future e+=K + .long 0x4a0701ef // eor w15,w15,w7 + .long 0x4a170339 // eor w25,w25,w23 + .long 0x0b1b0294 // add w20,w20,w27 // e+=rot(a,5) + .long 0x13960ad6 // ror w22,w22,#2 + .long 0x4a0c01ef // eor w15,w15,w12 + .long 0x0b0e0318 // add w24,w24,w14 // future e+=X[i] + .long 0x0b190294 // add w20,w20,w25 // e+=F(b,c,d) + .long 0x138f7def // ror w15,w15,#31 + .long 0x4a130210 // eor w16,w16,w19 + .long 0x4a1502f9 // eor w25,w23,w21 + .long 0x13946e9b // ror w27,w20,#27 + .long 0x0b1c02f7 // add w23,w23,w28 // future e+=K + .long 0x4a080210 // eor w16,w16,w8 + .long 0x4a160339 // eor w25,w25,w22 + .long 0x0b1b0318 // add w24,w24,w27 // e+=rot(a,5) + .long 0x13950ab5 // ror w21,w21,#2 + .long 0x4a0d0210 // eor w16,w16,w13 + .long 0x0b0f02f7 // add w23,w23,w15 // future e+=X[i] + .long 0x0b190318 // add w24,w24,w25 // e+=F(b,c,d) + .long 0x13907e10 // ror w16,w16,#31 + .long 0x4a030231 // eor w17,w17,w3 + .long 0x4a1402d9 // eor w25,w22,w20 + .long 0x13986f1b // ror w27,w24,#27 + .long 0x0b1c02d6 // add w22,w22,w28 // future e+=K + .long 0x4a090231 // eor w17,w17,w9 + .long 0x4a150339 // eor w25,w25,w21 + .long 0x0b1b02f7 // add w23,w23,w27 // e+=rot(a,5) + .long 0x13940a94 // ror w20,w20,#2 + .long 0x4a0e0231 // eor w17,w17,w14 + .long 0x0b1002d6 // add w22,w22,w16 // future e+=X[i] + .long 0x0b1902f7 // add w23,w23,w25 // e+=F(b,c,d) + .long 0x13917e31 // ror w17,w17,#31 + .long 0x4a040273 // eor w19,w19,w4 + .long 0x4a1802b9 // eor w25,w21,w24 + .long 0x13976efb // ror w27,w23,#27 + .long 0x0b1c02b5 // add w21,w21,w28 // future e+=K + .long 0x4a0a0273 // eor w19,w19,w10 + .long 0x4a140339 // eor w25,w25,w20 + .long 0x0b1b02d6 // add w22,w22,w27 // e+=rot(a,5) + .long 0x13980b18 // ror w24,w24,#2 + .long 0x4a0f0273 // eor w19,w19,w15 + .long 0x0b1102b5 // add w21,w21,w17 // future e+=X[i] + .long 0x0b1902d6 // add w22,w22,w25 // e+=F(b,c,d) + .long 0x13937e73 // ror w19,w19,#31 + .long 0x29401404 // ldp w4,w5,[x0] + .long 0x4a170299 // eor w25,w20,w23 + .long 0x13966edb // ror w27,w22,#27 + .long 0x0b1c0294 // add w20,w20,w28 // future e+=K + .long 0x4a180339 // eor w25,w25,w24 + .long 0x0b1b02b5 // add w21,w21,w27 // e+=rot(a,5) + .long 0x13970af7 // ror w23,w23,#2 + .long 0x0b130294 // add w20,w20,w19 // future e+=X[i] + .long 0x0b1902b5 // add w21,w21,w25 // e+=F(b,c,d) + .long 0x29411c06 // ldp w6,w7,[x0,#8] + .long 0x4a160319 // eor w25,w24,w22 + .long 0x13956ebb // ror w27,w21,#27 + .long 0x4a170339 // eor w25,w25,w23 + .long 0x0b1b0294 // add w20,w20,w27 // e+=rot(a,5) + .long 0x13960ad6 // ror w22,w22,#2 + .long 0xb9401008 // ldr w8,[x0,#16] + .long 0x0b190294 // add w20,w20,w25 // e+=F(b,c,d) + .long 0x0b0502b5 // add w21,w21,w5 + .long 0x0b0602d6 // add w22,w22,w6 + .long 0x0b040294 // add w20,w20,w4 + .long 0x0b0702f7 // add w23,w23,w7 + .long 0x0b080318 // add w24,w24,w8 + .long 0x29005414 // stp w20,w21,[x0] + .long 0x29015c16 // stp w22,w23,[x0,#8] + .long 0xb9001018 // str w24,[x0,#16] + cbnz x2,.Lsha1_gpr_loop + + .long 0xa94153f3 // ldp x19,x20,[sp,#16] + .long 0xa9425bf5 // ldp x21,x22,[sp,#32] + .long 0xa94363f7 // ldp x23,x24,[sp,#48] + .long 0xa9446bf9 // ldp x25,x26,[sp,#64] + .long 0xa94573fb // ldp x27,x28,[sp,#80] + .long 0xf84607fd // ldr x29,[sp],#96 + ret diff --git a/HashLib/src/Include/Simd/SHA256/SHA256CompressAvx2_i386.inc b/HashLib/src/Include/Simd/SHA256/SHA256CompressAvx_i386.inc similarity index 99% rename from HashLib/src/Include/Simd/SHA256/SHA256CompressAvx2_i386.inc rename to HashLib/src/Include/Simd/SHA256/SHA256CompressAvx_i386.inc index 6f198cbe..ffce73e1 100644 --- a/HashLib/src/Include/Simd/SHA256/SHA256CompressAvx2_i386.inc +++ b/HashLib/src/Include/Simd/SHA256/SHA256CompressAvx_i386.inc @@ -1,7 +1,6 @@ // SHA-256 AVX SIMD-schedule implementation (IA-32). VEX-128 (AVX1) -// instructions only - there is no i386 AVX2 SHA-256 upstream - dispatched at -// the AVX2 tier (every AVX2 CPU has AVX1; AVX1-only CPUs fall to the SSSE3 -// tier). The 3-operand VEX forms eliminate the SSSE3 kernel's register-copy +// instructions only - there is no i386 AVX2 SHA-256 upstream. The 3-operand +// VEX forms eliminate the SSSE3 kernel's register-copy // movdqa traffic; the byte-swap mask stays resident in xmm7. All VEX // instructions are db-encoded for broad assembler compatibility. // K256 is read from K256_Doubled at a 32-byte stride (the walk and offsets diff --git a/HashLib/src/Include/Simd/SHA256/SHA256CompressGpr_aarch64.inc b/HashLib/src/Include/Simd/SHA256/SHA256CompressGpr_aarch64.inc new file mode 100644 index 00000000..7217099a --- /dev/null +++ b/HashLib/src/Include/Simd/SHA256/SHA256CompressGpr_aarch64.inc @@ -0,0 +1,948 @@ +// SHA-256 pure-GPR implementation (AArch64) for cores without the SHA-256 +// crypto extension; the Gpr name states the ISA requirement: none beyond +// base AArch64. Serial SHA maps better onto the 31 GPRs than onto NEON +// lanes (single dependency chain, 1-op ror, rotate-folded eor operands). +// Expects AAPCS64 (after HlpSimdProc4Begin_aarch64): x0 = state ptr +// (8 x UInt32), x1 = data ptr, w2 = numblocks, x3 = K256_Gpr ptr. +// K256_Gpr carries the 64 round constants PLUS a zero terminator word - the +// message-schedule loop ends when the loaded K word is zero (cbnz), exactly +// like the original's sentinel-terminated table; a plain K256 const cannot +// drive this loop. +// Frame: 128-byte AAPCS64 frame (x29/x30 + x19-x28 callee-saved) + 16 bytes +// schedule scratch; x30 (LR) is repurposed as the K walk pointer between the +// save and the restore, as in the original. +// AArch64 instructions are .long-encoded for broad assembler compatibility. +// Reference: OpenSSL CRYPTOGAMS sha512-armv8.pl (sha256_block_data_order, +// the plain path; the generator emits both SHA-256 and SHA-512). + + .long 0x2a0203e2 // mov w2,w2 // zero-extend ANumBlocks (AAPCS64 leaves x2's top half undefined) + .long 0xa9b87bfd // stp x29,x30,[sp,#-128]! + .long 0x910003fd // add x29,sp,#0 + + .long 0xa90153f3 // stp x19,x20,[sp,#16] + .long 0xa9025bf5 // stp x21,x22,[sp,#32] + .long 0xa90363f7 // stp x23,x24,[sp,#48] + .long 0xa9046bf9 // stp x25,x26,[sp,#64] + .long 0xa90573fb // stp x27,x28,[sp,#80] + .long 0xd10043ff // sub sp,sp,#4*4 + + .long 0x29405414 // ldp w20,w21,[x0] // load context + .long 0x29415c16 // ldp w22,w23,[x0,#2*4] + .long 0x29426418 // ldp w24,w25,[x0,#4*4] + .long 0x8b021822 // add x2,x1,x2, lsl #6 // end of input + .long 0x29436c1a // ldp w26,w27,[x0,#6*4] + .long 0xaa0303fe // mov x30,x3 // K256_Gpr (param 4; x3 is reused for message words below) + .long 0xa9060ba0 // stp x0,x2,[x29,#96] + + +.Lsha256_gpr_loop: + .long 0x28c11023 // ldp w3,w4,[x1],#2*4 + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++ + .long 0x4a1602bc // eor w28,w21,w22 // magic seed + .long 0xf9003ba1 // str x1,[x29,#112] + .long 0x5ac00863 // rev w3,w3 // 0 + .long 0x13981b10 // ror w16,w24,#6 + .long 0x0b13037b // add w27,w27,w19 // h+=K[i] + .long 0x4ad83b06 // eor w6,w24,w24, ror #14 + .long 0x0a180331 // and w17,w25,w24 + .long 0x0a380353 // bic w19,w26,w24 + .long 0x0b03037b // add w27,w27,w3 // h+=X[i] + .long 0x2a130231 // orr w17,w17,w19 // Ch(e,f,g) + .long 0x4a150293 // eor w19,w20,w21 // a^b, b^c in next round + .long 0x4ac62e10 // eor w16,w16,w6, ror #11 // Sigma1(e) + .long 0x13940a86 // ror w6,w20,#2 + .long 0x0b11037b // add w27,w27,w17 // h+=Ch(e,f,g) + .long 0x4ad42691 // eor w17,w20,w20, ror #9 + .long 0x0b10037b // add w27,w27,w16 // h+=Sigma1(e) + .long 0x0a13039c // and w28,w28,w19 // (b^c)&=(a^b) + .long 0x0b1b02f7 // add w23,w23,w27 // d+=h + .long 0x4a15039c // eor w28,w28,w21 // Maj(a,b,c) + .long 0x4ad134d1 // eor w17,w6,w17, ror #13 // Sigma0(a) + .long 0x0b1c037b // add w27,w27,w28 // h+=Maj(a,b,c) + .long 0xb84047dc // ldr w28,[x30],#4 // *K++, w19 in next round + //add w27,w27,w17 // h+=Sigma0(a) + .long 0x5ac00884 // rev w4,w4 // 1 + .long 0x28c11825 // ldp w5,w6,[x1],#2*4 + .long 0x0b11037b // add w27,w27,w17 // h+=Sigma0(a) + .long 0x13971af0 // ror w16,w23,#6 + .long 0x0b1c035a // add w26,w26,w28 // h+=K[i] + .long 0x4ad73ae7 // eor w7,w23,w23, ror #14 + .long 0x0a170311 // and w17,w24,w23 + .long 0x0a37033c // bic w28,w25,w23 + .long 0x0b04035a // add w26,w26,w4 // h+=X[i] + .long 0x2a1c0231 // orr w17,w17,w28 // Ch(e,f,g) + .long 0x4a14037c // eor w28,w27,w20 // a^b, b^c in next round + .long 0x4ac72e10 // eor w16,w16,w7, ror #11 // Sigma1(e) + .long 0x139b0b67 // ror w7,w27,#2 + .long 0x0b11035a // add w26,w26,w17 // h+=Ch(e,f,g) + .long 0x4adb2771 // eor w17,w27,w27, ror #9 + .long 0x0b10035a // add w26,w26,w16 // h+=Sigma1(e) + .long 0x0a1c0273 // and w19,w19,w28 // (b^c)&=(a^b) + .long 0x0b1a02d6 // add w22,w22,w26 // d+=h + .long 0x4a140273 // eor w19,w19,w20 // Maj(a,b,c) + .long 0x4ad134f1 // eor w17,w7,w17, ror #13 // Sigma0(a) + .long 0x0b13035a // add w26,w26,w19 // h+=Maj(a,b,c) + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++, w28 in next round + //add w26,w26,w17 // h+=Sigma0(a) + .long 0x5ac008a5 // rev w5,w5 // 2 + .long 0x0b11035a // add w26,w26,w17 // h+=Sigma0(a) + .long 0x13961ad0 // ror w16,w22,#6 + .long 0x0b130339 // add w25,w25,w19 // h+=K[i] + .long 0x4ad63ac8 // eor w8,w22,w22, ror #14 + .long 0x0a1602f1 // and w17,w23,w22 + .long 0x0a360313 // bic w19,w24,w22 + .long 0x0b050339 // add w25,w25,w5 // h+=X[i] + .long 0x2a130231 // orr w17,w17,w19 // Ch(e,f,g) + .long 0x4a1b0353 // eor w19,w26,w27 // a^b, b^c in next round + .long 0x4ac82e10 // eor w16,w16,w8, ror #11 // Sigma1(e) + .long 0x139a0b48 // ror w8,w26,#2 + .long 0x0b110339 // add w25,w25,w17 // h+=Ch(e,f,g) + .long 0x4ada2751 // eor w17,w26,w26, ror #9 + .long 0x0b100339 // add w25,w25,w16 // h+=Sigma1(e) + .long 0x0a13039c // and w28,w28,w19 // (b^c)&=(a^b) + .long 0x0b1902b5 // add w21,w21,w25 // d+=h + .long 0x4a1b039c // eor w28,w28,w27 // Maj(a,b,c) + .long 0x4ad13511 // eor w17,w8,w17, ror #13 // Sigma0(a) + .long 0x0b1c0339 // add w25,w25,w28 // h+=Maj(a,b,c) + .long 0xb84047dc // ldr w28,[x30],#4 // *K++, w19 in next round + //add w25,w25,w17 // h+=Sigma0(a) + .long 0x5ac008c6 // rev w6,w6 // 3 + .long 0x28c12027 // ldp w7,w8,[x1],#2*4 + .long 0x0b110339 // add w25,w25,w17 // h+=Sigma0(a) + .long 0x13951ab0 // ror w16,w21,#6 + .long 0x0b1c0318 // add w24,w24,w28 // h+=K[i] + .long 0x4ad53aa9 // eor w9,w21,w21, ror #14 + .long 0x0a1502d1 // and w17,w22,w21 + .long 0x0a3502fc // bic w28,w23,w21 + .long 0x0b060318 // add w24,w24,w6 // h+=X[i] + .long 0x2a1c0231 // orr w17,w17,w28 // Ch(e,f,g) + .long 0x4a1a033c // eor w28,w25,w26 // a^b, b^c in next round + .long 0x4ac92e10 // eor w16,w16,w9, ror #11 // Sigma1(e) + .long 0x13990b29 // ror w9,w25,#2 + .long 0x0b110318 // add w24,w24,w17 // h+=Ch(e,f,g) + .long 0x4ad92731 // eor w17,w25,w25, ror #9 + .long 0x0b100318 // add w24,w24,w16 // h+=Sigma1(e) + .long 0x0a1c0273 // and w19,w19,w28 // (b^c)&=(a^b) + .long 0x0b180294 // add w20,w20,w24 // d+=h + .long 0x4a1a0273 // eor w19,w19,w26 // Maj(a,b,c) + .long 0x4ad13531 // eor w17,w9,w17, ror #13 // Sigma0(a) + .long 0x0b130318 // add w24,w24,w19 // h+=Maj(a,b,c) + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++, w28 in next round + //add w24,w24,w17 // h+=Sigma0(a) + .long 0x5ac008e7 // rev w7,w7 // 4 + .long 0x0b110318 // add w24,w24,w17 // h+=Sigma0(a) + .long 0x13941a90 // ror w16,w20,#6 + .long 0x0b1302f7 // add w23,w23,w19 // h+=K[i] + .long 0x4ad43a8a // eor w10,w20,w20, ror #14 + .long 0x0a1402b1 // and w17,w21,w20 + .long 0x0a3402d3 // bic w19,w22,w20 + .long 0x0b0702f7 // add w23,w23,w7 // h+=X[i] + .long 0x2a130231 // orr w17,w17,w19 // Ch(e,f,g) + .long 0x4a190313 // eor w19,w24,w25 // a^b, b^c in next round + .long 0x4aca2e10 // eor w16,w16,w10, ror #11 // Sigma1(e) + .long 0x13980b0a // ror w10,w24,#2 + .long 0x0b1102f7 // add w23,w23,w17 // h+=Ch(e,f,g) + .long 0x4ad82711 // eor w17,w24,w24, ror #9 + .long 0x0b1002f7 // add w23,w23,w16 // h+=Sigma1(e) + .long 0x0a13039c // and w28,w28,w19 // (b^c)&=(a^b) + .long 0x0b17037b // add w27,w27,w23 // d+=h + .long 0x4a19039c // eor w28,w28,w25 // Maj(a,b,c) + .long 0x4ad13551 // eor w17,w10,w17, ror #13 // Sigma0(a) + .long 0x0b1c02f7 // add w23,w23,w28 // h+=Maj(a,b,c) + .long 0xb84047dc // ldr w28,[x30],#4 // *K++, w19 in next round + //add w23,w23,w17 // h+=Sigma0(a) + .long 0x5ac00908 // rev w8,w8 // 5 + .long 0x28c12829 // ldp w9,w10,[x1],#2*4 + .long 0x0b1102f7 // add w23,w23,w17 // h+=Sigma0(a) + .long 0x139b1b70 // ror w16,w27,#6 + .long 0x0b1c02d6 // add w22,w22,w28 // h+=K[i] + .long 0x4adb3b6b // eor w11,w27,w27, ror #14 + .long 0x0a1b0291 // and w17,w20,w27 + .long 0x0a3b02bc // bic w28,w21,w27 + .long 0x0b0802d6 // add w22,w22,w8 // h+=X[i] + .long 0x2a1c0231 // orr w17,w17,w28 // Ch(e,f,g) + .long 0x4a1802fc // eor w28,w23,w24 // a^b, b^c in next round + .long 0x4acb2e10 // eor w16,w16,w11, ror #11 // Sigma1(e) + .long 0x13970aeb // ror w11,w23,#2 + .long 0x0b1102d6 // add w22,w22,w17 // h+=Ch(e,f,g) + .long 0x4ad726f1 // eor w17,w23,w23, ror #9 + .long 0x0b1002d6 // add w22,w22,w16 // h+=Sigma1(e) + .long 0x0a1c0273 // and w19,w19,w28 // (b^c)&=(a^b) + .long 0x0b16035a // add w26,w26,w22 // d+=h + .long 0x4a180273 // eor w19,w19,w24 // Maj(a,b,c) + .long 0x4ad13571 // eor w17,w11,w17, ror #13 // Sigma0(a) + .long 0x0b1302d6 // add w22,w22,w19 // h+=Maj(a,b,c) + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++, w28 in next round + //add w22,w22,w17 // h+=Sigma0(a) + .long 0x5ac00929 // rev w9,w9 // 6 + .long 0x0b1102d6 // add w22,w22,w17 // h+=Sigma0(a) + .long 0x139a1b50 // ror w16,w26,#6 + .long 0x0b1302b5 // add w21,w21,w19 // h+=K[i] + .long 0x4ada3b4c // eor w12,w26,w26, ror #14 + .long 0x0a1a0371 // and w17,w27,w26 + .long 0x0a3a0293 // bic w19,w20,w26 + .long 0x0b0902b5 // add w21,w21,w9 // h+=X[i] + .long 0x2a130231 // orr w17,w17,w19 // Ch(e,f,g) + .long 0x4a1702d3 // eor w19,w22,w23 // a^b, b^c in next round + .long 0x4acc2e10 // eor w16,w16,w12, ror #11 // Sigma1(e) + .long 0x13960acc // ror w12,w22,#2 + .long 0x0b1102b5 // add w21,w21,w17 // h+=Ch(e,f,g) + .long 0x4ad626d1 // eor w17,w22,w22, ror #9 + .long 0x0b1002b5 // add w21,w21,w16 // h+=Sigma1(e) + .long 0x0a13039c // and w28,w28,w19 // (b^c)&=(a^b) + .long 0x0b150339 // add w25,w25,w21 // d+=h + .long 0x4a17039c // eor w28,w28,w23 // Maj(a,b,c) + .long 0x4ad13591 // eor w17,w12,w17, ror #13 // Sigma0(a) + .long 0x0b1c02b5 // add w21,w21,w28 // h+=Maj(a,b,c) + .long 0xb84047dc // ldr w28,[x30],#4 // *K++, w19 in next round + //add w21,w21,w17 // h+=Sigma0(a) + .long 0x5ac0094a // rev w10,w10 // 7 + .long 0x28c1302b // ldp w11,w12,[x1],#2*4 + .long 0x0b1102b5 // add w21,w21,w17 // h+=Sigma0(a) + .long 0x13991b30 // ror w16,w25,#6 + .long 0x0b1c0294 // add w20,w20,w28 // h+=K[i] + .long 0x4ad93b2d // eor w13,w25,w25, ror #14 + .long 0x0a190351 // and w17,w26,w25 + .long 0x0a39037c // bic w28,w27,w25 + .long 0x0b0a0294 // add w20,w20,w10 // h+=X[i] + .long 0x2a1c0231 // orr w17,w17,w28 // Ch(e,f,g) + .long 0x4a1602bc // eor w28,w21,w22 // a^b, b^c in next round + .long 0x4acd2e10 // eor w16,w16,w13, ror #11 // Sigma1(e) + .long 0x13950aad // ror w13,w21,#2 + .long 0x0b110294 // add w20,w20,w17 // h+=Ch(e,f,g) + .long 0x4ad526b1 // eor w17,w21,w21, ror #9 + .long 0x0b100294 // add w20,w20,w16 // h+=Sigma1(e) + .long 0x0a1c0273 // and w19,w19,w28 // (b^c)&=(a^b) + .long 0x0b140318 // add w24,w24,w20 // d+=h + .long 0x4a160273 // eor w19,w19,w22 // Maj(a,b,c) + .long 0x4ad135b1 // eor w17,w13,w17, ror #13 // Sigma0(a) + .long 0x0b130294 // add w20,w20,w19 // h+=Maj(a,b,c) + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++, w28 in next round + //add w20,w20,w17 // h+=Sigma0(a) + .long 0x5ac0096b // rev w11,w11 // 8 + .long 0x0b110294 // add w20,w20,w17 // h+=Sigma0(a) + .long 0x13981b10 // ror w16,w24,#6 + .long 0x0b13037b // add w27,w27,w19 // h+=K[i] + .long 0x4ad83b0e // eor w14,w24,w24, ror #14 + .long 0x0a180331 // and w17,w25,w24 + .long 0x0a380353 // bic w19,w26,w24 + .long 0x0b0b037b // add w27,w27,w11 // h+=X[i] + .long 0x2a130231 // orr w17,w17,w19 // Ch(e,f,g) + .long 0x4a150293 // eor w19,w20,w21 // a^b, b^c in next round + .long 0x4ace2e10 // eor w16,w16,w14, ror #11 // Sigma1(e) + .long 0x13940a8e // ror w14,w20,#2 + .long 0x0b11037b // add w27,w27,w17 // h+=Ch(e,f,g) + .long 0x4ad42691 // eor w17,w20,w20, ror #9 + .long 0x0b10037b // add w27,w27,w16 // h+=Sigma1(e) + .long 0x0a13039c // and w28,w28,w19 // (b^c)&=(a^b) + .long 0x0b1b02f7 // add w23,w23,w27 // d+=h + .long 0x4a15039c // eor w28,w28,w21 // Maj(a,b,c) + .long 0x4ad135d1 // eor w17,w14,w17, ror #13 // Sigma0(a) + .long 0x0b1c037b // add w27,w27,w28 // h+=Maj(a,b,c) + .long 0xb84047dc // ldr w28,[x30],#4 // *K++, w19 in next round + //add w27,w27,w17 // h+=Sigma0(a) + .long 0x5ac0098c // rev w12,w12 // 9 + .long 0x28c1382d // ldp w13,w14,[x1],#2*4 + .long 0x0b11037b // add w27,w27,w17 // h+=Sigma0(a) + .long 0x13971af0 // ror w16,w23,#6 + .long 0x0b1c035a // add w26,w26,w28 // h+=K[i] + .long 0x4ad73aef // eor w15,w23,w23, ror #14 + .long 0x0a170311 // and w17,w24,w23 + .long 0x0a37033c // bic w28,w25,w23 + .long 0x0b0c035a // add w26,w26,w12 // h+=X[i] + .long 0x2a1c0231 // orr w17,w17,w28 // Ch(e,f,g) + .long 0x4a14037c // eor w28,w27,w20 // a^b, b^c in next round + .long 0x4acf2e10 // eor w16,w16,w15, ror #11 // Sigma1(e) + .long 0x139b0b6f // ror w15,w27,#2 + .long 0x0b11035a // add w26,w26,w17 // h+=Ch(e,f,g) + .long 0x4adb2771 // eor w17,w27,w27, ror #9 + .long 0x0b10035a // add w26,w26,w16 // h+=Sigma1(e) + .long 0x0a1c0273 // and w19,w19,w28 // (b^c)&=(a^b) + .long 0x0b1a02d6 // add w22,w22,w26 // d+=h + .long 0x4a140273 // eor w19,w19,w20 // Maj(a,b,c) + .long 0x4ad135f1 // eor w17,w15,w17, ror #13 // Sigma0(a) + .long 0x0b13035a // add w26,w26,w19 // h+=Maj(a,b,c) + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++, w28 in next round + //add w26,w26,w17 // h+=Sigma0(a) + .long 0x5ac009ad // rev w13,w13 // 10 + .long 0x0b11035a // add w26,w26,w17 // h+=Sigma0(a) + .long 0x13961ad0 // ror w16,w22,#6 + .long 0x0b130339 // add w25,w25,w19 // h+=K[i] + .long 0x4ad63ac0 // eor w0,w22,w22, ror #14 + .long 0x0a1602f1 // and w17,w23,w22 + .long 0x0a360313 // bic w19,w24,w22 + .long 0x0b0d0339 // add w25,w25,w13 // h+=X[i] + .long 0x2a130231 // orr w17,w17,w19 // Ch(e,f,g) + .long 0x4a1b0353 // eor w19,w26,w27 // a^b, b^c in next round + .long 0x4ac02e10 // eor w16,w16,w0, ror #11 // Sigma1(e) + .long 0x139a0b40 // ror w0,w26,#2 + .long 0x0b110339 // add w25,w25,w17 // h+=Ch(e,f,g) + .long 0x4ada2751 // eor w17,w26,w26, ror #9 + .long 0x0b100339 // add w25,w25,w16 // h+=Sigma1(e) + .long 0x0a13039c // and w28,w28,w19 // (b^c)&=(a^b) + .long 0x0b1902b5 // add w21,w21,w25 // d+=h + .long 0x4a1b039c // eor w28,w28,w27 // Maj(a,b,c) + .long 0x4ad13411 // eor w17,w0,w17, ror #13 // Sigma0(a) + .long 0x0b1c0339 // add w25,w25,w28 // h+=Maj(a,b,c) + .long 0xb84047dc // ldr w28,[x30],#4 // *K++, w19 in next round + //add w25,w25,w17 // h+=Sigma0(a) + .long 0x5ac009ce // rev w14,w14 // 11 + .long 0x28c1002f // ldp w15,w0,[x1],#2*4 + .long 0x0b110339 // add w25,w25,w17 // h+=Sigma0(a) + .long 0xb9000fe6 // str w6,[sp,#12] + .long 0x13951ab0 // ror w16,w21,#6 + .long 0x0b1c0318 // add w24,w24,w28 // h+=K[i] + .long 0x4ad53aa6 // eor w6,w21,w21, ror #14 + .long 0x0a1502d1 // and w17,w22,w21 + .long 0x0a3502fc // bic w28,w23,w21 + .long 0x0b0e0318 // add w24,w24,w14 // h+=X[i] + .long 0x2a1c0231 // orr w17,w17,w28 // Ch(e,f,g) + .long 0x4a1a033c // eor w28,w25,w26 // a^b, b^c in next round + .long 0x4ac62e10 // eor w16,w16,w6, ror #11 // Sigma1(e) + .long 0x13990b26 // ror w6,w25,#2 + .long 0x0b110318 // add w24,w24,w17 // h+=Ch(e,f,g) + .long 0x4ad92731 // eor w17,w25,w25, ror #9 + .long 0x0b100318 // add w24,w24,w16 // h+=Sigma1(e) + .long 0x0a1c0273 // and w19,w19,w28 // (b^c)&=(a^b) + .long 0x0b180294 // add w20,w20,w24 // d+=h + .long 0x4a1a0273 // eor w19,w19,w26 // Maj(a,b,c) + .long 0x4ad134d1 // eor w17,w6,w17, ror #13 // Sigma0(a) + .long 0x0b130318 // add w24,w24,w19 // h+=Maj(a,b,c) + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++, w28 in next round + //add w24,w24,w17 // h+=Sigma0(a) + .long 0x5ac009ef // rev w15,w15 // 12 + .long 0x0b110318 // add w24,w24,w17 // h+=Sigma0(a) + .long 0xb90003e7 // str w7,[sp,#0] + .long 0x13941a90 // ror w16,w20,#6 + .long 0x0b1302f7 // add w23,w23,w19 // h+=K[i] + .long 0x4ad43a87 // eor w7,w20,w20, ror #14 + .long 0x0a1402b1 // and w17,w21,w20 + .long 0x0a3402d3 // bic w19,w22,w20 + .long 0x0b0f02f7 // add w23,w23,w15 // h+=X[i] + .long 0x2a130231 // orr w17,w17,w19 // Ch(e,f,g) + .long 0x4a190313 // eor w19,w24,w25 // a^b, b^c in next round + .long 0x4ac72e10 // eor w16,w16,w7, ror #11 // Sigma1(e) + .long 0x13980b07 // ror w7,w24,#2 + .long 0x0b1102f7 // add w23,w23,w17 // h+=Ch(e,f,g) + .long 0x4ad82711 // eor w17,w24,w24, ror #9 + .long 0x0b1002f7 // add w23,w23,w16 // h+=Sigma1(e) + .long 0x0a13039c // and w28,w28,w19 // (b^c)&=(a^b) + .long 0x0b17037b // add w27,w27,w23 // d+=h + .long 0x4a19039c // eor w28,w28,w25 // Maj(a,b,c) + .long 0x4ad134f1 // eor w17,w7,w17, ror #13 // Sigma0(a) + .long 0x0b1c02f7 // add w23,w23,w28 // h+=Maj(a,b,c) + .long 0xb84047dc // ldr w28,[x30],#4 // *K++, w19 in next round + //add w23,w23,w17 // h+=Sigma0(a) + .long 0x5ac00800 // rev w0,w0 // 13 + .long 0x29400821 // ldp w1,w2,[x1] + .long 0x0b1102f7 // add w23,w23,w17 // h+=Sigma0(a) + .long 0xb90007e8 // str w8,[sp,#4] + .long 0x139b1b70 // ror w16,w27,#6 + .long 0x0b1c02d6 // add w22,w22,w28 // h+=K[i] + .long 0x4adb3b68 // eor w8,w27,w27, ror #14 + .long 0x0a1b0291 // and w17,w20,w27 + .long 0x0a3b02bc // bic w28,w21,w27 + .long 0x0b0002d6 // add w22,w22,w0 // h+=X[i] + .long 0x2a1c0231 // orr w17,w17,w28 // Ch(e,f,g) + .long 0x4a1802fc // eor w28,w23,w24 // a^b, b^c in next round + .long 0x4ac82e10 // eor w16,w16,w8, ror #11 // Sigma1(e) + .long 0x13970ae8 // ror w8,w23,#2 + .long 0x0b1102d6 // add w22,w22,w17 // h+=Ch(e,f,g) + .long 0x4ad726f1 // eor w17,w23,w23, ror #9 + .long 0x0b1002d6 // add w22,w22,w16 // h+=Sigma1(e) + .long 0x0a1c0273 // and w19,w19,w28 // (b^c)&=(a^b) + .long 0x0b16035a // add w26,w26,w22 // d+=h + .long 0x4a180273 // eor w19,w19,w24 // Maj(a,b,c) + .long 0x4ad13511 // eor w17,w8,w17, ror #13 // Sigma0(a) + .long 0x0b1302d6 // add w22,w22,w19 // h+=Maj(a,b,c) + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++, w28 in next round + //add w22,w22,w17 // h+=Sigma0(a) + .long 0x5ac00821 // rev w1,w1 // 14 + .long 0xb9400fe6 // ldr w6,[sp,#12] + .long 0x0b1102d6 // add w22,w22,w17 // h+=Sigma0(a) + .long 0xb9000be9 // str w9,[sp,#8] + .long 0x139a1b50 // ror w16,w26,#6 + .long 0x0b1302b5 // add w21,w21,w19 // h+=K[i] + .long 0x4ada3b49 // eor w9,w26,w26, ror #14 + .long 0x0a1a0371 // and w17,w27,w26 + .long 0x0a3a0293 // bic w19,w20,w26 + .long 0x0b0102b5 // add w21,w21,w1 // h+=X[i] + .long 0x2a130231 // orr w17,w17,w19 // Ch(e,f,g) + .long 0x4a1702d3 // eor w19,w22,w23 // a^b, b^c in next round + .long 0x4ac92e10 // eor w16,w16,w9, ror #11 // Sigma1(e) + .long 0x13960ac9 // ror w9,w22,#2 + .long 0x0b1102b5 // add w21,w21,w17 // h+=Ch(e,f,g) + .long 0x4ad626d1 // eor w17,w22,w22, ror #9 + .long 0x0b1002b5 // add w21,w21,w16 // h+=Sigma1(e) + .long 0x0a13039c // and w28,w28,w19 // (b^c)&=(a^b) + .long 0x0b150339 // add w25,w25,w21 // d+=h + .long 0x4a17039c // eor w28,w28,w23 // Maj(a,b,c) + .long 0x4ad13531 // eor w17,w9,w17, ror #13 // Sigma0(a) + .long 0x0b1c02b5 // add w21,w21,w28 // h+=Maj(a,b,c) + .long 0xb84047dc // ldr w28,[x30],#4 // *K++, w19 in next round + //add w21,w21,w17 // h+=Sigma0(a) + .long 0x5ac00842 // rev w2,w2 // 15 + .long 0xb94003e7 // ldr w7,[sp,#0] + .long 0x0b1102b5 // add w21,w21,w17 // h+=Sigma0(a) + .long 0xb9000fea // str w10,[sp,#12] + .long 0x13991b30 // ror w16,w25,#6 + .long 0x0b1c0294 // add w20,w20,w28 // h+=K[i] + .long 0x13841c89 // ror w9,w4,#7 + .long 0x0a190351 // and w17,w26,w25 + .long 0x13814428 // ror w8,w1,#17 + .long 0x0a39037c // bic w28,w27,w25 + .long 0x13950aaa // ror w10,w21,#2 + .long 0x0b020294 // add w20,w20,w2 // h+=X[i] + .long 0x4ad92e10 // eor w16,w16,w25, ror #11 + .long 0x4ac44929 // eor w9,w9,w4, ror #18 + .long 0x2a1c0231 // orr w17,w17,w28 // Ch(e,f,g) + .long 0x4a1602bc // eor w28,w21,w22 // a^b, b^c in next round + .long 0x4ad96610 // eor w16,w16,w25, ror #25 // Sigma1(e) + .long 0x4ad5354a // eor w10,w10,w21, ror #13 + .long 0x0b110294 // add w20,w20,w17 // h+=Ch(e,f,g) + .long 0x0a1c0273 // and w19,w19,w28 // (b^c)&=(a^b) + .long 0x4ac14d08 // eor w8,w8,w1, ror #19 + .long 0x4a440d29 // eor w9,w9,w4, lsr #3 // sigma0(X[i+1]) + .long 0x0b100294 // add w20,w20,w16 // h+=Sigma1(e) + .long 0x4a160273 // eor w19,w19,w22 // Maj(a,b,c) + .long 0x4ad55951 // eor w17,w10,w21, ror #22 // Sigma0(a) + .long 0x4a412908 // eor w8,w8,w1, lsr #10 // sigma1(X[i+14]) + .long 0x0b0c0063 // add w3,w3,w12 + .long 0x0b140318 // add w24,w24,w20 // d+=h + .long 0x0b130294 // add w20,w20,w19 // h+=Maj(a,b,c) + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++, w28 in next round + .long 0x0b090063 // add w3,w3,w9 + .long 0x0b110294 // add w20,w20,w17 // h+=Sigma0(a) + .long 0x0b080063 // add w3,w3,w8 + +.Lsha256_gpr_loop_16_xx: + .long 0xb94007e8 // ldr w8,[sp,#4] + .long 0xb90003eb // str w11,[sp,#0] + .long 0x13981b10 // ror w16,w24,#6 + .long 0x0b13037b // add w27,w27,w19 // h+=K[i] + .long 0x13851caa // ror w10,w5,#7 + .long 0x0a180331 // and w17,w25,w24 + .long 0x13824449 // ror w9,w2,#17 + .long 0x0a380353 // bic w19,w26,w24 + .long 0x13940a8b // ror w11,w20,#2 + .long 0x0b03037b // add w27,w27,w3 // h+=X[i] + .long 0x4ad82e10 // eor w16,w16,w24, ror #11 + .long 0x4ac5494a // eor w10,w10,w5, ror #18 + .long 0x2a130231 // orr w17,w17,w19 // Ch(e,f,g) + .long 0x4a150293 // eor w19,w20,w21 // a^b, b^c in next round + .long 0x4ad86610 // eor w16,w16,w24, ror #25 // Sigma1(e) + .long 0x4ad4356b // eor w11,w11,w20, ror #13 + .long 0x0b11037b // add w27,w27,w17 // h+=Ch(e,f,g) + .long 0x0a13039c // and w28,w28,w19 // (b^c)&=(a^b) + .long 0x4ac24d29 // eor w9,w9,w2, ror #19 + .long 0x4a450d4a // eor w10,w10,w5, lsr #3 // sigma0(X[i+1]) + .long 0x0b10037b // add w27,w27,w16 // h+=Sigma1(e) + .long 0x4a15039c // eor w28,w28,w21 // Maj(a,b,c) + .long 0x4ad45971 // eor w17,w11,w20, ror #22 // Sigma0(a) + .long 0x4a422929 // eor w9,w9,w2, lsr #10 // sigma1(X[i+14]) + .long 0x0b0d0084 // add w4,w4,w13 + .long 0x0b1b02f7 // add w23,w23,w27 // d+=h + .long 0x0b1c037b // add w27,w27,w28 // h+=Maj(a,b,c) + .long 0xb84047dc // ldr w28,[x30],#4 // *K++, w19 in next round + .long 0x0b0a0084 // add w4,w4,w10 + .long 0x0b11037b // add w27,w27,w17 // h+=Sigma0(a) + .long 0x0b090084 // add w4,w4,w9 + .long 0xb9400be9 // ldr w9,[sp,#8] + .long 0xb90007ec // str w12,[sp,#4] + .long 0x13971af0 // ror w16,w23,#6 + .long 0x0b1c035a // add w26,w26,w28 // h+=K[i] + .long 0x13861ccb // ror w11,w6,#7 + .long 0x0a170311 // and w17,w24,w23 + .long 0x1383446a // ror w10,w3,#17 + .long 0x0a37033c // bic w28,w25,w23 + .long 0x139b0b6c // ror w12,w27,#2 + .long 0x0b04035a // add w26,w26,w4 // h+=X[i] + .long 0x4ad72e10 // eor w16,w16,w23, ror #11 + .long 0x4ac6496b // eor w11,w11,w6, ror #18 + .long 0x2a1c0231 // orr w17,w17,w28 // Ch(e,f,g) + .long 0x4a14037c // eor w28,w27,w20 // a^b, b^c in next round + .long 0x4ad76610 // eor w16,w16,w23, ror #25 // Sigma1(e) + .long 0x4adb358c // eor w12,w12,w27, ror #13 + .long 0x0b11035a // add w26,w26,w17 // h+=Ch(e,f,g) + .long 0x0a1c0273 // and w19,w19,w28 // (b^c)&=(a^b) + .long 0x4ac34d4a // eor w10,w10,w3, ror #19 + .long 0x4a460d6b // eor w11,w11,w6, lsr #3 // sigma0(X[i+1]) + .long 0x0b10035a // add w26,w26,w16 // h+=Sigma1(e) + .long 0x4a140273 // eor w19,w19,w20 // Maj(a,b,c) + .long 0x4adb5991 // eor w17,w12,w27, ror #22 // Sigma0(a) + .long 0x4a43294a // eor w10,w10,w3, lsr #10 // sigma1(X[i+14]) + .long 0x0b0e00a5 // add w5,w5,w14 + .long 0x0b1a02d6 // add w22,w22,w26 // d+=h + .long 0x0b13035a // add w26,w26,w19 // h+=Maj(a,b,c) + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++, w28 in next round + .long 0x0b0b00a5 // add w5,w5,w11 + .long 0x0b11035a // add w26,w26,w17 // h+=Sigma0(a) + .long 0x0b0a00a5 // add w5,w5,w10 + .long 0xb9400fea // ldr w10,[sp,#12] + .long 0xb9000bed // str w13,[sp,#8] + .long 0x13961ad0 // ror w16,w22,#6 + .long 0x0b130339 // add w25,w25,w19 // h+=K[i] + .long 0x13871cec // ror w12,w7,#7 + .long 0x0a1602f1 // and w17,w23,w22 + .long 0x1384448b // ror w11,w4,#17 + .long 0x0a360313 // bic w19,w24,w22 + .long 0x139a0b4d // ror w13,w26,#2 + .long 0x0b050339 // add w25,w25,w5 // h+=X[i] + .long 0x4ad62e10 // eor w16,w16,w22, ror #11 + .long 0x4ac7498c // eor w12,w12,w7, ror #18 + .long 0x2a130231 // orr w17,w17,w19 // Ch(e,f,g) + .long 0x4a1b0353 // eor w19,w26,w27 // a^b, b^c in next round + .long 0x4ad66610 // eor w16,w16,w22, ror #25 // Sigma1(e) + .long 0x4ada35ad // eor w13,w13,w26, ror #13 + .long 0x0b110339 // add w25,w25,w17 // h+=Ch(e,f,g) + .long 0x0a13039c // and w28,w28,w19 // (b^c)&=(a^b) + .long 0x4ac44d6b // eor w11,w11,w4, ror #19 + .long 0x4a470d8c // eor w12,w12,w7, lsr #3 // sigma0(X[i+1]) + .long 0x0b100339 // add w25,w25,w16 // h+=Sigma1(e) + .long 0x4a1b039c // eor w28,w28,w27 // Maj(a,b,c) + .long 0x4ada59b1 // eor w17,w13,w26, ror #22 // Sigma0(a) + .long 0x4a44296b // eor w11,w11,w4, lsr #10 // sigma1(X[i+14]) + .long 0x0b0f00c6 // add w6,w6,w15 + .long 0x0b1902b5 // add w21,w21,w25 // d+=h + .long 0x0b1c0339 // add w25,w25,w28 // h+=Maj(a,b,c) + .long 0xb84047dc // ldr w28,[x30],#4 // *K++, w19 in next round + .long 0x0b0c00c6 // add w6,w6,w12 + .long 0x0b110339 // add w25,w25,w17 // h+=Sigma0(a) + .long 0x0b0b00c6 // add w6,w6,w11 + .long 0xb94003eb // ldr w11,[sp,#0] + .long 0xb9000fee // str w14,[sp,#12] + .long 0x13951ab0 // ror w16,w21,#6 + .long 0x0b1c0318 // add w24,w24,w28 // h+=K[i] + .long 0x13881d0d // ror w13,w8,#7 + .long 0x0a1502d1 // and w17,w22,w21 + .long 0x138544ac // ror w12,w5,#17 + .long 0x0a3502fc // bic w28,w23,w21 + .long 0x13990b2e // ror w14,w25,#2 + .long 0x0b060318 // add w24,w24,w6 // h+=X[i] + .long 0x4ad52e10 // eor w16,w16,w21, ror #11 + .long 0x4ac849ad // eor w13,w13,w8, ror #18 + .long 0x2a1c0231 // orr w17,w17,w28 // Ch(e,f,g) + .long 0x4a1a033c // eor w28,w25,w26 // a^b, b^c in next round + .long 0x4ad56610 // eor w16,w16,w21, ror #25 // Sigma1(e) + .long 0x4ad935ce // eor w14,w14,w25, ror #13 + .long 0x0b110318 // add w24,w24,w17 // h+=Ch(e,f,g) + .long 0x0a1c0273 // and w19,w19,w28 // (b^c)&=(a^b) + .long 0x4ac54d8c // eor w12,w12,w5, ror #19 + .long 0x4a480dad // eor w13,w13,w8, lsr #3 // sigma0(X[i+1]) + .long 0x0b100318 // add w24,w24,w16 // h+=Sigma1(e) + .long 0x4a1a0273 // eor w19,w19,w26 // Maj(a,b,c) + .long 0x4ad959d1 // eor w17,w14,w25, ror #22 // Sigma0(a) + .long 0x4a45298c // eor w12,w12,w5, lsr #10 // sigma1(X[i+14]) + .long 0x0b0000e7 // add w7,w7,w0 + .long 0x0b180294 // add w20,w20,w24 // d+=h + .long 0x0b130318 // add w24,w24,w19 // h+=Maj(a,b,c) + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++, w28 in next round + .long 0x0b0d00e7 // add w7,w7,w13 + .long 0x0b110318 // add w24,w24,w17 // h+=Sigma0(a) + .long 0x0b0c00e7 // add w7,w7,w12 + .long 0xb94007ec // ldr w12,[sp,#4] + .long 0xb90003ef // str w15,[sp,#0] + .long 0x13941a90 // ror w16,w20,#6 + .long 0x0b1302f7 // add w23,w23,w19 // h+=K[i] + .long 0x13891d2e // ror w14,w9,#7 + .long 0x0a1402b1 // and w17,w21,w20 + .long 0x138644cd // ror w13,w6,#17 + .long 0x0a3402d3 // bic w19,w22,w20 + .long 0x13980b0f // ror w15,w24,#2 + .long 0x0b0702f7 // add w23,w23,w7 // h+=X[i] + .long 0x4ad42e10 // eor w16,w16,w20, ror #11 + .long 0x4ac949ce // eor w14,w14,w9, ror #18 + .long 0x2a130231 // orr w17,w17,w19 // Ch(e,f,g) + .long 0x4a190313 // eor w19,w24,w25 // a^b, b^c in next round + .long 0x4ad46610 // eor w16,w16,w20, ror #25 // Sigma1(e) + .long 0x4ad835ef // eor w15,w15,w24, ror #13 + .long 0x0b1102f7 // add w23,w23,w17 // h+=Ch(e,f,g) + .long 0x0a13039c // and w28,w28,w19 // (b^c)&=(a^b) + .long 0x4ac64dad // eor w13,w13,w6, ror #19 + .long 0x4a490dce // eor w14,w14,w9, lsr #3 // sigma0(X[i+1]) + .long 0x0b1002f7 // add w23,w23,w16 // h+=Sigma1(e) + .long 0x4a19039c // eor w28,w28,w25 // Maj(a,b,c) + .long 0x4ad859f1 // eor w17,w15,w24, ror #22 // Sigma0(a) + .long 0x4a4629ad // eor w13,w13,w6, lsr #10 // sigma1(X[i+14]) + .long 0x0b010108 // add w8,w8,w1 + .long 0x0b17037b // add w27,w27,w23 // d+=h + .long 0x0b1c02f7 // add w23,w23,w28 // h+=Maj(a,b,c) + .long 0xb84047dc // ldr w28,[x30],#4 // *K++, w19 in next round + .long 0x0b0e0108 // add w8,w8,w14 + .long 0x0b1102f7 // add w23,w23,w17 // h+=Sigma0(a) + .long 0x0b0d0108 // add w8,w8,w13 + .long 0xb9400bed // ldr w13,[sp,#8] + .long 0xb90007e0 // str w0,[sp,#4] + .long 0x139b1b70 // ror w16,w27,#6 + .long 0x0b1c02d6 // add w22,w22,w28 // h+=K[i] + .long 0x138a1d4f // ror w15,w10,#7 + .long 0x0a1b0291 // and w17,w20,w27 + .long 0x138744ee // ror w14,w7,#17 + .long 0x0a3b02bc // bic w28,w21,w27 + .long 0x13970ae0 // ror w0,w23,#2 + .long 0x0b0802d6 // add w22,w22,w8 // h+=X[i] + .long 0x4adb2e10 // eor w16,w16,w27, ror #11 + .long 0x4aca49ef // eor w15,w15,w10, ror #18 + .long 0x2a1c0231 // orr w17,w17,w28 // Ch(e,f,g) + .long 0x4a1802fc // eor w28,w23,w24 // a^b, b^c in next round + .long 0x4adb6610 // eor w16,w16,w27, ror #25 // Sigma1(e) + .long 0x4ad73400 // eor w0,w0,w23, ror #13 + .long 0x0b1102d6 // add w22,w22,w17 // h+=Ch(e,f,g) + .long 0x0a1c0273 // and w19,w19,w28 // (b^c)&=(a^b) + .long 0x4ac74dce // eor w14,w14,w7, ror #19 + .long 0x4a4a0def // eor w15,w15,w10, lsr #3 // sigma0(X[i+1]) + .long 0x0b1002d6 // add w22,w22,w16 // h+=Sigma1(e) + .long 0x4a180273 // eor w19,w19,w24 // Maj(a,b,c) + .long 0x4ad75811 // eor w17,w0,w23, ror #22 // Sigma0(a) + .long 0x4a4729ce // eor w14,w14,w7, lsr #10 // sigma1(X[i+14]) + .long 0x0b020129 // add w9,w9,w2 + .long 0x0b16035a // add w26,w26,w22 // d+=h + .long 0x0b1302d6 // add w22,w22,w19 // h+=Maj(a,b,c) + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++, w28 in next round + .long 0x0b0f0129 // add w9,w9,w15 + .long 0x0b1102d6 // add w22,w22,w17 // h+=Sigma0(a) + .long 0x0b0e0129 // add w9,w9,w14 + .long 0xb9400fee // ldr w14,[sp,#12] + .long 0xb9000be1 // str w1,[sp,#8] + .long 0x139a1b50 // ror w16,w26,#6 + .long 0x0b1302b5 // add w21,w21,w19 // h+=K[i] + .long 0x138b1d60 // ror w0,w11,#7 + .long 0x0a1a0371 // and w17,w27,w26 + .long 0x1388450f // ror w15,w8,#17 + .long 0x0a3a0293 // bic w19,w20,w26 + .long 0x13960ac1 // ror w1,w22,#2 + .long 0x0b0902b5 // add w21,w21,w9 // h+=X[i] + .long 0x4ada2e10 // eor w16,w16,w26, ror #11 + .long 0x4acb4800 // eor w0,w0,w11, ror #18 + .long 0x2a130231 // orr w17,w17,w19 // Ch(e,f,g) + .long 0x4a1702d3 // eor w19,w22,w23 // a^b, b^c in next round + .long 0x4ada6610 // eor w16,w16,w26, ror #25 // Sigma1(e) + .long 0x4ad63421 // eor w1,w1,w22, ror #13 + .long 0x0b1102b5 // add w21,w21,w17 // h+=Ch(e,f,g) + .long 0x0a13039c // and w28,w28,w19 // (b^c)&=(a^b) + .long 0x4ac84def // eor w15,w15,w8, ror #19 + .long 0x4a4b0c00 // eor w0,w0,w11, lsr #3 // sigma0(X[i+1]) + .long 0x0b1002b5 // add w21,w21,w16 // h+=Sigma1(e) + .long 0x4a17039c // eor w28,w28,w23 // Maj(a,b,c) + .long 0x4ad65831 // eor w17,w1,w22, ror #22 // Sigma0(a) + .long 0x4a4829ef // eor w15,w15,w8, lsr #10 // sigma1(X[i+14]) + .long 0x0b03014a // add w10,w10,w3 + .long 0x0b150339 // add w25,w25,w21 // d+=h + .long 0x0b1c02b5 // add w21,w21,w28 // h+=Maj(a,b,c) + .long 0xb84047dc // ldr w28,[x30],#4 // *K++, w19 in next round + .long 0x0b00014a // add w10,w10,w0 + .long 0x0b1102b5 // add w21,w21,w17 // h+=Sigma0(a) + .long 0x0b0f014a // add w10,w10,w15 + .long 0xb94003ef // ldr w15,[sp,#0] + .long 0xb9000fe2 // str w2,[sp,#12] + .long 0x13991b30 // ror w16,w25,#6 + .long 0x0b1c0294 // add w20,w20,w28 // h+=K[i] + .long 0x138c1d81 // ror w1,w12,#7 + .long 0x0a190351 // and w17,w26,w25 + .long 0x13894520 // ror w0,w9,#17 + .long 0x0a39037c // bic w28,w27,w25 + .long 0x13950aa2 // ror w2,w21,#2 + .long 0x0b0a0294 // add w20,w20,w10 // h+=X[i] + .long 0x4ad92e10 // eor w16,w16,w25, ror #11 + .long 0x4acc4821 // eor w1,w1,w12, ror #18 + .long 0x2a1c0231 // orr w17,w17,w28 // Ch(e,f,g) + .long 0x4a1602bc // eor w28,w21,w22 // a^b, b^c in next round + .long 0x4ad96610 // eor w16,w16,w25, ror #25 // Sigma1(e) + .long 0x4ad53442 // eor w2,w2,w21, ror #13 + .long 0x0b110294 // add w20,w20,w17 // h+=Ch(e,f,g) + .long 0x0a1c0273 // and w19,w19,w28 // (b^c)&=(a^b) + .long 0x4ac94c00 // eor w0,w0,w9, ror #19 + .long 0x4a4c0c21 // eor w1,w1,w12, lsr #3 // sigma0(X[i+1]) + .long 0x0b100294 // add w20,w20,w16 // h+=Sigma1(e) + .long 0x4a160273 // eor w19,w19,w22 // Maj(a,b,c) + .long 0x4ad55851 // eor w17,w2,w21, ror #22 // Sigma0(a) + .long 0x4a492800 // eor w0,w0,w9, lsr #10 // sigma1(X[i+14]) + .long 0x0b04016b // add w11,w11,w4 + .long 0x0b140318 // add w24,w24,w20 // d+=h + .long 0x0b130294 // add w20,w20,w19 // h+=Maj(a,b,c) + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++, w28 in next round + .long 0x0b01016b // add w11,w11,w1 + .long 0x0b110294 // add w20,w20,w17 // h+=Sigma0(a) + .long 0x0b00016b // add w11,w11,w0 + .long 0xb94007e0 // ldr w0,[sp,#4] + .long 0xb90003e3 // str w3,[sp,#0] + .long 0x13981b10 // ror w16,w24,#6 + .long 0x0b13037b // add w27,w27,w19 // h+=K[i] + .long 0x138d1da2 // ror w2,w13,#7 + .long 0x0a180331 // and w17,w25,w24 + .long 0x138a4541 // ror w1,w10,#17 + .long 0x0a380353 // bic w19,w26,w24 + .long 0x13940a83 // ror w3,w20,#2 + .long 0x0b0b037b // add w27,w27,w11 // h+=X[i] + .long 0x4ad82e10 // eor w16,w16,w24, ror #11 + .long 0x4acd4842 // eor w2,w2,w13, ror #18 + .long 0x2a130231 // orr w17,w17,w19 // Ch(e,f,g) + .long 0x4a150293 // eor w19,w20,w21 // a^b, b^c in next round + .long 0x4ad86610 // eor w16,w16,w24, ror #25 // Sigma1(e) + .long 0x4ad43463 // eor w3,w3,w20, ror #13 + .long 0x0b11037b // add w27,w27,w17 // h+=Ch(e,f,g) + .long 0x0a13039c // and w28,w28,w19 // (b^c)&=(a^b) + .long 0x4aca4c21 // eor w1,w1,w10, ror #19 + .long 0x4a4d0c42 // eor w2,w2,w13, lsr #3 // sigma0(X[i+1]) + .long 0x0b10037b // add w27,w27,w16 // h+=Sigma1(e) + .long 0x4a15039c // eor w28,w28,w21 // Maj(a,b,c) + .long 0x4ad45871 // eor w17,w3,w20, ror #22 // Sigma0(a) + .long 0x4a4a2821 // eor w1,w1,w10, lsr #10 // sigma1(X[i+14]) + .long 0x0b05018c // add w12,w12,w5 + .long 0x0b1b02f7 // add w23,w23,w27 // d+=h + .long 0x0b1c037b // add w27,w27,w28 // h+=Maj(a,b,c) + .long 0xb84047dc // ldr w28,[x30],#4 // *K++, w19 in next round + .long 0x0b02018c // add w12,w12,w2 + .long 0x0b11037b // add w27,w27,w17 // h+=Sigma0(a) + .long 0x0b01018c // add w12,w12,w1 + .long 0xb9400be1 // ldr w1,[sp,#8] + .long 0xb90007e4 // str w4,[sp,#4] + .long 0x13971af0 // ror w16,w23,#6 + .long 0x0b1c035a // add w26,w26,w28 // h+=K[i] + .long 0x138e1dc3 // ror w3,w14,#7 + .long 0x0a170311 // and w17,w24,w23 + .long 0x138b4562 // ror w2,w11,#17 + .long 0x0a37033c // bic w28,w25,w23 + .long 0x139b0b64 // ror w4,w27,#2 + .long 0x0b0c035a // add w26,w26,w12 // h+=X[i] + .long 0x4ad72e10 // eor w16,w16,w23, ror #11 + .long 0x4ace4863 // eor w3,w3,w14, ror #18 + .long 0x2a1c0231 // orr w17,w17,w28 // Ch(e,f,g) + .long 0x4a14037c // eor w28,w27,w20 // a^b, b^c in next round + .long 0x4ad76610 // eor w16,w16,w23, ror #25 // Sigma1(e) + .long 0x4adb3484 // eor w4,w4,w27, ror #13 + .long 0x0b11035a // add w26,w26,w17 // h+=Ch(e,f,g) + .long 0x0a1c0273 // and w19,w19,w28 // (b^c)&=(a^b) + .long 0x4acb4c42 // eor w2,w2,w11, ror #19 + .long 0x4a4e0c63 // eor w3,w3,w14, lsr #3 // sigma0(X[i+1]) + .long 0x0b10035a // add w26,w26,w16 // h+=Sigma1(e) + .long 0x4a140273 // eor w19,w19,w20 // Maj(a,b,c) + .long 0x4adb5891 // eor w17,w4,w27, ror #22 // Sigma0(a) + .long 0x4a4b2842 // eor w2,w2,w11, lsr #10 // sigma1(X[i+14]) + .long 0x0b0601ad // add w13,w13,w6 + .long 0x0b1a02d6 // add w22,w22,w26 // d+=h + .long 0x0b13035a // add w26,w26,w19 // h+=Maj(a,b,c) + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++, w28 in next round + .long 0x0b0301ad // add w13,w13,w3 + .long 0x0b11035a // add w26,w26,w17 // h+=Sigma0(a) + .long 0x0b0201ad // add w13,w13,w2 + .long 0xb9400fe2 // ldr w2,[sp,#12] + .long 0xb9000be5 // str w5,[sp,#8] + .long 0x13961ad0 // ror w16,w22,#6 + .long 0x0b130339 // add w25,w25,w19 // h+=K[i] + .long 0x138f1de4 // ror w4,w15,#7 + .long 0x0a1602f1 // and w17,w23,w22 + .long 0x138c4583 // ror w3,w12,#17 + .long 0x0a360313 // bic w19,w24,w22 + .long 0x139a0b45 // ror w5,w26,#2 + .long 0x0b0d0339 // add w25,w25,w13 // h+=X[i] + .long 0x4ad62e10 // eor w16,w16,w22, ror #11 + .long 0x4acf4884 // eor w4,w4,w15, ror #18 + .long 0x2a130231 // orr w17,w17,w19 // Ch(e,f,g) + .long 0x4a1b0353 // eor w19,w26,w27 // a^b, b^c in next round + .long 0x4ad66610 // eor w16,w16,w22, ror #25 // Sigma1(e) + .long 0x4ada34a5 // eor w5,w5,w26, ror #13 + .long 0x0b110339 // add w25,w25,w17 // h+=Ch(e,f,g) + .long 0x0a13039c // and w28,w28,w19 // (b^c)&=(a^b) + .long 0x4acc4c63 // eor w3,w3,w12, ror #19 + .long 0x4a4f0c84 // eor w4,w4,w15, lsr #3 // sigma0(X[i+1]) + .long 0x0b100339 // add w25,w25,w16 // h+=Sigma1(e) + .long 0x4a1b039c // eor w28,w28,w27 // Maj(a,b,c) + .long 0x4ada58b1 // eor w17,w5,w26, ror #22 // Sigma0(a) + .long 0x4a4c2863 // eor w3,w3,w12, lsr #10 // sigma1(X[i+14]) + .long 0x0b0701ce // add w14,w14,w7 + .long 0x0b1902b5 // add w21,w21,w25 // d+=h + .long 0x0b1c0339 // add w25,w25,w28 // h+=Maj(a,b,c) + .long 0xb84047dc // ldr w28,[x30],#4 // *K++, w19 in next round + .long 0x0b0401ce // add w14,w14,w4 + .long 0x0b110339 // add w25,w25,w17 // h+=Sigma0(a) + .long 0x0b0301ce // add w14,w14,w3 + .long 0xb94003e3 // ldr w3,[sp,#0] + .long 0xb9000fe6 // str w6,[sp,#12] + .long 0x13951ab0 // ror w16,w21,#6 + .long 0x0b1c0318 // add w24,w24,w28 // h+=K[i] + .long 0x13801c05 // ror w5,w0,#7 + .long 0x0a1502d1 // and w17,w22,w21 + .long 0x138d45a4 // ror w4,w13,#17 + .long 0x0a3502fc // bic w28,w23,w21 + .long 0x13990b26 // ror w6,w25,#2 + .long 0x0b0e0318 // add w24,w24,w14 // h+=X[i] + .long 0x4ad52e10 // eor w16,w16,w21, ror #11 + .long 0x4ac048a5 // eor w5,w5,w0, ror #18 + .long 0x2a1c0231 // orr w17,w17,w28 // Ch(e,f,g) + .long 0x4a1a033c // eor w28,w25,w26 // a^b, b^c in next round + .long 0x4ad56610 // eor w16,w16,w21, ror #25 // Sigma1(e) + .long 0x4ad934c6 // eor w6,w6,w25, ror #13 + .long 0x0b110318 // add w24,w24,w17 // h+=Ch(e,f,g) + .long 0x0a1c0273 // and w19,w19,w28 // (b^c)&=(a^b) + .long 0x4acd4c84 // eor w4,w4,w13, ror #19 + .long 0x4a400ca5 // eor w5,w5,w0, lsr #3 // sigma0(X[i+1]) + .long 0x0b100318 // add w24,w24,w16 // h+=Sigma1(e) + .long 0x4a1a0273 // eor w19,w19,w26 // Maj(a,b,c) + .long 0x4ad958d1 // eor w17,w6,w25, ror #22 // Sigma0(a) + .long 0x4a4d2884 // eor w4,w4,w13, lsr #10 // sigma1(X[i+14]) + .long 0x0b0801ef // add w15,w15,w8 + .long 0x0b180294 // add w20,w20,w24 // d+=h + .long 0x0b130318 // add w24,w24,w19 // h+=Maj(a,b,c) + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++, w28 in next round + .long 0x0b0501ef // add w15,w15,w5 + .long 0x0b110318 // add w24,w24,w17 // h+=Sigma0(a) + .long 0x0b0401ef // add w15,w15,w4 + .long 0xb94007e4 // ldr w4,[sp,#4] + .long 0xb90003e7 // str w7,[sp,#0] + .long 0x13941a90 // ror w16,w20,#6 + .long 0x0b1302f7 // add w23,w23,w19 // h+=K[i] + .long 0x13811c26 // ror w6,w1,#7 + .long 0x0a1402b1 // and w17,w21,w20 + .long 0x138e45c5 // ror w5,w14,#17 + .long 0x0a3402d3 // bic w19,w22,w20 + .long 0x13980b07 // ror w7,w24,#2 + .long 0x0b0f02f7 // add w23,w23,w15 // h+=X[i] + .long 0x4ad42e10 // eor w16,w16,w20, ror #11 + .long 0x4ac148c6 // eor w6,w6,w1, ror #18 + .long 0x2a130231 // orr w17,w17,w19 // Ch(e,f,g) + .long 0x4a190313 // eor w19,w24,w25 // a^b, b^c in next round + .long 0x4ad46610 // eor w16,w16,w20, ror #25 // Sigma1(e) + .long 0x4ad834e7 // eor w7,w7,w24, ror #13 + .long 0x0b1102f7 // add w23,w23,w17 // h+=Ch(e,f,g) + .long 0x0a13039c // and w28,w28,w19 // (b^c)&=(a^b) + .long 0x4ace4ca5 // eor w5,w5,w14, ror #19 + .long 0x4a410cc6 // eor w6,w6,w1, lsr #3 // sigma0(X[i+1]) + .long 0x0b1002f7 // add w23,w23,w16 // h+=Sigma1(e) + .long 0x4a19039c // eor w28,w28,w25 // Maj(a,b,c) + .long 0x4ad858f1 // eor w17,w7,w24, ror #22 // Sigma0(a) + .long 0x4a4e28a5 // eor w5,w5,w14, lsr #10 // sigma1(X[i+14]) + .long 0x0b090000 // add w0,w0,w9 + .long 0x0b17037b // add w27,w27,w23 // d+=h + .long 0x0b1c02f7 // add w23,w23,w28 // h+=Maj(a,b,c) + .long 0xb84047dc // ldr w28,[x30],#4 // *K++, w19 in next round + .long 0x0b060000 // add w0,w0,w6 + .long 0x0b1102f7 // add w23,w23,w17 // h+=Sigma0(a) + .long 0x0b050000 // add w0,w0,w5 + .long 0xb9400be5 // ldr w5,[sp,#8] + .long 0xb90007e8 // str w8,[sp,#4] + .long 0x139b1b70 // ror w16,w27,#6 + .long 0x0b1c02d6 // add w22,w22,w28 // h+=K[i] + .long 0x13821c47 // ror w7,w2,#7 + .long 0x0a1b0291 // and w17,w20,w27 + .long 0x138f45e6 // ror w6,w15,#17 + .long 0x0a3b02bc // bic w28,w21,w27 + .long 0x13970ae8 // ror w8,w23,#2 + .long 0x0b0002d6 // add w22,w22,w0 // h+=X[i] + .long 0x4adb2e10 // eor w16,w16,w27, ror #11 + .long 0x4ac248e7 // eor w7,w7,w2, ror #18 + .long 0x2a1c0231 // orr w17,w17,w28 // Ch(e,f,g) + .long 0x4a1802fc // eor w28,w23,w24 // a^b, b^c in next round + .long 0x4adb6610 // eor w16,w16,w27, ror #25 // Sigma1(e) + .long 0x4ad73508 // eor w8,w8,w23, ror #13 + .long 0x0b1102d6 // add w22,w22,w17 // h+=Ch(e,f,g) + .long 0x0a1c0273 // and w19,w19,w28 // (b^c)&=(a^b) + .long 0x4acf4cc6 // eor w6,w6,w15, ror #19 + .long 0x4a420ce7 // eor w7,w7,w2, lsr #3 // sigma0(X[i+1]) + .long 0x0b1002d6 // add w22,w22,w16 // h+=Sigma1(e) + .long 0x4a180273 // eor w19,w19,w24 // Maj(a,b,c) + .long 0x4ad75911 // eor w17,w8,w23, ror #22 // Sigma0(a) + .long 0x4a4f28c6 // eor w6,w6,w15, lsr #10 // sigma1(X[i+14]) + .long 0x0b0a0021 // add w1,w1,w10 + .long 0x0b16035a // add w26,w26,w22 // d+=h + .long 0x0b1302d6 // add w22,w22,w19 // h+=Maj(a,b,c) + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++, w28 in next round + .long 0x0b070021 // add w1,w1,w7 + .long 0x0b1102d6 // add w22,w22,w17 // h+=Sigma0(a) + .long 0x0b060021 // add w1,w1,w6 + .long 0xb9400fe6 // ldr w6,[sp,#12] + .long 0xb9000be9 // str w9,[sp,#8] + .long 0x139a1b50 // ror w16,w26,#6 + .long 0x0b1302b5 // add w21,w21,w19 // h+=K[i] + .long 0x13831c68 // ror w8,w3,#7 + .long 0x0a1a0371 // and w17,w27,w26 + .long 0x13804407 // ror w7,w0,#17 + .long 0x0a3a0293 // bic w19,w20,w26 + .long 0x13960ac9 // ror w9,w22,#2 + .long 0x0b0102b5 // add w21,w21,w1 // h+=X[i] + .long 0x4ada2e10 // eor w16,w16,w26, ror #11 + .long 0x4ac34908 // eor w8,w8,w3, ror #18 + .long 0x2a130231 // orr w17,w17,w19 // Ch(e,f,g) + .long 0x4a1702d3 // eor w19,w22,w23 // a^b, b^c in next round + .long 0x4ada6610 // eor w16,w16,w26, ror #25 // Sigma1(e) + .long 0x4ad63529 // eor w9,w9,w22, ror #13 + .long 0x0b1102b5 // add w21,w21,w17 // h+=Ch(e,f,g) + .long 0x0a13039c // and w28,w28,w19 // (b^c)&=(a^b) + .long 0x4ac04ce7 // eor w7,w7,w0, ror #19 + .long 0x4a430d08 // eor w8,w8,w3, lsr #3 // sigma0(X[i+1]) + .long 0x0b1002b5 // add w21,w21,w16 // h+=Sigma1(e) + .long 0x4a17039c // eor w28,w28,w23 // Maj(a,b,c) + .long 0x4ad65931 // eor w17,w9,w22, ror #22 // Sigma0(a) + .long 0x4a4028e7 // eor w7,w7,w0, lsr #10 // sigma1(X[i+14]) + .long 0x0b0b0042 // add w2,w2,w11 + .long 0x0b150339 // add w25,w25,w21 // d+=h + .long 0x0b1c02b5 // add w21,w21,w28 // h+=Maj(a,b,c) + .long 0xb84047dc // ldr w28,[x30],#4 // *K++, w19 in next round + .long 0x0b080042 // add w2,w2,w8 + .long 0x0b1102b5 // add w21,w21,w17 // h+=Sigma0(a) + .long 0x0b070042 // add w2,w2,w7 + .long 0xb94003e7 // ldr w7,[sp,#0] + .long 0xb9000fea // str w10,[sp,#12] + .long 0x13991b30 // ror w16,w25,#6 + .long 0x0b1c0294 // add w20,w20,w28 // h+=K[i] + .long 0x13841c89 // ror w9,w4,#7 + .long 0x0a190351 // and w17,w26,w25 + .long 0x13814428 // ror w8,w1,#17 + .long 0x0a39037c // bic w28,w27,w25 + .long 0x13950aaa // ror w10,w21,#2 + .long 0x0b020294 // add w20,w20,w2 // h+=X[i] + .long 0x4ad92e10 // eor w16,w16,w25, ror #11 + .long 0x4ac44929 // eor w9,w9,w4, ror #18 + .long 0x2a1c0231 // orr w17,w17,w28 // Ch(e,f,g) + .long 0x4a1602bc // eor w28,w21,w22 // a^b, b^c in next round + .long 0x4ad96610 // eor w16,w16,w25, ror #25 // Sigma1(e) + .long 0x4ad5354a // eor w10,w10,w21, ror #13 + .long 0x0b110294 // add w20,w20,w17 // h+=Ch(e,f,g) + .long 0x0a1c0273 // and w19,w19,w28 // (b^c)&=(a^b) + .long 0x4ac14d08 // eor w8,w8,w1, ror #19 + .long 0x4a440d29 // eor w9,w9,w4, lsr #3 // sigma0(X[i+1]) + .long 0x0b100294 // add w20,w20,w16 // h+=Sigma1(e) + .long 0x4a160273 // eor w19,w19,w22 // Maj(a,b,c) + .long 0x4ad55951 // eor w17,w10,w21, ror #22 // Sigma0(a) + .long 0x4a412908 // eor w8,w8,w1, lsr #10 // sigma1(X[i+14]) + .long 0x0b0c0063 // add w3,w3,w12 + .long 0x0b140318 // add w24,w24,w20 // d+=h + .long 0x0b130294 // add w20,w20,w19 // h+=Maj(a,b,c) + .long 0xb84047d3 // ldr w19,[x30],#4 // *K++, w28 in next round + .long 0x0b090063 // add w3,w3,w9 + .long 0x0b110294 // add w20,w20,w17 // h+=Sigma0(a) + .long 0x0b080063 // add w3,w3,w8 + cbnz w19,.Lsha256_gpr_loop_16_xx + + .long 0xa9460ba0 // ldp x0,x2,[x29,#96] + .long 0xf9403ba1 // ldr x1,[x29,#112] + .long 0xd10413de // sub x30,x30,#260 // rewind + + .long 0x29401003 // ldp w3,w4,[x0] + .long 0x29411805 // ldp w5,w6,[x0,#2*4] + .long 0x9100e021 // add x1,x1,#14*4 // advance input pointer + .long 0x29422007 // ldp w7,w8,[x0,#4*4] + .long 0x0b030294 // add w20,w20,w3 + .long 0x29432809 // ldp w9,w10,[x0,#6*4] + .long 0x0b0402b5 // add w21,w21,w4 + .long 0x0b0502d6 // add w22,w22,w5 + .long 0x0b0602f7 // add w23,w23,w6 + .long 0x29005414 // stp w20,w21,[x0] + .long 0x0b070318 // add w24,w24,w7 + .long 0x0b080339 // add w25,w25,w8 + .long 0x29015c16 // stp w22,w23,[x0,#2*4] + .long 0x0b09035a // add w26,w26,w9 + .long 0x0b0a037b // add w27,w27,w10 + .long 0xeb02003f // cmp x1,x2 + .long 0x29026418 // stp w24,w25,[x0,#4*4] + .long 0x29036c1a // stp w26,w27,[x0,#6*4] + b.ne .Lsha256_gpr_loop + + .long 0xa94153b3 // ldp x19,x20,[x29,#16] + .long 0x910043ff // add sp,sp,#4*4 + .long 0xa9425bb5 // ldp x21,x22,[x29,#32] + .long 0xa94363b7 // ldp x23,x24,[x29,#48] + .long 0xa9446bb9 // ldp x25,x26,[x29,#64] + .long 0xa94573bb // ldp x27,x28,[x29,#80] + .long 0xa8c87bfd // ldp x29,x30,[sp],#128 + ret diff --git a/HashLib/src/Include/Simd/SHA3/KeccakF1600GprAbsorb_aarch64.inc b/HashLib/src/Include/Simd/SHA3/KeccakF1600GprAbsorb_aarch64.inc new file mode 100644 index 00000000..c575f0b4 --- /dev/null +++ b/HashLib/src/Include/Simd/SHA3/KeccakF1600GprAbsorb_aarch64.inc @@ -0,0 +1,352 @@ +// Keccak-f[1600] pure-GPR multi-block absorb (AArch64) for cores without +// FEAT_SHA3; the Gpr name states the ISA requirement: none beyond base +// AArch64. XORs each rate-sized block into the state (unrolled per-lane +// ladder driven by the block size), then runs the same GPR permutation as +// KeccakF1600Gpr_aarch64.inc - the inner is this file's own copy. +// Expects AAPCS64 (after HlpSimdProc5Begin_aarch64): x0 = AState +// (25 x UInt64, standard layout), x1 = AData, w2 = ABlockCount, +// w3 = ABlockSize (bytes), x4 = AConstants (iotas: 24 x UInt64). +// The reference takes a byte length; it is computed as +// ABlockCount * ABlockSize on entry. The reference frame grows 64 -> 80 +// because its own slots occupy [sp,#32..63] - the iotas end pointer for the +// permutation's end-pointer termination (see the permute kernel's header) +// lives at [sp,#64]. +// AArch64 instructions are .long-encoded for broad assembler compatibility. +// Reference: OpenSSL CRYPTOGAMS keccak1600-armv8.pl (SHA3_absorb + +// KeccakF1600_int, the plain path) by Andy Polyakov. + + .long 0xa9b87bfd // stp x29,x30,[sp,#-128]! + .long 0x910003fd // add x29,sp,#0 + .long 0xa90153f3 // stp x19,x20,[sp,#16] + .long 0xa9025bf5 // stp x21,x22,[sp,#32] + .long 0xa90363f7 // stp x23,x24,[sp,#48] + .long 0xa9046bf9 // stp x25,x26,[sp,#64] + .long 0xa90573fb // stp x27,x28,[sp,#80] + .long 0xd10143ff // sub sp,sp,#80 // reference frame + 16 for the iotas end slot + .long 0x91030084 // add x4,x4,#192 // iotas end = AConstants + 24*8 + .long 0xf90023e4 // str x4,[sp,#64] // stashed for the inner + .long 0x9ba37c42 // umull x2,w2,w3 // len = ABlockCount * ABlockSize bytes + .long 0x2a0303e3 // mov w3,w3 // zero-extend ABlockSize (AAPCS64 leaves x3's top half undefined) + + .long 0xa90207e0 // stp x0,x1,[sp,#32] // offload arguments + .long 0xa9030fe2 // stp x2,x3,[sp,#48] + + .long 0xaa0003fa // mov x26,x0 // uint64_t A[5][5] + .long 0xaa0103fb // mov x27,x1 // const void *inp + .long 0xaa0203fc // mov x28,x2 // size_t len + .long 0xaa0303fe // mov x30,x3 // size_t bsz + .long 0xa9400740 // ldp x0,x1,[x26,#16*0] + .long 0xa9410f42 // ldp x2,x3,[x26,#16*1] + .long 0xa9421744 // ldp x4,x5,[x26,#16*2] + .long 0xa9431f46 // ldp x6,x7,[x26,#16*3] + .long 0xa9442748 // ldp x8,x9,[x26,#16*4] + .long 0xa9452f4a // ldp x10,x11,[x26,#16*5] + .long 0xa946374c // ldp x12,x13,[x26,#16*6] + .long 0xa9473f4e // ldp x14,x15,[x26,#16*7] + .long 0xa9484750 // ldp x16,x17,[x26,#16*8] + .long 0xa9494f59 // ldp x25,x19,[x26,#16*9] + .long 0xa94a5754 // ldp x20,x21,[x26,#16*10] + .long 0xa94b5f56 // ldp x22,x23,[x26,#16*11] + .long 0xf9406358 // ldr x24,[x26,#16*12] + b .Lkeccak_gpr_absorb_loop_absorb + + +.Lkeccak_gpr_absorb_loop_absorb: + .long 0xeb1e039a // subs x26,x28,x30 // len - bsz + b.lo .Lkeccak_gpr_absorb_absorbed + + .long 0xf9001bfa // str x26,[sp,#48] // save len - bsz + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a0000 // eor x0,x0,x26 + .long 0xf10043df // cmp x30,#8*(0+2) + b.lo .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a0021 // eor x1,x1,x26 + b.eq .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a0042 // eor x2,x2,x26 + .long 0xf10083df // cmp x30,#8*(2+2) + b.lo .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a0063 // eor x3,x3,x26 + b.eq .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a0084 // eor x4,x4,x26 + .long 0xf100c3df // cmp x30,#8*(4+2) + b.lo .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a00a5 // eor x5,x5,x26 + b.eq .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a00c6 // eor x6,x6,x26 + .long 0xf10103df // cmp x30,#8*(6+2) + b.lo .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a00e7 // eor x7,x7,x26 + b.eq .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a0108 // eor x8,x8,x26 + .long 0xf10143df // cmp x30,#8*(8+2) + b.lo .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a0129 // eor x9,x9,x26 + b.eq .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a014a // eor x10,x10,x26 + .long 0xf10183df // cmp x30,#8*(10+2) + b.lo .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a016b // eor x11,x11,x26 + b.eq .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a018c // eor x12,x12,x26 + .long 0xf101c3df // cmp x30,#8*(12+2) + b.lo .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a01ad // eor x13,x13,x26 + b.eq .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a01ce // eor x14,x14,x26 + .long 0xf10203df // cmp x30,#8*(14+2) + b.lo .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a01ef // eor x15,x15,x26 + b.eq .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a0210 // eor x16,x16,x26 + .long 0xf10243df // cmp x30,#8*(16+2) + b.lo .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a0231 // eor x17,x17,x26 + b.eq .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a0339 // eor x25,x25,x26 + .long 0xf10283df // cmp x30,#8*(18+2) + b.lo .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a0273 // eor x19,x19,x26 + b.eq .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a0294 // eor x20,x20,x26 + .long 0xf102c3df // cmp x30,#8*(20+2) + b.lo .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a02b5 // eor x21,x21,x26 + b.eq .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a02d6 // eor x22,x22,x26 + .long 0xf10303df // cmp x30,#8*(22+2) + b.lo .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a02f7 // eor x23,x23,x26 + b.eq .Lkeccak_gpr_absorb_process_block + .long 0xf840877a // ldr x26,[x27],#8 // *inp++ + .long 0xca1a0318 // eor x24,x24,x26 + + +.Lkeccak_gpr_absorb_process_block: + .long 0xf90017fb // str x27,[sp,#40] // save inp + + bl .Lkeccak_gpr_absorb_int + + .long 0xf94017fb // ldr x27,[sp,#40] // restore arguments + .long 0xa9437bfc // ldp x28,x30,[sp,#48] + b .Lkeccak_gpr_absorb_loop_absorb + + +.Lkeccak_gpr_absorb_absorbed: + .long 0xf94013fb // ldr x27,[sp,#32] + .long 0xa9000760 // stp x0,x1,[x27,#16*0] + .long 0xa9010f62 // stp x2,x3,[x27,#16*1] + .long 0xa9021764 // stp x4,x5,[x27,#16*2] + .long 0xa9031f66 // stp x6,x7,[x27,#16*3] + .long 0xa9042768 // stp x8,x9,[x27,#16*4] + .long 0xa9052f6a // stp x10,x11,[x27,#16*5] + .long 0xa906376c // stp x12,x13,[x27,#16*6] + .long 0xa9073f6e // stp x14,x15,[x27,#16*7] + .long 0xa9084770 // stp x16,x17,[x27,#16*8] + .long 0xa9094f79 // stp x25,x19,[x27,#16*9] + .long 0xa90a5774 // stp x20,x21,[x27,#16*10] + .long 0xa90b5f76 // stp x22,x23,[x27,#16*11] + .long 0xf9006378 // str x24,[x27,#16*12] + + .long 0xaa1c03e0 // mov x0,x28 // return value + .long 0xa94153b3 // ldp x19,x20,[x29,#16] + .long 0x910143ff // add sp,sp,#80 + .long 0xa9425bb5 // ldp x21,x22,[x29,#32] + .long 0xa94363b7 // ldp x23,x24,[x29,#48] + .long 0xa9446bb9 // ldp x25,x26,[x29,#64] + .long 0xa94573bb // ldp x27,x28,[x29,#80] + .long 0xa8c87bfd // ldp x29,x30,[sp],#128 + ret + + +.Lkeccak_gpr_absorb_int: + .long 0xf94023fc // ldr x28,[sp,#64] // iotas end (stashed by the absorb) + .long 0xd103039c // sub x28,x28,#192 // iotas base (24 x 8) + .long 0xa9017bfc // stp x28,x30,[sp,#16] // 32 bytes on top are mine + b .Lkeccak_gpr_absorb_loop + +.Lkeccak_gpr_absorb_loop: + ////////////////////////////////////////// Theta + .long 0xca05001a // eor x26,x0,x5 + .long 0xa90027e4 // stp x4,x9,[sp,#0] // offload pair... + .long 0xca06003b // eor x27,x1,x6 + .long 0xca07005c // eor x28,x2,x7 + .long 0xca08007e // eor x30,x3,x8 + .long 0xca090084 // eor x4,x4,x9 + .long 0xca0a035a // eor x26,x26,x10 + .long 0xca0b037b // eor x27,x27,x11 + .long 0xca0c039c // eor x28,x28,x12 + .long 0xca0d03de // eor x30,x30,x13 + .long 0xca0e0084 // eor x4,x4,x14 + .long 0xca0f035a // eor x26,x26,x15 + .long 0xca10037b // eor x27,x27,x16 + .long 0xca11039c // eor x28,x28,x17 + .long 0xca1903de // eor x30,x30,x25 + .long 0xca130084 // eor x4,x4,x19 + .long 0xca14035a // eor x26,x26,x20 + .long 0xca16039c // eor x28,x28,x22 + .long 0xca15037b // eor x27,x27,x21 + .long 0xca1703de // eor x30,x30,x23 + .long 0xca180084 // eor x4,x4,x24 + + .long 0xcadcff49 // eor x9,x26,x28, ror #63 + + .long 0xca090021 // eor x1,x1,x9 + .long 0xca0900c6 // eor x6,x6,x9 + .long 0xca09016b // eor x11,x11,x9 + .long 0xca090210 // eor x16,x16,x9 + .long 0xca0902b5 // eor x21,x21,x9 + + .long 0xcadeff69 // eor x9,x27,x30, ror #63 + .long 0xcac4ff9c // eor x28,x28,x4, ror #63 + .long 0xcadaffde // eor x30,x30,x26, ror #63 + .long 0xcadbfc84 // eor x4,x4,x27, ror #63 + + .long 0xca09005b // eor x27, x2,x9 // mov x27,x2 + .long 0xca0900e7 // eor x7,x7,x9 + .long 0xca09018c // eor x12,x12,x9 + .long 0xca090231 // eor x17,x17,x9 + .long 0xca0902d6 // eor x22,x22,x9 + + .long 0xca040000 // eor x0,x0,x4 + .long 0xca0400a5 // eor x5,x5,x4 + .long 0xca04014a // eor x10,x10,x4 + .long 0xca0401ef // eor x15,x15,x4 + .long 0xca040294 // eor x20,x20,x4 + .long 0xa94027e4 // ldp x4,x9,[sp,#0] // re-load offloaded data + .long 0xca1c007a // eor x26, x3,x28 // mov x26,x3 + .long 0xca1c0108 // eor x8,x8,x28 + .long 0xca1c01ad // eor x13,x13,x28 + .long 0xca1c0339 // eor x25,x25,x28 + .long 0xca1c02f7 // eor x23,x23,x28 + + .long 0xca1e009c // eor x28, x4,x30 // mov x28,x4 + .long 0xca1e0129 // eor x9,x9,x30 + .long 0xca1e01ce // eor x14,x14,x30 + .long 0xca1e0273 // eor x19,x19,x30 + .long 0xca1e0318 // eor x24,x24,x30 + + ////////////////////////////////////////// Rho+Pi + .long 0xaa0103fe // mov x30,x1 + .long 0x93c650c1 // ror x1,x6,#64-44 + //mov x27,x2 + .long 0x93cc5582 // ror x2,x12,#64-43 + //mov x26,x3 + .long 0x93d9af23 // ror x3,x25,#64-21 + //mov x28,x4 + .long 0x93d8cb04 // ror x4,x24,#64-14 + + .long 0x93c9b126 // ror x6,x9,#64-20 + .long 0x93cd9dac // ror x12,x13,#64-25 + .long 0x93d1c639 // ror x25,x17,#64-15 + .long 0x93d5fab8 // ror x24,x21,#64-2 + + .long 0x93d60ec9 // ror x9,x22,#64-61 + .long 0x93d3e26d // ror x13,x19,#64-8 + .long 0x93cbd971 // ror x17,x11,#64-10 + .long 0x93c82515 // ror x21,x8,#64-55 + + .long 0x93ce65d6 // ror x22,x14,#64-39 + .long 0x93d722f3 // ror x19,x23,#64-56 + .long 0x93c7e8eb // ror x11,x7,#64-6 + .long 0x93d04e08 // ror x8,x16,#64-45 + + .long 0x93d4ba8e // ror x14,x20,#64-18 + .long 0x93cf5df7 // ror x23,x15,#64-41 + .long 0x93caf547 // ror x7,x10,#64-3 + .long 0x93c570b0 // ror x16,x5,#64-36 + + .long 0x93da9345 // ror x5,x26,#64-28 + .long 0x93deffca // ror x10,x30,#64-1 + .long 0x93dc978f // ror x15,x28,#64-27 + .long 0x93db0b74 // ror x20,x27,#64-62 + + ////////////////////////////////////////// Chi+Iota + .long 0x8a21005a // bic x26,x2,x1 + .long 0x8a22007b // bic x27,x3,x2 + .long 0x8a24001c // bic x28,x0,x4 + .long 0x8a20003e // bic x30,x1,x0 + .long 0xca1a0000 // eor x0,x0,x26 + .long 0x8a23009a // bic x26,x4,x3 + .long 0xca1b0021 // eor x1,x1,x27 + .long 0xf9400bfb // ldr x27,[sp,#16] + .long 0xca1c0063 // eor x3,x3,x28 + .long 0xca1e0084 // eor x4,x4,x30 + .long 0xca1a0042 // eor x2,x2,x26 + .long 0xf840877e // ldr x30,[x27],#8 // Iota[i++] + .long 0xca1e0000 // eor x0,x0,x30 // A[0][0] ^= Iota (hoisted - frees x30 for the end test) + + .long 0x8a2600fa // bic x26,x7,x6 + .long 0xf94023fe // ldr x30,[sp,#64] // iotas end + .long 0xeb1e037f // cmp x27,x30 // are we done? (end-pointer test; a Pascal const + // cannot provide the original's 256-aligned table) + .long 0xf9000bfb // str x27,[sp,#16] + .long 0x8a27011b // bic x27,x8,x7 + .long 0x8a2900bc // bic x28,x5,x9 + .long 0x8a2500de // bic x30,x6,x5 + .long 0xca1a00a5 // eor x5,x5,x26 + .long 0x8a28013a // bic x26,x9,x8 + .long 0xca1b00c6 // eor x6,x6,x27 + .long 0xca1c0108 // eor x8,x8,x28 + .long 0xca1e0129 // eor x9,x9,x30 + .long 0xca1a00e7 // eor x7,x7,x26 + + .long 0x8a2b019a // bic x26,x12,x11 + .long 0x8a2c01bb // bic x27,x13,x12 + .long 0x8a2e015c // bic x28,x10,x14 + .long 0x8a2a017e // bic x30,x11,x10 + .long 0xca1a014a // eor x10,x10,x26 + .long 0x8a2d01da // bic x26,x14,x13 + .long 0xca1b016b // eor x11,x11,x27 + .long 0xca1c01ad // eor x13,x13,x28 + .long 0xca1e01ce // eor x14,x14,x30 + .long 0xca1a018c // eor x12,x12,x26 + + .long 0x8a30023a // bic x26,x17,x16 + .long 0x8a31033b // bic x27,x25,x17 + .long 0x8a3301fc // bic x28,x15,x19 + .long 0x8a2f021e // bic x30,x16,x15 + .long 0xca1a01ef // eor x15,x15,x26 + .long 0x8a39027a // bic x26,x19,x25 + .long 0xca1b0210 // eor x16,x16,x27 + .long 0xca1c0339 // eor x25,x25,x28 + .long 0xca1e0273 // eor x19,x19,x30 + .long 0xca1a0231 // eor x17,x17,x26 + + .long 0x8a3502da // bic x26,x22,x21 + .long 0x8a3602fb // bic x27,x23,x22 + .long 0x8a38029c // bic x28,x20,x24 + .long 0x8a3402be // bic x30,x21,x20 + .long 0xca1a0294 // eor x20,x20,x26 + .long 0x8a37031a // bic x26,x24,x23 + .long 0xca1b02b5 // eor x21,x21,x27 + .long 0xca1c02f7 // eor x23,x23,x28 + .long 0xca1e0318 // eor x24,x24,x30 + .long 0xca1a02d6 // eor x22,x22,x26 + + b.ne .Lkeccak_gpr_absorb_loop + + .long 0xf9400ffe // ldr x30,[sp,#24] + ret diff --git a/HashLib/src/Include/Simd/SHA3/KeccakF1600Sse2Absorb_x86_64.inc b/HashLib/src/Include/Simd/SHA3/KeccakF1600GprAbsorb_x86_64.inc similarity index 97% rename from HashLib/src/Include/Simd/SHA3/KeccakF1600Sse2Absorb_x86_64.inc rename to HashLib/src/Include/Simd/SHA3/KeccakF1600GprAbsorb_x86_64.inc index cac5aa3f..ee600e06 100644 --- a/HashLib/src/Include/Simd/SHA3/KeccakF1600Sse2Absorb_x86_64.inc +++ b/HashLib/src/Include/Simd/SHA3/KeccakF1600GprAbsorb_x86_64.inc @@ -1,9 +1,9 @@ // Keccak-f[1600] sponge absorb for x86-64, pure 64-bit GPR code - the -// asm twin of the AVX2 absorb for the SSE2 dispatch slot: XORs whole blocks +// asm twin of the AVX2 absorb: XORs whole blocks // into the state and permutes, keeping the state in the lane-complemented // domain across the entire batch (the NOT conversion is hoisted out of the // block loop - the standalone permute pays it per call). -// The permutation body is the same inner as KeccakF1600Sse2_x86_64.inc +// The permutation body is the same inner as KeccakF1600Gpr_x86_64.inc // (embedded again because local labels cannot cross include files), with the // same end-pointer loop termination via the sentinel at [rsp]. // Reference: OpenSSL CRYPTOGAMS keccak1600-x86_64.pl (SHA3_absorb) by diff --git a/HashLib/src/Include/Simd/SHA3/KeccakF1600Gpr_aarch64.inc b/HashLib/src/Include/Simd/SHA3/KeccakF1600Gpr_aarch64.inc new file mode 100644 index 00000000..401834c3 --- /dev/null +++ b/HashLib/src/Include/Simd/SHA3/KeccakF1600Gpr_aarch64.inc @@ -0,0 +1,240 @@ +// Keccak-f[1600] pure-GPR permutation (AArch64) for cores without FEAT_SHA3; +// the Gpr name states the ISA requirement: none beyond base AArch64. The 25 +// lanes live in x0-x17/x19-x25 with x26-x28/x30 as temps; chi is computed +// directly with bic, so no lane complementing exists in this lineage. +// Expects AAPCS64 (after HlpSimdProc2Begin_aarch64): x0 = AState +// (25 x UInt64, standard layout), x1 = AConstants (iotas: 24 x UInt64). +// The original round loop ended on a 256-ALIGNED iotas table (tst #255), +// which a Pascal const cannot guarantee - the termination is patched to an +// end-pointer compare (iotas end stashed at [sp,#40]; the Iota xor is +// hoisted to free x30 for the test; the intervening bic/eor stream writes +// no flags, so the b.ne polarity is unchanged). +// The inner keeps the original called shape (bl/ret); x30 (LR) doubles as a +// temp inside the rounds, as in the original. +// AArch64 instructions are .long-encoded for broad assembler compatibility. +// Reference: OpenSSL CRYPTOGAMS keccak1600-armv8.pl (KeccakF1600 + +// KeccakF1600_int, the plain path) by Andy Polyakov. + + .long 0xa9b87bfd // stp x29,x30,[sp,#-128]! + .long 0x910003fd // add x29,sp,#0 + .long 0xa90153f3 // stp x19,x20,[sp,#16] + .long 0xa9025bf5 // stp x21,x22,[sp,#32] + .long 0xa90363f7 // stp x23,x24,[sp,#48] + .long 0xa9046bf9 // stp x25,x26,[sp,#64] + .long 0xa90573fb // stp x27,x28,[sp,#80] + .long 0xd100c3ff // sub sp,sp,#48 + .long 0x91030021 // add x1,x1,#192 // iotas end = AConstants + 24*8 + .long 0xf90017e1 // str x1,[sp,#40] // stashed for the inner (frame slot is free) + + .long 0xf90013e0 // str x0,[sp,#32] // offload argument + .long 0xaa0003fa // mov x26,x0 + .long 0xa9400400 // ldp x0,x1,[x0,#16*0] + .long 0xa9410f42 // ldp x2,x3,[x26,#16*1] + .long 0xa9421744 // ldp x4,x5,[x26,#16*2] + .long 0xa9431f46 // ldp x6,x7,[x26,#16*3] + .long 0xa9442748 // ldp x8,x9,[x26,#16*4] + .long 0xa9452f4a // ldp x10,x11,[x26,#16*5] + .long 0xa946374c // ldp x12,x13,[x26,#16*6] + .long 0xa9473f4e // ldp x14,x15,[x26,#16*7] + .long 0xa9484750 // ldp x16,x17,[x26,#16*8] + .long 0xa9494f59 // ldp x25,x19,[x26,#16*9] + .long 0xa94a5754 // ldp x20,x21,[x26,#16*10] + .long 0xa94b5f56 // ldp x22,x23,[x26,#16*11] + .long 0xf9406358 // ldr x24,[x26,#16*12] + + bl .Lkeccak_gpr_int + + .long 0xf94013fa // ldr x26,[sp,#32] + .long 0xa9000740 // stp x0,x1,[x26,#16*0] + .long 0xa9010f42 // stp x2,x3,[x26,#16*1] + .long 0xa9021744 // stp x4,x5,[x26,#16*2] + .long 0xa9031f46 // stp x6,x7,[x26,#16*3] + .long 0xa9042748 // stp x8,x9,[x26,#16*4] + .long 0xa9052f4a // stp x10,x11,[x26,#16*5] + .long 0xa906374c // stp x12,x13,[x26,#16*6] + .long 0xa9073f4e // stp x14,x15,[x26,#16*7] + .long 0xa9084750 // stp x16,x17,[x26,#16*8] + .long 0xa9094f59 // stp x25,x19,[x26,#16*9] + .long 0xa90a5754 // stp x20,x21,[x26,#16*10] + .long 0xa90b5f56 // stp x22,x23,[x26,#16*11] + .long 0xf9006358 // str x24,[x26,#16*12] + + .long 0xa94153b3 // ldp x19,x20,[x29,#16] + .long 0x9100c3ff // add sp,sp,#48 + .long 0xa9425bb5 // ldp x21,x22,[x29,#32] + .long 0xa94363b7 // ldp x23,x24,[x29,#48] + .long 0xa9446bb9 // ldp x25,x26,[x29,#64] + .long 0xa94573bb // ldp x27,x28,[x29,#80] + .long 0xa8c87bfd // ldp x29,x30,[sp],#128 + ret + + +.Lkeccak_gpr_int: + .long 0xf94017fc // ldr x28,[sp,#40] // iotas end (stashed by the wrapper) + .long 0xd103039c // sub x28,x28,#192 // iotas base (24 x 8) + .long 0xa9017bfc // stp x28,x30,[sp,#16] // 32 bytes on top are mine + b .Lkeccak_gpr_loop + +.Lkeccak_gpr_loop: + ////////////////////////////////////////// Theta + .long 0xca05001a // eor x26,x0,x5 + .long 0xa90027e4 // stp x4,x9,[sp,#0] // offload pair... + .long 0xca06003b // eor x27,x1,x6 + .long 0xca07005c // eor x28,x2,x7 + .long 0xca08007e // eor x30,x3,x8 + .long 0xca090084 // eor x4,x4,x9 + .long 0xca0a035a // eor x26,x26,x10 + .long 0xca0b037b // eor x27,x27,x11 + .long 0xca0c039c // eor x28,x28,x12 + .long 0xca0d03de // eor x30,x30,x13 + .long 0xca0e0084 // eor x4,x4,x14 + .long 0xca0f035a // eor x26,x26,x15 + .long 0xca10037b // eor x27,x27,x16 + .long 0xca11039c // eor x28,x28,x17 + .long 0xca1903de // eor x30,x30,x25 + .long 0xca130084 // eor x4,x4,x19 + .long 0xca14035a // eor x26,x26,x20 + .long 0xca16039c // eor x28,x28,x22 + .long 0xca15037b // eor x27,x27,x21 + .long 0xca1703de // eor x30,x30,x23 + .long 0xca180084 // eor x4,x4,x24 + + .long 0xcadcff49 // eor x9,x26,x28, ror #63 + + .long 0xca090021 // eor x1,x1,x9 + .long 0xca0900c6 // eor x6,x6,x9 + .long 0xca09016b // eor x11,x11,x9 + .long 0xca090210 // eor x16,x16,x9 + .long 0xca0902b5 // eor x21,x21,x9 + + .long 0xcadeff69 // eor x9,x27,x30, ror #63 + .long 0xcac4ff9c // eor x28,x28,x4, ror #63 + .long 0xcadaffde // eor x30,x30,x26, ror #63 + .long 0xcadbfc84 // eor x4,x4,x27, ror #63 + + .long 0xca09005b // eor x27, x2,x9 // mov x27,x2 + .long 0xca0900e7 // eor x7,x7,x9 + .long 0xca09018c // eor x12,x12,x9 + .long 0xca090231 // eor x17,x17,x9 + .long 0xca0902d6 // eor x22,x22,x9 + + .long 0xca040000 // eor x0,x0,x4 + .long 0xca0400a5 // eor x5,x5,x4 + .long 0xca04014a // eor x10,x10,x4 + .long 0xca0401ef // eor x15,x15,x4 + .long 0xca040294 // eor x20,x20,x4 + .long 0xa94027e4 // ldp x4,x9,[sp,#0] // re-load offloaded data + .long 0xca1c007a // eor x26, x3,x28 // mov x26,x3 + .long 0xca1c0108 // eor x8,x8,x28 + .long 0xca1c01ad // eor x13,x13,x28 + .long 0xca1c0339 // eor x25,x25,x28 + .long 0xca1c02f7 // eor x23,x23,x28 + + .long 0xca1e009c // eor x28, x4,x30 // mov x28,x4 + .long 0xca1e0129 // eor x9,x9,x30 + .long 0xca1e01ce // eor x14,x14,x30 + .long 0xca1e0273 // eor x19,x19,x30 + .long 0xca1e0318 // eor x24,x24,x30 + + ////////////////////////////////////////// Rho+Pi + .long 0xaa0103fe // mov x30,x1 + .long 0x93c650c1 // ror x1,x6,#64-44 + //mov x27,x2 + .long 0x93cc5582 // ror x2,x12,#64-43 + //mov x26,x3 + .long 0x93d9af23 // ror x3,x25,#64-21 + //mov x28,x4 + .long 0x93d8cb04 // ror x4,x24,#64-14 + + .long 0x93c9b126 // ror x6,x9,#64-20 + .long 0x93cd9dac // ror x12,x13,#64-25 + .long 0x93d1c639 // ror x25,x17,#64-15 + .long 0x93d5fab8 // ror x24,x21,#64-2 + + .long 0x93d60ec9 // ror x9,x22,#64-61 + .long 0x93d3e26d // ror x13,x19,#64-8 + .long 0x93cbd971 // ror x17,x11,#64-10 + .long 0x93c82515 // ror x21,x8,#64-55 + + .long 0x93ce65d6 // ror x22,x14,#64-39 + .long 0x93d722f3 // ror x19,x23,#64-56 + .long 0x93c7e8eb // ror x11,x7,#64-6 + .long 0x93d04e08 // ror x8,x16,#64-45 + + .long 0x93d4ba8e // ror x14,x20,#64-18 + .long 0x93cf5df7 // ror x23,x15,#64-41 + .long 0x93caf547 // ror x7,x10,#64-3 + .long 0x93c570b0 // ror x16,x5,#64-36 + + .long 0x93da9345 // ror x5,x26,#64-28 + .long 0x93deffca // ror x10,x30,#64-1 + .long 0x93dc978f // ror x15,x28,#64-27 + .long 0x93db0b74 // ror x20,x27,#64-62 + + ////////////////////////////////////////// Chi+Iota + .long 0x8a21005a // bic x26,x2,x1 + .long 0x8a22007b // bic x27,x3,x2 + .long 0x8a24001c // bic x28,x0,x4 + .long 0x8a20003e // bic x30,x1,x0 + .long 0xca1a0000 // eor x0,x0,x26 + .long 0x8a23009a // bic x26,x4,x3 + .long 0xca1b0021 // eor x1,x1,x27 + .long 0xf9400bfb // ldr x27,[sp,#16] + .long 0xca1c0063 // eor x3,x3,x28 + .long 0xca1e0084 // eor x4,x4,x30 + .long 0xca1a0042 // eor x2,x2,x26 + .long 0xf840877e // ldr x30,[x27],#8 // Iota[i++] + .long 0xca1e0000 // eor x0,x0,x30 // A[0][0] ^= Iota (hoisted - frees x30 for the end test) + + .long 0x8a2600fa // bic x26,x7,x6 + .long 0xf94017fe // ldr x30,[sp,#40] // iotas end + .long 0xeb1e037f // cmp x27,x30 // are we done? (end-pointer test; a Pascal const + // cannot provide the original's 256-aligned table) + .long 0xf9000bfb // str x27,[sp,#16] + .long 0x8a27011b // bic x27,x8,x7 + .long 0x8a2900bc // bic x28,x5,x9 + .long 0x8a2500de // bic x30,x6,x5 + .long 0xca1a00a5 // eor x5,x5,x26 + .long 0x8a28013a // bic x26,x9,x8 + .long 0xca1b00c6 // eor x6,x6,x27 + .long 0xca1c0108 // eor x8,x8,x28 + .long 0xca1e0129 // eor x9,x9,x30 + .long 0xca1a00e7 // eor x7,x7,x26 + + .long 0x8a2b019a // bic x26,x12,x11 + .long 0x8a2c01bb // bic x27,x13,x12 + .long 0x8a2e015c // bic x28,x10,x14 + .long 0x8a2a017e // bic x30,x11,x10 + .long 0xca1a014a // eor x10,x10,x26 + .long 0x8a2d01da // bic x26,x14,x13 + .long 0xca1b016b // eor x11,x11,x27 + .long 0xca1c01ad // eor x13,x13,x28 + .long 0xca1e01ce // eor x14,x14,x30 + .long 0xca1a018c // eor x12,x12,x26 + + .long 0x8a30023a // bic x26,x17,x16 + .long 0x8a31033b // bic x27,x25,x17 + .long 0x8a3301fc // bic x28,x15,x19 + .long 0x8a2f021e // bic x30,x16,x15 + .long 0xca1a01ef // eor x15,x15,x26 + .long 0x8a39027a // bic x26,x19,x25 + .long 0xca1b0210 // eor x16,x16,x27 + .long 0xca1c0339 // eor x25,x25,x28 + .long 0xca1e0273 // eor x19,x19,x30 + .long 0xca1a0231 // eor x17,x17,x26 + + .long 0x8a3502da // bic x26,x22,x21 + .long 0x8a3602fb // bic x27,x23,x22 + .long 0x8a38029c // bic x28,x20,x24 + .long 0x8a3402be // bic x30,x21,x20 + .long 0xca1a0294 // eor x20,x20,x26 + .long 0x8a37031a // bic x26,x24,x23 + .long 0xca1b02b5 // eor x21,x21,x27 + .long 0xca1c02f7 // eor x23,x23,x28 + .long 0xca1e0318 // eor x24,x24,x30 + .long 0xca1a02d6 // eor x22,x22,x26 + + b.ne .Lkeccak_gpr_loop + + .long 0xf9400ffe // ldr x30,[sp,#24] + ret diff --git a/HashLib/src/Include/Simd/SHA3/KeccakF1600Sse2_x86_64.inc b/HashLib/src/Include/Simd/SHA3/KeccakF1600Gpr_x86_64.inc similarity index 98% rename from HashLib/src/Include/Simd/SHA3/KeccakF1600Sse2_x86_64.inc rename to HashLib/src/Include/Simd/SHA3/KeccakF1600Gpr_x86_64.inc index 3fc19e5a..5ace1b4d 100644 --- a/HashLib/src/Include/Simd/SHA3/KeccakF1600Sse2_x86_64.inc +++ b/HashLib/src/Include/Simd/SHA3/KeccakF1600Gpr_x86_64.inc @@ -1,7 +1,5 @@ // Keccak-f[1600] permutation for x86-64, pure 64-bit GPR code (no SIMD -// registers at all) - the fastest non-AVX2 form of Keccak on x86-64, so it -// fills the SSE2 dispatch slot for pre-AVX2 CPUs (house precedent: the CRC -// "SSE2" slicing kernels are GPR too). +// registers at all) - the fastest non-AVX2 form of Keccak on x86-64. // Reference: OpenSSL CRYPTOGAMS keccak1600-x86_64.pl by Andy Polyakov. // // The inner routine works in the LANE-COMPLEMENTED domain (lanes 1, 2, 8, diff --git a/HashLib/src/Include/Simd/SHA3/KeccakF1600Sse2Absorb_i386.inc b/HashLib/src/Include/Simd/SHA3/KeccakF1600Sse2Absorb_i386.inc index a9ba75a7..2dcc6042 100644 --- a/HashLib/src/Include/Simd/SHA3/KeccakF1600Sse2Absorb_i386.inc +++ b/HashLib/src/Include/Simd/SHA3/KeccakF1600Sse2Absorb_i386.inc @@ -1,5 +1,5 @@ // Keccak-f[1600] sponge absorb for IA-32, pure SSE2 - the asm twin of the -// x86-64 absorb for the SSE2 dispatch slot: XORs whole blocks into the state +// x86-64 absorb: XORs whole blocks into the state // and permutes. MMX converted to SSE2 like the permute. // The permutation body is the same inner as KeccakF1600Sse2_i386.inc // (embedded again because local labels cannot cross include files). diff --git a/HashLib/src/Include/Simd/SHA512/SHA512CompressGpr_aarch64.inc b/HashLib/src/Include/Simd/SHA512/SHA512CompressGpr_aarch64.inc new file mode 100644 index 00000000..2b0329ac --- /dev/null +++ b/HashLib/src/Include/Simd/SHA512/SHA512CompressGpr_aarch64.inc @@ -0,0 +1,949 @@ +// SHA-512 pure-GPR implementation (AArch64) for cores without FEAT_SHA512 +// (absent on most consumer Cortex-A7x); the Gpr name states the ISA +// requirement: none beyond base AArch64. Serial SHA maps better onto the +// 31 GPRs than onto NEON lanes (single dependency chain, 1-op ror, +// rotate-folded eor operands). +// Expects AAPCS64 (after HlpSimdProc4Begin_aarch64): x0 = state ptr +// (8 x UInt64), x1 = data ptr, w2 = numblocks, x3 = K512_Gpr ptr. +// K512_Gpr carries the 80 round constants PLUS a zero terminator quad - the +// message-schedule loop ends when the loaded K word is zero (cbnz), exactly +// like the original's sentinel-terminated table; a plain K512 const cannot +// drive this loop. +// Frame: 128-byte AAPCS64 frame (x29/x30 + x19-x28 callee-saved) + 32 bytes +// schedule scratch; x30 (LR) is repurposed as the K walk pointer between the +// save and the restore, as in the original. +// AArch64 instructions are .long-encoded for broad assembler compatibility. +// Reference: OpenSSL CRYPTOGAMS sha512-armv8.pl (sha512_block_data_order, +// the plain path). + + .long 0x2a0203e2 // mov w2,w2 // zero-extend ANumBlocks (AAPCS64 leaves x2's top half undefined) + .long 0xa9b87bfd // stp x29,x30,[sp,#-128]! + .long 0x910003fd // add x29,sp,#0 + + .long 0xa90153f3 // stp x19,x20,[sp,#16] + .long 0xa9025bf5 // stp x21,x22,[sp,#32] + .long 0xa90363f7 // stp x23,x24,[sp,#48] + .long 0xa9046bf9 // stp x25,x26,[sp,#64] + .long 0xa90573fb // stp x27,x28,[sp,#80] + .long 0xd10083ff // sub sp,sp,#4*8 + + .long 0xa9405414 // ldp x20,x21,[x0] // load context + .long 0xa9415c16 // ldp x22,x23,[x0,#2*8] + .long 0xa9426418 // ldp x24,x25,[x0,#4*8] + .long 0x8b021c22 // add x2,x1,x2, lsl #7 // end of input + .long 0xa9436c1a // ldp x26,x27,[x0,#6*8] + .long 0xaa0303fe // mov x30,x3 // K512_Gpr (param 4; x3 is reused for message words below) + .long 0xa9060ba0 // stp x0,x2,[x29,#96] + + +.Lsha512_gpr_loop: + .long 0xa8c11023 // ldp x3,x4,[x1],#2*8 + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++ + .long 0xca1602bc // eor x28,x21,x22 // magic seed + .long 0xf9003ba1 // str x1,[x29,#112] + .long 0xdac00c63 // rev x3,x3 // 0 + .long 0x93d83b10 // ror x16,x24,#14 + .long 0x8b13037b // add x27,x27,x19 // h+=K[i] + .long 0xcad85f06 // eor x6,x24,x24, ror #23 + .long 0x8a180331 // and x17,x25,x24 + .long 0x8a380353 // bic x19,x26,x24 + .long 0x8b03037b // add x27,x27,x3 // h+=X[i] + .long 0xaa130231 // orr x17,x17,x19 // Ch(e,f,g) + .long 0xca150293 // eor x19,x20,x21 // a^b, b^c in next round + .long 0xcac64a10 // eor x16,x16,x6, ror #18 // Sigma1(e) + .long 0x93d47286 // ror x6,x20,#28 + .long 0x8b11037b // add x27,x27,x17 // h+=Ch(e,f,g) + .long 0xcad41691 // eor x17,x20,x20, ror #5 + .long 0x8b10037b // add x27,x27,x16 // h+=Sigma1(e) + .long 0x8a13039c // and x28,x28,x19 // (b^c)&=(a^b) + .long 0x8b1b02f7 // add x23,x23,x27 // d+=h + .long 0xca15039c // eor x28,x28,x21 // Maj(a,b,c) + .long 0xcad188d1 // eor x17,x6,x17, ror #34 // Sigma0(a) + .long 0x8b1c037b // add x27,x27,x28 // h+=Maj(a,b,c) + .long 0xf84087dc // ldr x28,[x30],#8 // *K++, x19 in next round + //add x27,x27,x17 // h+=Sigma0(a) + .long 0xdac00c84 // rev x4,x4 // 1 + .long 0xa8c11825 // ldp x5,x6,[x1],#2*8 + .long 0x8b11037b // add x27,x27,x17 // h+=Sigma0(a) + .long 0x93d73af0 // ror x16,x23,#14 + .long 0x8b1c035a // add x26,x26,x28 // h+=K[i] + .long 0xcad75ee7 // eor x7,x23,x23, ror #23 + .long 0x8a170311 // and x17,x24,x23 + .long 0x8a37033c // bic x28,x25,x23 + .long 0x8b04035a // add x26,x26,x4 // h+=X[i] + .long 0xaa1c0231 // orr x17,x17,x28 // Ch(e,f,g) + .long 0xca14037c // eor x28,x27,x20 // a^b, b^c in next round + .long 0xcac74a10 // eor x16,x16,x7, ror #18 // Sigma1(e) + .long 0x93db7367 // ror x7,x27,#28 + .long 0x8b11035a // add x26,x26,x17 // h+=Ch(e,f,g) + .long 0xcadb1771 // eor x17,x27,x27, ror #5 + .long 0x8b10035a // add x26,x26,x16 // h+=Sigma1(e) + .long 0x8a1c0273 // and x19,x19,x28 // (b^c)&=(a^b) + .long 0x8b1a02d6 // add x22,x22,x26 // d+=h + .long 0xca140273 // eor x19,x19,x20 // Maj(a,b,c) + .long 0xcad188f1 // eor x17,x7,x17, ror #34 // Sigma0(a) + .long 0x8b13035a // add x26,x26,x19 // h+=Maj(a,b,c) + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++, x28 in next round + //add x26,x26,x17 // h+=Sigma0(a) + .long 0xdac00ca5 // rev x5,x5 // 2 + .long 0x8b11035a // add x26,x26,x17 // h+=Sigma0(a) + .long 0x93d63ad0 // ror x16,x22,#14 + .long 0x8b130339 // add x25,x25,x19 // h+=K[i] + .long 0xcad65ec8 // eor x8,x22,x22, ror #23 + .long 0x8a1602f1 // and x17,x23,x22 + .long 0x8a360313 // bic x19,x24,x22 + .long 0x8b050339 // add x25,x25,x5 // h+=X[i] + .long 0xaa130231 // orr x17,x17,x19 // Ch(e,f,g) + .long 0xca1b0353 // eor x19,x26,x27 // a^b, b^c in next round + .long 0xcac84a10 // eor x16,x16,x8, ror #18 // Sigma1(e) + .long 0x93da7348 // ror x8,x26,#28 + .long 0x8b110339 // add x25,x25,x17 // h+=Ch(e,f,g) + .long 0xcada1751 // eor x17,x26,x26, ror #5 + .long 0x8b100339 // add x25,x25,x16 // h+=Sigma1(e) + .long 0x8a13039c // and x28,x28,x19 // (b^c)&=(a^b) + .long 0x8b1902b5 // add x21,x21,x25 // d+=h + .long 0xca1b039c // eor x28,x28,x27 // Maj(a,b,c) + .long 0xcad18911 // eor x17,x8,x17, ror #34 // Sigma0(a) + .long 0x8b1c0339 // add x25,x25,x28 // h+=Maj(a,b,c) + .long 0xf84087dc // ldr x28,[x30],#8 // *K++, x19 in next round + //add x25,x25,x17 // h+=Sigma0(a) + .long 0xdac00cc6 // rev x6,x6 // 3 + .long 0xa8c12027 // ldp x7,x8,[x1],#2*8 + .long 0x8b110339 // add x25,x25,x17 // h+=Sigma0(a) + .long 0x93d53ab0 // ror x16,x21,#14 + .long 0x8b1c0318 // add x24,x24,x28 // h+=K[i] + .long 0xcad55ea9 // eor x9,x21,x21, ror #23 + .long 0x8a1502d1 // and x17,x22,x21 + .long 0x8a3502fc // bic x28,x23,x21 + .long 0x8b060318 // add x24,x24,x6 // h+=X[i] + .long 0xaa1c0231 // orr x17,x17,x28 // Ch(e,f,g) + .long 0xca1a033c // eor x28,x25,x26 // a^b, b^c in next round + .long 0xcac94a10 // eor x16,x16,x9, ror #18 // Sigma1(e) + .long 0x93d97329 // ror x9,x25,#28 + .long 0x8b110318 // add x24,x24,x17 // h+=Ch(e,f,g) + .long 0xcad91731 // eor x17,x25,x25, ror #5 + .long 0x8b100318 // add x24,x24,x16 // h+=Sigma1(e) + .long 0x8a1c0273 // and x19,x19,x28 // (b^c)&=(a^b) + .long 0x8b180294 // add x20,x20,x24 // d+=h + .long 0xca1a0273 // eor x19,x19,x26 // Maj(a,b,c) + .long 0xcad18931 // eor x17,x9,x17, ror #34 // Sigma0(a) + .long 0x8b130318 // add x24,x24,x19 // h+=Maj(a,b,c) + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++, x28 in next round + //add x24,x24,x17 // h+=Sigma0(a) + .long 0xdac00ce7 // rev x7,x7 // 4 + .long 0x8b110318 // add x24,x24,x17 // h+=Sigma0(a) + .long 0x93d43a90 // ror x16,x20,#14 + .long 0x8b1302f7 // add x23,x23,x19 // h+=K[i] + .long 0xcad45e8a // eor x10,x20,x20, ror #23 + .long 0x8a1402b1 // and x17,x21,x20 + .long 0x8a3402d3 // bic x19,x22,x20 + .long 0x8b0702f7 // add x23,x23,x7 // h+=X[i] + .long 0xaa130231 // orr x17,x17,x19 // Ch(e,f,g) + .long 0xca190313 // eor x19,x24,x25 // a^b, b^c in next round + .long 0xcaca4a10 // eor x16,x16,x10, ror #18 // Sigma1(e) + .long 0x93d8730a // ror x10,x24,#28 + .long 0x8b1102f7 // add x23,x23,x17 // h+=Ch(e,f,g) + .long 0xcad81711 // eor x17,x24,x24, ror #5 + .long 0x8b1002f7 // add x23,x23,x16 // h+=Sigma1(e) + .long 0x8a13039c // and x28,x28,x19 // (b^c)&=(a^b) + .long 0x8b17037b // add x27,x27,x23 // d+=h + .long 0xca19039c // eor x28,x28,x25 // Maj(a,b,c) + .long 0xcad18951 // eor x17,x10,x17, ror #34 // Sigma0(a) + .long 0x8b1c02f7 // add x23,x23,x28 // h+=Maj(a,b,c) + .long 0xf84087dc // ldr x28,[x30],#8 // *K++, x19 in next round + //add x23,x23,x17 // h+=Sigma0(a) + .long 0xdac00d08 // rev x8,x8 // 5 + .long 0xa8c12829 // ldp x9,x10,[x1],#2*8 + .long 0x8b1102f7 // add x23,x23,x17 // h+=Sigma0(a) + .long 0x93db3b70 // ror x16,x27,#14 + .long 0x8b1c02d6 // add x22,x22,x28 // h+=K[i] + .long 0xcadb5f6b // eor x11,x27,x27, ror #23 + .long 0x8a1b0291 // and x17,x20,x27 + .long 0x8a3b02bc // bic x28,x21,x27 + .long 0x8b0802d6 // add x22,x22,x8 // h+=X[i] + .long 0xaa1c0231 // orr x17,x17,x28 // Ch(e,f,g) + .long 0xca1802fc // eor x28,x23,x24 // a^b, b^c in next round + .long 0xcacb4a10 // eor x16,x16,x11, ror #18 // Sigma1(e) + .long 0x93d772eb // ror x11,x23,#28 + .long 0x8b1102d6 // add x22,x22,x17 // h+=Ch(e,f,g) + .long 0xcad716f1 // eor x17,x23,x23, ror #5 + .long 0x8b1002d6 // add x22,x22,x16 // h+=Sigma1(e) + .long 0x8a1c0273 // and x19,x19,x28 // (b^c)&=(a^b) + .long 0x8b16035a // add x26,x26,x22 // d+=h + .long 0xca180273 // eor x19,x19,x24 // Maj(a,b,c) + .long 0xcad18971 // eor x17,x11,x17, ror #34 // Sigma0(a) + .long 0x8b1302d6 // add x22,x22,x19 // h+=Maj(a,b,c) + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++, x28 in next round + //add x22,x22,x17 // h+=Sigma0(a) + .long 0xdac00d29 // rev x9,x9 // 6 + .long 0x8b1102d6 // add x22,x22,x17 // h+=Sigma0(a) + .long 0x93da3b50 // ror x16,x26,#14 + .long 0x8b1302b5 // add x21,x21,x19 // h+=K[i] + .long 0xcada5f4c // eor x12,x26,x26, ror #23 + .long 0x8a1a0371 // and x17,x27,x26 + .long 0x8a3a0293 // bic x19,x20,x26 + .long 0x8b0902b5 // add x21,x21,x9 // h+=X[i] + .long 0xaa130231 // orr x17,x17,x19 // Ch(e,f,g) + .long 0xca1702d3 // eor x19,x22,x23 // a^b, b^c in next round + .long 0xcacc4a10 // eor x16,x16,x12, ror #18 // Sigma1(e) + .long 0x93d672cc // ror x12,x22,#28 + .long 0x8b1102b5 // add x21,x21,x17 // h+=Ch(e,f,g) + .long 0xcad616d1 // eor x17,x22,x22, ror #5 + .long 0x8b1002b5 // add x21,x21,x16 // h+=Sigma1(e) + .long 0x8a13039c // and x28,x28,x19 // (b^c)&=(a^b) + .long 0x8b150339 // add x25,x25,x21 // d+=h + .long 0xca17039c // eor x28,x28,x23 // Maj(a,b,c) + .long 0xcad18991 // eor x17,x12,x17, ror #34 // Sigma0(a) + .long 0x8b1c02b5 // add x21,x21,x28 // h+=Maj(a,b,c) + .long 0xf84087dc // ldr x28,[x30],#8 // *K++, x19 in next round + //add x21,x21,x17 // h+=Sigma0(a) + .long 0xdac00d4a // rev x10,x10 // 7 + .long 0xa8c1302b // ldp x11,x12,[x1],#2*8 + .long 0x8b1102b5 // add x21,x21,x17 // h+=Sigma0(a) + .long 0x93d93b30 // ror x16,x25,#14 + .long 0x8b1c0294 // add x20,x20,x28 // h+=K[i] + .long 0xcad95f2d // eor x13,x25,x25, ror #23 + .long 0x8a190351 // and x17,x26,x25 + .long 0x8a39037c // bic x28,x27,x25 + .long 0x8b0a0294 // add x20,x20,x10 // h+=X[i] + .long 0xaa1c0231 // orr x17,x17,x28 // Ch(e,f,g) + .long 0xca1602bc // eor x28,x21,x22 // a^b, b^c in next round + .long 0xcacd4a10 // eor x16,x16,x13, ror #18 // Sigma1(e) + .long 0x93d572ad // ror x13,x21,#28 + .long 0x8b110294 // add x20,x20,x17 // h+=Ch(e,f,g) + .long 0xcad516b1 // eor x17,x21,x21, ror #5 + .long 0x8b100294 // add x20,x20,x16 // h+=Sigma1(e) + .long 0x8a1c0273 // and x19,x19,x28 // (b^c)&=(a^b) + .long 0x8b140318 // add x24,x24,x20 // d+=h + .long 0xca160273 // eor x19,x19,x22 // Maj(a,b,c) + .long 0xcad189b1 // eor x17,x13,x17, ror #34 // Sigma0(a) + .long 0x8b130294 // add x20,x20,x19 // h+=Maj(a,b,c) + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++, x28 in next round + //add x20,x20,x17 // h+=Sigma0(a) + .long 0xdac00d6b // rev x11,x11 // 8 + .long 0x8b110294 // add x20,x20,x17 // h+=Sigma0(a) + .long 0x93d83b10 // ror x16,x24,#14 + .long 0x8b13037b // add x27,x27,x19 // h+=K[i] + .long 0xcad85f0e // eor x14,x24,x24, ror #23 + .long 0x8a180331 // and x17,x25,x24 + .long 0x8a380353 // bic x19,x26,x24 + .long 0x8b0b037b // add x27,x27,x11 // h+=X[i] + .long 0xaa130231 // orr x17,x17,x19 // Ch(e,f,g) + .long 0xca150293 // eor x19,x20,x21 // a^b, b^c in next round + .long 0xcace4a10 // eor x16,x16,x14, ror #18 // Sigma1(e) + .long 0x93d4728e // ror x14,x20,#28 + .long 0x8b11037b // add x27,x27,x17 // h+=Ch(e,f,g) + .long 0xcad41691 // eor x17,x20,x20, ror #5 + .long 0x8b10037b // add x27,x27,x16 // h+=Sigma1(e) + .long 0x8a13039c // and x28,x28,x19 // (b^c)&=(a^b) + .long 0x8b1b02f7 // add x23,x23,x27 // d+=h + .long 0xca15039c // eor x28,x28,x21 // Maj(a,b,c) + .long 0xcad189d1 // eor x17,x14,x17, ror #34 // Sigma0(a) + .long 0x8b1c037b // add x27,x27,x28 // h+=Maj(a,b,c) + .long 0xf84087dc // ldr x28,[x30],#8 // *K++, x19 in next round + //add x27,x27,x17 // h+=Sigma0(a) + .long 0xdac00d8c // rev x12,x12 // 9 + .long 0xa8c1382d // ldp x13,x14,[x1],#2*8 + .long 0x8b11037b // add x27,x27,x17 // h+=Sigma0(a) + .long 0x93d73af0 // ror x16,x23,#14 + .long 0x8b1c035a // add x26,x26,x28 // h+=K[i] + .long 0xcad75eef // eor x15,x23,x23, ror #23 + .long 0x8a170311 // and x17,x24,x23 + .long 0x8a37033c // bic x28,x25,x23 + .long 0x8b0c035a // add x26,x26,x12 // h+=X[i] + .long 0xaa1c0231 // orr x17,x17,x28 // Ch(e,f,g) + .long 0xca14037c // eor x28,x27,x20 // a^b, b^c in next round + .long 0xcacf4a10 // eor x16,x16,x15, ror #18 // Sigma1(e) + .long 0x93db736f // ror x15,x27,#28 + .long 0x8b11035a // add x26,x26,x17 // h+=Ch(e,f,g) + .long 0xcadb1771 // eor x17,x27,x27, ror #5 + .long 0x8b10035a // add x26,x26,x16 // h+=Sigma1(e) + .long 0x8a1c0273 // and x19,x19,x28 // (b^c)&=(a^b) + .long 0x8b1a02d6 // add x22,x22,x26 // d+=h + .long 0xca140273 // eor x19,x19,x20 // Maj(a,b,c) + .long 0xcad189f1 // eor x17,x15,x17, ror #34 // Sigma0(a) + .long 0x8b13035a // add x26,x26,x19 // h+=Maj(a,b,c) + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++, x28 in next round + //add x26,x26,x17 // h+=Sigma0(a) + .long 0xdac00dad // rev x13,x13 // 10 + .long 0x8b11035a // add x26,x26,x17 // h+=Sigma0(a) + .long 0x93d63ad0 // ror x16,x22,#14 + .long 0x8b130339 // add x25,x25,x19 // h+=K[i] + .long 0xcad65ec0 // eor x0,x22,x22, ror #23 + .long 0x8a1602f1 // and x17,x23,x22 + .long 0x8a360313 // bic x19,x24,x22 + .long 0x8b0d0339 // add x25,x25,x13 // h+=X[i] + .long 0xaa130231 // orr x17,x17,x19 // Ch(e,f,g) + .long 0xca1b0353 // eor x19,x26,x27 // a^b, b^c in next round + .long 0xcac04a10 // eor x16,x16,x0, ror #18 // Sigma1(e) + .long 0x93da7340 // ror x0,x26,#28 + .long 0x8b110339 // add x25,x25,x17 // h+=Ch(e,f,g) + .long 0xcada1751 // eor x17,x26,x26, ror #5 + .long 0x8b100339 // add x25,x25,x16 // h+=Sigma1(e) + .long 0x8a13039c // and x28,x28,x19 // (b^c)&=(a^b) + .long 0x8b1902b5 // add x21,x21,x25 // d+=h + .long 0xca1b039c // eor x28,x28,x27 // Maj(a,b,c) + .long 0xcad18811 // eor x17,x0,x17, ror #34 // Sigma0(a) + .long 0x8b1c0339 // add x25,x25,x28 // h+=Maj(a,b,c) + .long 0xf84087dc // ldr x28,[x30],#8 // *K++, x19 in next round + //add x25,x25,x17 // h+=Sigma0(a) + .long 0xdac00dce // rev x14,x14 // 11 + .long 0xa8c1002f // ldp x15,x0,[x1],#2*8 + .long 0x8b110339 // add x25,x25,x17 // h+=Sigma0(a) + .long 0xf9000fe6 // str x6,[sp,#24] + .long 0x93d53ab0 // ror x16,x21,#14 + .long 0x8b1c0318 // add x24,x24,x28 // h+=K[i] + .long 0xcad55ea6 // eor x6,x21,x21, ror #23 + .long 0x8a1502d1 // and x17,x22,x21 + .long 0x8a3502fc // bic x28,x23,x21 + .long 0x8b0e0318 // add x24,x24,x14 // h+=X[i] + .long 0xaa1c0231 // orr x17,x17,x28 // Ch(e,f,g) + .long 0xca1a033c // eor x28,x25,x26 // a^b, b^c in next round + .long 0xcac64a10 // eor x16,x16,x6, ror #18 // Sigma1(e) + .long 0x93d97326 // ror x6,x25,#28 + .long 0x8b110318 // add x24,x24,x17 // h+=Ch(e,f,g) + .long 0xcad91731 // eor x17,x25,x25, ror #5 + .long 0x8b100318 // add x24,x24,x16 // h+=Sigma1(e) + .long 0x8a1c0273 // and x19,x19,x28 // (b^c)&=(a^b) + .long 0x8b180294 // add x20,x20,x24 // d+=h + .long 0xca1a0273 // eor x19,x19,x26 // Maj(a,b,c) + .long 0xcad188d1 // eor x17,x6,x17, ror #34 // Sigma0(a) + .long 0x8b130318 // add x24,x24,x19 // h+=Maj(a,b,c) + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++, x28 in next round + //add x24,x24,x17 // h+=Sigma0(a) + .long 0xdac00def // rev x15,x15 // 12 + .long 0x8b110318 // add x24,x24,x17 // h+=Sigma0(a) + .long 0xf90003e7 // str x7,[sp,#0] + .long 0x93d43a90 // ror x16,x20,#14 + .long 0x8b1302f7 // add x23,x23,x19 // h+=K[i] + .long 0xcad45e87 // eor x7,x20,x20, ror #23 + .long 0x8a1402b1 // and x17,x21,x20 + .long 0x8a3402d3 // bic x19,x22,x20 + .long 0x8b0f02f7 // add x23,x23,x15 // h+=X[i] + .long 0xaa130231 // orr x17,x17,x19 // Ch(e,f,g) + .long 0xca190313 // eor x19,x24,x25 // a^b, b^c in next round + .long 0xcac74a10 // eor x16,x16,x7, ror #18 // Sigma1(e) + .long 0x93d87307 // ror x7,x24,#28 + .long 0x8b1102f7 // add x23,x23,x17 // h+=Ch(e,f,g) + .long 0xcad81711 // eor x17,x24,x24, ror #5 + .long 0x8b1002f7 // add x23,x23,x16 // h+=Sigma1(e) + .long 0x8a13039c // and x28,x28,x19 // (b^c)&=(a^b) + .long 0x8b17037b // add x27,x27,x23 // d+=h + .long 0xca19039c // eor x28,x28,x25 // Maj(a,b,c) + .long 0xcad188f1 // eor x17,x7,x17, ror #34 // Sigma0(a) + .long 0x8b1c02f7 // add x23,x23,x28 // h+=Maj(a,b,c) + .long 0xf84087dc // ldr x28,[x30],#8 // *K++, x19 in next round + //add x23,x23,x17 // h+=Sigma0(a) + .long 0xdac00c00 // rev x0,x0 // 13 + .long 0xa9400821 // ldp x1,x2,[x1] + .long 0x8b1102f7 // add x23,x23,x17 // h+=Sigma0(a) + .long 0xf90007e8 // str x8,[sp,#8] + .long 0x93db3b70 // ror x16,x27,#14 + .long 0x8b1c02d6 // add x22,x22,x28 // h+=K[i] + .long 0xcadb5f68 // eor x8,x27,x27, ror #23 + .long 0x8a1b0291 // and x17,x20,x27 + .long 0x8a3b02bc // bic x28,x21,x27 + .long 0x8b0002d6 // add x22,x22,x0 // h+=X[i] + .long 0xaa1c0231 // orr x17,x17,x28 // Ch(e,f,g) + .long 0xca1802fc // eor x28,x23,x24 // a^b, b^c in next round + .long 0xcac84a10 // eor x16,x16,x8, ror #18 // Sigma1(e) + .long 0x93d772e8 // ror x8,x23,#28 + .long 0x8b1102d6 // add x22,x22,x17 // h+=Ch(e,f,g) + .long 0xcad716f1 // eor x17,x23,x23, ror #5 + .long 0x8b1002d6 // add x22,x22,x16 // h+=Sigma1(e) + .long 0x8a1c0273 // and x19,x19,x28 // (b^c)&=(a^b) + .long 0x8b16035a // add x26,x26,x22 // d+=h + .long 0xca180273 // eor x19,x19,x24 // Maj(a,b,c) + .long 0xcad18911 // eor x17,x8,x17, ror #34 // Sigma0(a) + .long 0x8b1302d6 // add x22,x22,x19 // h+=Maj(a,b,c) + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++, x28 in next round + //add x22,x22,x17 // h+=Sigma0(a) + .long 0xdac00c21 // rev x1,x1 // 14 + .long 0xf9400fe6 // ldr x6,[sp,#24] + .long 0x8b1102d6 // add x22,x22,x17 // h+=Sigma0(a) + .long 0xf9000be9 // str x9,[sp,#16] + .long 0x93da3b50 // ror x16,x26,#14 + .long 0x8b1302b5 // add x21,x21,x19 // h+=K[i] + .long 0xcada5f49 // eor x9,x26,x26, ror #23 + .long 0x8a1a0371 // and x17,x27,x26 + .long 0x8a3a0293 // bic x19,x20,x26 + .long 0x8b0102b5 // add x21,x21,x1 // h+=X[i] + .long 0xaa130231 // orr x17,x17,x19 // Ch(e,f,g) + .long 0xca1702d3 // eor x19,x22,x23 // a^b, b^c in next round + .long 0xcac94a10 // eor x16,x16,x9, ror #18 // Sigma1(e) + .long 0x93d672c9 // ror x9,x22,#28 + .long 0x8b1102b5 // add x21,x21,x17 // h+=Ch(e,f,g) + .long 0xcad616d1 // eor x17,x22,x22, ror #5 + .long 0x8b1002b5 // add x21,x21,x16 // h+=Sigma1(e) + .long 0x8a13039c // and x28,x28,x19 // (b^c)&=(a^b) + .long 0x8b150339 // add x25,x25,x21 // d+=h + .long 0xca17039c // eor x28,x28,x23 // Maj(a,b,c) + .long 0xcad18931 // eor x17,x9,x17, ror #34 // Sigma0(a) + .long 0x8b1c02b5 // add x21,x21,x28 // h+=Maj(a,b,c) + .long 0xf84087dc // ldr x28,[x30],#8 // *K++, x19 in next round + //add x21,x21,x17 // h+=Sigma0(a) + .long 0xdac00c42 // rev x2,x2 // 15 + .long 0xf94003e7 // ldr x7,[sp,#0] + .long 0x8b1102b5 // add x21,x21,x17 // h+=Sigma0(a) + .long 0xf9000fea // str x10,[sp,#24] + .long 0x93d93b30 // ror x16,x25,#14 + .long 0x8b1c0294 // add x20,x20,x28 // h+=K[i] + .long 0x93c40489 // ror x9,x4,#1 + .long 0x8a190351 // and x17,x26,x25 + .long 0x93c14c28 // ror x8,x1,#19 + .long 0x8a39037c // bic x28,x27,x25 + .long 0x93d572aa // ror x10,x21,#28 + .long 0x8b020294 // add x20,x20,x2 // h+=X[i] + .long 0xcad94a10 // eor x16,x16,x25, ror #18 + .long 0xcac42129 // eor x9,x9,x4, ror #8 + .long 0xaa1c0231 // orr x17,x17,x28 // Ch(e,f,g) + .long 0xca1602bc // eor x28,x21,x22 // a^b, b^c in next round + .long 0xcad9a610 // eor x16,x16,x25, ror #41 // Sigma1(e) + .long 0xcad5894a // eor x10,x10,x21, ror #34 + .long 0x8b110294 // add x20,x20,x17 // h+=Ch(e,f,g) + .long 0x8a1c0273 // and x19,x19,x28 // (b^c)&=(a^b) + .long 0xcac1f508 // eor x8,x8,x1, ror #61 + .long 0xca441d29 // eor x9,x9,x4, lsr #7 // sigma0(X[i+1]) + .long 0x8b100294 // add x20,x20,x16 // h+=Sigma1(e) + .long 0xca160273 // eor x19,x19,x22 // Maj(a,b,c) + .long 0xcad59d51 // eor x17,x10,x21, ror #39 // Sigma0(a) + .long 0xca411908 // eor x8,x8,x1, lsr #6 // sigma1(X[i+14]) + .long 0x8b0c0063 // add x3,x3,x12 + .long 0x8b140318 // add x24,x24,x20 // d+=h + .long 0x8b130294 // add x20,x20,x19 // h+=Maj(a,b,c) + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++, x28 in next round + .long 0x8b090063 // add x3,x3,x9 + .long 0x8b110294 // add x20,x20,x17 // h+=Sigma0(a) + .long 0x8b080063 // add x3,x3,x8 + +.Lsha512_gpr_loop_16_xx: + .long 0xf94007e8 // ldr x8,[sp,#8] + .long 0xf90003eb // str x11,[sp,#0] + .long 0x93d83b10 // ror x16,x24,#14 + .long 0x8b13037b // add x27,x27,x19 // h+=K[i] + .long 0x93c504aa // ror x10,x5,#1 + .long 0x8a180331 // and x17,x25,x24 + .long 0x93c24c49 // ror x9,x2,#19 + .long 0x8a380353 // bic x19,x26,x24 + .long 0x93d4728b // ror x11,x20,#28 + .long 0x8b03037b // add x27,x27,x3 // h+=X[i] + .long 0xcad84a10 // eor x16,x16,x24, ror #18 + .long 0xcac5214a // eor x10,x10,x5, ror #8 + .long 0xaa130231 // orr x17,x17,x19 // Ch(e,f,g) + .long 0xca150293 // eor x19,x20,x21 // a^b, b^c in next round + .long 0xcad8a610 // eor x16,x16,x24, ror #41 // Sigma1(e) + .long 0xcad4896b // eor x11,x11,x20, ror #34 + .long 0x8b11037b // add x27,x27,x17 // h+=Ch(e,f,g) + .long 0x8a13039c // and x28,x28,x19 // (b^c)&=(a^b) + .long 0xcac2f529 // eor x9,x9,x2, ror #61 + .long 0xca451d4a // eor x10,x10,x5, lsr #7 // sigma0(X[i+1]) + .long 0x8b10037b // add x27,x27,x16 // h+=Sigma1(e) + .long 0xca15039c // eor x28,x28,x21 // Maj(a,b,c) + .long 0xcad49d71 // eor x17,x11,x20, ror #39 // Sigma0(a) + .long 0xca421929 // eor x9,x9,x2, lsr #6 // sigma1(X[i+14]) + .long 0x8b0d0084 // add x4,x4,x13 + .long 0x8b1b02f7 // add x23,x23,x27 // d+=h + .long 0x8b1c037b // add x27,x27,x28 // h+=Maj(a,b,c) + .long 0xf84087dc // ldr x28,[x30],#8 // *K++, x19 in next round + .long 0x8b0a0084 // add x4,x4,x10 + .long 0x8b11037b // add x27,x27,x17 // h+=Sigma0(a) + .long 0x8b090084 // add x4,x4,x9 + .long 0xf9400be9 // ldr x9,[sp,#16] + .long 0xf90007ec // str x12,[sp,#8] + .long 0x93d73af0 // ror x16,x23,#14 + .long 0x8b1c035a // add x26,x26,x28 // h+=K[i] + .long 0x93c604cb // ror x11,x6,#1 + .long 0x8a170311 // and x17,x24,x23 + .long 0x93c34c6a // ror x10,x3,#19 + .long 0x8a37033c // bic x28,x25,x23 + .long 0x93db736c // ror x12,x27,#28 + .long 0x8b04035a // add x26,x26,x4 // h+=X[i] + .long 0xcad74a10 // eor x16,x16,x23, ror #18 + .long 0xcac6216b // eor x11,x11,x6, ror #8 + .long 0xaa1c0231 // orr x17,x17,x28 // Ch(e,f,g) + .long 0xca14037c // eor x28,x27,x20 // a^b, b^c in next round + .long 0xcad7a610 // eor x16,x16,x23, ror #41 // Sigma1(e) + .long 0xcadb898c // eor x12,x12,x27, ror #34 + .long 0x8b11035a // add x26,x26,x17 // h+=Ch(e,f,g) + .long 0x8a1c0273 // and x19,x19,x28 // (b^c)&=(a^b) + .long 0xcac3f54a // eor x10,x10,x3, ror #61 + .long 0xca461d6b // eor x11,x11,x6, lsr #7 // sigma0(X[i+1]) + .long 0x8b10035a // add x26,x26,x16 // h+=Sigma1(e) + .long 0xca140273 // eor x19,x19,x20 // Maj(a,b,c) + .long 0xcadb9d91 // eor x17,x12,x27, ror #39 // Sigma0(a) + .long 0xca43194a // eor x10,x10,x3, lsr #6 // sigma1(X[i+14]) + .long 0x8b0e00a5 // add x5,x5,x14 + .long 0x8b1a02d6 // add x22,x22,x26 // d+=h + .long 0x8b13035a // add x26,x26,x19 // h+=Maj(a,b,c) + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++, x28 in next round + .long 0x8b0b00a5 // add x5,x5,x11 + .long 0x8b11035a // add x26,x26,x17 // h+=Sigma0(a) + .long 0x8b0a00a5 // add x5,x5,x10 + .long 0xf9400fea // ldr x10,[sp,#24] + .long 0xf9000bed // str x13,[sp,#16] + .long 0x93d63ad0 // ror x16,x22,#14 + .long 0x8b130339 // add x25,x25,x19 // h+=K[i] + .long 0x93c704ec // ror x12,x7,#1 + .long 0x8a1602f1 // and x17,x23,x22 + .long 0x93c44c8b // ror x11,x4,#19 + .long 0x8a360313 // bic x19,x24,x22 + .long 0x93da734d // ror x13,x26,#28 + .long 0x8b050339 // add x25,x25,x5 // h+=X[i] + .long 0xcad64a10 // eor x16,x16,x22, ror #18 + .long 0xcac7218c // eor x12,x12,x7, ror #8 + .long 0xaa130231 // orr x17,x17,x19 // Ch(e,f,g) + .long 0xca1b0353 // eor x19,x26,x27 // a^b, b^c in next round + .long 0xcad6a610 // eor x16,x16,x22, ror #41 // Sigma1(e) + .long 0xcada89ad // eor x13,x13,x26, ror #34 + .long 0x8b110339 // add x25,x25,x17 // h+=Ch(e,f,g) + .long 0x8a13039c // and x28,x28,x19 // (b^c)&=(a^b) + .long 0xcac4f56b // eor x11,x11,x4, ror #61 + .long 0xca471d8c // eor x12,x12,x7, lsr #7 // sigma0(X[i+1]) + .long 0x8b100339 // add x25,x25,x16 // h+=Sigma1(e) + .long 0xca1b039c // eor x28,x28,x27 // Maj(a,b,c) + .long 0xcada9db1 // eor x17,x13,x26, ror #39 // Sigma0(a) + .long 0xca44196b // eor x11,x11,x4, lsr #6 // sigma1(X[i+14]) + .long 0x8b0f00c6 // add x6,x6,x15 + .long 0x8b1902b5 // add x21,x21,x25 // d+=h + .long 0x8b1c0339 // add x25,x25,x28 // h+=Maj(a,b,c) + .long 0xf84087dc // ldr x28,[x30],#8 // *K++, x19 in next round + .long 0x8b0c00c6 // add x6,x6,x12 + .long 0x8b110339 // add x25,x25,x17 // h+=Sigma0(a) + .long 0x8b0b00c6 // add x6,x6,x11 + .long 0xf94003eb // ldr x11,[sp,#0] + .long 0xf9000fee // str x14,[sp,#24] + .long 0x93d53ab0 // ror x16,x21,#14 + .long 0x8b1c0318 // add x24,x24,x28 // h+=K[i] + .long 0x93c8050d // ror x13,x8,#1 + .long 0x8a1502d1 // and x17,x22,x21 + .long 0x93c54cac // ror x12,x5,#19 + .long 0x8a3502fc // bic x28,x23,x21 + .long 0x93d9732e // ror x14,x25,#28 + .long 0x8b060318 // add x24,x24,x6 // h+=X[i] + .long 0xcad54a10 // eor x16,x16,x21, ror #18 + .long 0xcac821ad // eor x13,x13,x8, ror #8 + .long 0xaa1c0231 // orr x17,x17,x28 // Ch(e,f,g) + .long 0xca1a033c // eor x28,x25,x26 // a^b, b^c in next round + .long 0xcad5a610 // eor x16,x16,x21, ror #41 // Sigma1(e) + .long 0xcad989ce // eor x14,x14,x25, ror #34 + .long 0x8b110318 // add x24,x24,x17 // h+=Ch(e,f,g) + .long 0x8a1c0273 // and x19,x19,x28 // (b^c)&=(a^b) + .long 0xcac5f58c // eor x12,x12,x5, ror #61 + .long 0xca481dad // eor x13,x13,x8, lsr #7 // sigma0(X[i+1]) + .long 0x8b100318 // add x24,x24,x16 // h+=Sigma1(e) + .long 0xca1a0273 // eor x19,x19,x26 // Maj(a,b,c) + .long 0xcad99dd1 // eor x17,x14,x25, ror #39 // Sigma0(a) + .long 0xca45198c // eor x12,x12,x5, lsr #6 // sigma1(X[i+14]) + .long 0x8b0000e7 // add x7,x7,x0 + .long 0x8b180294 // add x20,x20,x24 // d+=h + .long 0x8b130318 // add x24,x24,x19 // h+=Maj(a,b,c) + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++, x28 in next round + .long 0x8b0d00e7 // add x7,x7,x13 + .long 0x8b110318 // add x24,x24,x17 // h+=Sigma0(a) + .long 0x8b0c00e7 // add x7,x7,x12 + .long 0xf94007ec // ldr x12,[sp,#8] + .long 0xf90003ef // str x15,[sp,#0] + .long 0x93d43a90 // ror x16,x20,#14 + .long 0x8b1302f7 // add x23,x23,x19 // h+=K[i] + .long 0x93c9052e // ror x14,x9,#1 + .long 0x8a1402b1 // and x17,x21,x20 + .long 0x93c64ccd // ror x13,x6,#19 + .long 0x8a3402d3 // bic x19,x22,x20 + .long 0x93d8730f // ror x15,x24,#28 + .long 0x8b0702f7 // add x23,x23,x7 // h+=X[i] + .long 0xcad44a10 // eor x16,x16,x20, ror #18 + .long 0xcac921ce // eor x14,x14,x9, ror #8 + .long 0xaa130231 // orr x17,x17,x19 // Ch(e,f,g) + .long 0xca190313 // eor x19,x24,x25 // a^b, b^c in next round + .long 0xcad4a610 // eor x16,x16,x20, ror #41 // Sigma1(e) + .long 0xcad889ef // eor x15,x15,x24, ror #34 + .long 0x8b1102f7 // add x23,x23,x17 // h+=Ch(e,f,g) + .long 0x8a13039c // and x28,x28,x19 // (b^c)&=(a^b) + .long 0xcac6f5ad // eor x13,x13,x6, ror #61 + .long 0xca491dce // eor x14,x14,x9, lsr #7 // sigma0(X[i+1]) + .long 0x8b1002f7 // add x23,x23,x16 // h+=Sigma1(e) + .long 0xca19039c // eor x28,x28,x25 // Maj(a,b,c) + .long 0xcad89df1 // eor x17,x15,x24, ror #39 // Sigma0(a) + .long 0xca4619ad // eor x13,x13,x6, lsr #6 // sigma1(X[i+14]) + .long 0x8b010108 // add x8,x8,x1 + .long 0x8b17037b // add x27,x27,x23 // d+=h + .long 0x8b1c02f7 // add x23,x23,x28 // h+=Maj(a,b,c) + .long 0xf84087dc // ldr x28,[x30],#8 // *K++, x19 in next round + .long 0x8b0e0108 // add x8,x8,x14 + .long 0x8b1102f7 // add x23,x23,x17 // h+=Sigma0(a) + .long 0x8b0d0108 // add x8,x8,x13 + .long 0xf9400bed // ldr x13,[sp,#16] + .long 0xf90007e0 // str x0,[sp,#8] + .long 0x93db3b70 // ror x16,x27,#14 + .long 0x8b1c02d6 // add x22,x22,x28 // h+=K[i] + .long 0x93ca054f // ror x15,x10,#1 + .long 0x8a1b0291 // and x17,x20,x27 + .long 0x93c74cee // ror x14,x7,#19 + .long 0x8a3b02bc // bic x28,x21,x27 + .long 0x93d772e0 // ror x0,x23,#28 + .long 0x8b0802d6 // add x22,x22,x8 // h+=X[i] + .long 0xcadb4a10 // eor x16,x16,x27, ror #18 + .long 0xcaca21ef // eor x15,x15,x10, ror #8 + .long 0xaa1c0231 // orr x17,x17,x28 // Ch(e,f,g) + .long 0xca1802fc // eor x28,x23,x24 // a^b, b^c in next round + .long 0xcadba610 // eor x16,x16,x27, ror #41 // Sigma1(e) + .long 0xcad78800 // eor x0,x0,x23, ror #34 + .long 0x8b1102d6 // add x22,x22,x17 // h+=Ch(e,f,g) + .long 0x8a1c0273 // and x19,x19,x28 // (b^c)&=(a^b) + .long 0xcac7f5ce // eor x14,x14,x7, ror #61 + .long 0xca4a1def // eor x15,x15,x10, lsr #7 // sigma0(X[i+1]) + .long 0x8b1002d6 // add x22,x22,x16 // h+=Sigma1(e) + .long 0xca180273 // eor x19,x19,x24 // Maj(a,b,c) + .long 0xcad79c11 // eor x17,x0,x23, ror #39 // Sigma0(a) + .long 0xca4719ce // eor x14,x14,x7, lsr #6 // sigma1(X[i+14]) + .long 0x8b020129 // add x9,x9,x2 + .long 0x8b16035a // add x26,x26,x22 // d+=h + .long 0x8b1302d6 // add x22,x22,x19 // h+=Maj(a,b,c) + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++, x28 in next round + .long 0x8b0f0129 // add x9,x9,x15 + .long 0x8b1102d6 // add x22,x22,x17 // h+=Sigma0(a) + .long 0x8b0e0129 // add x9,x9,x14 + .long 0xf9400fee // ldr x14,[sp,#24] + .long 0xf9000be1 // str x1,[sp,#16] + .long 0x93da3b50 // ror x16,x26,#14 + .long 0x8b1302b5 // add x21,x21,x19 // h+=K[i] + .long 0x93cb0560 // ror x0,x11,#1 + .long 0x8a1a0371 // and x17,x27,x26 + .long 0x93c84d0f // ror x15,x8,#19 + .long 0x8a3a0293 // bic x19,x20,x26 + .long 0x93d672c1 // ror x1,x22,#28 + .long 0x8b0902b5 // add x21,x21,x9 // h+=X[i] + .long 0xcada4a10 // eor x16,x16,x26, ror #18 + .long 0xcacb2000 // eor x0,x0,x11, ror #8 + .long 0xaa130231 // orr x17,x17,x19 // Ch(e,f,g) + .long 0xca1702d3 // eor x19,x22,x23 // a^b, b^c in next round + .long 0xcadaa610 // eor x16,x16,x26, ror #41 // Sigma1(e) + .long 0xcad68821 // eor x1,x1,x22, ror #34 + .long 0x8b1102b5 // add x21,x21,x17 // h+=Ch(e,f,g) + .long 0x8a13039c // and x28,x28,x19 // (b^c)&=(a^b) + .long 0xcac8f5ef // eor x15,x15,x8, ror #61 + .long 0xca4b1c00 // eor x0,x0,x11, lsr #7 // sigma0(X[i+1]) + .long 0x8b1002b5 // add x21,x21,x16 // h+=Sigma1(e) + .long 0xca17039c // eor x28,x28,x23 // Maj(a,b,c) + .long 0xcad69c31 // eor x17,x1,x22, ror #39 // Sigma0(a) + .long 0xca4819ef // eor x15,x15,x8, lsr #6 // sigma1(X[i+14]) + .long 0x8b03014a // add x10,x10,x3 + .long 0x8b150339 // add x25,x25,x21 // d+=h + .long 0x8b1c02b5 // add x21,x21,x28 // h+=Maj(a,b,c) + .long 0xf84087dc // ldr x28,[x30],#8 // *K++, x19 in next round + .long 0x8b00014a // add x10,x10,x0 + .long 0x8b1102b5 // add x21,x21,x17 // h+=Sigma0(a) + .long 0x8b0f014a // add x10,x10,x15 + .long 0xf94003ef // ldr x15,[sp,#0] + .long 0xf9000fe2 // str x2,[sp,#24] + .long 0x93d93b30 // ror x16,x25,#14 + .long 0x8b1c0294 // add x20,x20,x28 // h+=K[i] + .long 0x93cc0581 // ror x1,x12,#1 + .long 0x8a190351 // and x17,x26,x25 + .long 0x93c94d20 // ror x0,x9,#19 + .long 0x8a39037c // bic x28,x27,x25 + .long 0x93d572a2 // ror x2,x21,#28 + .long 0x8b0a0294 // add x20,x20,x10 // h+=X[i] + .long 0xcad94a10 // eor x16,x16,x25, ror #18 + .long 0xcacc2021 // eor x1,x1,x12, ror #8 + .long 0xaa1c0231 // orr x17,x17,x28 // Ch(e,f,g) + .long 0xca1602bc // eor x28,x21,x22 // a^b, b^c in next round + .long 0xcad9a610 // eor x16,x16,x25, ror #41 // Sigma1(e) + .long 0xcad58842 // eor x2,x2,x21, ror #34 + .long 0x8b110294 // add x20,x20,x17 // h+=Ch(e,f,g) + .long 0x8a1c0273 // and x19,x19,x28 // (b^c)&=(a^b) + .long 0xcac9f400 // eor x0,x0,x9, ror #61 + .long 0xca4c1c21 // eor x1,x1,x12, lsr #7 // sigma0(X[i+1]) + .long 0x8b100294 // add x20,x20,x16 // h+=Sigma1(e) + .long 0xca160273 // eor x19,x19,x22 // Maj(a,b,c) + .long 0xcad59c51 // eor x17,x2,x21, ror #39 // Sigma0(a) + .long 0xca491800 // eor x0,x0,x9, lsr #6 // sigma1(X[i+14]) + .long 0x8b04016b // add x11,x11,x4 + .long 0x8b140318 // add x24,x24,x20 // d+=h + .long 0x8b130294 // add x20,x20,x19 // h+=Maj(a,b,c) + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++, x28 in next round + .long 0x8b01016b // add x11,x11,x1 + .long 0x8b110294 // add x20,x20,x17 // h+=Sigma0(a) + .long 0x8b00016b // add x11,x11,x0 + .long 0xf94007e0 // ldr x0,[sp,#8] + .long 0xf90003e3 // str x3,[sp,#0] + .long 0x93d83b10 // ror x16,x24,#14 + .long 0x8b13037b // add x27,x27,x19 // h+=K[i] + .long 0x93cd05a2 // ror x2,x13,#1 + .long 0x8a180331 // and x17,x25,x24 + .long 0x93ca4d41 // ror x1,x10,#19 + .long 0x8a380353 // bic x19,x26,x24 + .long 0x93d47283 // ror x3,x20,#28 + .long 0x8b0b037b // add x27,x27,x11 // h+=X[i] + .long 0xcad84a10 // eor x16,x16,x24, ror #18 + .long 0xcacd2042 // eor x2,x2,x13, ror #8 + .long 0xaa130231 // orr x17,x17,x19 // Ch(e,f,g) + .long 0xca150293 // eor x19,x20,x21 // a^b, b^c in next round + .long 0xcad8a610 // eor x16,x16,x24, ror #41 // Sigma1(e) + .long 0xcad48863 // eor x3,x3,x20, ror #34 + .long 0x8b11037b // add x27,x27,x17 // h+=Ch(e,f,g) + .long 0x8a13039c // and x28,x28,x19 // (b^c)&=(a^b) + .long 0xcacaf421 // eor x1,x1,x10, ror #61 + .long 0xca4d1c42 // eor x2,x2,x13, lsr #7 // sigma0(X[i+1]) + .long 0x8b10037b // add x27,x27,x16 // h+=Sigma1(e) + .long 0xca15039c // eor x28,x28,x21 // Maj(a,b,c) + .long 0xcad49c71 // eor x17,x3,x20, ror #39 // Sigma0(a) + .long 0xca4a1821 // eor x1,x1,x10, lsr #6 // sigma1(X[i+14]) + .long 0x8b05018c // add x12,x12,x5 + .long 0x8b1b02f7 // add x23,x23,x27 // d+=h + .long 0x8b1c037b // add x27,x27,x28 // h+=Maj(a,b,c) + .long 0xf84087dc // ldr x28,[x30],#8 // *K++, x19 in next round + .long 0x8b02018c // add x12,x12,x2 + .long 0x8b11037b // add x27,x27,x17 // h+=Sigma0(a) + .long 0x8b01018c // add x12,x12,x1 + .long 0xf9400be1 // ldr x1,[sp,#16] + .long 0xf90007e4 // str x4,[sp,#8] + .long 0x93d73af0 // ror x16,x23,#14 + .long 0x8b1c035a // add x26,x26,x28 // h+=K[i] + .long 0x93ce05c3 // ror x3,x14,#1 + .long 0x8a170311 // and x17,x24,x23 + .long 0x93cb4d62 // ror x2,x11,#19 + .long 0x8a37033c // bic x28,x25,x23 + .long 0x93db7364 // ror x4,x27,#28 + .long 0x8b0c035a // add x26,x26,x12 // h+=X[i] + .long 0xcad74a10 // eor x16,x16,x23, ror #18 + .long 0xcace2063 // eor x3,x3,x14, ror #8 + .long 0xaa1c0231 // orr x17,x17,x28 // Ch(e,f,g) + .long 0xca14037c // eor x28,x27,x20 // a^b, b^c in next round + .long 0xcad7a610 // eor x16,x16,x23, ror #41 // Sigma1(e) + .long 0xcadb8884 // eor x4,x4,x27, ror #34 + .long 0x8b11035a // add x26,x26,x17 // h+=Ch(e,f,g) + .long 0x8a1c0273 // and x19,x19,x28 // (b^c)&=(a^b) + .long 0xcacbf442 // eor x2,x2,x11, ror #61 + .long 0xca4e1c63 // eor x3,x3,x14, lsr #7 // sigma0(X[i+1]) + .long 0x8b10035a // add x26,x26,x16 // h+=Sigma1(e) + .long 0xca140273 // eor x19,x19,x20 // Maj(a,b,c) + .long 0xcadb9c91 // eor x17,x4,x27, ror #39 // Sigma0(a) + .long 0xca4b1842 // eor x2,x2,x11, lsr #6 // sigma1(X[i+14]) + .long 0x8b0601ad // add x13,x13,x6 + .long 0x8b1a02d6 // add x22,x22,x26 // d+=h + .long 0x8b13035a // add x26,x26,x19 // h+=Maj(a,b,c) + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++, x28 in next round + .long 0x8b0301ad // add x13,x13,x3 + .long 0x8b11035a // add x26,x26,x17 // h+=Sigma0(a) + .long 0x8b0201ad // add x13,x13,x2 + .long 0xf9400fe2 // ldr x2,[sp,#24] + .long 0xf9000be5 // str x5,[sp,#16] + .long 0x93d63ad0 // ror x16,x22,#14 + .long 0x8b130339 // add x25,x25,x19 // h+=K[i] + .long 0x93cf05e4 // ror x4,x15,#1 + .long 0x8a1602f1 // and x17,x23,x22 + .long 0x93cc4d83 // ror x3,x12,#19 + .long 0x8a360313 // bic x19,x24,x22 + .long 0x93da7345 // ror x5,x26,#28 + .long 0x8b0d0339 // add x25,x25,x13 // h+=X[i] + .long 0xcad64a10 // eor x16,x16,x22, ror #18 + .long 0xcacf2084 // eor x4,x4,x15, ror #8 + .long 0xaa130231 // orr x17,x17,x19 // Ch(e,f,g) + .long 0xca1b0353 // eor x19,x26,x27 // a^b, b^c in next round + .long 0xcad6a610 // eor x16,x16,x22, ror #41 // Sigma1(e) + .long 0xcada88a5 // eor x5,x5,x26, ror #34 + .long 0x8b110339 // add x25,x25,x17 // h+=Ch(e,f,g) + .long 0x8a13039c // and x28,x28,x19 // (b^c)&=(a^b) + .long 0xcaccf463 // eor x3,x3,x12, ror #61 + .long 0xca4f1c84 // eor x4,x4,x15, lsr #7 // sigma0(X[i+1]) + .long 0x8b100339 // add x25,x25,x16 // h+=Sigma1(e) + .long 0xca1b039c // eor x28,x28,x27 // Maj(a,b,c) + .long 0xcada9cb1 // eor x17,x5,x26, ror #39 // Sigma0(a) + .long 0xca4c1863 // eor x3,x3,x12, lsr #6 // sigma1(X[i+14]) + .long 0x8b0701ce // add x14,x14,x7 + .long 0x8b1902b5 // add x21,x21,x25 // d+=h + .long 0x8b1c0339 // add x25,x25,x28 // h+=Maj(a,b,c) + .long 0xf84087dc // ldr x28,[x30],#8 // *K++, x19 in next round + .long 0x8b0401ce // add x14,x14,x4 + .long 0x8b110339 // add x25,x25,x17 // h+=Sigma0(a) + .long 0x8b0301ce // add x14,x14,x3 + .long 0xf94003e3 // ldr x3,[sp,#0] + .long 0xf9000fe6 // str x6,[sp,#24] + .long 0x93d53ab0 // ror x16,x21,#14 + .long 0x8b1c0318 // add x24,x24,x28 // h+=K[i] + .long 0x93c00405 // ror x5,x0,#1 + .long 0x8a1502d1 // and x17,x22,x21 + .long 0x93cd4da4 // ror x4,x13,#19 + .long 0x8a3502fc // bic x28,x23,x21 + .long 0x93d97326 // ror x6,x25,#28 + .long 0x8b0e0318 // add x24,x24,x14 // h+=X[i] + .long 0xcad54a10 // eor x16,x16,x21, ror #18 + .long 0xcac020a5 // eor x5,x5,x0, ror #8 + .long 0xaa1c0231 // orr x17,x17,x28 // Ch(e,f,g) + .long 0xca1a033c // eor x28,x25,x26 // a^b, b^c in next round + .long 0xcad5a610 // eor x16,x16,x21, ror #41 // Sigma1(e) + .long 0xcad988c6 // eor x6,x6,x25, ror #34 + .long 0x8b110318 // add x24,x24,x17 // h+=Ch(e,f,g) + .long 0x8a1c0273 // and x19,x19,x28 // (b^c)&=(a^b) + .long 0xcacdf484 // eor x4,x4,x13, ror #61 + .long 0xca401ca5 // eor x5,x5,x0, lsr #7 // sigma0(X[i+1]) + .long 0x8b100318 // add x24,x24,x16 // h+=Sigma1(e) + .long 0xca1a0273 // eor x19,x19,x26 // Maj(a,b,c) + .long 0xcad99cd1 // eor x17,x6,x25, ror #39 // Sigma0(a) + .long 0xca4d1884 // eor x4,x4,x13, lsr #6 // sigma1(X[i+14]) + .long 0x8b0801ef // add x15,x15,x8 + .long 0x8b180294 // add x20,x20,x24 // d+=h + .long 0x8b130318 // add x24,x24,x19 // h+=Maj(a,b,c) + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++, x28 in next round + .long 0x8b0501ef // add x15,x15,x5 + .long 0x8b110318 // add x24,x24,x17 // h+=Sigma0(a) + .long 0x8b0401ef // add x15,x15,x4 + .long 0xf94007e4 // ldr x4,[sp,#8] + .long 0xf90003e7 // str x7,[sp,#0] + .long 0x93d43a90 // ror x16,x20,#14 + .long 0x8b1302f7 // add x23,x23,x19 // h+=K[i] + .long 0x93c10426 // ror x6,x1,#1 + .long 0x8a1402b1 // and x17,x21,x20 + .long 0x93ce4dc5 // ror x5,x14,#19 + .long 0x8a3402d3 // bic x19,x22,x20 + .long 0x93d87307 // ror x7,x24,#28 + .long 0x8b0f02f7 // add x23,x23,x15 // h+=X[i] + .long 0xcad44a10 // eor x16,x16,x20, ror #18 + .long 0xcac120c6 // eor x6,x6,x1, ror #8 + .long 0xaa130231 // orr x17,x17,x19 // Ch(e,f,g) + .long 0xca190313 // eor x19,x24,x25 // a^b, b^c in next round + .long 0xcad4a610 // eor x16,x16,x20, ror #41 // Sigma1(e) + .long 0xcad888e7 // eor x7,x7,x24, ror #34 + .long 0x8b1102f7 // add x23,x23,x17 // h+=Ch(e,f,g) + .long 0x8a13039c // and x28,x28,x19 // (b^c)&=(a^b) + .long 0xcacef4a5 // eor x5,x5,x14, ror #61 + .long 0xca411cc6 // eor x6,x6,x1, lsr #7 // sigma0(X[i+1]) + .long 0x8b1002f7 // add x23,x23,x16 // h+=Sigma1(e) + .long 0xca19039c // eor x28,x28,x25 // Maj(a,b,c) + .long 0xcad89cf1 // eor x17,x7,x24, ror #39 // Sigma0(a) + .long 0xca4e18a5 // eor x5,x5,x14, lsr #6 // sigma1(X[i+14]) + .long 0x8b090000 // add x0,x0,x9 + .long 0x8b17037b // add x27,x27,x23 // d+=h + .long 0x8b1c02f7 // add x23,x23,x28 // h+=Maj(a,b,c) + .long 0xf84087dc // ldr x28,[x30],#8 // *K++, x19 in next round + .long 0x8b060000 // add x0,x0,x6 + .long 0x8b1102f7 // add x23,x23,x17 // h+=Sigma0(a) + .long 0x8b050000 // add x0,x0,x5 + .long 0xf9400be5 // ldr x5,[sp,#16] + .long 0xf90007e8 // str x8,[sp,#8] + .long 0x93db3b70 // ror x16,x27,#14 + .long 0x8b1c02d6 // add x22,x22,x28 // h+=K[i] + .long 0x93c20447 // ror x7,x2,#1 + .long 0x8a1b0291 // and x17,x20,x27 + .long 0x93cf4de6 // ror x6,x15,#19 + .long 0x8a3b02bc // bic x28,x21,x27 + .long 0x93d772e8 // ror x8,x23,#28 + .long 0x8b0002d6 // add x22,x22,x0 // h+=X[i] + .long 0xcadb4a10 // eor x16,x16,x27, ror #18 + .long 0xcac220e7 // eor x7,x7,x2, ror #8 + .long 0xaa1c0231 // orr x17,x17,x28 // Ch(e,f,g) + .long 0xca1802fc // eor x28,x23,x24 // a^b, b^c in next round + .long 0xcadba610 // eor x16,x16,x27, ror #41 // Sigma1(e) + .long 0xcad78908 // eor x8,x8,x23, ror #34 + .long 0x8b1102d6 // add x22,x22,x17 // h+=Ch(e,f,g) + .long 0x8a1c0273 // and x19,x19,x28 // (b^c)&=(a^b) + .long 0xcacff4c6 // eor x6,x6,x15, ror #61 + .long 0xca421ce7 // eor x7,x7,x2, lsr #7 // sigma0(X[i+1]) + .long 0x8b1002d6 // add x22,x22,x16 // h+=Sigma1(e) + .long 0xca180273 // eor x19,x19,x24 // Maj(a,b,c) + .long 0xcad79d11 // eor x17,x8,x23, ror #39 // Sigma0(a) + .long 0xca4f18c6 // eor x6,x6,x15, lsr #6 // sigma1(X[i+14]) + .long 0x8b0a0021 // add x1,x1,x10 + .long 0x8b16035a // add x26,x26,x22 // d+=h + .long 0x8b1302d6 // add x22,x22,x19 // h+=Maj(a,b,c) + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++, x28 in next round + .long 0x8b070021 // add x1,x1,x7 + .long 0x8b1102d6 // add x22,x22,x17 // h+=Sigma0(a) + .long 0x8b060021 // add x1,x1,x6 + .long 0xf9400fe6 // ldr x6,[sp,#24] + .long 0xf9000be9 // str x9,[sp,#16] + .long 0x93da3b50 // ror x16,x26,#14 + .long 0x8b1302b5 // add x21,x21,x19 // h+=K[i] + .long 0x93c30468 // ror x8,x3,#1 + .long 0x8a1a0371 // and x17,x27,x26 + .long 0x93c04c07 // ror x7,x0,#19 + .long 0x8a3a0293 // bic x19,x20,x26 + .long 0x93d672c9 // ror x9,x22,#28 + .long 0x8b0102b5 // add x21,x21,x1 // h+=X[i] + .long 0xcada4a10 // eor x16,x16,x26, ror #18 + .long 0xcac32108 // eor x8,x8,x3, ror #8 + .long 0xaa130231 // orr x17,x17,x19 // Ch(e,f,g) + .long 0xca1702d3 // eor x19,x22,x23 // a^b, b^c in next round + .long 0xcadaa610 // eor x16,x16,x26, ror #41 // Sigma1(e) + .long 0xcad68929 // eor x9,x9,x22, ror #34 + .long 0x8b1102b5 // add x21,x21,x17 // h+=Ch(e,f,g) + .long 0x8a13039c // and x28,x28,x19 // (b^c)&=(a^b) + .long 0xcac0f4e7 // eor x7,x7,x0, ror #61 + .long 0xca431d08 // eor x8,x8,x3, lsr #7 // sigma0(X[i+1]) + .long 0x8b1002b5 // add x21,x21,x16 // h+=Sigma1(e) + .long 0xca17039c // eor x28,x28,x23 // Maj(a,b,c) + .long 0xcad69d31 // eor x17,x9,x22, ror #39 // Sigma0(a) + .long 0xca4018e7 // eor x7,x7,x0, lsr #6 // sigma1(X[i+14]) + .long 0x8b0b0042 // add x2,x2,x11 + .long 0x8b150339 // add x25,x25,x21 // d+=h + .long 0x8b1c02b5 // add x21,x21,x28 // h+=Maj(a,b,c) + .long 0xf84087dc // ldr x28,[x30],#8 // *K++, x19 in next round + .long 0x8b080042 // add x2,x2,x8 + .long 0x8b1102b5 // add x21,x21,x17 // h+=Sigma0(a) + .long 0x8b070042 // add x2,x2,x7 + .long 0xf94003e7 // ldr x7,[sp,#0] + .long 0xf9000fea // str x10,[sp,#24] + .long 0x93d93b30 // ror x16,x25,#14 + .long 0x8b1c0294 // add x20,x20,x28 // h+=K[i] + .long 0x93c40489 // ror x9,x4,#1 + .long 0x8a190351 // and x17,x26,x25 + .long 0x93c14c28 // ror x8,x1,#19 + .long 0x8a39037c // bic x28,x27,x25 + .long 0x93d572aa // ror x10,x21,#28 + .long 0x8b020294 // add x20,x20,x2 // h+=X[i] + .long 0xcad94a10 // eor x16,x16,x25, ror #18 + .long 0xcac42129 // eor x9,x9,x4, ror #8 + .long 0xaa1c0231 // orr x17,x17,x28 // Ch(e,f,g) + .long 0xca1602bc // eor x28,x21,x22 // a^b, b^c in next round + .long 0xcad9a610 // eor x16,x16,x25, ror #41 // Sigma1(e) + .long 0xcad5894a // eor x10,x10,x21, ror #34 + .long 0x8b110294 // add x20,x20,x17 // h+=Ch(e,f,g) + .long 0x8a1c0273 // and x19,x19,x28 // (b^c)&=(a^b) + .long 0xcac1f508 // eor x8,x8,x1, ror #61 + .long 0xca441d29 // eor x9,x9,x4, lsr #7 // sigma0(X[i+1]) + .long 0x8b100294 // add x20,x20,x16 // h+=Sigma1(e) + .long 0xca160273 // eor x19,x19,x22 // Maj(a,b,c) + .long 0xcad59d51 // eor x17,x10,x21, ror #39 // Sigma0(a) + .long 0xca411908 // eor x8,x8,x1, lsr #6 // sigma1(X[i+14]) + .long 0x8b0c0063 // add x3,x3,x12 + .long 0x8b140318 // add x24,x24,x20 // d+=h + .long 0x8b130294 // add x20,x20,x19 // h+=Maj(a,b,c) + .long 0xf84087d3 // ldr x19,[x30],#8 // *K++, x28 in next round + .long 0x8b090063 // add x3,x3,x9 + .long 0x8b110294 // add x20,x20,x17 // h+=Sigma0(a) + .long 0x8b080063 // add x3,x3,x8 + cbnz x19,.Lsha512_gpr_loop_16_xx + + .long 0xa9460ba0 // ldp x0,x2,[x29,#96] + .long 0xf9403ba1 // ldr x1,[x29,#112] + .long 0xd10a23de // sub x30,x30,#648 // rewind + + .long 0xa9401003 // ldp x3,x4,[x0] + .long 0xa9411805 // ldp x5,x6,[x0,#2*8] + .long 0x9101c021 // add x1,x1,#14*8 // advance input pointer + .long 0xa9422007 // ldp x7,x8,[x0,#4*8] + .long 0x8b030294 // add x20,x20,x3 + .long 0xa9432809 // ldp x9,x10,[x0,#6*8] + .long 0x8b0402b5 // add x21,x21,x4 + .long 0x8b0502d6 // add x22,x22,x5 + .long 0x8b0602f7 // add x23,x23,x6 + .long 0xa9005414 // stp x20,x21,[x0] + .long 0x8b070318 // add x24,x24,x7 + .long 0x8b080339 // add x25,x25,x8 + .long 0xa9015c16 // stp x22,x23,[x0,#2*8] + .long 0x8b09035a // add x26,x26,x9 + .long 0x8b0a037b // add x27,x27,x10 + .long 0xeb02003f // cmp x1,x2 + .long 0xa9026418 // stp x24,x25,[x0,#4*8] + .long 0xa9036c1a // stp x26,x27,[x0,#6*8] + b.ne .Lsha512_gpr_loop + + .long 0xa94153b3 // ldp x19,x20,[x29,#16] + .long 0x910083ff // add sp,sp,#4*8 + .long 0xa9425bb5 // ldp x21,x22,[x29,#32] + .long 0xa94363b7 // ldp x23,x24,[x29,#48] + .long 0xa9446bb9 // ldp x25,x26,[x29,#64] + .long 0xa94573bb // ldp x27,x28,[x29,#80] + .long 0xa8c87bfd // ldp x29,x30,[sp],#128 + ret diff --git a/HashLib/src/Include/Simd/Scrypt/ScryptSalsa8Avx2_i386.inc b/HashLib/src/Include/Simd/Scrypt/ScryptSalsa8Avx_i386.inc similarity index 98% rename from HashLib/src/Include/Simd/Scrypt/ScryptSalsa8Avx2_i386.inc rename to HashLib/src/Include/Simd/Scrypt/ScryptSalsa8Avx_i386.inc index 0966dfa7..72d06f50 100644 --- a/HashLib/src/Include/Simd/Scrypt/ScryptSalsa8Avx2_i386.inc +++ b/HashLib/src/Include/Simd/Scrypt/ScryptSalsa8Avx_i386.inc @@ -1,5 +1,5 @@ -// AVX2 (VEX-128) implementation of fused XOR + Salsa20/8 on Percival-permuted -// data (IA-32). Same structure as ScryptSalsa8Avx2_x86_64.inc; the state +// AVX (VEX-128) implementation of fused XOR + Salsa20/8 on Percival-permuted +// data (IA-32). Same structure as ScryptSalsa8Avx_x86_64.inc; the state // save/reload uses vmovdqu (IA-32 stacks are only 4-aligned), so the frame is // 64 bytes with no alignment padding. // AVX/AVX2 instructions are db-encoded for broad assembler compatibility. diff --git a/HashLib/src/Include/Simd/Scrypt/ScryptSalsa8Avx2_x86_64.inc b/HashLib/src/Include/Simd/Scrypt/ScryptSalsa8Avx_x86_64.inc similarity index 98% rename from HashLib/src/Include/Simd/Scrypt/ScryptSalsa8Avx2_x86_64.inc rename to HashLib/src/Include/Simd/Scrypt/ScryptSalsa8Avx_x86_64.inc index 6ce81abc..ad8192b8 100644 --- a/HashLib/src/Include/Simd/Scrypt/ScryptSalsa8Avx2_x86_64.inc +++ b/HashLib/src/Include/Simd/Scrypt/ScryptSalsa8Avx_x86_64.inc @@ -1,4 +1,4 @@ -// AVX2 (VEX-128) implementation of fused XOR + Salsa20/8 on Percival-permuted data. +// AVX (VEX-128) implementation of fused XOR + Salsa20/8 on Percival-permuted data. // AVX/AVX2 instructions are db-encoded for broad assembler compatibility. // // Reference: Colin Percival, "Stronger Key Derivation via Sequential diff --git a/HashLib/src/Include/Simd/XXH3/XXH3Acc512Neon_aarch64.inc b/HashLib/src/Include/Simd/XXH3/XXH3Acc512Neon_aarch64.inc index fdd58f61..d98d5230 100644 --- a/HashLib/src/Include/Simd/XXH3/XXH3Acc512Neon_aarch64.inc +++ b/HashLib/src/Include/Simd/XXH3/XXH3Acc512Neon_aarch64.inc @@ -19,8 +19,8 @@ .long 0x6e0540b1 // ext v17.16b, v5.16b, v5.16b, #8 .long 0x6e261c84 // eor v4.16b, v4.16b, v6.16b .long 0x6e271ca5 // eor v5.16b, v5.16b, v7.16b - .long 0x4e871886 // uzp1 v6.4s, v4.4s, v5.4s - .long 0x4e875887 // uzp2 v7.4s, v4.4s, v5.4s + .long 0x4e851886 // uzp1 v6.4s, v4.4s, v5.4s + .long 0x4e855887 // uzp2 v7.4s, v4.4s, v5.4s .long 0x2ea780d0 // umlal v16.2d, v6.2s, v7.2s .long 0x6ea780d1 // umlal2 v17.2d, v6.4s, v7.4s .long 0x3dc00000 // ldr q0, [x0, #0x0] @@ -38,8 +38,8 @@ .long 0x6e0540b1 // ext v17.16b, v5.16b, v5.16b, #8 .long 0x6e261c84 // eor v4.16b, v4.16b, v6.16b .long 0x6e271ca5 // eor v5.16b, v5.16b, v7.16b - .long 0x4e871886 // uzp1 v6.4s, v4.4s, v5.4s - .long 0x4e875887 // uzp2 v7.4s, v4.4s, v5.4s + .long 0x4e851886 // uzp1 v6.4s, v4.4s, v5.4s + .long 0x4e855887 // uzp2 v7.4s, v4.4s, v5.4s .long 0x2ea780d0 // umlal v16.2d, v6.2s, v7.2s .long 0x6ea780d1 // umlal2 v17.2d, v6.4s, v7.4s .long 0x3dc00802 // ldr q2, [x0, #0x20] diff --git a/HashLib/src/Include/Simd/XXH3/XXH3InitSecretAvx2_i386.inc b/HashLib/src/Include/Simd/XXH3/XXH3InitSecretAvx2_i386.inc index 220699db..54cc778c 100644 --- a/HashLib/src/Include/Simd/XXH3/XXH3InitSecretAvx2_i386.inc +++ b/HashLib/src/Include/Simd/XXH3/XXH3InitSecretAvx2_i386.inc @@ -3,20 +3,19 @@ // x86_64 version's vmovq xmm, r64 seed transfers (not encodable in 32-bit // mode) become the SSE2 i386 sibling's push/vmovq-from-stack pattern, with // the negation done in 32-bit halves (not/not + add/adc carry). -// IA-32: after HlpSimdProc3Begin_i386 - ebx = customSecret, -// esi = defaultSecret, edi = seed.lo32, dword [esp+16] = seed.hi32 -// (UInt64 third parameter; high dword on stack). +// IA-32: after HlpSimdProc3Begin_i386 - ebx = customSecret, esi = defaultSecret, +// edi = seed ptr (PUInt64). // Uses only volatile registers: ymm0-ymm1, eax, ecx, edx (edi reused). // AVX/AVX2 instructions are db-encoded for broad assembler compatibility. // Reference: official xxHash C - XXH3_initCustomSecret_avx2 in xxhash.h, // HashLib XXH3InitSecretAvx2_x86_64.inc. // Build seed vector ymm0 = [seed, -seed, seed, -seed] - mov eax, edi - mov edx, dword ptr [esp + $10] + mov eax, dword ptr [edi] + mov edx, dword ptr [edi + $4] - push eax push edx + push eax db $C5, $FA, $7E, $04, $24 // vmovq xmm0, qword [esp] add esp, $8 @@ -26,8 +25,8 @@ not edi add ecx, $1 adc edi, $0 - push ecx push edi + push ecx db $C5, $FA, $7E, $0C, $24 // vmovq xmm1, qword [esp] add esp, $8 db $C5, $F9, $6C, $C1 // vpunpcklqdq xmm0, xmm0, xmm1 diff --git a/HashLib/src/Include/Simd/XXH3/XXH3InitSecretAvx2_x86_64.inc b/HashLib/src/Include/Simd/XXH3/XXH3InitSecretAvx2_x86_64.inc index a8bde0bf..8937c164 100644 --- a/HashLib/src/Include/Simd/XXH3/XXH3InitSecretAvx2_x86_64.inc +++ b/HashLib/src/Include/Simd/XXH3/XXH3InitSecretAvx2_x86_64.inc @@ -1,10 +1,12 @@ // AVX2 implementation of XXH3_initCustomSecret (fully unrolled, 6 x 32-byte chunks). // AVX/AVX2 instructions are db-encoded for broad assembler compatibility. -// Expects MS x64 ABI: rcx = customSecret ptr, rdx = defaultSecret ptr, r8 = seed (UInt64). +// Expects MS x64 ABI: rcx = customSecret ptr, rdx = defaultSecret ptr, +// r8 = seed ptr (PUInt64). // Uses only volatile registers: ymm0-ymm2, rax. // Reference: official xxHash C - XXH3_initCustomSecret_avx2 in xxhash.h // Build seed vector ymm0 = [seed, -seed, seed, -seed] + mov r8, qword [r8] db $C4, $C1, $F9, $6E, $C0 // vmovq xmm0, r8 mov rax, r8 neg rax diff --git a/HashLib/src/Include/Simd/XXH3/XXH3InitSecretNeon_aarch64.inc b/HashLib/src/Include/Simd/XXH3/XXH3InitSecretNeon_aarch64.inc index 5be27288..c210f941 100644 --- a/HashLib/src/Include/Simd/XXH3/XXH3InitSecretNeon_aarch64.inc +++ b/HashLib/src/Include/Simd/XXH3/XXH3InitSecretNeon_aarch64.inc @@ -1,5 +1,6 @@ // XXH3 initCustomSecret AArch64 NEON implementation (192-byte custom secret). -// Expects AAPCS64: x0 = customSecret ptr, x1 = defaultSecret ptr, x2 = seed (UInt64). +// Expects AAPCS64: x0 = customSecret ptr, x1 = defaultSecret ptr, +// x2 = seed ptr (PUInt64). // Leaf nostackframe; caller-saved GPR/vector only. // Reference: HashLib XXH3InitSecretSse2_x86_64.inc. // AArch64 vector instructions are .long-encoded for broad assembler compatibility. @@ -8,6 +9,7 @@ // v0 = vSeed broadcast vector [seed, -seed] // v16-v17 = fmov staging for zip1 pack // v2 = defaultSecret block load / add temp + ldr x2, [x2] neg x3, x2 .long 0x9e670050 // fmov d16, x2 .long 0x9e670071 // fmov d17, x3 diff --git a/HashLib/src/Include/Simd/XXH3/XXH3InitSecretSse2_i386.inc b/HashLib/src/Include/Simd/XXH3/XXH3InitSecretSse2_i386.inc index cad3d2e7..eeee84da 100644 --- a/HashLib/src/Include/Simd/XXH3/XXH3InitSecretSse2_i386.inc +++ b/HashLib/src/Include/Simd/XXH3/XXH3InitSecretSse2_i386.inc @@ -1,15 +1,14 @@ // SSE2 implementation of XXH3_initCustomSecret (fully unrolled, 12 x 16-byte chunks). -// IA-32: after HlpSimdProc3Begin_i386 — ebx = customSecret, esi = defaultSecret, edi = seed.lo32, -// dword [esp+16] = seed.hi32 (UInt64 third parameter; high dword on stack). -// (parallel to MS x64 ABI: rcx, rdx, r8). -// Uses only volatile XMM: xmm0–xmm2. +// IA-32: after HlpSimdProc3Begin_i386 - ebx = customSecret, esi = defaultSecret, +// edi = seed ptr (PUInt64). +// Uses only volatile XMM: xmm0-xmm2. // Reference: official xxHash C - XXH3_initCustomSecret_sse2 in xxhash.h - mov eax, edi - mov edx, dword ptr [esp + 16] + mov eax, dword ptr [edi] + mov edx, dword ptr [edi + 4] - push eax push edx + push eax movq xmm0, qword ptr [esp] add esp, 8 @@ -19,8 +18,8 @@ not edi add ecx, 1 adc edi, 0 - push ecx push edi + push ecx movq xmm1, qword ptr [esp] add esp, 8 punpcklqdq xmm0, xmm1 diff --git a/HashLib/src/Include/Simd/XXH3/XXH3InitSecretSse2_x86_64.inc b/HashLib/src/Include/Simd/XXH3/XXH3InitSecretSse2_x86_64.inc index 8b1306fc..d39de631 100644 --- a/HashLib/src/Include/Simd/XXH3/XXH3InitSecretSse2_x86_64.inc +++ b/HashLib/src/Include/Simd/XXH3/XXH3InitSecretSse2_x86_64.inc @@ -1,10 +1,12 @@ // SSE2 implementation of XXH3_initCustomSecret (fully unrolled, 12 x 16-byte chunks). -// Expects MS x64 ABI: rcx = customSecret ptr, rdx = defaultSecret ptr, r8 = seed (UInt64). +// Expects MS x64 ABI: rcx = customSecret ptr, rdx = defaultSecret ptr, +// r8 = seed ptr (PUInt64). // Uses only volatile registers: xmm0-xmm2. // Algorithm: for each 16-byte block, lo_qword += seed, hi_qword -= seed. // Reference: official xxHash C - XXH3_initCustomSecret_sse2 in xxhash.h // Build seed vector xmm0 = [seed, -seed] + mov r8, qword [r8] movq xmm0, r8 mov rax, r8 neg rax diff --git a/HashLib/src/Include/Simd/XXH3/XXH3ScrambleNeon_aarch64.inc b/HashLib/src/Include/Simd/XXH3/XXH3ScrambleNeon_aarch64.inc index 9dfc0e40..7bf9f56c 100644 --- a/HashLib/src/Include/Simd/XXH3/XXH3ScrambleNeon_aarch64.inc +++ b/HashLib/src/Include/Simd/XXH3/XXH3ScrambleNeon_aarch64.inc @@ -21,9 +21,9 @@ .long 0x6e211c00 // eor v0.16b, v0.16b, v1.16b .long 0x3dc00021 // ldr q1, [x1, #0x0] .long 0x6e211c00 // eor v0.16b, v0.16b, v1.16b - .long 0x4ea69c03 // mul v3.4s, v0.4s, v4.4s + .long 0x4ea49c03 // mul v3.4s, v0.4s, v4.4s .long 0x0ea12801 // xtn v1.2s, v0.2d - .long 0x2ea78023 // umlal v3.2d, v1.2s, v5.2s + .long 0x2ea58023 // umlal v3.2d, v1.2s, v5.2s .long 0x3d800003 // str q3, [x0, #0x0] // --- chunk 1: acc[2..3], secret[0x10..] --- .long 0x3dc00400 // ldr q0, [x0, #0x10] @@ -31,9 +31,9 @@ .long 0x6e211c00 // eor v0.16b, v0.16b, v1.16b .long 0x3dc00421 // ldr q1, [x1, #0x10] .long 0x6e211c00 // eor v0.16b, v0.16b, v1.16b - .long 0x4ea69c03 // mul v3.4s, v0.4s, v4.4s + .long 0x4ea49c03 // mul v3.4s, v0.4s, v4.4s .long 0x0ea12801 // xtn v1.2s, v0.2d - .long 0x2ea78023 // umlal v3.2d, v1.2s, v5.2s + .long 0x2ea58023 // umlal v3.2d, v1.2s, v5.2s .long 0x3d800403 // str q3, [x0, #0x10] // --- chunk 2: acc[4..5], secret[0x20..] --- .long 0x3dc00800 // ldr q0, [x0, #0x20] @@ -41,9 +41,9 @@ .long 0x6e211c00 // eor v0.16b, v0.16b, v1.16b .long 0x3dc00821 // ldr q1, [x1, #0x20] .long 0x6e211c00 // eor v0.16b, v0.16b, v1.16b - .long 0x4ea69c03 // mul v3.4s, v0.4s, v4.4s + .long 0x4ea49c03 // mul v3.4s, v0.4s, v4.4s .long 0x0ea12801 // xtn v1.2s, v0.2d - .long 0x2ea78023 // umlal v3.2d, v1.2s, v5.2s + .long 0x2ea58023 // umlal v3.2d, v1.2s, v5.2s .long 0x3d800803 // str q3, [x0, #0x20] // --- chunk 3: acc[6..7], secret[0x30..] --- .long 0x3dc00c00 // ldr q0, [x0, #0x30] @@ -51,8 +51,8 @@ .long 0x6e211c00 // eor v0.16b, v0.16b, v1.16b .long 0x3dc00c21 // ldr q1, [x1, #0x30] .long 0x6e211c00 // eor v0.16b, v0.16b, v1.16b - .long 0x4ea69c03 // mul v3.4s, v0.4s, v4.4s + .long 0x4ea49c03 // mul v3.4s, v0.4s, v4.4s .long 0x0ea12801 // xtn v1.2s, v0.2d - .long 0x2ea78023 // umlal v3.2d, v1.2s, v5.2s + .long 0x2ea58023 // umlal v3.2d, v1.2s, v5.2s .long 0x3d800c03 // str q3, [x0, #0x30] ret diff --git a/HashLib/src/Simd/Backend/HlpAdler32X86Backend.pas b/HashLib/src/Simd/Backend/HlpAdler32X86Backend.pas index 883f76af..4e41cba9 100644 --- a/HashLib/src/Simd/Backend/HlpAdler32X86Backend.pas +++ b/HashLib/src/Simd/Backend/HlpAdler32X86Backend.pas @@ -34,50 +34,42 @@ implementation // x86_64: AVX2, SSSE3, SSE2 // ============================================================================= -{$IFDEF HASHLIB_I386_ASM} - procedure Adler32_ProcessBlocks_Sse2(AData: PByte; ANumBlocks: UInt32; ASums, AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\Adler32\Adler32BlocksSse2_i386.inc} -end; - -procedure Adler32_ProcessBlocks_Ssse3(AData: PByte; ANumBlocks: UInt32; - ASums, AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\Adler32\Adler32BlocksSsse3_i386.inc} -end; - -procedure Adler32_ProcessBlocks_Avx2(AData: PByte; ANumBlocks: UInt32; - ASums, AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\Adler32\Adler32BlocksAvx2_i386.inc} -end; - -{$ENDIF HASHLIB_I386_ASM} - {$IFDEF HASHLIB_X86_64_ASM} - -procedure Adler32_ProcessBlocks_Sse2(AData: PByte; ANumBlocks: UInt32; - ASums, AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\Adler32\Adler32BlocksSse2_x86_64.inc} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\Adler32\Adler32BlocksSse2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\Adler32\Adler32BlocksSse2_i386.inc} +{$ENDIF} end; procedure Adler32_ProcessBlocks_Ssse3(AData: PByte; ANumBlocks: UInt32; ASums, AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\Adler32\Adler32BlocksSsse3_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\Adler32\Adler32BlocksSsse3_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\Adler32\Adler32BlocksSsse3_i386.inc} +{$ENDIF} end; procedure Adler32_ProcessBlocks_Avx2(AData: PByte; ANumBlocks: UInt32; ASums, AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\Adler32\Adler32BlocksAvx2_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\Adler32\Adler32BlocksAvx2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\Adler32\Adler32BlocksAvx2_i386.inc} +{$ENDIF} end; -{$ENDIF HASHLIB_X86_64_ASM} - procedure Adler32_Update_Sse2(AData: PByte; ALength: UInt32; ASums: Pointer); begin Adler32_Update_Simd(AData, ALength, ASums, @Adler32_ProcessBlocks_Sse2); diff --git a/HashLib/src/Simd/Backend/HlpArgon2X86Backend.pas b/HashLib/src/Simd/Backend/HlpArgon2X86Backend.pas index 715e7cd0..e7733e6c 100644 --- a/HashLib/src/Simd/Backend/HlpArgon2X86Backend.pas +++ b/HashLib/src/Simd/Backend/HlpArgon2X86Backend.pas @@ -46,28 +46,19 @@ implementation // x86_64: AVX2, SSSE3, SSE2 // ============================================================================= -{$IFDEF HASHLIB_I386_ASM} - procedure Argon2_FillBlock_Sse2(ALeft, ARight, ACurrent: Pointer; AWithXor: Int32); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\Argon2\Argon2FillBlockSse2_i386.inc} -end; - -procedure Argon2_FillBlock_Avx2(ALeft, ARight, ACurrent: Pointer; - AWithXor: Int32; AMasks: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_i386.inc} - {$I ..\..\Include\Simd\Argon2\Argon2FillBlockAvx2_i386.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\Argon2\Argon2FillBlockSse2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\Argon2\Argon2FillBlockSse2_i386.inc} +{$ENDIF} end; -{$ENDIF HASHLIB_I386_ASM} - {$IFDEF HASHLIB_X86_64_ASM} -procedure Argon2_FillBlock_Sse2(ALeft, ARight, ACurrent: Pointer; AWithXor: Int32); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\Argon2\Argon2FillBlockSse2_x86_64.inc} -end; - procedure Argon2_FillBlock_Ssse3(ALeft, ARight, ACurrent: Pointer; AWithXor: Int32; AMasks: Pointer); {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_x86_64.inc} @@ -81,14 +72,20 @@ procedure Argon2_FillBlock_Ssse3_Wrap(ALeft, ARight, ACurrent: Pointer; @ARGON2_ROT_MASKS); end; +{$ENDIF HASHLIB_X86_64_ASM} + procedure Argon2_FillBlock_Avx2(ALeft, ARight, ACurrent: Pointer; AWithXor: Int32; AMasks: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_x86_64.inc} - {$I ..\..\Include\Simd\Argon2\Argon2FillBlockAvx2_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_x86_64.inc} +{$I ..\..\Include\Simd\Argon2\Argon2FillBlockAvx2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_i386.inc} +{$I ..\..\Include\Simd\Argon2\Argon2FillBlockAvx2_i386.inc} +{$ENDIF} end; -{$ENDIF HASHLIB_X86_64_ASM} - procedure Argon2_FillBlock_Avx2_Wrap(ALeft, ARight, ACurrent: Pointer; AWithXor: Int32); begin diff --git a/HashLib/src/Simd/Backend/HlpBlake2BX86Backend.pas b/HashLib/src/Simd/Backend/HlpBlake2BX86Backend.pas index 56b558b0..13687b4a 100644 --- a/HashLib/src/Simd/Backend/HlpBlake2BX86Backend.pas +++ b/HashLib/src/Simd/Backend/HlpBlake2BX86Backend.pas @@ -45,52 +45,27 @@ implementation // x86_64: AVX2, SSSE3, SSE2 // ============================================================================= -{$IFDEF HASHLIB_I386_ASM} - procedure Blake2B_Compress_Sse2(AState, AMsg, ACounterFlags, AIV: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\Blake2B\Blake2BCompressSse2_i386.inc} -end; - -procedure Blake2B_Compress_Ssse3(AState, AMsg, ACounterFlags, AIV, - AMasks: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_i386.inc} - {$I ..\..\Include\Simd\Blake2B\Blake2BCompressSsse3_i386.inc} -end; - -procedure Blake2B_Compress_Ssse3_Wrap(AState, AMsg, ACounterFlags, - AIV: Pointer); -begin - Blake2B_Compress_Ssse3(AState, AMsg, ACounterFlags, AIV, - @BLAKE2B_ROT_MASKS); -end; - -procedure Blake2B_Compress_Avx2(AState, AMsg, ACounterFlags, AIV, - AMasks: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_i386.inc} - {$I ..\..\Include\Simd\Blake2B\Blake2BCompressAvx2_i386.inc} -end; - -procedure Blake2B_Compress_Avx2_Wrap(AState, AMsg, ACounterFlags, - AIV: Pointer); -begin - Blake2B_Compress_Avx2(AState, AMsg, ACounterFlags, AIV, - @BLAKE2B_ROT_MASKS); -end; - -{$ENDIF HASHLIB_I386_ASM} - {$IFDEF HASHLIB_X86_64_ASM} - -procedure Blake2B_Compress_Sse2(AState, AMsg, ACounterFlags, AIV: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\Blake2B\Blake2BCompressSse2_x86_64.inc} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\Blake2B\Blake2BCompressSse2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\Blake2B\Blake2BCompressSse2_i386.inc} +{$ENDIF} end; procedure Blake2B_Compress_Ssse3(AState, AMsg, ACounterFlags, AIV, AMasks: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_x86_64.inc} - {$I ..\..\Include\Simd\Blake2B\Blake2BCompressSsse3_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_x86_64.inc} +{$I ..\..\Include\Simd\Blake2B\Blake2BCompressSsse3_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_i386.inc} +{$I ..\..\Include\Simd\Blake2B\Blake2BCompressSsse3_i386.inc} +{$ENDIF} end; procedure Blake2B_Compress_Ssse3_Wrap(AState, AMsg, ACounterFlags, @@ -102,8 +77,14 @@ procedure Blake2B_Compress_Ssse3_Wrap(AState, AMsg, ACounterFlags, procedure Blake2B_Compress_Avx2(AState, AMsg, ACounterFlags, AIV, AMasks: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_x86_64.inc} - {$I ..\..\Include\Simd\Blake2B\Blake2BCompressAvx2_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_x86_64.inc} +{$I ..\..\Include\Simd\Blake2B\Blake2BCompressAvx2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_i386.inc} +{$I ..\..\Include\Simd\Blake2B\Blake2BCompressAvx2_i386.inc} +{$ENDIF} end; procedure Blake2B_Compress_Avx2_Wrap(AState, AMsg, ACounterFlags, @@ -113,8 +94,6 @@ procedure Blake2B_Compress_Avx2_Wrap(AState, AMsg, ACounterFlags, @BLAKE2B_ROT_MASKS); end; -{$ENDIF HASHLIB_X86_64_ASM} - {$ENDIF HASHLIB_X86_SIMD} { TBlake2BX86Backend } diff --git a/HashLib/src/Simd/Backend/HlpBlake2SX86Backend.pas b/HashLib/src/Simd/Backend/HlpBlake2SX86Backend.pas index 07af3531..5072787c 100644 --- a/HashLib/src/Simd/Backend/HlpBlake2SX86Backend.pas +++ b/HashLib/src/Simd/Backend/HlpBlake2SX86Backend.pas @@ -28,7 +28,7 @@ implementation HlpSimdLevels; const - // pshufb byte-rotation masks for the AVX2 kernel: rotr32 by 16 (at +0) and + // pshufb byte-rotation masks for the AVX and SSSE3 kernels: rotr32 by 16 (at +0) and // by 8 (at +16) as single byte shuffles. Matches the official BLAKE2 SSSE3+ // implementation's r16/r8 shuffle constants. BLAKE2S_ROT_MASKS: array [0 .. 3] of UInt64 = ( @@ -42,52 +42,27 @@ implementation // x86_64: AVX2, SSSE3, SSE2 // ============================================================================= -{$IFDEF HASHLIB_I386_ASM} - procedure Blake2S_Compress_Sse2(AState, AMsg, ACounterFlags, AIV: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\Blake2S\Blake2SCompressSse2_i386.inc} -end; - -procedure Blake2S_Compress_Ssse3(AState, AMsg, ACounterFlags, AIV, - AMasks: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_i386.inc} - {$I ..\..\Include\Simd\Blake2S\Blake2SCompressSsse3_i386.inc} -end; - -procedure Blake2S_Compress_Ssse3_Wrap(AState, AMsg, ACounterFlags, - AIV: Pointer); -begin - Blake2S_Compress_Ssse3(AState, AMsg, ACounterFlags, AIV, - @BLAKE2S_ROT_MASKS); -end; - -procedure Blake2S_Compress_Avx2(AState, AMsg, ACounterFlags, AIV, - AMasks: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_i386.inc} - {$I ..\..\Include\Simd\Blake2S\Blake2SCompressAvx2_i386.inc} -end; - -procedure Blake2S_Compress_Avx2_Wrap(AState, AMsg, ACounterFlags, - AIV: Pointer); -begin - Blake2S_Compress_Avx2(AState, AMsg, ACounterFlags, AIV, - @BLAKE2S_ROT_MASKS); -end; - -{$ENDIF HASHLIB_I386_ASM} - {$IFDEF HASHLIB_X86_64_ASM} - -procedure Blake2S_Compress_Sse2(AState, AMsg, ACounterFlags, AIV: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\Blake2S\Blake2SCompressSse2_x86_64.inc} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\Blake2S\Blake2SCompressSse2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\Blake2S\Blake2SCompressSse2_i386.inc} +{$ENDIF} end; procedure Blake2S_Compress_Ssse3(AState, AMsg, ACounterFlags, AIV, AMasks: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_x86_64.inc} - {$I ..\..\Include\Simd\Blake2S\Blake2SCompressSsse3_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_x86_64.inc} +{$I ..\..\Include\Simd\Blake2S\Blake2SCompressSsse3_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_i386.inc} +{$I ..\..\Include\Simd\Blake2S\Blake2SCompressSsse3_i386.inc} +{$ENDIF} end; procedure Blake2S_Compress_Ssse3_Wrap(AState, AMsg, ACounterFlags, @@ -97,21 +72,25 @@ procedure Blake2S_Compress_Ssse3_Wrap(AState, AMsg, ACounterFlags, @BLAKE2S_ROT_MASKS); end; -procedure Blake2S_Compress_Avx2(AState, AMsg, ACounterFlags, AIV, +procedure Blake2S_Compress_Avx(AState, AMsg, ACounterFlags, AIV, AMasks: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_x86_64.inc} - {$I ..\..\Include\Simd\Blake2S\Blake2SCompressAvx2_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_x86_64.inc} +{$I ..\..\Include\Simd\Blake2S\Blake2SCompressAvx_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_i386.inc} +{$I ..\..\Include\Simd\Blake2S\Blake2SCompressAvx_i386.inc} +{$ENDIF} end; -procedure Blake2S_Compress_Avx2_Wrap(AState, AMsg, ACounterFlags, +procedure Blake2S_Compress_Avx_Wrap(AState, AMsg, ACounterFlags, AIV: Pointer); begin - Blake2S_Compress_Avx2(AState, AMsg, ACounterFlags, AIV, + Blake2S_Compress_Avx(AState, AMsg, ACounterFlags, AIV, @BLAKE2S_ROT_MASKS); end; -{$ENDIF HASHLIB_X86_64_ASM} - {$ENDIF HASHLIB_X86_SIMD} { TBlake2SX86Backend } @@ -122,7 +101,7 @@ class function TBlake2SX86Backend.Select(AScalar: TBlake2SCompressProc): TBlake2 case TCpuFeatures.X86.SelectSlot([TX86SimdLevel.AVX2, TX86SimdLevel.SSSE3, TX86SimdLevel.SSE2]) of TX86SimdLevel.AVX2: - Exit(@Blake2S_Compress_Avx2_Wrap); + Exit(@Blake2S_Compress_Avx_Wrap); TX86SimdLevel.SSSE3: Exit(@Blake2S_Compress_Ssse3_Wrap); TX86SimdLevel.SSE2: diff --git a/HashLib/src/Simd/Backend/HlpBlake3X86Backend.pas b/HashLib/src/Simd/Backend/HlpBlake3X86Backend.pas index c24c86d4..efde87e3 100644 --- a/HashLib/src/Simd/Backend/HlpBlake3X86Backend.pas +++ b/HashLib/src/Simd/Backend/HlpBlake3X86Backend.pas @@ -50,28 +50,19 @@ implementation // x86_64: AVX2, SSSE3, SSE2 // ============================================================================= -{$IFDEF HASHLIB_I386_ASM} - procedure Blake3_Compress_Sse2(AState, AMsg, ACV, ACounterFlags: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\Blake3\Blake3CompressSse2_i386.inc} -end; - -procedure Blake3_Hash4_Sse2(AInput, AKey, AOut: Pointer; - ANumChunks: Int32; ACounter: UInt64; AFlags: UInt32); - {$I ..\..\Include\Simd\Common\HlpSimdProc6Begin_i386.inc} - {$I ..\..\Include\Simd\Blake3\Blake3Hash4Sse2_i386.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\Blake3\Blake3CompressSse2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\Blake3\Blake3CompressSse2_i386.inc} +{$ENDIF} end; -{$ENDIF HASHLIB_I386_ASM} - {$IFDEF HASHLIB_X86_64_ASM} -procedure Blake3_Compress_Sse2(AState, AMsg, ACV, ACounterFlags: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\Blake3\Blake3CompressSse2_x86_64.inc} -end; - procedure Blake3_Compress_Ssse3(AState, AMsg, ACV, ACounterFlags, AMasks: Pointer); {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_x86_64.inc} @@ -85,25 +76,35 @@ procedure Blake3_Compress_Ssse3_Wrap(AState, AMsg, ACV, @BLAKE3_ROT_MASKS); end; -procedure Blake3_Compress_Avx2(AState, AMsg, ACV, ACounterFlags, +procedure Blake3_Compress_Avx(AState, AMsg, ACV, ACounterFlags, AMasks: Pointer); {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_x86_64.inc} - {$I ..\..\Include\Simd\Blake3\Blake3CompressAvx2_x86_64.inc} + {$I ..\..\Include\Simd\Blake3\Blake3CompressAvx_x86_64.inc} end; -procedure Blake3_Compress_Avx2_Wrap(AState, AMsg, ACV, +procedure Blake3_Compress_Avx_Wrap(AState, AMsg, ACV, ACounterFlags: Pointer); begin - Blake3_Compress_Avx2(AState, AMsg, ACV, ACounterFlags, + Blake3_Compress_Avx(AState, AMsg, ACV, ACounterFlags, @BLAKE3_ROT_MASKS); end; +{$ENDIF HASHLIB_X86_64_ASM} + procedure Blake3_Hash4_Sse2(AInput, AKey, AOut: Pointer; ANumChunks: Int32; ACounter: UInt64; AFlags: UInt32); - {$I ..\..\Include\Simd\Common\HlpSimdProc6Begin_x86_64.inc} - {$I ..\..\Include\Simd\Blake3\Blake3Hash4Sse2_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc6Begin_x86_64.inc} +{$I ..\..\Include\Simd\Blake3\Blake3Hash4Sse2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc6Begin_i386.inc} +{$I ..\..\Include\Simd\Blake3\Blake3Hash4Sse2_i386.inc} +{$ENDIF} end; +{$IFDEF HASHLIB_X86_64_ASM} + procedure Blake3_Hash4_Ssse3(AInput, AKey, AOut: Pointer; ANumChunks: Int32; ACounter: UInt64; AFlags: UInt32; AMasks: Pointer); {$I ..\..\Include\Simd\Common\HlpSimdProc7Begin_x86_64.inc} @@ -200,7 +201,7 @@ class function TBlake3X86Backend.SelectCompress(AScalar: TBlake3CompressProc): T case TCpuFeatures.X86.SelectSlot([TX86SimdLevel.AVX2, TX86SimdLevel.SSSE3, TX86SimdLevel.SSE2]) of TX86SimdLevel.AVX2: - Exit(@Blake3_Compress_Avx2_Wrap); + Exit(@Blake3_Compress_Avx_Wrap); TX86SimdLevel.SSSE3: Exit(@Blake3_Compress_Ssse3_Wrap); TX86SimdLevel.SSE2: diff --git a/HashLib/src/Simd/Backend/HlpCRCX86Backend.pas b/HashLib/src/Simd/Backend/HlpCRCX86Backend.pas index f83163fb..554b0764 100644 --- a/HashLib/src/Simd/Backend/HlpCRCX86Backend.pas +++ b/HashLib/src/Simd/Backend/HlpCRCX86Backend.pas @@ -34,86 +34,78 @@ implementation // x86_64: VPCLMULQDQ, PCLMULQDQ, SSE2 // ============================================================================= -{$IFDEF HASHLIB_I386_ASM} - function CRC_Fold_Reflected_Sse2(AData: PByte; ALength: UInt32; AState: Pointer; AConstants: Pointer): UInt64; - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\CRC\CRCFoldReflectedSse2_i386.inc} -end; - -function CRC_Fold_Forward_Sse2(AData: PByte; ALength: UInt32; - AState: Pointer; AConstants: Pointer): UInt64; - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\CRC\CRCFoldForwardSse2_i386.inc} -end; - -function CRC_Fold_Reflected_Pclmul(AData: PByte; ALength: UInt32; - AState: Pointer; AConstants: Pointer): UInt64; - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\CRC\CRCFoldReflectedPclmul_i386.inc} -end; - -function CRC_Fold_Forward_Pclmul(AData: PByte; ALength: UInt32; - AState: Pointer; AConstants: Pointer): UInt64; - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\CRC\CRCFoldForwardPclmul_i386.inc} -end; - -function CRC_Fold_Reflected_Vpclmul(AData: PByte; ALength: UInt32; - AState: Pointer; AConstants: Pointer): UInt64; - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\CRC\CRCFoldReflectedVpclmul_i386.inc} -end; - -function CRC_Fold_Forward_Vpclmul(AData: PByte; ALength: UInt32; - AState: Pointer; AConstants: Pointer): UInt64; - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\CRC\CRCFoldForwardVpclmul_i386.inc} -end; - -{$ENDIF HASHLIB_I386_ASM} - {$IFDEF HASHLIB_X86_64_ASM} - -function CRC_Fold_Reflected_Sse2(AData: PByte; ALength: UInt32; - AState: Pointer; AConstants: Pointer): UInt64; - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\CRC\CRCFoldReflectedSse2_x86_64.inc} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\CRC\CRCFoldReflectedSse2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\CRC\CRCFoldReflectedSse2_i386.inc} +{$ENDIF} end; -function CRC_Fold_Forward_Sse2(AData: PByte; ALength: UInt32; +function CRC_Fold_Forward_Gpr(AData: PByte; ALength: UInt32; AState: Pointer; AConstants: Pointer): UInt64; - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\CRC\CRCFoldForwardSse2_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\CRC\CRCFoldForwardGpr_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\CRC\CRCFoldForwardGpr_i386.inc} +{$ENDIF} end; function CRC_Fold_Reflected_Pclmul(AData: PByte; ALength: UInt32; AState: Pointer; AConstants: Pointer): UInt64; - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\CRC\CRCFoldReflectedPclmul_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\CRC\CRCFoldReflectedPclmul_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\CRC\CRCFoldReflectedPclmul_i386.inc} +{$ENDIF} end; function CRC_Fold_Reflected_Vpclmul(AData: PByte; ALength: UInt32; AState: Pointer; AConstants: Pointer): UInt64; - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\CRC\CRCFoldReflectedVpclmul_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\CRC\CRCFoldReflectedVpclmul_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\CRC\CRCFoldReflectedVpclmul_i386.inc} +{$ENDIF} end; function CRC_Fold_Forward_Pclmul(AData: PByte; ALength: UInt32; AState: Pointer; AConstants: Pointer): UInt64; - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\CRC\CRCFoldForwardPclmul_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\CRC\CRCFoldForwardPclmul_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\CRC\CRCFoldForwardPclmul_i386.inc} +{$ENDIF} end; function CRC_Fold_Forward_Vpclmul(AData: PByte; ALength: UInt32; AState: Pointer; AConstants: Pointer): UInt64; - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\CRC\CRCFoldForwardVpclmul_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\CRC\CRCFoldForwardVpclmul_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\CRC\CRCFoldForwardVpclmul_i386.inc} +{$ENDIF} end; -{$ENDIF HASHLIB_X86_64_ASM} - {$ENDIF HASHLIB_X86_SIMD} { TCRCX86Backend } @@ -146,7 +138,7 @@ class function TCRCX86Backend.Select(AReflectedScalar, TX86SimdLevel.SSE2: begin Result.Reflected := @CRC_Fold_Reflected_Sse2; - Result.Fwd := @CRC_Fold_Forward_Sse2; + Result.Fwd := @CRC_Fold_Forward_Gpr; end; end; {$ENDIF HASHLIB_X86_SIMD} diff --git a/HashLib/src/Simd/Backend/HlpSHA1ArmBackend.pas b/HashLib/src/Simd/Backend/HlpSHA1ArmBackend.pas index 62e5c2b2..cf40f216 100644 --- a/HashLib/src/Simd/Backend/HlpSHA1ArmBackend.pas +++ b/HashLib/src/Simd/Backend/HlpSHA1ArmBackend.pas @@ -24,11 +24,12 @@ implementation {$IFDEF HASHLIB_AARCH64_ASM} uses - HlpCpuFeatures; + HlpCpuFeatures, + HlpSimdLevels; // ============================================================================= // SIMD kernels -// aarch64: SHA1 Crypto Extensions +// aarch64: SHA1 Crypto Extensions, NEON // ============================================================================= procedure SHA1_Compress_CryptoExt(AState, AData: Pointer; ANumBlocks: UInt32; @@ -42,6 +43,11 @@ procedure SHA1_Compress_CryptoExt_Wrap(AState, AData: Pointer; ANumBlocks: UInt3 SHA1_Compress_CryptoExt(AState, AData, ANumBlocks, @K_SHA1); end; +procedure SHA1_Compress_Gpr(AState, AData: Pointer; ANumBlocks: UInt32); + {$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_aarch64.inc} + {$I ..\..\Include\Simd\SHA1\SHA1CompressGpr_aarch64.inc} +end; + {$ENDIF HASHLIB_AARCH64_ASM} { TSHA1ArmBackend } @@ -51,6 +57,10 @@ class function TSHA1ArmBackend.Select(AScalar: TSHA1CompressProc): TSHA1Compress {$IFDEF HASHLIB_AARCH64_ASM} if TCpuFeatures.Arm.HasSHA1() then Exit(@SHA1_Compress_CryptoExt_Wrap); + case TCpuFeatures.Arm.SelectSlot([TArmSimdLevel.NEON]) of + TArmSimdLevel.NEON: + Exit(@SHA1_Compress_Gpr); + end; {$ENDIF} Result := AScalar; end; diff --git a/HashLib/src/Simd/Backend/HlpSHA1X86Backend.pas b/HashLib/src/Simd/Backend/HlpSHA1X86Backend.pas index 5cf4c385..4728b777 100644 --- a/HashLib/src/Simd/Backend/HlpSHA1X86Backend.pas +++ b/HashLib/src/Simd/Backend/HlpSHA1X86Backend.pas @@ -75,24 +75,6 @@ procedure SHA1_Compress_ShaNi_Wrap(AState, AData: Pointer; ANumBlocks: UInt32); SHA1_Compress_ShaNi(AState, AData, ANumBlocks, @K_SHA1_Doubled); end; -procedure SHA1_Compress_Sse2(AState, AData: Pointer; ANumBlocks: UInt32; - AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\SHA1\SHA1CompressSse2_i386.inc} -end; - -procedure SHA1_Compress_Ssse3(AState, AData: Pointer; ANumBlocks: UInt32; - AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\SHA1\SHA1CompressSsse3_i386.inc} -end; - -procedure SHA1_Compress_Avx2(AState, AData: Pointer; ANumBlocks: UInt32; - AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\SHA1\SHA1CompressAvx2_i386.inc} -end; - {$ENDIF HASHLIB_I386_ASM} {$IFDEF HASHLIB_X86_64_ASM} @@ -108,24 +90,60 @@ procedure SHA1_Compress_ShaNi_Wrap(AState, AData: Pointer; ANumBlocks: UInt32); SHA1_Compress_ShaNi(AState, AData, ANumBlocks, @K_SHA1, @BSWAP32_MASK); end; +{$ENDIF HASHLIB_X86_64_ASM} + procedure SHA1_Compress_Sse2(AState, AData: Pointer; ANumBlocks: UInt32; AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\SHA1\SHA1CompressSse2_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\SHA1\SHA1CompressSse2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\SHA1\SHA1CompressSse2_i386.inc} +{$ENDIF} end; procedure SHA1_Compress_Ssse3(AState, AData: Pointer; ANumBlocks: UInt32; AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\SHA1\SHA1CompressSsse3_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\SHA1\SHA1CompressSsse3_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\SHA1\SHA1CompressSsse3_i386.inc} +{$ENDIF} +end; + +{$IFDEF HASHLIB_I386_ASM} + +procedure SHA1_Compress_Avx(AState, AData: Pointer; ANumBlocks: UInt32; + AConstants: Pointer); + {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} + {$I ..\..\Include\Simd\SHA1\SHA1CompressAvx_i386.inc} end; +procedure SHA1_Compress_Avx_Wrap(AState, AData: Pointer; ANumBlocks: UInt32); +begin + SHA1_Compress_Avx(AState, AData, ANumBlocks, @K_SHA1_Doubled); +end; + +{$ENDIF HASHLIB_I386_ASM} + +{$IFDEF HASHLIB_X86_64_ASM} + procedure SHA1_Compress_Avx2(AState, AData: Pointer; ANumBlocks: UInt32; AConstants: Pointer); {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} {$I ..\..\Include\Simd\SHA1\SHA1CompressAvx2_x86_64.inc} end; +procedure SHA1_Compress_Avx2_Wrap(AState, AData: Pointer; ANumBlocks: UInt32); +begin + SHA1_Compress_Avx2(AState, AData, ANumBlocks, @K_SHA1_Doubled); +end; + {$ENDIF HASHLIB_X86_64_ASM} procedure SHA1_Compress_Sse2_Wrap(AState, AData: Pointer; ANumBlocks: UInt32); @@ -138,11 +156,6 @@ procedure SHA1_Compress_Ssse3_Wrap(AState, AData: Pointer; ANumBlocks: UInt32); SHA1_Compress_Ssse3(AState, AData, ANumBlocks, @K_SHA1_Doubled); end; -procedure SHA1_Compress_Avx2_Wrap(AState, AData: Pointer; ANumBlocks: UInt32); -begin - SHA1_Compress_Avx2(AState, AData, ANumBlocks, @K_SHA1_Doubled); -end; - {$ENDIF HASHLIB_X86_SIMD} { TSHA1X86Backend } @@ -155,7 +168,7 @@ class function TSHA1X86Backend.Select(AScalar: TSHA1CompressProc): TSHA1Compress case TCpuFeatures.X86.SelectSlot([TX86SimdLevel.AVX2, TX86SimdLevel.SSSE3, TX86SimdLevel.SSE2]) of TX86SimdLevel.AVX2: - Exit(@SHA1_Compress_Avx2_Wrap); + Exit(@SHA1_Compress_Avx_Wrap); TX86SimdLevel.SSSE3: Exit(@SHA1_Compress_Ssse3_Wrap); TX86SimdLevel.SSE2: diff --git a/HashLib/src/Simd/Backend/HlpSHA2_256ArmBackend.pas b/HashLib/src/Simd/Backend/HlpSHA2_256ArmBackend.pas index 6e563210..6b2c4074 100644 --- a/HashLib/src/Simd/Backend/HlpSHA2_256ArmBackend.pas +++ b/HashLib/src/Simd/Backend/HlpSHA2_256ArmBackend.pas @@ -24,11 +24,37 @@ implementation {$IFDEF HASHLIB_AARCH64_ASM} uses - HlpCpuFeatures; + HlpCpuFeatures, + HlpSimdLevels; + +const + // K256 with a trailing zero terminator for the pure-GPR kernel: its + // message-schedule loop ends when the loaded K word is zero (cbnz), like + // the original's sentinel-terminated table - the plain K256 const cannot + // drive that loop. The crypto-extension kernel keeps using K256. + K256_Gpr: array [0 .. 64] of UInt32 = ( + $428A2F98, $71374491, $B5C0FBCF, $E9B5DBA5, + $3956C25B, $59F111F1, $923F82A4, $AB1C5ED5, + $D807AA98, $12835B01, $243185BE, $550C7DC3, + $72BE5D74, $80DEB1FE, $9BDC06A7, $C19BF174, + $E49B69C1, $EFBE4786, $0FC19DC6, $240CA1CC, + $2DE92C6F, $4A7484AA, $5CB0A9DC, $76F988DA, + $983E5152, $A831C66D, $B00327C8, $BF597FC7, + $C6E00BF3, $D5A79147, $06CA6351, $14292967, + $27B70A85, $2E1B2138, $4D2C6DFC, $53380D13, + $650A7354, $766A0ABB, $81C2C92E, $92722C85, + $A2BFE8A1, $A81A664B, $C24B8B70, $C76C51A3, + $D192E819, $D6990624, $F40E3585, $106AA070, + $19A4C116, $1E376C08, $2748774C, $34B0BCB5, + $391C0CB3, $4ED8AA4A, $5B9CCA4F, $682E6FF3, + $748F82EE, $78A5636F, $84C87814, $8CC70208, + $90BEFFFA, $A4506CEB, $BEF9A3F7, $C67178F2, + 0 // terminator - the schedule loop ends on a zero K word + ); // ============================================================================= // SIMD kernels -// aarch64: SHA256 Crypto Extensions +// aarch64: SHA256 Crypto Extensions, NEON // ============================================================================= procedure SHA256_Compress_CryptoExt(AState, AData: Pointer; ANumBlocks: UInt32; @@ -42,6 +68,17 @@ procedure SHA256_Compress_CryptoExt_Wrap(AState, AData: Pointer; ANumBlocks: UIn SHA256_Compress_CryptoExt(AState, AData, ANumBlocks, @K256); end; +procedure SHA256_Compress_Gpr(AState, AData: Pointer; ANumBlocks: UInt32; + AConstants: Pointer); + {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_aarch64.inc} + {$I ..\..\Include\Simd\SHA256\SHA256CompressGpr_aarch64.inc} +end; + +procedure SHA256_Compress_Gpr_Wrap(AState, AData: Pointer; ANumBlocks: UInt32); +begin + SHA256_Compress_Gpr(AState, AData, ANumBlocks, @K256_Gpr); +end; + {$ENDIF HASHLIB_AARCH64_ASM} { TSHA2_256ArmBackend } @@ -51,6 +88,10 @@ class function TSHA2_256ArmBackend.Select(AScalar: TSHA256CompressProc): TSHA256 {$IFDEF HASHLIB_AARCH64_ASM} if TCpuFeatures.Arm.HasSHA256() then Exit(@SHA256_Compress_CryptoExt_Wrap); + case TCpuFeatures.Arm.SelectSlot([TArmSimdLevel.NEON]) of + TArmSimdLevel.NEON: + Exit(@SHA256_Compress_Gpr_Wrap); + end; {$ENDIF} Result := AScalar; end; diff --git a/HashLib/src/Simd/Backend/HlpSHA2_256X86Backend.pas b/HashLib/src/Simd/Backend/HlpSHA2_256X86Backend.pas index c81baf27..ad0ee0cf 100644 --- a/HashLib/src/Simd/Backend/HlpSHA2_256X86Backend.pas +++ b/HashLib/src/Simd/Backend/HlpSHA2_256X86Backend.pas @@ -102,24 +102,6 @@ procedure SHA256_Compress_ShaNi_Wrap(AState, AData: Pointer; ANumBlocks: UInt32) SHA256_Compress_ShaNi(AState, AData, ANumBlocks, @K256_Doubled); end; -procedure SHA256_Compress_Sse2(AState, AData: Pointer; ANumBlocks: UInt32; - AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\SHA256\SHA256CompressSse2_i386.inc} -end; - -procedure SHA256_Compress_Ssse3(AState, AData: Pointer; ANumBlocks: UInt32; - AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\SHA256\SHA256CompressSsse3_i386.inc} -end; - -procedure SHA256_Compress_Avx2(AState, AData: Pointer; ANumBlocks: UInt32; - AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\SHA256\SHA256CompressAvx2_i386.inc} -end; - {$ENDIF HASHLIB_I386_ASM} {$IFDEF HASHLIB_X86_64_ASM} @@ -135,24 +117,60 @@ procedure SHA256_Compress_ShaNi_Wrap(AState, AData: Pointer; ANumBlocks: UInt32) SHA256_Compress_ShaNi(AState, AData, ANumBlocks, @K256, @BSWAP32_MASK); end; +{$ENDIF HASHLIB_X86_64_ASM} + procedure SHA256_Compress_Sse2(AState, AData: Pointer; ANumBlocks: UInt32; AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\SHA256\SHA256CompressSse2_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\SHA256\SHA256CompressSse2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\SHA256\SHA256CompressSse2_i386.inc} +{$ENDIF} end; procedure SHA256_Compress_Ssse3(AState, AData: Pointer; ANumBlocks: UInt32; AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\SHA256\SHA256CompressSsse3_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\SHA256\SHA256CompressSsse3_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\SHA256\SHA256CompressSsse3_i386.inc} +{$ENDIF} +end; + +{$IFDEF HASHLIB_I386_ASM} + +procedure SHA256_Compress_Avx(AState, AData: Pointer; ANumBlocks: UInt32; + AConstants: Pointer); + {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} + {$I ..\..\Include\Simd\SHA256\SHA256CompressAvx_i386.inc} end; +procedure SHA256_Compress_Avx_Wrap(AState, AData: Pointer; ANumBlocks: UInt32); +begin + SHA256_Compress_Avx(AState, AData, ANumBlocks, @K256_Doubled); +end; + +{$ENDIF HASHLIB_I386_ASM} + +{$IFDEF HASHLIB_X86_64_ASM} + procedure SHA256_Compress_Avx2(AState, AData: Pointer; ANumBlocks: UInt32; AConstants: Pointer); {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} {$I ..\..\Include\Simd\SHA256\SHA256CompressAvx2_x86_64.inc} end; +procedure SHA256_Compress_Avx2_Wrap(AState, AData: Pointer; ANumBlocks: UInt32); +begin + SHA256_Compress_Avx2(AState, AData, ANumBlocks, @K256_Doubled); +end; + {$ENDIF HASHLIB_X86_64_ASM} procedure SHA256_Compress_Ssse3_Wrap(AState, AData: Pointer; ANumBlocks: UInt32); @@ -160,11 +178,6 @@ procedure SHA256_Compress_Ssse3_Wrap(AState, AData: Pointer; ANumBlocks: UInt32) SHA256_Compress_Ssse3(AState, AData, ANumBlocks, @K256_Doubled); end; -procedure SHA256_Compress_Avx2_Wrap(AState, AData: Pointer; ANumBlocks: UInt32); -begin - SHA256_Compress_Avx2(AState, AData, ANumBlocks, @K256_Doubled); -end; - procedure SHA256_Compress_Sse2_Wrap(AState, AData: Pointer; ANumBlocks: UInt32); begin SHA256_Compress_Sse2(AState, AData, ANumBlocks, @K256_Doubled); @@ -182,7 +195,7 @@ class function TSHA2_256X86Backend.Select(AScalar: TSHA256CompressProc): TSHA256 case TCpuFeatures.X86.SelectSlot([TX86SimdLevel.AVX2, TX86SimdLevel.SSSE3, TX86SimdLevel.SSE2]) of TX86SimdLevel.AVX2: - Exit(@SHA256_Compress_Avx2_Wrap); + Exit(@SHA256_Compress_Avx_Wrap); TX86SimdLevel.SSSE3: Exit(@SHA256_Compress_Ssse3_Wrap); TX86SimdLevel.SSE2: diff --git a/HashLib/src/Simd/Backend/HlpSHA2_512ArmBackend.pas b/HashLib/src/Simd/Backend/HlpSHA2_512ArmBackend.pas index 0800d22d..1c64277a 100644 --- a/HashLib/src/Simd/Backend/HlpSHA2_512ArmBackend.pas +++ b/HashLib/src/Simd/Backend/HlpSHA2_512ArmBackend.pas @@ -24,11 +24,61 @@ implementation {$IFDEF HASHLIB_AARCH64_ASM} uses - HlpCpuFeatures; + HlpCpuFeatures, + HlpSimdLevels; + +const + // K512 with a trailing zero terminator for the plain-GPR kernel: its + // message-schedule loop ends when the loaded K word is zero (cbnz), like + // the original's sentinel-terminated table - the plain K512 const cannot + // drive that loop. The crypto-extension kernel keeps using K512. + K512_Gpr: array [0 .. 80] of UInt64 = ( + UInt64($428A2F98D728AE22), UInt64($7137449123EF65CD), + UInt64($B5C0FBCFEC4D3B2F), UInt64($E9B5DBA58189DBBC), + UInt64($3956C25BF348B538), UInt64($59F111F1B605D019), + UInt64($923F82A4AF194F9B), UInt64($AB1C5ED5DA6D8118), + UInt64($D807AA98A3030242), UInt64($12835B0145706FBE), + UInt64($243185BE4EE4B28C), UInt64($550C7DC3D5FFB4E2), + UInt64($72BE5D74F27B896F), UInt64($80DEB1FE3B1696B1), + UInt64($9BDC06A725C71235), UInt64($C19BF174CF692694), + UInt64($E49B69C19EF14AD2), UInt64($EFBE4786384F25E3), + UInt64($0FC19DC68B8CD5B5), UInt64($240CA1CC77AC9C65), + UInt64($2DE92C6F592B0275), UInt64($4A7484AA6EA6E483), + UInt64($5CB0A9DCBD41FBD4), UInt64($76F988DA831153B5), + UInt64($983E5152EE66DFAB), UInt64($A831C66D2DB43210), + UInt64($B00327C898FB213F), UInt64($BF597FC7BEEF0EE4), + UInt64($C6E00BF33DA88FC2), UInt64($D5A79147930AA725), + UInt64($06CA6351E003826F), UInt64($142929670A0E6E70), + UInt64($27B70A8546D22FFC), UInt64($2E1B21385C26C926), + UInt64($4D2C6DFC5AC42AED), UInt64($53380D139D95B3DF), + UInt64($650A73548BAF63DE), UInt64($766A0ABB3C77B2A8), + UInt64($81C2C92E47EDAEE6), UInt64($92722C851482353B), + UInt64($A2BFE8A14CF10364), UInt64($A81A664BBC423001), + UInt64($C24B8B70D0F89791), UInt64($C76C51A30654BE30), + UInt64($D192E819D6EF5218), UInt64($D69906245565A910), + UInt64($F40E35855771202A), UInt64($106AA07032BBD1B8), + UInt64($19A4C116B8D2D0C8), UInt64($1E376C085141AB53), + UInt64($2748774CDF8EEB99), UInt64($34B0BCB5E19B48A8), + UInt64($391C0CB3C5C95A63), UInt64($4ED8AA4AE3418ACB), + UInt64($5B9CCA4F7763E373), UInt64($682E6FF3D6B2B8A3), + UInt64($748F82EE5DEFB2FC), UInt64($78A5636F43172F60), + UInt64($84C87814A1F0AB72), UInt64($8CC702081A6439EC), + UInt64($90BEFFFA23631E28), UInt64($A4506CEBDE82BDE9), + UInt64($BEF9A3F7B2C67915), UInt64($C67178F2E372532B), + UInt64($CA273ECEEA26619C), UInt64($D186B8C721C0C207), + UInt64($EADA7DD6CDE0EB1E), UInt64($F57D4F7FEE6ED178), + UInt64($06F067AA72176FBA), UInt64($0A637DC5A2C898A6), + UInt64($113F9804BEF90DAE), UInt64($1B710B35131C471B), + UInt64($28DB77F523047D84), UInt64($32CAAB7B40C72493), + UInt64($3C9EBE0A15C9BEBC), UInt64($431D67C49C100D4C), + UInt64($4CC5D4BECB3E42B6), UInt64($597F299CFC657E2A), + UInt64($5FCB6FAB3AD6FAEC), UInt64($6C44198C4A475817), + UInt64(0) // terminator - the schedule loop ends on a zero K word + ); // ============================================================================= // SIMD kernels -// aarch64: SHA512 Crypto Extensions +// aarch64: SHA512 Crypto Extensions, NEON // ============================================================================= procedure SHA512_Compress_CryptoExt(AState, AData: Pointer; ANumBlocks: UInt32; @@ -42,6 +92,17 @@ procedure SHA512_Compress_CryptoExt_Wrap(AState, AData: Pointer; ANumBlocks: UIn SHA512_Compress_CryptoExt(AState, AData, ANumBlocks, @K512); end; +procedure SHA512_Compress_Gpr(AState, AData: Pointer; ANumBlocks: UInt32; + AConstants: Pointer); + {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_aarch64.inc} + {$I ..\..\Include\Simd\SHA512\SHA512CompressGpr_aarch64.inc} +end; + +procedure SHA512_Compress_Gpr_Wrap(AState, AData: Pointer; ANumBlocks: UInt32); +begin + SHA512_Compress_Gpr(AState, AData, ANumBlocks, @K512_Gpr); +end; + {$ENDIF HASHLIB_AARCH64_ASM} { TSHA2_512ArmBackend } @@ -51,6 +112,10 @@ class function TSHA2_512ArmBackend.Select(AScalar: TSHA512CompressProc): TSHA512 {$IFDEF HASHLIB_AARCH64_ASM} if TCpuFeatures.Arm.HasSHA512() then Exit(@SHA512_Compress_CryptoExt_Wrap); + case TCpuFeatures.Arm.SelectSlot([TArmSimdLevel.NEON]) of + TArmSimdLevel.NEON: + Exit(@SHA512_Compress_Gpr_Wrap); + end; {$ENDIF} Result := AScalar; end; diff --git a/HashLib/src/Simd/Backend/HlpSHA2_512X86Backend.pas b/HashLib/src/Simd/Backend/HlpSHA2_512X86Backend.pas index 486621ff..6ce14d9b 100644 --- a/HashLib/src/Simd/Backend/HlpSHA2_512X86Backend.pas +++ b/HashLib/src/Simd/Backend/HlpSHA2_512X86Backend.pas @@ -125,24 +125,20 @@ implementation // x86_64: AVX2, SSSE3, SSE2 // ============================================================================= -{$IFDEF HASHLIB_I386_ASM} - procedure SHA512_Compress_Sse2(AState, AData: Pointer; ANumBlocks: UInt32; AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} - {$I ..\..\Include\Simd\SHA512\SHA512CompressSse2_i386.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} +{$I ..\..\Include\Simd\SHA512\SHA512CompressSse2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_i386.inc} +{$I ..\..\Include\Simd\SHA512\SHA512CompressSse2_i386.inc} +{$ENDIF} end; -{$ENDIF HASHLIB_I386_ASM} - {$IFDEF HASHLIB_X86_64_ASM} -procedure SHA512_Compress_Sse2(AState, AData: Pointer; ANumBlocks: UInt32; - AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} - {$I ..\..\Include\Simd\SHA512\SHA512CompressSse2_x86_64.inc} -end; - procedure SHA512_Compress_Ssse3(AState, AData: Pointer; ANumBlocks: UInt32; AConstants: Pointer); {$I ..\..\Include\Simd\Common\HlpSimdProc4Begin_x86_64.inc} diff --git a/HashLib/src/Simd/Backend/HlpSHA3ArmBackend.pas b/HashLib/src/Simd/Backend/HlpSHA3ArmBackend.pas index 22c3000d..84f6f4bf 100644 --- a/HashLib/src/Simd/Backend/HlpSHA3ArmBackend.pas +++ b/HashLib/src/Simd/Backend/HlpSHA3ArmBackend.pas @@ -25,15 +25,16 @@ implementation {$IFDEF HASHLIB_AARCH64_ASM} uses - HlpCpuFeatures; + HlpCpuFeatures, + HlpSimdLevels; // ============================================================================= // SIMD kernels -// aarch64: SHA3 Crypto Extensions +// aarch64: SHA3 Crypto Extensions, NEON // -// The FEAT_SHA3 kernels reuse the plain RC round-constant table directly (the -// asm broadcasts each 64-bit iota with ld1r), so no packed constant block is -// needed. +// Both kernels reuse the plain RC round-constant table directly (the +// FEAT_SHA3 asm broadcasts each 64-bit iota with ld1r; the GPR permute walks +// it behind an end-pointer), so no packed constant block is needed. // ============================================================================= procedure KeccakF1600_CryptoExt(AState: Pointer; AConstants: Pointer); @@ -58,6 +59,28 @@ procedure KeccakF1600_CryptoExt_Absorb_Wrap(AState: Pointer; AData: PByte; KeccakF1600_CryptoExt_Absorb(AState, AData, ABlockCount, ABlockSize, @RC); end; +procedure KeccakF1600_Gpr(AState: Pointer; AConstants: Pointer); + {$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_aarch64.inc} + {$I ..\..\Include\Simd\SHA3\KeccakF1600Gpr_aarch64.inc} +end; + +procedure KeccakF1600_Gpr_Wrap(AState: Pointer); +begin + KeccakF1600_Gpr(AState, @RC); +end; + +procedure KeccakF1600_Gpr_Absorb(AState: Pointer; AData: PByte; + ABlockCount: Int32; ABlockSize: Int32; AConstants: Pointer); + {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_aarch64.inc} + {$I ..\..\Include\Simd\SHA3\KeccakF1600GprAbsorb_aarch64.inc} +end; + +procedure KeccakF1600_Gpr_Absorb_Wrap(AState: Pointer; AData: PByte; + ABlockCount: Int32; ABlockSize: Int32); +begin + KeccakF1600_Gpr_Absorb(AState, AData, ABlockCount, ABlockSize, @RC); +end; + {$ENDIF HASHLIB_AARCH64_ASM} { TSHA3ArmBackend } @@ -67,6 +90,10 @@ class function TSHA3ArmBackend.SelectPermute(AScalar: TKeccakF1600Proc): TKeccak {$IFDEF HASHLIB_AARCH64_ASM} if TCpuFeatures.Arm.HasSHA3() then Exit(@KeccakF1600_CryptoExt_Wrap); + case TCpuFeatures.Arm.SelectSlot([TArmSimdLevel.NEON]) of + TArmSimdLevel.NEON: + Exit(@KeccakF1600_Gpr_Wrap); + end; {$ENDIF} Result := AScalar; end; @@ -76,6 +103,10 @@ class function TSHA3ArmBackend.SelectAbsorb(AScalar: TKeccakF1600AbsorbProc): TK {$IFDEF HASHLIB_AARCH64_ASM} if TCpuFeatures.Arm.HasSHA3() then Exit(@KeccakF1600_CryptoExt_Absorb_Wrap); + case TCpuFeatures.Arm.SelectSlot([TArmSimdLevel.NEON]) of + TArmSimdLevel.NEON: + Exit(@KeccakF1600_Gpr_Absorb_Wrap); + end; {$ENDIF} Result := AScalar; end; diff --git a/HashLib/src/Simd/Backend/HlpSHA3X86Backend.pas b/HashLib/src/Simd/Backend/HlpSHA3X86Backend.pas index 8fce55a3..d7c8492f 100644 --- a/HashLib/src/Simd/Backend/HlpSHA3X86Backend.pas +++ b/HashLib/src/Simd/Backend/HlpSHA3X86Backend.pas @@ -31,7 +31,7 @@ implementation const // Plain 24-entry iota round constants (stride 8) for the scalar-layout - // kernels (i386 + x86_64 SSE2; the AVX2 kernel uses the x4-broadcast + // kernels (i386 SSE2 + x86_64 GPR; the AVX2 kernel uses the x4-broadcast // table below). K_KECCAK_IOTAS: array [0 .. 23] of UInt64 = ( UInt64($0000000000000001), UInt64($0000000000008082), @@ -104,6 +104,33 @@ implementation // x86_64: AVX2, SSE2 // ============================================================================= +{$IFDEF HASHLIB_I386_ASM} + +procedure KeccakF1600_Sse2(AState: Pointer; AConstants: Pointer); + {$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_i386.inc} + {$I ..\..\Include\Simd\SHA3\KeccakF1600Sse2_i386.inc} +end; + +procedure KeccakF1600_Sse2_Absorb(AState: Pointer; AData: PByte; + ABlockCount: Int32; ABlockSize: Int32; AConstants: Pointer); + {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_i386.inc} + {$I ..\..\Include\Simd\SHA3\KeccakF1600Sse2Absorb_i386.inc} +end; + +procedure KeccakF1600_Sse2_Wrap(AState: Pointer); +begin + KeccakF1600_Sse2(AState, @K_KECCAK_IOTAS); +end; + +procedure KeccakF1600_Sse2_Absorb_Wrap(AState: Pointer; AData: PByte; + ABlockCount: Int32; ABlockSize: Int32); +begin + KeccakF1600_Sse2_Absorb(AState, AData, ABlockCount, ABlockSize, + @K_KECCAK_IOTAS); +end; + +{$ENDIF HASHLIB_I386_ASM} + {$IFDEF HASHLIB_X86_64_ASM} procedure KeccakF1600_Avx2(AState: Pointer; AConstants: Pointer); @@ -117,15 +144,15 @@ procedure KeccakF1600_Avx2_Absorb(AState: Pointer; AData: PByte; {$I ..\..\Include\Simd\SHA3\KeccakF1600Avx2Absorb_x86_64.inc} end; -procedure KeccakF1600_Sse2(AState: Pointer; AConstants: Pointer); +procedure KeccakF1600_Gpr(AState: Pointer; AConstants: Pointer); {$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_x86_64.inc} - {$I ..\..\Include\Simd\SHA3\KeccakF1600Sse2_x86_64.inc} + {$I ..\..\Include\Simd\SHA3\KeccakF1600Gpr_x86_64.inc} end; -procedure KeccakF1600_Sse2_Absorb(AState: Pointer; AData: PByte; +procedure KeccakF1600_Gpr_Absorb(AState: Pointer; AData: PByte; ABlockCount: Int32; ABlockSize: Int32; AConstants: Pointer); {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_x86_64.inc} - {$I ..\..\Include\Simd\SHA3\KeccakF1600Sse2Absorb_x86_64.inc} + {$I ..\..\Include\Simd\SHA3\KeccakF1600GprAbsorb_x86_64.inc} end; procedure KeccakF1600_Avx2_Wrap(AState: Pointer); @@ -139,35 +166,20 @@ procedure KeccakF1600_Avx2_Absorb_Wrap(AState: Pointer; AData: PByte; KeccakF1600_Avx2_Absorb(AState, AData, ABlockCount, ABlockSize, @K_KECCAK); end; -{$ENDIF HASHLIB_X86_64_ASM} - -{$IFDEF HASHLIB_I386_ASM} - -procedure KeccakF1600_Sse2(AState: Pointer; AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_i386.inc} - {$I ..\..\Include\Simd\SHA3\KeccakF1600Sse2_i386.inc} -end; - -procedure KeccakF1600_Sse2_Absorb(AState: Pointer; AData: PByte; - ABlockCount: Int32; ABlockSize: Int32; AConstants: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc5Begin_i386.inc} - {$I ..\..\Include\Simd\SHA3\KeccakF1600Sse2Absorb_i386.inc} -end; - -{$ENDIF HASHLIB_I386_ASM} - -procedure KeccakF1600_Sse2_Wrap(AState: Pointer); +procedure KeccakF1600_Gpr_Wrap(AState: Pointer); begin - KeccakF1600_Sse2(AState, @K_KECCAK_IOTAS); + KeccakF1600_Gpr(AState, @K_KECCAK_IOTAS); end; -procedure KeccakF1600_Sse2_Absorb_Wrap(AState: Pointer; AData: PByte; +procedure KeccakF1600_Gpr_Absorb_Wrap(AState: Pointer; AData: PByte; ABlockCount: Int32; ABlockSize: Int32); begin - KeccakF1600_Sse2_Absorb(AState, AData, ABlockCount, ABlockSize, + KeccakF1600_Gpr_Absorb(AState, AData, ABlockCount, ABlockSize, @K_KECCAK_IOTAS); end; +{$ENDIF HASHLIB_X86_64_ASM} + {$ENDIF HASHLIB_X86_SIMD} { TSHA3X86Backend } @@ -179,7 +191,7 @@ class function TSHA3X86Backend.SelectPermute(AScalar: TKeccakF1600Proc): TKeccak TX86SimdLevel.AVX2: Exit(@KeccakF1600_Avx2_Wrap); TX86SimdLevel.SSE2: - Exit(@KeccakF1600_Sse2_Wrap); + Exit(@KeccakF1600_Gpr_Wrap); end; {$ENDIF} {$IFDEF HASHLIB_I386_ASM} @@ -198,7 +210,7 @@ class function TSHA3X86Backend.SelectAbsorb(AScalar: TKeccakF1600AbsorbProc): TK TX86SimdLevel.AVX2: Exit(@KeccakF1600_Avx2_Absorb_Wrap); TX86SimdLevel.SSE2: - Exit(@KeccakF1600_Sse2_Absorb_Wrap); + Exit(@KeccakF1600_Gpr_Absorb_Wrap); end; {$ENDIF} {$IFDEF HASHLIB_I386_ASM} diff --git a/HashLib/src/Simd/Backend/HlpScryptX86Backend.pas b/HashLib/src/Simd/Backend/HlpScryptX86Backend.pas index 117a7a08..e2e26b9f 100644 --- a/HashLib/src/Simd/Backend/HlpScryptX86Backend.pas +++ b/HashLib/src/Simd/Backend/HlpScryptX86Backend.pas @@ -33,34 +33,28 @@ implementation // x86_64: AVX2, SSE2 // ============================================================================= -{$IFDEF HASHLIB_I386_ASM} - procedure Scrypt_SalsaXor_Sse2(AState, AInput: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_i386.inc} - {$I ..\..\Include\Simd\Scrypt\ScryptSalsa8Sse2_i386.inc} -end; - -procedure Scrypt_SalsaXor_Avx2(AState, AInput: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_i386.inc} - {$I ..\..\Include\Simd\Scrypt\ScryptSalsa8Avx2_i386.inc} -end; - -{$ENDIF HASHLIB_I386_ASM} - {$IFDEF HASHLIB_X86_64_ASM} - -procedure Scrypt_SalsaXor_Sse2(AState, AInput: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_x86_64.inc} - {$I ..\..\Include\Simd\Scrypt\ScryptSalsa8Sse2_x86_64.inc} +{$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_x86_64.inc} +{$I ..\..\Include\Simd\Scrypt\ScryptSalsa8Sse2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_i386.inc} +{$I ..\..\Include\Simd\Scrypt\ScryptSalsa8Sse2_i386.inc} +{$ENDIF} end; -procedure Scrypt_SalsaXor_Avx2(AState, AInput: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_x86_64.inc} - {$I ..\..\Include\Simd\Scrypt\ScryptSalsa8Avx2_x86_64.inc} +procedure Scrypt_SalsaXor_Avx(AState, AInput: Pointer); +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_x86_64.inc} +{$I ..\..\Include\Simd\Scrypt\ScryptSalsa8Avx_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_i386.inc} +{$I ..\..\Include\Simd\Scrypt\ScryptSalsa8Avx_i386.inc} +{$ENDIF} end; -{$ENDIF HASHLIB_X86_64_ASM} - {$ENDIF HASHLIB_X86_SIMD} { TScryptX86Backend } @@ -70,7 +64,7 @@ class function TScryptX86Backend.Select(AScalar: TScryptSalsaXorProc): TScryptSa {$IFDEF HASHLIB_X86_SIMD} case TCpuFeatures.X86.SelectSlot([TX86SimdLevel.AVX2, TX86SimdLevel.SSE2]) of TX86SimdLevel.AVX2: - Exit(@Scrypt_SalsaXor_Avx2); + Exit(@Scrypt_SalsaXor_Avx); TX86SimdLevel.SSE2: Exit(@Scrypt_SalsaXor_Sse2); end; diff --git a/HashLib/src/Simd/Backend/HlpXXHash3ArmBackend.pas b/HashLib/src/Simd/Backend/HlpXXHash3ArmBackend.pas index f252f923..4ee54372 100644 --- a/HashLib/src/Simd/Backend/HlpXXHash3ArmBackend.pas +++ b/HashLib/src/Simd/Backend/HlpXXHash3ArmBackend.pas @@ -47,7 +47,7 @@ procedure XXH3_ScrambleAcc_Neon(AAcc: Pointer; ASecret: Pointer); end; procedure XXH3_InitSecret_Neon(ACustomSecret: Pointer; - ADefaultSecret: Pointer; ASeed: UInt64); + ADefaultSecret: Pointer; ASeedPtr: PUInt64); {$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_aarch64.inc} {$I ..\..\Include\Simd\XXH3\XXH3InitSecretNeon_aarch64.inc} end; diff --git a/HashLib/src/Simd/Backend/HlpXXHash3X86Backend.pas b/HashLib/src/Simd/Backend/HlpXXHash3X86Backend.pas index 383875ff..b31d3180 100644 --- a/HashLib/src/Simd/Backend/HlpXXHash3X86Backend.pas +++ b/HashLib/src/Simd/Backend/HlpXXHash3X86Backend.pas @@ -36,82 +36,76 @@ implementation // x86_64: AVX2, SSE2 // ============================================================================= -{$IFDEF HASHLIB_I386_ASM} - procedure XXH3_Accumulate512_Sse2(AAcc: Pointer; AInput: Pointer; ASecret: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_i386.inc} - {$I ..\..\Include\Simd\XXH3\XXH3Acc512Sse2_i386.inc} -end; - -procedure XXH3_ScrambleAcc_Sse2(AAcc: Pointer; ASecret: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_i386.inc} - {$I ..\..\Include\Simd\XXH3\XXH3ScrambleSse2_i386.inc} -end; - -procedure XXH3_InitSecret_Sse2(ACustomSecret: Pointer; - ADefaultSecret: Pointer; ASeed: UInt64); - {$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_i386.inc} - {$I ..\..\Include\Simd\XXH3\XXH3InitSecretSse2_i386.inc} -end; - -procedure XXH3_Accumulate512_Avx2(AAcc: Pointer; AInput: Pointer; - ASecret: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_i386.inc} - {$I ..\..\Include\Simd\XXH3\XXH3Acc512Avx2_i386.inc} -end; - -procedure XXH3_ScrambleAcc_Avx2(AAcc: Pointer; ASecret: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_i386.inc} - {$I ..\..\Include\Simd\XXH3\XXH3ScrambleAvx2_i386.inc} -end; - -procedure XXH3_InitSecret_Avx2(ACustomSecret: Pointer; - ADefaultSecret: Pointer; ASeed: UInt64); - {$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_i386.inc} - {$I ..\..\Include\Simd\XXH3\XXH3InitSecretAvx2_i386.inc} -end; - -{$ENDIF HASHLIB_I386_ASM} - {$IFDEF HASHLIB_X86_64_ASM} - -procedure XXH3_Accumulate512_Sse2(AAcc: Pointer; AInput: Pointer; - ASecret: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_x86_64.inc} - {$I ..\..\Include\Simd\XXH3\XXH3Acc512Sse2_x86_64.inc} +{$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_x86_64.inc} +{$I ..\..\Include\Simd\XXH3\XXH3Acc512Sse2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_i386.inc} +{$I ..\..\Include\Simd\XXH3\XXH3Acc512Sse2_i386.inc} +{$ENDIF} end; procedure XXH3_ScrambleAcc_Sse2(AAcc: Pointer; ASecret: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_x86_64.inc} - {$I ..\..\Include\Simd\XXH3\XXH3ScrambleSse2_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_x86_64.inc} +{$I ..\..\Include\Simd\XXH3\XXH3ScrambleSse2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_i386.inc} +{$I ..\..\Include\Simd\XXH3\XXH3ScrambleSse2_i386.inc} +{$ENDIF} end; procedure XXH3_InitSecret_Sse2(ACustomSecret: Pointer; - ADefaultSecret: Pointer; ASeed: UInt64); - {$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_x86_64.inc} - {$I ..\..\Include\Simd\XXH3\XXH3InitSecretSse2_x86_64.inc} + ADefaultSecret: Pointer; ASeedPtr: PUInt64); +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_x86_64.inc} +{$I ..\..\Include\Simd\XXH3\XXH3InitSecretSse2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_i386.inc} +{$I ..\..\Include\Simd\XXH3\XXH3InitSecretSse2_i386.inc} +{$ENDIF} end; procedure XXH3_Accumulate512_Avx2(AAcc: Pointer; AInput: Pointer; ASecret: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_x86_64.inc} - {$I ..\..\Include\Simd\XXH3\XXH3Acc512Avx2_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_x86_64.inc} +{$I ..\..\Include\Simd\XXH3\XXH3Acc512Avx2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_i386.inc} +{$I ..\..\Include\Simd\XXH3\XXH3Acc512Avx2_i386.inc} +{$ENDIF} end; procedure XXH3_ScrambleAcc_Avx2(AAcc: Pointer; ASecret: Pointer); - {$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_x86_64.inc} - {$I ..\..\Include\Simd\XXH3\XXH3ScrambleAvx2_x86_64.inc} +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_x86_64.inc} +{$I ..\..\Include\Simd\XXH3\XXH3ScrambleAvx2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc2Begin_i386.inc} +{$I ..\..\Include\Simd\XXH3\XXH3ScrambleAvx2_i386.inc} +{$ENDIF} end; procedure XXH3_InitSecret_Avx2(ACustomSecret: Pointer; - ADefaultSecret: Pointer; ASeed: UInt64); - {$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_x86_64.inc} - {$I ..\..\Include\Simd\XXH3\XXH3InitSecretAvx2_x86_64.inc} + ADefaultSecret: Pointer; ASeedPtr: PUInt64); +{$IFDEF HASHLIB_X86_64_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_x86_64.inc} +{$I ..\..\Include\Simd\XXH3\XXH3InitSecretAvx2_x86_64.inc} +{$ENDIF} +{$IFDEF HASHLIB_I386_ASM} +{$I ..\..\Include\Simd\Common\HlpSimdProc3Begin_i386.inc} +{$I ..\..\Include\Simd\XXH3\XXH3InitSecretAvx2_i386.inc} +{$ENDIF} end; -{$ENDIF HASHLIB_X86_64_ASM} - procedure XXH3_Accumulate_Sse2(AAcc: Pointer; AInput: Pointer; ASecret: Pointer; ANbStripes: Int32); begin