From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04on2052.outbound.protection.outlook.com [40.107.8.52]) by sourceware.org (Postfix) with ESMTPS id C09403858D35 for ; Wed, 15 Feb 2023 19:03:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C09403858D35 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rRggM7wqjX2MeF0bBs25QK92Vwq09/AzdnJulMMwtOI=; b=5jqgfFMkH9/8Jt4OfJPwlTrXxjP4DiWh9BwFYzdPReSztiyECWKwL6hYq7jvUnBrB2laxONe3Jdhc2ok5FX1ytHcz4kykfKtDyoUONhUkAj/egh2bpF7Ngu3c4H7cRRaW2Y5qIUbfF5FxvU/onsotiOsdcpvM/ek4vlTPB+bsGE= Received: from DU2PR04CA0018.eurprd04.prod.outlook.com (2603:10a6:10:3b::23) by AS8PR08MB6536.eurprd08.prod.outlook.com (2603:10a6:20b:31d::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6086.26; Wed, 15 Feb 2023 19:03:01 +0000 Received: from DBAEUR03FT065.eop-EUR03.prod.protection.outlook.com (2603:10a6:10:3b:cafe::6d) by DU2PR04CA0018.outlook.office365.com (2603:10a6:10:3b::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6086.26 via Frontend Transport; Wed, 15 Feb 2023 19:03:01 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by DBAEUR03FT065.mail.protection.outlook.com (100.127.142.147) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6111.12 via Frontend Transport; Wed, 15 Feb 2023 19:03:01 +0000 Received: ("Tessian outbound 6e565e48ed4a:v132"); Wed, 15 Feb 2023 19:03:01 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 1d0ddf2c449b630a X-CR-MTA-TID: 64aa7808 Received: from 798298195c32.1 by 64aa7808-outbound-1.mta.getcheckrecipient.com id F0445EFB-31A0-408F-99A4-0641D154AAC1.1; Wed, 15 Feb 2023 19:02:54 +0000 Received: from EUR05-AM6-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 798298195c32.1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Wed, 15 Feb 2023 19:02:54 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=h1kIDJyMBi0zdjHCO+9uWrkojqSv7cysF6vXrRXWPD+JPk/y+2zlKa11peGwaB2vl8TfGEAQW4sJT/7usEsoclshmsN0j2HOm46QC4wkTa6eqG4CXZSHPQIaUC2TahkpTMtNYY208yUD5oUGKYkTmRxpvoowT6QHSY9h7tCRxhDlljg2HYN+ryz9v0ZYdOe86uPSp0UESEZSg3bS9AMs1NHvEFEcmljHysA1GMxgdwDRYy1PvpCy0PVQateoK/8uA1wiTFatrdrVD0g3E5sr9LMprLVRkmqJx1SVZlM1XvhaRJapqHYRsaoiW4I05xRXdm5H33Py7iPL2xkh0CwNzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=rRggM7wqjX2MeF0bBs25QK92Vwq09/AzdnJulMMwtOI=; b=IFH5cx2Gno7klBeUfr7akMyRf+X2mpZle5jRW5WhkGS1XZY3nORzyOqODSekVd5Bfa9r8Wn3ALiZG/taurhPdPnPPKz/zEIB2O2TEKAqx0xzWzzkzLCQrnxKcsPY6lzPV8cmkwD7/52oKztnJXKlKDvwrS8jj1o6cqg+SOiYO4FY0GZQWVfJdvdBXtx37Q+D7UymXqL0JFo2gn5cuxEg99k1C8a+3/elZkBdecNhFY5OrTnZxIDK869PozMzXK/LLrFthpVgEB0bkACDjY2kTKU4qufNBxtXjox2LC4DCG6UF3O38zcRvhbVDkso+6PMUNAJKOQ+sZ7ieDwwprEWCg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=rRggM7wqjX2MeF0bBs25QK92Vwq09/AzdnJulMMwtOI=; b=5jqgfFMkH9/8Jt4OfJPwlTrXxjP4DiWh9BwFYzdPReSztiyECWKwL6hYq7jvUnBrB2laxONe3Jdhc2ok5FX1ytHcz4kykfKtDyoUONhUkAj/egh2bpF7Ngu3c4H7cRRaW2Y5qIUbfF5FxvU/onsotiOsdcpvM/ek4vlTPB+bsGE= Received: from PAWPR08MB8982.eurprd08.prod.outlook.com (2603:10a6:102:33f::20) by DBBPR08MB6219.eurprd08.prod.outlook.com (2603:10a6:10:20d::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6086.26; Wed, 15 Feb 2023 19:02:52 +0000 Received: from PAWPR08MB8982.eurprd08.prod.outlook.com ([fe80::dc17:8fa2:cce5:3573]) by PAWPR08MB8982.eurprd08.prod.outlook.com ([fe80::dc17:8fa2:cce5:3573%6]) with mapi id 15.20.6086.026; Wed, 15 Feb 2023 19:02:52 +0000 From: Wilco Dijkstra To: Adhemerval Zanella , "libc-alpha@sourceware.org" Subject: Re: [PATCH 6/7] iconv: Remove _STRING_ARCH_unaligned usage Thread-Topic: [PATCH 6/7] iconv: Remove _STRING_ARCH_unaligned usage Thread-Index: AQHZP7L66byy6Jk+pEaF8oSLpXrDUa7QYA20 Date: Wed, 15 Feb 2023 19:02:51 +0000 Message-ID: References: <20230213135558.3328727-1-adhemerval.zanella@linaro.org> <20230213135558.3328727-7-adhemerval.zanella@linaro.org> In-Reply-To: <20230213135558.3328727-7-adhemerval.zanella@linaro.org> Accept-Language: en-GB, en-US Content-Language: en-GB X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; x-ms-traffictypediagnostic: PAWPR08MB8982:EE_|DBBPR08MB6219:EE_|DBAEUR03FT065:EE_|AS8PR08MB6536:EE_ X-MS-Office365-Filtering-Correlation-Id: 6892d629-e9ed-468d-0fc4-08db0f874263 x-checkrecipientrouted: true nodisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: WU8KmrAuMab5oRP0ssBsgDP1AFOat3P7xHOjGpNDKuhz/6Xbw25rBdB+aufAu2dwIbRkSk11XXWIcoQZlMNDcAPWqghB4sU35pT/Xd/6lYHlIzj00eOO+jLtvf32FzXUj5Z0P/md4c9bYk1NPu44yVAf0ukwmQQmZJ+77A7Rq3am/aZnkd1MUvt55UY0VOkwc19bNZaVDTSRxtOqPdGhYem1cK4W72H/brUEMr1ucJIP0EjhpdZk+NC3O779JEkHy9juigebrKg4b/VvvWfR3aIpQMaxZFHGjd5G2VIKxmYQbnKgOt4ujjfdo1xUyTpT+DnmRiZk+zRuAwnTd4HSlUJ/BI4xxiv6SUS2LgCcT567In1Qw4EAJ1LZVYTKbej1ezubO0L6CnZrLATK/VBgIU7qQb8h75PSv9cqtKRftkt+lXtpAv4d8ZPBRLwDKSk4ZU2OlEAUFpmlrkilUgaSD/VVkhMvMdcTaN2Ex+p7wc0WnWlLsIn+RJzk0zbKp/NEDitTYTKqoDS/qxD1ljHKc1GoSf5M3g7+QDhLfo12JTKxN2tk6Kn6MO46iK7lJj1zSs6QvFKir2Xk7IcpjX2XyVNoEYmCgkQK8oyoAAF76P5GL1evjln2LZRi46FoMWIIRDZL7ITok2brOlBbP9EEeNYm5QA9GSA5DGF63/TzF/YZEqSXWz/m8TjxCWGcNx4ZfBHWe50OALEpcD+9m5c3JQ== X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAWPR08MB8982.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(4636009)(366004)(396003)(346002)(136003)(376002)(39860400002)(451199018)(30864003)(2906002)(83380400001)(9686003)(38070700005)(55016003)(86362001)(122000001)(66556008)(66476007)(66946007)(64756008)(66446008)(110136005)(76116006)(38100700002)(91956017)(316002)(8936002)(52536014)(5660300002)(8676002)(41300700001)(33656002)(6506007)(186003)(478600001)(7696005)(71200400001)(26005)(579004);DIR:OUT;SFP:1101; Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DBBPR08MB6219 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: DBAEUR03FT065.eop-EUR03.prod.protection.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 2cde7db1-590d-4652-1973-08db0f873cdb X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: SNd6vj4ZErtwfEK9c1Pg1rajE8op3WP2F4YLWEBTlWEos12KDIYbPVXqEpdmxHhlM3t5PzbhZhzf1BBMYgxINwo445kZIBezXn52AAXxVd7ePldak++asYAr5hDxUSarAWjXM8GfwV1qSNb5TGnzdzmsYO0Bq20LpVUrIhsCSjqmh4F2bhYNyA8giJfAmcPCmDmEIL/TIcyixozWIS3D3TnKeQfdVauKZUER/gcsQuKuKJKUZJfqMv/p8+D6exxPjEHAcQlnQx7GqbFzQ5TOlerhSLvH4fAIneOZkvDgPBNf9r5aD02jMwoPZTa6exEr9EoBTVyCue+NfSeUDfeCEL4u0paFDj3xu8vBWj7ZEOisAl81qrl3ZrJkwtCq+CLecrsawOZxI6p5z1MQagqMQkTQBwzemoy/5HmSPsvx7Y5PXeyiFl1/ora8yrSoQJpsYKr0+2kLaG1ek1Eg4A41hfZmeWwPvQM3PW0wH075WRB58jp40kYms6t6Hz2J14h9OMAtbuyUZ6PM4gFtA7cG+p7xgUqLvvro/POA29Iw+h9tT3spyHPGq3ucwV9vHGQO9kNirBF11bSFVQ+Qi0T/VyEgF8TXuEP5yiYbm7YhXdsWhy1NO4S/eTnIhne8WyUqKS8j1qAN3k9QD+P7I1VEow8utCzEs/DONMeEdxp9UNe/wwkGkuQ0mVMk/4J9M/AdfNfZBsA1Q0rt5A7zeHBocQ== X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230025)(4636009)(136003)(396003)(376002)(346002)(39860400002)(451199018)(40470700004)(46966006)(36840700001)(40460700003)(316002)(70206006)(41300700001)(8936002)(52536014)(8676002)(5660300002)(30864003)(36860700001)(82740400003)(81166007)(86362001)(356005)(33656002)(70586007)(26005)(6506007)(9686003)(186003)(2906002)(55016003)(40480700001)(82310400005)(83380400001)(7696005)(478600001)(336012)(47076005)(110136005);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Feb 2023 19:03:01.1690 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 6892d629-e9ed-468d-0fc4-08db0f874263 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: DBAEUR03FT065.eop-EUR03.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB6536 X-Spam-Status: No, score=-9.5 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Hi Adhemerval,=0A= =0A= What a mess that was, great cleanup! LGTM.=0A= =0A= Reviewed-by: Wilco Dijkstra =0A= =0A= =0A= diff --git a/iconv/gconv_simple.c b/iconv/gconv_simple.c=0A= index c50ffd3bf0..c60cffad4c 100644=0A= --- a/iconv/gconv_simple.c=0A= +++ b/iconv/gconv_simple.c=0A= @@ -86,69 +86,22 @@ internal_ucs4_loop (struct __gconv_step *step,=0A= =A0#if __BYTE_ORDER =3D=3D __LITTLE_ENDIAN=0A= =A0=A0 /* Sigh, we have to do some real work.=A0 */=0A= =A0=A0 size_t cnt;=0A= -=A0 uint32_t *outptr32 =3D (uint32_t *) outptr;=0A= -=0A= -=A0 for (cnt =3D 0; cnt < n_convert; ++cnt, inptr +=3D 4)=0A= -=A0=A0=A0 *outptr32++ =3D bswap_32 (*(const uint32_t *) inptr);=0A= -=0A= -=A0 *inptrp =3D inptr;=0A= -=A0 *outptrp =3D (unsigned char *) outptr32;=0A= -#elif __BYTE_ORDER =3D=3D __BIG_ENDIAN=0A= -=A0 /* Simply copy the data.=A0 */=0A= -=A0 *inptrp =3D inptr + n_convert * 4;=0A= -=A0 *outptrp =3D __mempcpy (outptr, inptr, n_convert * 4);=0A= -#else=0A= -# error "This endianess is not supported."=0A= -#endif=0A= -=0A= -=A0 /* Determine the status.=A0 */=0A= -=A0 if (*inptrp =3D=3D inend)=0A= -=A0=A0=A0 result =3D __GCONV_EMPTY_INPUT;=0A= -=A0 else if (*outptrp + 4 > outend)=0A= -=A0=A0=A0 result =3D __GCONV_FULL_OUTPUT;=0A= -=A0 else=0A= -=A0=A0=A0 result =3D __GCONV_INCOMPLETE_INPUT;=0A= -=0A= -=A0 return result;=0A= -}=0A= -=0A= -#if !_STRING_ARCH_unaligned=0A= -static inline int=0A= -__attribute ((always_inline))=0A= -internal_ucs4_loop_unaligned (struct __gconv_step *step,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 struct __gconv_step_data *step_data,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 const unsigned char **inptrp,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 const unsigned char *inend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 unsigned char **outptrp,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 const unsigned char *outend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 size_t *irreversible)=0A= -{=0A= -=A0 const unsigned char *inptr =3D *inptrp;=0A= -=A0 unsigned char *outptr =3D *outptrp;=0A= -=A0 size_t n_convert =3D MIN (inend - inptr, outend - outptr) / 4;=0A= -=A0 int result;=0A= -=0A= -# if __BYTE_ORDER =3D=3D __LITTLE_ENDIAN=0A= -=A0 /* Sigh, we have to do some real work.=A0 */=0A= -=A0 size_t cnt;=0A= =A0=0A= =A0=A0 for (cnt =3D 0; cnt < n_convert; ++cnt, inptr +=3D 4, outptr +=3D 4)= =0A= =A0=A0=A0=A0 {=0A= -=A0=A0=A0=A0=A0 outptr[0] =3D inptr[3];=0A= -=A0=A0=A0=A0=A0 outptr[1] =3D inptr[2];=0A= -=A0=A0=A0=A0=A0 outptr[2] =3D inptr[1];=0A= -=A0=A0=A0=A0=A0 outptr[3] =3D inptr[0];=0A= +=A0=A0=A0=A0=A0 uint32_t val =3D get32 (inptr);=0A= +=A0=A0=A0=A0=A0 put32 (outptr, __builtin_bswap32 (val));=0A= =A0=A0=A0=A0 }=0A= =A0=0A= =A0=A0 *inptrp =3D inptr;=0A= =A0=A0 *outptrp =3D outptr;=0A= -# elif __BYTE_ORDER =3D=3D __BIG_ENDIAN=0A= +#elif __BYTE_ORDER =3D=3D __BIG_ENDIAN=0A= =A0=A0 /* Simply copy the data.=A0 */=0A= =A0=A0 *inptrp =3D inptr + n_convert * 4;=0A= =A0=A0 *outptrp =3D __mempcpy (outptr, inptr, n_convert * 4);=0A= -# else=0A= -#=A0 error "This endianess is not supported."=0A= -# endif=0A= +#else=0A= +# error "This endianess is not supported."=0A= +#endif=0A= =A0=0A= =A0=A0 /* Determine the status.=A0 */=0A= =A0=A0 if (*inptrp =3D=3D inend)=0A= @@ -160,7 +113,6 @@ internal_ucs4_loop_unaligned (struct __gconv_step *step= ,=0A= =A0=0A= =A0=A0 return result;=0A= =A0}=0A= -#endif=0A= =A0=0A= =A0=0A= =A0static inline int=0A= @@ -242,12 +194,9 @@ ucs4_internal_loop (struct __gconv_step *step,=0A= =A0=0A= =A0=A0 for (; inptr + 4 <=3D inend && outptr + 4 <=3D outend; inptr +=3D 4)= =0A= =A0=A0=A0=A0 {=0A= -=A0=A0=A0=A0=A0 uint32_t inval;=0A= -=0A= +=A0=A0=A0=A0=A0 uint32_t inval =3D get32 (inptr);=0A= =A0#if __BYTE_ORDER =3D=3D __LITTLE_ENDIAN=0A= -=A0=A0=A0=A0=A0 inval =3D bswap_32 (*(const uint32_t *) inptr);=0A= -#else=0A= -=A0=A0=A0=A0=A0 inval =3D *(const uint32_t *) inptr;=0A= +=A0=A0=A0=A0=A0 inval =3D __builtin_bswap32 (inval);=0A= =A0#endif=0A= =A0=0A= =A0=A0=A0=A0=A0=A0 if (__glibc_unlikely (inval > 0x7fffffff))=0A= @@ -272,7 +221,7 @@ ucs4_internal_loop (struct __gconv_step *step,=0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 return __GCONV_ILLEGAL_INPUT;=0A= =A0=A0=A0=A0=A0=A0=A0=A0 }=0A= =A0=0A= -=A0=A0=A0=A0=A0 *((uint32_t *) outptr) =3D inval;=0A= +=A0=A0=A0=A0=A0 put32 (outptr, inval);=0A= =A0=A0=A0=A0=A0=A0 outptr +=3D sizeof (uint32_t);=0A= =A0=A0=A0=A0 }=0A= =A0=0A= @@ -290,75 +239,6 @@ ucs4_internal_loop (struct __gconv_step *step,=0A= =A0=A0 return result;=0A= =A0}=0A= =A0=0A= -#if !_STRING_ARCH_unaligned=0A= -static inline int=0A= -__attribute ((always_inline))=0A= -ucs4_internal_loop_unaligned (struct __gconv_step *step,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 struct __gconv_step_data *step_data,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 const unsigned char **inptrp,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 const unsigned char *inend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 unsigned char **outptrp,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 const unsigned char *outend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 size_t *irreversible)=0A= -{=0A= -=A0 int flags =3D step_data->__flags;=0A= -=A0 const unsigned char *inptr =3D *inptrp;=0A= -=A0 unsigned char *outptr =3D *outptrp;=0A= -=A0 int result;=0A= -=0A= -=A0 for (; inptr + 4 <=3D inend && outptr + 4 <=3D outend; inptr +=3D 4)= =0A= -=A0=A0=A0 {=0A= -=A0=A0=A0=A0=A0 if (__glibc_unlikely (inptr[0] > 0x80))=0A= -=A0=A0=A0=A0=A0=A0 {=0A= -=A0=A0=A0=A0=A0=A0=A0=A0 /* The value is too large.=A0 We don't try transl= iteration here since=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 this is not an error because of the lack= of possibilities to=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 represent the result.=A0 This is a genui= ne bug in the input since=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 UCS4 does not allow such values.=A0 */= =0A= -=A0=A0=A0=A0=A0=A0=A0=A0 if (irreversible =3D=3D NULL)=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* We are transliterating, don't try to cor= rect anything.=A0 */=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 return __GCONV_ILLEGAL_INPUT;=0A= -=0A= -=A0=A0=A0=A0=A0=A0=A0=A0 if (flags & __GCONV_IGNORE_ERRORS)=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 {=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* Just ignore this character.=A0 */= =0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 ++*irreversible;=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 continue;=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 }=0A= -=0A= -=A0=A0=A0=A0=A0=A0=A0=A0 *inptrp =3D inptr;=0A= -=A0=A0=A0=A0=A0=A0=A0=A0 *outptrp =3D outptr;=0A= -=A0=A0=A0=A0=A0=A0=A0=A0 return __GCONV_ILLEGAL_INPUT;=0A= -=A0=A0=A0=A0=A0=A0 }=0A= -=0A= -# if __BYTE_ORDER =3D=3D __LITTLE_ENDIAN=0A= -=A0=A0=A0=A0=A0 outptr[3] =3D inptr[0];=0A= -=A0=A0=A0=A0=A0 outptr[2] =3D inptr[1];=0A= -=A0=A0=A0=A0=A0 outptr[1] =3D inptr[2];=0A= -=A0=A0=A0=A0=A0 outptr[0] =3D inptr[3];=0A= -# else=0A= -=A0=A0=A0=A0=A0 outptr[0] =3D inptr[0];=0A= -=A0=A0=A0=A0=A0 outptr[1] =3D inptr[1];=0A= -=A0=A0=A0=A0=A0 outptr[2] =3D inptr[2];=0A= -=A0=A0=A0=A0=A0 outptr[3] =3D inptr[3];=0A= -# endif=0A= -=A0=A0=A0=A0=A0 outptr +=3D 4;=0A= -=A0=A0=A0 }=0A= -=0A= -=A0 *inptrp =3D inptr;=0A= -=A0 *outptrp =3D outptr;=0A= -=0A= -=A0 /* Determine the status.=A0 */=0A= -=A0 if (*inptrp =3D=3D inend)=0A= -=A0=A0=A0 result =3D __GCONV_EMPTY_INPUT;=0A= -=A0 else if (*outptrp + 4 > outend)=0A= -=A0=A0=A0 result =3D __GCONV_FULL_OUTPUT;=0A= -=A0 else=0A= -=A0=A0=A0 result =3D __GCONV_INCOMPLETE_INPUT;=0A= -=0A= -=A0 return result;=0A= -}=0A= -#endif=0A= -=0A= =A0=0A= =A0static inline int=0A= =A0__attribute ((always_inline))=0A= @@ -453,11 +333,12 @@ internal_ucs4le_loop (struct __gconv_step *step,=0A= =A0#if __BYTE_ORDER =3D=3D __BIG_ENDIAN=0A= =A0=A0 /* Sigh, we have to do some real work.=A0 */=0A= =A0=A0 size_t cnt;=0A= -=A0 uint32_t *outptr32 =3D (uint32_t *) outptr;=0A= =A0=0A= -=A0 for (cnt =3D 0; cnt < n_convert; ++cnt, inptr +=3D 4)=0A= -=A0=A0=A0 *outptr32++ =3D bswap_32 (*(const uint32_t *) inptr);=0A= -=A0 outptr =3D (unsigned char *) outptr32;=0A= +=A0 for (cnt =3D 0; cnt < n_convert; ++cnt, inptr +=3D 4, outptr +=3D 4)= =0A= +=A0=A0=A0 {=0A= +=A0=A0=A0=A0=A0 uint32_t val =3D get32 (inptr);=0A= +=A0=A0=A0=A0=A0 put32 (outptr, __builtin_bswap32 (val));=0A= +=A0=A0=A0 }=0A= =A0=0A= =A0=A0 *inptrp =3D inptr;=0A= =A0=A0 *outptrp =3D outptr;=0A= @@ -480,59 +361,6 @@ internal_ucs4le_loop (struct __gconv_step *step,=0A= =A0=A0 return result;=0A= =A0}=0A= =A0=0A= -#if !_STRING_ARCH_unaligned=0A= -static inline int=0A= -__attribute ((always_inline))=0A= -internal_ucs4le_loop_unaligned (struct __gconv_step *step,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 struct __gconv_step_data *step_data,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 const unsigned char **inptrp,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 const unsigned char *inend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 unsigned char **outptrp,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 const unsigned char *outend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 size_t *irreversible)=0A= -{=0A= -=A0 const unsigned char *inptr =3D *inptrp;=0A= -=A0 unsigned char *outptr =3D *outptrp;=0A= -=A0 size_t n_convert =3D MIN (inend - inptr, outend - outptr) / 4;=0A= -=A0 int result;=0A= -=0A= -# if __BYTE_ORDER =3D=3D __BIG_ENDIAN=0A= -=A0 /* Sigh, we have to do some real work.=A0 */=0A= -=A0 size_t cnt;=0A= -=0A= -=A0 for (cnt =3D 0; cnt < n_convert; ++cnt, inptr +=3D 4, outptr +=3D 4)= =0A= -=A0=A0=A0 {=0A= -=A0=A0=A0=A0=A0 outptr[0] =3D inptr[3];=0A= -=A0=A0=A0=A0=A0 outptr[1] =3D inptr[2];=0A= -=A0=A0=A0=A0=A0 outptr[2] =3D inptr[1];=0A= -=A0=A0=A0=A0=A0 outptr[3] =3D inptr[0];=0A= -=A0=A0=A0 }=0A= -=0A= -=A0 *inptrp =3D inptr;=0A= -=A0 *outptrp =3D outptr;=0A= -# elif __BYTE_ORDER =3D=3D __LITTLE_ENDIAN=0A= -=A0 /* Simply copy the data.=A0 */=0A= -=A0 *inptrp =3D inptr + n_convert * 4;=0A= -=A0 *outptrp =3D __mempcpy (outptr, inptr, n_convert * 4);=0A= -# else=0A= -#=A0 error "This endianess is not supported."=0A= -# endif=0A= -=0A= -=A0 /* Determine the status.=A0 */=0A= -=A0 if (*inptrp =3D=3D inend)=0A= -=A0=A0=A0 result =3D __GCONV_EMPTY_INPUT;=0A= -=A0 else if (*inptrp + 4 > inend)=0A= -=A0=A0=A0 result =3D __GCONV_INCOMPLETE_INPUT;=0A= -=A0 else=0A= -=A0=A0=A0 {=0A= -=A0=A0=A0=A0=A0 assert (*outptrp + 4 > outend);=0A= -=A0=A0=A0=A0=A0 result =3D __GCONV_FULL_OUTPUT;=0A= -=A0=A0=A0 }=0A= -=0A= -=A0 return result;=0A= -}=0A= -#endif=0A= -=0A= =A0=0A= =A0static inline int=0A= =A0__attribute ((always_inline))=0A= @@ -612,12 +440,9 @@ ucs4le_internal_loop (struct __gconv_step *step,=0A= =A0=0A= =A0=A0 for (; inptr + 4 <=3D inend && outptr + 4 <=3D outend; inptr +=3D 4)= =0A= =A0=A0=A0=A0 {=0A= -=A0=A0=A0=A0=A0 uint32_t inval;=0A= -=0A= +=A0=A0=A0=A0=A0 uint32_t inval =3D get32 (inptr);=0A= =A0#if __BYTE_ORDER =3D=3D __BIG_ENDIAN=0A= -=A0=A0=A0=A0=A0 inval =3D bswap_32 (*(const uint32_t *) inptr);=0A= -#else=0A= -=A0=A0=A0=A0=A0 inval =3D *(const uint32_t *) inptr;=0A= +=A0=A0=A0=A0=A0 inval =3D __builtin_bswap32 (inval);=0A= =A0#endif=0A= =A0=0A= =A0=A0=A0=A0=A0=A0 if (__glibc_unlikely (inval > 0x7fffffff))=0A= @@ -642,7 +467,7 @@ ucs4le_internal_loop (struct __gconv_step *step,=0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 return __GCONV_ILLEGAL_INPUT;=0A= =A0=A0=A0=A0=A0=A0=A0=A0 }=0A= =A0=0A= -=A0=A0=A0=A0=A0 *((uint32_t *) outptr) =3D inval;=0A= +=A0=A0=A0=A0=A0 put32 (outptr, inval);=0A= =A0=A0=A0=A0=A0=A0 outptr +=3D sizeof (uint32_t);=0A= =A0=A0=A0=A0 }=0A= =A0=0A= @@ -663,79 +488,6 @@ ucs4le_internal_loop (struct __gconv_step *step,=0A= =A0=A0 return result;=0A= =A0}=0A= =A0=0A= -#if !_STRING_ARCH_unaligned=0A= -static inline int=0A= -__attribute ((always_inline))=0A= -ucs4le_internal_loop_unaligned (struct __gconv_step *step,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 struct __gconv_step_data *step_data,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 const unsigned char **inptrp,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 const unsigned char *inend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 unsigned char **outptrp,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 const unsigned char *outend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 size_t *irreversible)=0A= -{=0A= -=A0 int flags =3D step_data->__flags;=0A= -=A0 const unsigned char *inptr =3D *inptrp;=0A= -=A0 unsigned char *outptr =3D *outptrp;=0A= -=A0 int result;=0A= -=0A= -=A0 for (; inptr + 4 <=3D inend && outptr + 4 <=3D outend; inptr +=3D 4)= =0A= -=A0=A0=A0 {=0A= -=A0=A0=A0=A0=A0 if (__glibc_unlikely (inptr[3] > 0x80))=0A= -=A0=A0=A0=A0=A0=A0 {=0A= -=A0=A0=A0=A0=A0=A0=A0=A0 /* The value is too large.=A0 We don't try transl= iteration here since=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 this is not an error because of the lack= of possibilities to=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 represent the result.=A0 This is a genui= ne bug in the input since=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 UCS4 does not allow such values.=A0 */= =0A= -=A0=A0=A0=A0=A0=A0=A0=A0 if (irreversible =3D=3D NULL)=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* We are transliterating, don't try to cor= rect anything.=A0 */=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 return __GCONV_ILLEGAL_INPUT;=0A= -=0A= -=A0=A0=A0=A0=A0=A0=A0=A0 if (flags & __GCONV_IGNORE_ERRORS)=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 {=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* Just ignore this character.=A0 */= =0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 ++*irreversible;=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 continue;=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 }=0A= -=0A= -=A0=A0=A0=A0=A0=A0=A0=A0 *inptrp =3D inptr;=0A= -=A0=A0=A0=A0=A0=A0=A0=A0 *outptrp =3D outptr;=0A= -=A0=A0=A0=A0=A0=A0=A0=A0 return __GCONV_ILLEGAL_INPUT;=0A= -=A0=A0=A0=A0=A0=A0 }=0A= -=0A= -# if __BYTE_ORDER =3D=3D __BIG_ENDIAN=0A= -=A0=A0=A0=A0=A0 outptr[3] =3D inptr[0];=0A= -=A0=A0=A0=A0=A0 outptr[2] =3D inptr[1];=0A= -=A0=A0=A0=A0=A0 outptr[1] =3D inptr[2];=0A= -=A0=A0=A0=A0=A0 outptr[0] =3D inptr[3];=0A= -# else=0A= -=A0=A0=A0=A0=A0 outptr[0] =3D inptr[0];=0A= -=A0=A0=A0=A0=A0 outptr[1] =3D inptr[1];=0A= -=A0=A0=A0=A0=A0 outptr[2] =3D inptr[2];=0A= -=A0=A0=A0=A0=A0 outptr[3] =3D inptr[3];=0A= -# endif=0A= -=0A= -=A0=A0=A0=A0=A0 outptr +=3D 4;=0A= -=A0=A0=A0 }=0A= -=0A= -=A0 *inptrp =3D inptr;=0A= -=A0 *outptrp =3D outptr;=0A= -=0A= -=A0 /* Determine the status.=A0 */=0A= -=A0 if (*inptrp =3D=3D inend)=0A= -=A0=A0=A0 result =3D __GCONV_EMPTY_INPUT;=0A= -=A0 else if (*inptrp + 4 > inend)=0A= -=A0=A0=A0 result =3D __GCONV_INCOMPLETE_INPUT;=0A= -=A0 else=0A= -=A0=A0=A0 {=0A= -=A0=A0=A0=A0=A0 assert (*outptrp + 4 > outend);=0A= -=A0=A0=A0=A0=A0 result =3D __GCONV_FULL_OUTPUT;=0A= -=A0=A0=A0 }=0A= -=0A= -=A0 return result;=0A= -}=0A= -#endif=0A= -=0A= =A0=0A= =A0static inline int=0A= =A0__attribute ((always_inline))=0A= =0A= OK=0A= =0A= diff --git a/iconv/loop.c b/iconv/loop.c=0A= index 9d8a7cceb3..b2a1727ad4 100644=0A= --- a/iconv/loop.c=0A= +++ b/iconv/loop.c=0A= @@ -58,12 +58,7 @@=0A= =A0#include =0A= =A0=0A= =A0#undef FCTNAME2=0A= -#if _STRING_ARCH_unaligned || !defined DEFINE_UNALIGNED=0A= -# define FCTNAME2(name) name=0A= -#else=0A= -# define FCTNAME2(name) name##_unaligned=0A= -#endif=0A= -#define FCTNAME(name) FCTNAME2(name)=0A= +#define FCTNAME(name) name=0A= =A0=0A= =A0=0A= =A0/* We need at least one byte for the next round.=A0 */=0A= @@ -279,20 +274,9 @@ FCTNAME (LOOPFCT) (struct __gconv_step *step,=0A= =A0}=0A= =A0=0A= =A0=0A= -/* Include the file a second time to define the function to handle=0A= -=A0=A0 unaligned access.=A0 */=0A= -#if !defined DEFINE_UNALIGNED && !_STRING_ARCH_unaligned \=0A= -=A0=A0=A0 && MIN_NEEDED_INPUT !=3D 1 && MAX_NEEDED_INPUT % MIN_NEEDED_INPU= T =3D=3D 0 \=0A= -=A0=A0=A0 && MIN_NEEDED_OUTPUT !=3D 1 && MAX_NEEDED_OUTPUT % MIN_NEEDED_OU= TPUT =3D=3D 0=0A= -# undef unaligned=0A= -=0A= -# define DEFINE_UNALIGNED=0A= -# include "loop.c"=0A= -# undef DEFINE_UNALIGNED=0A= -#else=0A= -# if MAX_NEEDED_INPUT > 1=0A= -#=A0 define SINGLE(fct) SINGLE2 (fct)=0A= -#=A0 define SINGLE2(fct) fct##_single=0A= +#if MAX_NEEDED_INPUT > 1=0A= +# define SINGLE(fct) SINGLE2 (fct)=0A= +# define SINGLE2(fct) fct##_single=0A= =A0static inline int=0A= =A0__attribute ((always_inline))=0A= =A0SINGLE(LOOPFCT) (struct __gconv_step *step,=0A= @@ -302,37 +286,37 @@ SINGLE(LOOPFCT) (struct __gconv_step *step,=0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 size_t *irreversible EX= TRA_LOOP_DECLS)=0A= =A0{=0A= =A0=A0 mbstate_t *state =3D step_data->__statep;=0A= -#=A0 ifdef LOOP_NEED_FLAGS=0A= +# ifdef LOOP_NEED_FLAGS=0A= =A0=A0 int flags =3D step_data->__flags;=0A= -#=A0 endif=0A= -#=A0 ifdef LOOP_NEED_DATA=0A= +# endif=0A= +# ifdef LOOP_NEED_DATA=0A= =A0=A0 void *data =3D step->__data;=0A= -#=A0 endif=0A= +# endif=0A= =A0=A0 int result =3D __GCONV_OK;=0A= =A0=A0 unsigned char bytebuf[MAX_NEEDED_INPUT];=0A= =A0=A0 const unsigned char *inptr =3D *inptrp;=0A= =A0=A0 unsigned char *outptr =3D *outptrp;=0A= =A0=A0 size_t inlen;=0A= =A0=0A= -#=A0 ifdef INIT_PARAMS=0A= +# ifdef INIT_PARAMS=0A= =A0=A0 INIT_PARAMS;=0A= -#=A0 endif=0A= +# endif=0A= =A0=0A= -#=A0 ifdef UNPACK_BYTES=0A= +# ifdef UNPACK_BYTES=0A= =A0=A0 UNPACK_BYTES=0A= -#=A0 else=0A= +# else=0A= =A0=A0 /* Add the bytes from the state to the input buffer.=A0 */=0A= =A0=A0 assert ((state->__count & 7) <=3D sizeof (state->__value));=0A= =A0=A0 for (inlen =3D 0; inlen < (size_t) (state->__count & 7); ++inlen)=0A= =A0=A0=A0=A0 bytebuf[inlen] =3D state->__value.__wchb[inlen];=0A= -#=A0 endif=0A= +# endif=0A= =A0=0A= =A0=A0 /* Are there enough bytes in the input buffer?=A0 */=0A= =A0=A0 if (MIN_NEEDED_INPUT > 1=0A= =A0=A0=A0=A0=A0=A0 && __builtin_expect (inptr + (MIN_NEEDED_INPUT - inlen) = > inend, 0))=0A= =A0=A0=A0=A0 {=0A= =A0=A0=A0=A0=A0=A0 *inptrp =3D inend;=0A= -#=A0 ifdef STORE_REST=0A= +# ifdef STORE_REST=0A= =A0=0A= =A0=A0=A0=A0=A0=A0 /* Building with -O3 GCC emits a `array subscript is abo= ve array=0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0 bounds' warning.=A0 GCC BZ #64739 has been open= ed for this.=A0 */=0A= @@ -347,14 +331,14 @@ SINGLE(LOOPFCT) (struct __gconv_step *step,=0A= =A0=A0=A0=A0=A0=A0 inend =3D &bytebuf[inlen];=0A= =A0=0A= =A0=A0=A0=A0=A0=A0 STORE_REST=0A= -#=A0 else=0A= +# else=0A= =A0=A0=A0=A0=A0=A0 /* We don't have enough input for another complete input= =0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0 character.=A0 */=0A= =A0=A0=A0=A0=A0=A0 size_t inlen_after =3D inlen + (inend - inptr);=0A= =A0=A0=A0=A0=A0=A0 assert (inlen_after <=3D sizeof (state->__value.__wchb))= ;=0A= =A0=A0=A0=A0=A0=A0 for (; inlen < inlen_after; inlen++)=0A= =A0=A0=A0=A0=A0=A0=A0=A0 state->__value.__wchb[inlen] =3D *inptr++;=0A= -#=A0 endif=0A= +# endif=0A= =A0=0A= =A0=A0=A0=A0=A0=A0 return __GCONV_INCOMPLETE_INPUT;=0A= =A0=A0=A0=A0 }=0A= @@ -406,11 +390,11 @@ SINGLE(LOOPFCT) (struct __gconv_step *step,=0A= =A0=A0=A0=A0=A0=A0 result =3D __GCONV_OK;=0A= =A0=0A= =A0=A0=A0=A0=A0=A0 /* Clear the state buffer.=A0 */=0A= -#=A0 ifdef CLEAR_STATE=0A= +# ifdef CLEAR_STATE=0A= =A0=A0=A0=A0=A0=A0 CLEAR_STATE;=0A= -#=A0 else=0A= +# else=0A= =A0=A0=A0=A0=A0=A0 state->__count &=3D ~7;=0A= -#=A0 endif=0A= +# endif=0A= =A0=A0=A0=A0 }=0A= =A0=A0 else if (result =3D=3D __GCONV_INCOMPLETE_INPUT)=0A= =A0=A0=A0=A0 {=0A= @@ -419,11 +403,11 @@ SINGLE(LOOPFCT) (struct __gconv_step *step,=0A= =A0=A0=A0=A0=A0=A0 assert (inend !=3D &bytebuf[MAX_NEEDED_INPUT]);=0A= =A0=0A= =A0=A0=A0=A0=A0=A0 *inptrp +=3D inend - bytebuf - (state->__count & 7);=0A= -#=A0 ifdef STORE_REST=0A= +# ifdef STORE_REST=0A= =A0=A0=A0=A0=A0=A0 inptrp =3D &inptr;=0A= =A0=0A= =A0=A0=A0=A0=A0=A0 STORE_REST=0A= -#=A0 else=0A= +# else=0A= =A0=A0=A0=A0=A0=A0 /* We don't have enough input for another complete input= =0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0 character.=A0 */=0A= =A0=A0=A0=A0=A0=A0 assert (inend - inptr > (state->__count & ~7));=0A= @@ -432,14 +416,13 @@ SINGLE(LOOPFCT) (struct __gconv_step *step,=0A= =A0=A0=A0=A0=A0=A0 for (inlen =3D 0; inlen < inend - inptr; inlen++)=0A= =A0=A0=A0=A0=A0=A0=A0=A0 state->__value.__wchb[inlen] =3D inptr[inlen];=0A= =A0=A0=A0=A0=A0=A0 inptr =3D inend;=0A= -#=A0 endif=0A= +# endif=0A= =A0=A0=A0=A0 }=0A= =A0=0A= =A0=A0 return result;=0A= =A0}=0A= -#=A0 undef SINGLE=0A= -#=A0 undef SINGLE2=0A= -# endif=0A= +# undef SINGLE=0A= +# undef SINGLE2=0A= =A0=0A= =A0=0A= =A0# ifdef ONEBYTE_BODY=0A= @@ -471,4 +454,3 @@ gconv_btowc (struct __gconv_step *step, unsigned char c= )=0A= =A0#undef LOOP_NEED_STATE=0A= =A0#undef LOOP_NEED_FLAGS=0A= =A0#undef LOOP_NEED_DATA=0A= -#undef unaligned=0A= =0A= OK=0A= =0A= diff --git a/iconv/skeleton.c b/iconv/skeleton.c=0A= index 9423d3fc5a..61cff234ac 100644=0A= --- a/iconv/skeleton.c=0A= +++ b/iconv/skeleton.c=0A= @@ -448,33 +448,6 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gco= nv_step_data *data,=0A= =A0=A0=A0=A0=A0=A0 size_t lirreversible =3D 0;=0A= =A0=A0=A0=A0=A0=A0 size_t *lirreversiblep =3D irreversible ? &lirreversible= : NULL;=0A= =A0=0A= -=A0=A0=A0=A0=A0 /* The following assumes that encodings, which have a vari= able length=0A= -=A0=A0=A0=A0=A0=A0=A0 what might unalign a buffer even though it is an ali= gned in the=0A= -=A0=A0=A0=A0=A0=A0=A0 beginning, either don't have the minimal number of b= ytes as a divisor=0A= -=A0=A0=A0=A0=A0=A0=A0 of the maximum length or have a minimum length of 1.= =A0 This is true=0A= -=A0=A0=A0=A0=A0=A0=A0 for all known and supported encodings.=0A= -=A0=A0=A0=A0=A0=A0=A0 We use && instead of || to combine the subexpression= for the FROM=0A= -=A0=A0=A0=A0=A0=A0=A0 encoding and for the TO encoding, because usually on= e of them is=0A= -=A0=A0=A0=A0=A0=A0=A0 INTERNAL, for which the subexpression evaluates to 1= , but INTERNAL=0A= -=A0=A0=A0=A0=A0=A0=A0 buffers are always aligned correctly.=A0 */=0A= -#define POSSIBLY_UNALIGNED \=0A= -=A0 (!_STRING_ARCH_unaligned=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= -=A0=A0 && (((FROM_LOOP_MIN_NEEDED_FROM !=3D 1=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= -=A0=A0=A0=A0=A0=A0=A0 && FROM_LOOP_MAX_NEEDED_FROM % FROM_LOOP_MIN_NEEDED_= FROM =3D=3D 0)=A0=A0=A0=A0=A0=A0=A0 \=0A= -=A0=A0=A0=A0=A0=A0 && (FROM_LOOP_MIN_NEEDED_TO !=3D 1=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0 \=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 && FROM_LOOP_MAX_NEEDED_TO % FROM_LOOP_MIN_= NEEDED_TO =3D=3D 0))=A0=A0=A0=A0=A0=A0=A0 \=0A= -=A0=A0=A0=A0=A0=A0 || ((TO_LOOP_MIN_NEEDED_FROM !=3D 1=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0 \=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 && TO_LOOP_MAX_NEEDED_FROM % TO_LOOP_MIN_NE= EDED_FROM =3D=3D 0)=A0=A0=A0=A0=A0=A0=A0=A0 \=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0 && (TO_LOOP_MIN_NEEDED_TO !=3D 1=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0 \=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 && TO_LOOP_MAX_NEEDED_TO % TO_LOOP= _MIN_NEEDED_TO =3D=3D 0))))=0A= -#if POSSIBLY_UNALIGNED=0A= -=A0=A0=A0=A0=A0 int unaligned;=0A= -# define GEN_unaligned(name) GEN_unaligned2 (name)=0A= -# define GEN_unaligned2(name) name##_unaligned=0A= -#else=0A= -# define unaligned 0=0A= -#endif=0A= -=0A= =A0#ifdef PREPARE_LOOP=0A= =A0=A0=A0=A0=A0=A0 PREPARE_LOOP=0A= =A0#endif=0A= @@ -514,18 +487,6 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gco= nv_step_data *data,=0A= =A0=A0=A0=A0=A0=A0=A0=A0 }=0A= =A0#endif=0A= =A0=0A= -#if POSSIBLY_UNALIGNED=0A= -=A0=A0=A0=A0=A0 unaligned =3D=0A= -=A0=A0=A0=A0=A0=A0 ((FROM_DIRECTION=0A= -=A0=A0=A0=A0=A0=A0=A0=A0 && ((uintptr_t) inptr % FROM_LOOP_MIN_NEEDED_FROM= !=3D 0=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 || ((data->__flags & __GCONV_IS_LAST)= =0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 && (uintptr_t) outbuf % F= ROM_LOOP_MIN_NEEDED_TO !=3D 0)))=0A= -=A0=A0=A0=A0=A0=A0=A0 || (!FROM_DIRECTION=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 && (((data->__flags & __GCONV_IS_LAST)= =0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 && (uintptr_t) outbuf % T= O_LOOP_MIN_NEEDED_TO !=3D 0)=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 || (uintptr_t) inptr % TO_LO= OP_MIN_NEEDED_FROM !=3D 0)));=0A= -#endif=0A= -=0A= =A0=A0=A0=A0=A0=A0 while (1)=0A= =A0=A0=A0=A0=A0=A0=A0=A0 {=0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* Remember the start value for this round.= =A0 */=0A= @@ -543,34 +504,14 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gc= onv_step_data *data,=0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 SAVE_RESET_STATE (1);=0A= =A0#endif=0A= =A0=0A= -=A0=A0=A0=A0=A0=A0=A0=A0 if (__glibc_likely (!unaligned))=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 {=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 if (FROM_DIRECTION)=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* Run the conversion loop.=A0 = */=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 status =3D FROM_LOOP (step, dat= a, inptrp, inend, &outbuf, outend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 lirreversiblep EXTRA_LOOP_ARGS);=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 else=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* Run the conversion loop.=A0 = */=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 status =3D TO_LOOP (step, data,= inptrp, inend, &outbuf, outend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0 lirreversiblep EXTRA_LOOP_ARGS);=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 }=0A= -#if POSSIBLY_UNALIGNED=0A= +=A0=A0=A0=A0=A0=A0=A0=A0 if (FROM_DIRECTION)=0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* Run the conversion loop.=A0 */=0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 status =3D FROM_LOOP (step, data, inptrp, i= nend, &outbuf, outend,=0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0 lirreversiblep EXTRA_LOOP_ARGS);=0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 else=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 {=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 if (FROM_DIRECTION)=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* Run the conversion loop.=A0 = */=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 status =3D GEN_unaligned (FROM_= LOOP) (step, data, inptrp, inend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0 &outbuf, outend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0 lirreversiblep=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0 EXTRA_LOOP_ARGS);=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 else=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* Run the conversion loop.=A0 = */=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 status =3D GEN_unaligned (TO_LO= OP) (step, data, inptrp, inend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 &o= utbuf, outend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 li= rreversiblep=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 EX= TRA_LOOP_ARGS);=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 }=0A= -#endif=0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* Run the conversion loop.=A0 */=0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 status =3D TO_LOOP (step, data, inptrp, ine= nd, &outbuf, outend,=0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0 lirreversiblep EXTRA_LOOP_ARGS);=0A= =A0=0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* If we were called as part of an error han= dling module we=0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 don't do anything else here.=A0 */= =0A= @@ -635,41 +576,18 @@ FUNCTION_NAME (struct __gconv_step *step, struct __gc= onv_step_data *data,=0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 SAVE_RES= ET_STATE (0);=0A= =A0#endif=0A= =A0=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 if (__glibc_l= ikely (!unaligned))=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 {=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 i= f (FROM_DIRECTION)=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0 /* Run the conversion loop.=A0 */=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0 nstatus =3D FROM_LOOP (step, data, inptrp, inend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 &outb= uf, outerr,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 lirre= versiblep=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 EXTRA= _LOOP_ARGS);=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 e= lse=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0 /* Run the conversion loop.=A0 */=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0 nstatus =3D TO_LOOP (step, data, inptrp, inend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 &outbuf, ou= terr,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 lirreversib= lep=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 EXTRA_LOOP_= ARGS);=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 }=0A= -#if POSSIBLY_UNALIGNED=0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 if (FROM_DIRE= CTION)=0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* Run = the conversion loop.=A0 */=0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 nstatus= =3D FROM_LOOP (step, data, inptrp, inend,=0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 &outbuf, outerr,= =0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 lirreversiblep=0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 EXTRA_LOOP_ARGS);= =0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 else=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 {=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 i= f (FROM_DIRECTION)=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0 /* Run the conversion loop.=A0 */=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0 nstatus =3D GEN_unaligned (FROM_LOOP) (step, data,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 inptrp, inend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 &outbuf,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 outerr,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 lirreversiblep=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 EXTRA_LOOP_ARGS);=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 e= lse=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0 /* Run the conversion loop.=A0 */=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0 nstatus =3D GEN_unaligned (TO_LOOP) (step, data,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 inptrp, inend,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 &outbuf, outerr,=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 lirreversiblep=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 EXTRA_LOOP_ARGS);=0A= -=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 }=0A= -#endif=0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* Run = the conversion loop.=A0 */=0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 nstatus= =3D TO_LOOP (step, data, inptrp, inend,=0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 &outbuf, outerr,=0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 lirreversiblep=0A= +=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 EXTRA_LOOP_ARGS);=0A= =A0=0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 /* We mu= st run out of output buffer space in this=0A= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0= rerun.=A0 */=0A= =0A= OK=0A=