From patchwork Sat Apr 29 17:52:20 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bernd Edlinger X-Patchwork-Id: 756770 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3wFdYw0hW4z9s2P for ; Sun, 30 Apr 2017 03:52:35 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.b="du46nJBD"; dkim-atps=neutral DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:references:in-reply-to :content-type:mime-version; q=dns; s=default; b=ReapldFvZ85+09x6 VzU9LmZSjqXHJPXsoNs/1sAX7qfBUovT4PZrsaO/sT1R1Y/NQLFUY5Sq5v0z+Xwl mRzmCNEvrAgPi1ld/Pts5pal9ODXtt5ctaapvQwDXp4LmxLNlDoZ8CRrjGRRBDZZ U5SoEigkk8JeXBsfDCVWio4kUBY= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender:from :to:cc:subject:date:message-id:references:in-reply-to :content-type:mime-version; s=default; bh=EMmXL5BbDwAN/z9TwQBXp3 MtBOs=; b=du46nJBD8Np2/HIdwIkr0qcUt8Gik6fRVk8DfI+jH2xHNYYmnZjYtE WlgdHoY/HX5eQgQDfhotxtNXA4ben4qxv5P/L7N4HWNNNHHFhhCSsaZOsDW9QsM/ JS4+RNSj3OlWPVkscxUpvL0tssCQgrw4lAoL+KST72BuJI9W6LvkM= Received: (qmail 68685 invoked by alias); 29 Apr 2017 17:52:25 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 68650 invoked by uid 89); 29 Apr 2017 17:52:24 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-10.8 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_2, GIT_PATCH_3, KAM_ASCII_DIVIDERS, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: EUR02-AM5-obe.outbound.protection.outlook.com Received: from mail-oln040092067086.outbound.protection.outlook.com (HELO EUR02-AM5-obe.outbound.protection.outlook.com) (40.92.67.86) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 29 Apr 2017 17:52:21 +0000 Received: from AM5EUR02FT020.eop-EUR02.prod.protection.outlook.com (10.152.8.55) by AM5EUR02HT041.eop-EUR02.prod.protection.outlook.com (10.152.9.236) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.1047.9; Sat, 29 Apr 2017 17:52:20 +0000 Received: from AM4PR0701MB2162.eurprd07.prod.outlook.com (10.152.8.55) by AM5EUR02FT020.mail.protection.outlook.com (10.152.8.125) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1047.9 via Frontend Transport; Sat, 29 Apr 2017 17:52:21 +0000 Received: from AM4PR0701MB2162.eurprd07.prod.outlook.com ([fe80::40a0:2642:4335:50ed]) by AM4PR0701MB2162.eurprd07.prod.outlook.com ([fe80::40a0:2642:4335:50ed%19]) with mapi id 15.01.1075.005; Sat, 29 Apr 2017 17:52:20 +0000 From: Bernd Edlinger To: "gcc-patches@gcc.gnu.org" CC: Ramana Radhakrishnan , Richard Earnshaw , Kyrill Tkachov , Wilco Dijkstra Subject: Re: [PATCH, ARM] Further improve stack usage in sha512, part 2 (PR 77308) Date: Sat, 29 Apr 2017 17:52:20 +0000 Message-ID: References: In-Reply-To: authentication-results: gcc.gnu.org; dkim=none (message not signed) header.d=none; gcc.gnu.org; dmarc=none action=none header.from=hotmail.de; x-incomingtopheadermarker: OriginalChecksum:73E800100E67AB3730C42A76B56033FA70CB2547EC433018283A24AA4B779A16; UpperCasedChecksum:A995FB0BFC20BA8E36FCF6E3512E9408D994CD31547ADCF93E49EEE5540F168A; SizeAsReceived:8408; Count:43 x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM5EUR02HT041; 5:72kWkFQJe44/BrVRoHnOO1dTG0XshkOtqVjJKhGt8+7i3fnbqkVAauSodJo9NWug7hrY3hMl44Ffx0qobyQKTDNy/zpgfAgsbt1jRveTmuHt3evqItfmJfT7nsnU7QGKUxU5Mbq+cw+AXV3X8zRzSA==; 24:G+V/ia4OBRx6kTapB6ND4BQYWG5idADj02l2I9C5mukFAVB7f7R28YpvPrQbFl/BCFb1nDqo5puAFp4ejLyDJZ/t9fm0zIrlD8hFquZJ75I=; 7:cm9Qb2SUAt5E6uRAYm/p5prgCm607GkaD0keAho2FPM4NuL5a6hXknHU3mEjI4zbwcDl7SPQkNONy2ct6rJ9VeTPlRHz7WDYJ0pjW3cacLHW4WXPPY5UXhmAWSzzHGd3ruLo+hd0EAAbb4+e4YL2gEjjXZshDeQvq5qKp8ZrXfP4vGucGvqn0r0sk1vmrGN74MJo8aUOxoDjug7MiLU2JBw7ZRO6JymzkYDxJWKkllrXVii0BNqqsdtYZFTxFW3BlOiPm0+ANnM7DfIsdOVIx6l4kYmO73x4176j7A4RIieIY2YfxAVuGDSsbaI/cEy1 x-incomingheadercount: 43 x-eopattributedmessage: 0 x-forefront-antispam-report: EFV:NLI; SFV:NSPM; SFS:(7070007)(98901004); DIR:OUT; SFP:1901; SCL:1; SRVR:AM5EUR02HT041; H:AM4PR0701MB2162.eurprd07.prod.outlook.com; FPR:; SPF:None; LANG:en; x-ms-office365-filtering-correlation-id: 798bc74b-2e59-4be0-be78-08d48f287b19 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201702061074)(5061506573)(5061507331)(1603103135)(2017031320274)(201702181274)(2017031322274)(1601125374)(1603101448)(1701031045); SRVR:AM5EUR02HT041; x-ms-exchange-slblob-mailprops: ChSJ6/9EUTGiLSMOjE1SqG0Glz92igfMCrsz8FHW5jK0HQLomVvFiYWItxYNJ/b4iP5lfAL4FGCL8gXw0kQDOxo4wWHwscJGMTljzzA5Vk6kuJOj0bUXHIWPYJQYjKusIVV57ctzqqURa9toxVNC8kyuq9TMOtGVReutMPVnJis7NZ2vyZpSkbPbBvaFqJeCVsvV36v7QD9o1DPw2rXZojmnfPJfwyhYvtzbKbsRXd330T6UB5nyV07BPBmg4g0MAnCdFxUf/pVejNQTTKi+mznDrcIh1EpfhrQbA73+jSUr5/sMazRVCEgtMDLKyoSPMFi22S7N2cWHbOXqNzjL5tiXBYUz3Hn0NPdeJ6h/NwgY5iXLiBCuGb64pWtvwgwZ0Q3ZIqN8PGI9n8oQ528D1odK7eH8f2H/mJBKGIAjlSRBXT7xKVje7606+/tgoHmcTsy6ZPc4nUmv8VRDpr/uz0wWGtMotmD+dvxtLYAUn2q7ZAHIfO6g3Ygu3qTp1NZ4nE4KeEmwicEh+UkKXfdirgLpMS/+TZw9/S31UAnTCR6icGUdfjNcV7Rh15Z4VcJUnevSnVb0/o7841sBYIcPwFKGoHNgRTpN1opJdlDNiOEAIwb8b0YnS8nTslz2ULKl5MazruoTXcvmM7Lc5Oojjw8ipKatJ1mES25S9k6HOWlNELFZ0Xu6KIbx1o9zLQSljvcyOTsM7GS3yIpCviopp5Dcruu9TyiWeRVxgKmI94p+gLf8U3zSEV2edky3+ZIFWOak9vWqSZmC5x/og0Po3Vq+PrmFAUEfQQPu6rNGKWkHuMHAkgjnyMLtYO/EoDBiNPJxaX9iVCKe0iifLz/8WG80G2V6pcaOtfaWGDSznvj8HkxmS5leon/E+FcZ7Sv/M2+265/WDbP3yN+09Zb7U1cRBuDYCjX/RxlZsLqzkutRb0D5Ptm7jbzQKuvBtmfFMleUU/4ACjT4BCUk0loO+X/qPl5ZPejF x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(444000031); SRVR:AM5EUR02HT041; BCL:0; PCL:0; RULEID:; SRVR:AM5EUR02HT041; x-forefront-prvs: 02929ECF07 spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Apr 2017 17:52:20.6012 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Internet X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5EUR02HT041 Ping... I attached the latest version of my patch. Thanks Bernd. On 12/18/16 14:14, Bernd Edlinger wrote: > Hi, > > this splits the *arm_negdi2, *arm_cmpdi_insn and *arm_cmpdi_unsigned > also at split1 except for TARGET_NEON and TARGET_IWMMXT. > > In the new test case the stack is reduced to about 270 bytes, except > for neon and iwmmxt, where this does not change anything. > > This patch depends on [1] and [2] before it can be applied. > > Bootstrapped and reg-tested on arm-linux-gnueabihf. > Is it OK for trunk? > > > Thanks > Bernd. > > > > [1] https://gcc.gnu.org/ml/gcc-patches/2016-11/msg02796.html > [2] https://gcc.gnu.org/ml/gcc-patches/2016-12/msg01562.html 2016-12-18 Bernd Edlinger PR target/77308 * config/arm/arm.md (*arm_negdi2, *arm_cmpdi_insn, *arm_cmpdi_unsigned): Split early except for TARGET_NEON and TARGET_IWMMXT. testsuite: 2016-12-18 Bernd Edlinger PR target/77308 * gcc.target/arm/pr77308-2.c: New test. Index: gcc/config/arm/arm.md =================================================================== --- gcc/config/arm/arm.md (revision 243782) +++ gcc/config/arm/arm.md (working copy) @@ -4689,7 +4689,7 @@ "TARGET_32BIT" "#" ; rsbs %Q0, %Q1, #0; rsc %R0, %R1, #0 (ARM) ; negs %Q0, %Q1 ; sbc %R0, %R1, %R1, lsl #1 (Thumb-2) - "&& reload_completed" + "&& ((!TARGET_NEON && !TARGET_IWMMXT) || reload_completed)" [(parallel [(set (reg:CC CC_REGNUM) (compare:CC (const_int 0) (match_dup 1))) (set (match_dup 0) (minus:SI (const_int 0) (match_dup 1)))]) @@ -7359,7 +7359,7 @@ (clobber (match_scratch:SI 2 "=r"))] "TARGET_32BIT" "#" ; "cmp\\t%Q0, %Q1\;sbcs\\t%2, %R0, %R1" - "&& reload_completed" + "&& ((!TARGET_NEON && !TARGET_IWMMXT) || reload_completed)" [(set (reg:CC CC_REGNUM) (compare:CC (match_dup 0) (match_dup 1))) (parallel [(set (reg:CC CC_REGNUM) @@ -7383,7 +7383,8 @@ operands[5] = gen_rtx_MINUS (SImode, operands[3], operands[4]); } operands[1] = gen_lowpart (SImode, operands[1]); - operands[2] = gen_lowpart (SImode, operands[2]); + if (can_create_pseudo_p ()) + operands[2] = gen_reg_rtx (SImode); } [(set_attr "conds" "set") (set_attr "length" "8") @@ -7397,7 +7398,7 @@ "TARGET_32BIT" "#" ; "cmp\\t%R0, %R1\;it eq\;cmpeq\\t%Q0, %Q1" - "&& reload_completed" + "&& ((!TARGET_NEON && !TARGET_IWMMXT) || reload_completed)" [(set (reg:CC CC_REGNUM) (compare:CC (match_dup 2) (match_dup 3))) (cond_exec (eq:SI (reg:CC CC_REGNUM) (const_int 0)) Index: gcc/testsuite/gcc.target/arm/pr77308-2.c =================================================================== --- gcc/testsuite/gcc.target/arm/pr77308-2.c (revision 0) +++ gcc/testsuite/gcc.target/arm/pr77308-2.c (working copy) @@ -0,0 +1,169 @@ +/* { dg-do compile } */ +/* { dg-options "-Os -Wstack-usage=2500" } */ + +/* This is a modified algorithm with 64bit cmp and neg at the Sigma-blocks. + It improves the test coverage of cmpdi and negdi2 patterns. + Unlike the original test case these insns can reach the reload pass, + which may result in large stack usage. */ + +#define SHA_LONG64 unsigned long long +#define U64(C) C##ULL + +#define SHA_LBLOCK 16 +#define SHA512_CBLOCK (SHA_LBLOCK*8) + +typedef struct SHA512state_st { + SHA_LONG64 h[8]; + SHA_LONG64 Nl, Nh; + union { + SHA_LONG64 d[SHA_LBLOCK]; + unsigned char p[SHA512_CBLOCK]; + } u; + unsigned int num, md_len; +} SHA512_CTX; + +static const SHA_LONG64 K512[80] = { + U64(0x428a2f98d728ae22), U64(0x7137449123ef65cd), + U64(0xb5c0fbcfec4d3b2f), U64(0xe9b5dba58189dbbc), + U64(0x3956c25bf348b538), U64(0x59f111f1b605d019), + U64(0x923f82a4af194f9b), U64(0xab1c5ed5da6d8118), + U64(0xd807aa98a3030242), U64(0x12835b0145706fbe), + U64(0x243185be4ee4b28c), U64(0x550c7dc3d5ffb4e2), + U64(0x72be5d74f27b896f), U64(0x80deb1fe3b1696b1), + U64(0x9bdc06a725c71235), U64(0xc19bf174cf692694), + U64(0xe49b69c19ef14ad2), U64(0xefbe4786384f25e3), + U64(0x0fc19dc68b8cd5b5), U64(0x240ca1cc77ac9c65), + U64(0x2de92c6f592b0275), U64(0x4a7484aa6ea6e483), + U64(0x5cb0a9dcbd41fbd4), U64(0x76f988da831153b5), + U64(0x983e5152ee66dfab), U64(0xa831c66d2db43210), + U64(0xb00327c898fb213f), U64(0xbf597fc7beef0ee4), + U64(0xc6e00bf33da88fc2), U64(0xd5a79147930aa725), + U64(0x06ca6351e003826f), U64(0x142929670a0e6e70), + U64(0x27b70a8546d22ffc), U64(0x2e1b21385c26c926), + U64(0x4d2c6dfc5ac42aed), U64(0x53380d139d95b3df), + U64(0x650a73548baf63de), U64(0x766a0abb3c77b2a8), + U64(0x81c2c92e47edaee6), U64(0x92722c851482353b), + U64(0xa2bfe8a14cf10364), U64(0xa81a664bbc423001), + U64(0xc24b8b70d0f89791), U64(0xc76c51a30654be30), + U64(0xd192e819d6ef5218), U64(0xd69906245565a910), + U64(0xf40e35855771202a), U64(0x106aa07032bbd1b8), + U64(0x19a4c116b8d2d0c8), U64(0x1e376c085141ab53), + U64(0x2748774cdf8eeb99), U64(0x34b0bcb5e19b48a8), + U64(0x391c0cb3c5c95a63), U64(0x4ed8aa4ae3418acb), + U64(0x5b9cca4f7763e373), U64(0x682e6ff3d6b2b8a3), + U64(0x748f82ee5defb2fc), U64(0x78a5636f43172f60), + U64(0x84c87814a1f0ab72), U64(0x8cc702081a6439ec), + U64(0x90befffa23631e28), U64(0xa4506cebde82bde9), + U64(0xbef9a3f7b2c67915), U64(0xc67178f2e372532b), + U64(0xca273eceea26619c), U64(0xd186b8c721c0c207), + U64(0xeada7dd6cde0eb1e), U64(0xf57d4f7fee6ed178), + U64(0x06f067aa72176fba), U64(0x0a637dc5a2c898a6), + U64(0x113f9804bef90dae), U64(0x1b710b35131c471b), + U64(0x28db77f523047d84), U64(0x32caab7b40c72493), + U64(0x3c9ebe0a15c9bebc), U64(0x431d67c49c100d4c), + U64(0x4cc5d4becb3e42b6), U64(0x597f299cfc657e2a), + U64(0x5fcb6fab3ad6faec), U64(0x6c44198c4a475817) +}; + +#define B(x,j) (((SHA_LONG64)(*(((const unsigned char *)(&x))+j)))<<((7-j)*8)) +#define PULL64(x) (B(x,0)|B(x,1)|B(x,2)|B(x,3)|B(x,4)|B(x,5)|B(x,6)|B(x,7)) +#define ROTR(x,s) (((x)>>s) | (x)<<(64-s)) +#define Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ (ROTR((x),39) == (x)) ? -(x) : (x)) +#define Sigma1(x) (ROTR((x),14) ^ ROTR(-(x),18) ^ ((long long)ROTR((x),41) < (long long)(x)) ? -(x) : (x)) +#define sigma0(x) (ROTR((x),1) ^ ROTR((x),8) ^ (((x)>>7) > (x)) ? -(x) : (x)) +#define sigma1(x) (ROTR((x),19) ^ ROTR((x),61) ^ ((long long)((x)>>6) < (long long)(x)) ? -(x) : (x)) +#define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z))) +#define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) + +#define ROUND_00_15(i,a,b,c,d,e,f,g,h) do { \ + T1 += h + Sigma1(e) + Ch(e,f,g) + K512[i]; \ + h = Sigma0(a) + Maj(a,b,c); \ + d += T1; h += T1; } while (0) +#define ROUND_16_80(i,j,a,b,c,d,e,f,g,h,X) do { \ + s0 = X[(j+1)&0x0f]; s0 = sigma0(s0); \ + s1 = X[(j+14)&0x0f]; s1 = sigma1(s1); \ + T1 = X[(j)&0x0f] += s0 + s1 + X[(j+9)&0x0f]; \ + ROUND_00_15(i+j,a,b,c,d,e,f,g,h); } while (0) +void sha512_block_data_order(SHA512_CTX *ctx, const void *in, + unsigned int num) +{ + const SHA_LONG64 *W = in; + SHA_LONG64 a, b, c, d, e, f, g, h, s0, s1, T1; + SHA_LONG64 X[16]; + int i; + + while (num--) { + + a = ctx->h[0]; + b = ctx->h[1]; + c = ctx->h[2]; + d = ctx->h[3]; + e = ctx->h[4]; + f = ctx->h[5]; + g = ctx->h[6]; + h = ctx->h[7]; + + T1 = X[0] = PULL64(W[0]); + ROUND_00_15(0, a, b, c, d, e, f, g, h); + T1 = X[1] = PULL64(W[1]); + ROUND_00_15(1, h, a, b, c, d, e, f, g); + T1 = X[2] = PULL64(W[2]); + ROUND_00_15(2, g, h, a, b, c, d, e, f); + T1 = X[3] = PULL64(W[3]); + ROUND_00_15(3, f, g, h, a, b, c, d, e); + T1 = X[4] = PULL64(W[4]); + ROUND_00_15(4, e, f, g, h, a, b, c, d); + T1 = X[5] = PULL64(W[5]); + ROUND_00_15(5, d, e, f, g, h, a, b, c); + T1 = X[6] = PULL64(W[6]); + ROUND_00_15(6, c, d, e, f, g, h, a, b); + T1 = X[7] = PULL64(W[7]); + ROUND_00_15(7, b, c, d, e, f, g, h, a); + T1 = X[8] = PULL64(W[8]); + ROUND_00_15(8, a, b, c, d, e, f, g, h); + T1 = X[9] = PULL64(W[9]); + ROUND_00_15(9, h, a, b, c, d, e, f, g); + T1 = X[10] = PULL64(W[10]); + ROUND_00_15(10, g, h, a, b, c, d, e, f); + T1 = X[11] = PULL64(W[11]); + ROUND_00_15(11, f, g, h, a, b, c, d, e); + T1 = X[12] = PULL64(W[12]); + ROUND_00_15(12, e, f, g, h, a, b, c, d); + T1 = X[13] = PULL64(W[13]); + ROUND_00_15(13, d, e, f, g, h, a, b, c); + T1 = X[14] = PULL64(W[14]); + ROUND_00_15(14, c, d, e, f, g, h, a, b); + T1 = X[15] = PULL64(W[15]); + ROUND_00_15(15, b, c, d, e, f, g, h, a); + + for (i = 16; i < 80; i += 16) { + ROUND_16_80(i, 0, a, b, c, d, e, f, g, h, X); + ROUND_16_80(i, 1, h, a, b, c, d, e, f, g, X); + ROUND_16_80(i, 2, g, h, a, b, c, d, e, f, X); + ROUND_16_80(i, 3, f, g, h, a, b, c, d, e, X); + ROUND_16_80(i, 4, e, f, g, h, a, b, c, d, X); + ROUND_16_80(i, 5, d, e, f, g, h, a, b, c, X); + ROUND_16_80(i, 6, c, d, e, f, g, h, a, b, X); + ROUND_16_80(i, 7, b, c, d, e, f, g, h, a, X); + ROUND_16_80(i, 8, a, b, c, d, e, f, g, h, X); + ROUND_16_80(i, 9, h, a, b, c, d, e, f, g, X); + ROUND_16_80(i, 10, g, h, a, b, c, d, e, f, X); + ROUND_16_80(i, 11, f, g, h, a, b, c, d, e, X); + ROUND_16_80(i, 12, e, f, g, h, a, b, c, d, X); + ROUND_16_80(i, 13, d, e, f, g, h, a, b, c, X); + ROUND_16_80(i, 14, c, d, e, f, g, h, a, b, X); + ROUND_16_80(i, 15, b, c, d, e, f, g, h, a, X); + } + + ctx->h[0] += a; + ctx->h[1] += b; + ctx->h[2] += c; + ctx->h[3] += d; + ctx->h[4] += e; + ctx->h[5] += f; + ctx->h[6] += g; + ctx->h[7] += h; + + W += SHA_LBLOCK; + } +}