From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 81C21411D3 for ; Sun, 10 Sep 2023 10:52:57 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6E11868C8D8; Sun, 10 Sep 2023 13:52:55 +0300 (EEST) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (mail-he1eur01olkn2064.outbound.protection.outlook.com [40.92.65.64]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DA03968C8B9 for ; Sun, 10 Sep 2023 13:52:48 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UP0xFkO6LDl4E6g/Hp+ttvMP9nCvYJ3bFeN6y5dLSXEOyzuFyTIglLu+WxKKSEJQJSZFQoQpZoGX6DDJ1UrEzJtGkks6zNXEfP5aEtTAP0DfaGn9jqXWaT8ieYytexDufyl6wkQlawNmf7u0xX9p+uE7VrbtZHhdLCEWzLWlSZXtrxcXa1GeZIQQ0W1hTCYsHHkwkMcWBNy9oS8/L3NGzv464ZxbDkc6BxxO6bvIQjGIFXV8J7f9biRdmSI4tDwp1qI46a8RbWI7jvjKqwT6iqjl8uQqdS6tepwD/X91Qq5R4FbG0uR3X3pPKQTJeqHRxGUVsO42K4JSw22BDjFWFA== 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=pqlDXWrsqMylcP9hyQprHXoWEuRQyu3nWQu7RVgUYog=; b=Hojn2s3IuWX75TtO/PKsNjvK8l3qu1y3BAdhA5Gdw0ahrFdKOvpqUQ5bys8wZ8wqnZm+Te3vRdr6XzKPmkElnzRiIrsgmN3qLCdntGHUpRzTiy9we0XwSetvKqOe5H1IxITTeHIKJ3fjrG25V5lI5FnY/2EP9lFKGKiLucUsSwd/Vo14MD4mEbiowlu8AxZthzk9jOMZFXQTzdIMssKGqhI4Wt3gxFnmY38j6BPvNlbKNETcZe0cAgO2DJV6bHZA0wa76kqoDh1A6fUqTm7M4oMCUTVRY5mkLeWAulx6/KDc7xibWVfoLwVwEZh9gVHDzc8Cp6UitYXwNg+iFQnUKQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pqlDXWrsqMylcP9hyQprHXoWEuRQyu3nWQu7RVgUYog=; b=TiGU3O9J+gJfN/om7IoOJ3gLOGxFyyeueoxAso4UN4+Rtp0oRhozwZMOMPoVvtpnOrTv21LiLBz+jVaqr+92aA3pXGuTx55vUNSADLpmlYW17HExj7qWqI9dtr+KX/SDn/m2nXxKcRkej7pGmmBn28g+5obaJWJosSkrpNWmyVU+Ejq74kOI/qf4isPDS97xHT9tFZd1XiY3MNheW8lR+xrf0huD4xqMcZrCbrStHvImdRNYaK+ytSuaI+YXh7F28C5kB1x3/QSdcN0Z+AWkXrF9aHmv2OTa0Asr0u7ASl+i4nO8Lt+pVH8RRmLcf150nr3CRcTjxqn8zivWZDY4Qg== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AS8P250MB0203.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:37a::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6768.34; Sun, 10 Sep 2023 10:19:09 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa%3]) with mapi id 15.20.6768.029; Sun, 10 Sep 2023 10:19:09 +0000 Message-ID: Date: Sun, 10 Sep 2023 12:20:28 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: From: Andreas Rheinhardt In-Reply-To: X-TMN: [rl/oYe4+LU0nsGGps7S92YJpvu7YNdNk] X-ClientProxiedBy: FR3P281CA0016.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:1d::21) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AS8P250MB0203:EE_ X-MS-Office365-Filtering-Correlation-Id: 31a647b4-1abc-471f-d259-08dbb1e75ed6 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hXP7ep1DqcO9nb0U2bw5o/Zxa7eOYGiVLd1fOL92z2WZCslqSr+LlO7GGwlgEd7s0rQHtTT3M9td5px2CcW1bcR/sjPhCJcqySmy2ver1qTxE2xnAnsT/WAB05Ra+FEWfooyKggqOJjPY9J5uVoMcU8BHtDwJqwkMxFKyauMyUMIUy3JrOYdAz2MVchlOMt8nhmRv/22scEz33n6UvBBD6DDtObRid4rhRTAjbGTlaGoy3523tkK44NsuMu6OtHtXf/A+xiI8qOsK/Km5XPDbHk2y6msEZhRJ+Y1/CXrIoy71AaENOyBiQgn9e+l7D2+4lBFOv8vKIgYXQjpqjoeNCns5afv3glSDGbcdeWl3bn7R2/QiGOUOkvnE5UJz+luHK3Ksv3ZYgQJZp5Yjt8TBJyoHAtyltZnvJGjPdcPQ0/IE4pqqS+cbyR2o5w3z3YQaB4Z7gjMXgafRPbFoDtSqEF1FHtK6kBRsVXpjk/VchoTd53zElYk9dWzFSwyU/wiNC242axmWd2Rjuz4ghWH2a/e3J6WuBH2fZxz3eNdD0nkhvLZUMDt/tV8tNcbyxUA X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZWlmRDB5TTdqUTFnd0VDdjlkQXFzSG5EZGdLcEkrTEkzOGMzclcvT1pwekpV?= =?utf-8?B?WHI0UnZzQ2VpUDMxS0JRSWNuaW9TUzRTTXU3cWtzUE1KVDFVaEZQNXhZcVNQ?= =?utf-8?B?SVN0L1d5VjlDSnZtQ3VSUmtDSCt5SHN6dUd4bGdvbkMweDJGTDBtMkZkM1l2?= =?utf-8?B?MEJsMUw4YVB2RHU4ODhPQllRSXNsaWpUMmluQTl5Ykd6OCtLTU0zd2VvUGpj?= =?utf-8?B?RXJPYmsyRHRJS0szSnd2bFpGZWNpVWRlYkpXRUlhTnN4MEN4SGdhaWUxQmps?= =?utf-8?B?ZDI1NFZ0RlN3eUU0UU13NjJjMzlMMUVXVGp2TUxiQVY3M3FjVFJhY0w3K0Jl?= =?utf-8?B?TnJUZFduVGFVMVNBeEdxZ3hpUnU3c3NJWGlZeVhwaDFrd2ZrTmZXVXJjL012?= =?utf-8?B?NFhFelM2bnY2Wm10SEJuSTREeFVXVUo5VkxTREtrb0ZQWWlqTDlvODNHOEMv?= =?utf-8?B?OUN1OHdKQ3BDTWtqK2NFUHBpNnNJaHF1blM0QUx3SVFiMlFBd1dTUUFmU2I1?= =?utf-8?B?ZnJxeEkzUTBoREozSldJd21hWVAwYWxlN3ExY1llR08xRVV5bm5sNFU5WVBV?= =?utf-8?B?ZEZaZDlTRkN5MnlkS3laSlo4ZTArSXpKNnJBblB4K0FORExGWkdkZzE0RWVM?= =?utf-8?B?T3pmYjNSVjgwMkV1VENINklnbmdwL1lLMzN0enRqOWdwSkVZWjc3UllPS2lS?= =?utf-8?B?NTF0d09POEljbEZCY0dTY0RncFd5VFNTb2JCRzg1aUpvaFJlL2FmTVpSM0tF?= =?utf-8?B?YnFpc20wb2xxd2R3T0FETkdISE5zRmRoMkFwUXVhZG9oaENOd1RjSENFMHp2?= =?utf-8?B?Ni9oYi9VKzBTVlZEZ3B5UE5BQ0k5NU9ETk1IVFFvdmxVY3ZiaVpXNXNuWmZa?= =?utf-8?B?TWQ2S3Y2Sy9DZDV3ZHc0S1V5NVRtc2FOSzYyb2pJSWNlM1h6OVJ4cVlPR2pp?= =?utf-8?B?a2U1K2c4VnJYZnJkbUFxdmRIYnltYmlFMysvaEFodVY3ckJrdG1pcWlveWg0?= =?utf-8?B?SVpGVS8rOXl3K09UOUlqNEZGd0VQVmNHRXNGR0FyM2RnSGJFeGNtRmw2M0FB?= =?utf-8?B?empERlMyR0pCNjRwR3ZUdGYwalZ4ZXFqaUVuRHVhVnNRWFNrL0JGTzFFc2NR?= =?utf-8?B?VnIrY3dEcCtyYUlueWc2MWsrTjFkNmYzanBNbXVWOVNXaGo1Y1NIZ21EcGlU?= =?utf-8?B?cDFMdTREa2hRZmdiemdLZGJqVm9YNHhpc0J4UWE4NTVDYk9leU5Qcml1QWE5?= =?utf-8?B?SzIzTFpzYXlWaWZKZTV6c3Q0QWxQbFlxVlE0YjlGVlRPL2JaZHZoUkxNS1Nt?= =?utf-8?B?SXNjcjVLelloTkFaTmxQR1I0b2FLSkNmNlB4MC9iTUxJNS9MQ1BzQnAwT0RG?= =?utf-8?B?cFgwZnVqNkt5Q0NaUEpDMmhkdmgwdE1EeFlUS2diVDUzakd2VFdZNGtZVzJq?= =?utf-8?B?MEx0MFYxM0tRWHZKdnNIMEtoSHFmSVdCRzhONS95eEFuUCtyYzFvNlJlYWlj?= =?utf-8?B?RHZBU2h6K29OeEk5VzhQdTdpSUhIbHRmTVpmYUFEbTkrK0c2QVBNY2YvZEFF?= =?utf-8?B?NC9NcXBLMXdxbzRuNmhhUm51S3Rwbyt3SnVtYjVuczZKOWwxVmpudUNBcnkv?= =?utf-8?B?dkh6eHBicENDNFdxN3RSK1ZmOGVUM3VWczlRaW5XUmhCTTExSkU5T3pJdmZ1?= =?utf-8?Q?auw8IZ+hbmB2oJ1mYhlG?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 31a647b4-1abc-471f-d259-08dbb1e75ed6 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2023 10:19:09.1929 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8P250MB0203 Subject: Re: [FFmpeg-devel] [PATCH] avcodec/get_bits: Avoid reading multiple times in get_bits_long X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Andreas Rheinhardt: > Due to non-byte-alignment a read of 32 bits guarantees only > 25 usable bits; therefore get_bits_long() (which is used to > potentially read more than 25 bits) performs two reads in case > it needs to read more than 25 bits and combines the result. > > Yet this is not necessary: One can just read 64 bits at a time > to get 32 usable bits (57 would be possible). This commit does so. > > This reduced the size of .text by 30144B for GCC 11.4 and 5648B > for Clang 14 (both with -O3). > > (get_bits_long() is a building block of show_bits_long() > and get_ue_golomb_long(), so this patch affects these, too.) > > Signed-off-by: Andreas Rheinhardt > --- > libavcodec/get_bits.h | 38 +++++++++++++++++++++++++++++--------- > 1 file changed, 29 insertions(+), 9 deletions(-) > > diff --git a/libavcodec/get_bits.h b/libavcodec/get_bits.h > index 0594e104bb..f43bcae91e 100644 > --- a/libavcodec/get_bits.h > +++ b/libavcodec/get_bits.h > @@ -187,21 +187,28 @@ static inline unsigned int show_bits(GetBitContext *s, int n); > > #define CLOSE_READER(name, gb) (gb)->index = name ## _index > > +#define UPDATE_CACHE_BE_EXT(name, gb, bits, dst_bits) name ## _cache = \ > + AV_RB ## bits((gb)->buffer + (name ## _index >> 3)) << (name ## _index & 7) >> (bits - dst_bits) > + > +#define UPDATE_CACHE_LE_EXT(name, gb, bits, dst_bits) name ## _cache = \ > + (uint ## dst_bits ## _t)(AV_RL ## bits((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7)) > + > +/* Using these two macros ensures that 32 bits are available. */ > +# define UPDATE_CACHE_LE_32(name, gb) UPDATE_CACHE_LE_EXT(name, (gb), 64, 32) > + > +# define UPDATE_CACHE_BE_32(name, gb) UPDATE_CACHE_BE_EXT(name, (gb), 64, 32) > + > # ifdef LONG_BITSTREAM_READER > > -# define UPDATE_CACHE_LE(name, gb) name ## _cache = \ > - AV_RL64((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7) > +# define UPDATE_CACHE_LE(name, gb) UPDATE_CACHE_LE_32(name, (gb)) > > -# define UPDATE_CACHE_BE(name, gb) name ## _cache = \ > - AV_RB64((gb)->buffer + (name ## _index >> 3)) >> (32 - (name ## _index & 7)) > +# define UPDATE_CACHE_BE(name, gb) UPDATE_CACHE_BE_32(name, (gb)) > > #else > > -# define UPDATE_CACHE_LE(name, gb) name ## _cache = \ > - AV_RL32((gb)->buffer + (name ## _index >> 3)) >> (name ## _index & 7) > +# define UPDATE_CACHE_LE(name, gb) UPDATE_CACHE_LE_EXT(name, (gb), 32, 32) > > -# define UPDATE_CACHE_BE(name, gb) name ## _cache = \ > - AV_RB32((gb)->buffer + (name ## _index >> 3)) << (name ## _index & 7) > +# define UPDATE_CACHE_BE(name, gb) UPDATE_CACHE_BE_EXT(name, (gb), 32, 32) > > #endif > > @@ -209,12 +216,14 @@ static inline unsigned int show_bits(GetBitContext *s, int n); > #ifdef BITSTREAM_READER_LE > > # define UPDATE_CACHE(name, gb) UPDATE_CACHE_LE(name, gb) > +# define UPDATE_CACHE_32(name, gb) UPDATE_CACHE_LE_32(name, (gb)) > > # define SKIP_CACHE(name, gb, num) name ## _cache >>= (num) > > #else > > # define UPDATE_CACHE(name, gb) UPDATE_CACHE_BE(name, gb) > +# define UPDATE_CACHE_32(name, gb) UPDATE_CACHE_BE_32(name, (gb)) > > # define SKIP_CACHE(name, gb, num) name ## _cache <<= (num) > > @@ -414,15 +423,26 @@ static inline unsigned int get_bits_long(GetBitContext *s, int n) > av_assert2(n>=0 && n<=32); > if (!n) { > return 0; > - } else if (n <= MIN_CACHE_BITS) { > + } else if ((!HAVE_FAST_64BIT || av_builtin_constant_p(n <= MIN_CACHE_BITS)) > + && n <= MIN_CACHE_BITS) { > return get_bits(s, n); > } else { > +#if HAVE_FAST_64BIT > + unsigned tmp; > + OPEN_READER(re, s); > + UPDATE_CACHE_32(re, s); > + tmp = SHOW_UBITS(re, s, n); > + LAST_SKIP_BITS(re, s, n); > + CLOSE_READER(re, s); > + return tmp; > +#else > #ifdef BITSTREAM_READER_LE > unsigned ret = get_bits(s, 16); > return ret | (get_bits(s, n - 16) << 16); > #else > unsigned ret = get_bits(s, 16) << (n - 16); > return ret | get_bits(s, n - 16); > +#endif > #endif > } > } Will apply this tonight unless there are objections. - Andreas _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".