From patchwork Thu Jun 9 23:55:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 36129 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:6914:b0:82:6b11:2509 with SMTP id q20csp655837pzj; Thu, 9 Jun 2022 17:01:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxdIXm5gKq19hYnWeNY9a2mf3Q2H5xaFm828SJ1HRgDbZ0sdsoZfkbTXYZXO6d6Gwn8OgNV X-Received: by 2002:a17:907:2d8d:b0:711:d1bd:d738 with SMTP id gt13-20020a1709072d8d00b00711d1bdd738mr20693660ejc.658.1654819264332; Thu, 09 Jun 2022 17:01:04 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id nd22-20020a170907629600b006e81dd29c00si19329895ejc.569.2022.06.09.17.01.03; Thu, 09 Jun 2022 17:01:04 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=uouQvwkK; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 4254468B8F6; Fri, 10 Jun 2022 02:57:13 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-oln040092073059.outbound.protection.outlook.com [40.92.73.59]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 76FE668B912 for ; Fri, 10 Jun 2022 02:57:11 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cXrjcevvafRqIzw0c3ftL87Zyjh58Jcwrd69bVJ2ASvAE/pvT2ck/CbdZmWa4hE1KsZSmfqiaofM0wxNhSIui/1VAAxpNOF8y4cljZ6ZYntryoEswiGX1RKn0X/J+stz0vQYvUpmAxfzW7DjOCW9pzwI02CRmtsvq2rvAgdlZ3JRWFsMy+2qvz74dU5MZXlo7dAUV388rt49xRXRpDPe6DY68gCoJ9o1Ukhe0isGEBzIsPSolcR8Idcx1gdUvMRNFSUoZgqtQN7emqE2MGJz2knSgpRa6P16ZO/stsigb0nr0bRYxRk3PYYpYyMMrQA8jMQ/flNcYS7QDjm9pxRL4w== 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=2n2GXm9dXbSoaHHNYHo9ii5bfP9DoycGmopXorJH6BI=; b=nAFugs0G1BWOGnDRKNdge1Gq0rEpThuFasjAPVQyGeOtx7WjYXm2JndIKXGMr1EC6KG53TfrklNiJ0pliX+YJ6IkJ2FkddqWbsbUnyDvoWGPfFoieOmK7rjZuFzVvAaf+a66igWxLJrk7DE4diGGybjwUK6SDG5t7qVtydCG7nU5aF/+hRBIow/NZgj7UdLt9zyKioDAA5HuzNPhutgrYK4YESsZ8scl3ADpIDQBXOaLYtA3kkeRc4EBiXegpXGJz77QilBS6YFBkcN8LedEJs9NKoZxLLITTqdvp59cbPf4SP1D0XdyBD36Wy/syn5KWBogNiNQNE3ci8imBg+xaQ== 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=2n2GXm9dXbSoaHHNYHo9ii5bfP9DoycGmopXorJH6BI=; b=uouQvwkKPvyj8fQcOv8P7n1SZQ8EzRiJaYTy0PPB89X8Up4uHMuLIlHdPM9HdYMDQc1Jlx/qNR5K2VcC6vM2MtY99YdoQcr4is02mEdZwVC9MA2+qszG/Qh7EBJfz7aT6hETGwrPn9zKm3ZRoT/TLNPVyMcX7nxyNZUVkKd0gyAZjf6MGZryVpeYLNTGSYKLta8HT5yfLu+AwHl38pTdiq/lyqLjZ6wrTy01z1QepUkewy8Hr0E2PVdy9b11fM2UnJY+RQXkMAo+MF8/0p2XK6p7vRkPUJa090dgt3ZXQoYMPbdXXr5qThGASrsLFSGqaS5Zw2f/246uvgMoGUGa3A== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by DB6PR01MB3862.eurprd01.prod.exchangelabs.com (2603:10a6:6:48::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5314.15; Thu, 9 Jun 2022 23:57:09 +0000 Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c]) by DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c%10]) with mapi id 15.20.5332.013; Thu, 9 Jun 2022 23:57:09 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 10 Jun 2022 01:55:13 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [ZWmy/01KC9mgzJ8onQY3gy6Vhnr53tFi] X-ClientProxiedBy: AM5PR04CA0005.eurprd04.prod.outlook.com (2603:10a6:206:1::18) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: <20220609235523.458689-31-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5aa33db3-8420-4427-ecab-08da4a73c3fc X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiTijo6adWu98SHbtEySq1lKMY/u9/dCHeuGrjcp4sPm30bBzK6iL9NRH3pv2T48t5UtlSMmn3RS56xP/ZLBwOAOQ9na7FHO5ZiOMSwIlLs/8c9wWgpQyDz2MeEX/8160ZRqHU6ynH0dvMIOlf+cmciA2u0hF70XTGWnyaBancRA/rlMrdwenFzOcfniwsXyeLUec21ialpBT/bZ+nLTxCsQ2q4jFVFpMJ5+k9hTIIFl7NtOnPqig5mg8Sycrh4JoAJ6iUhPVTpoHzpFP28tZCqTzMP0dXD+79iqZ1BANVn2uaeq2vTnPvYN94SeF3nbRbcUKvqG9qGR0xaRzgnH4rwnB97R37W0mioHM61bnPFkGkJsBLOn0XQdfJx5gJN8i+8rOc4edez9fTjkSEK1EsAQuzEutNTo6YeWyzXshDAopS4GffrGuKftKG8cpFXWe8c7bduhYcGG7cBqhK/xenBRk3FzXIDFvtA19jPXzVnCUE2Zf91/R53uEjUe/6/ZI9UINERuIrMbyCapMM7qT19akbNxsdn1M4+2BDL3DgGYQ2tIdPdDw+N32aw1QqbXfe3T33Ho7YWWNH2tgVUkJH4D2TSIE9nwtizRmRYT61/YNrdNGT2O6VV2LHGg5E8+rB9BNnkTHsDV5NmrsEE/oNwd5ofu8qsadhy/yWogyC83qeYJCxv84Gt2wqMczMO6lz+6vUEE9Qb9sTgb8O1yjF4Hy4xzkiSQwP7IKLPmkhKjj2cHoi3+SdTnpJb2xqobPvs= X-MS-TrafficTypeDiagnostic: DB6PR01MB3862:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hSQMsN+g3+X+cMhLkyM2gc5h6ZZBaBBp4BgkElpndGwPCaGHPP/Oeh0nd8TM4dbUiZntq4zlrlUmZM5eD+RThb2vRNL5ZzK/jJh7OvhtvDCCZbSAQbOO5shIbPoNw2p54XoLQGk5tVr7p3GYCRyQWandwo1aMaferZdriO0aXFna7KKK2XFap7Q0vDciuYuKcJx9ohRv+MhEvAUT+0P/6V5le95Jf7IW+VK3ufpzys3AI5Z0jU7YXVPBNLgWgI72BJ7Jf7tJ7F+cYMseV1BplsKUE0srOZC9+M9L3LmSSv7dRz133wyDVA/KrNZtFf7lzfsR/ICM5GSCoA/9jIQ7pceoe8eEDssrQBQ7LOdGcu0Dzj6hlORbEGLQpQqBNk7lqlJzuePyN3KCix/mD/gOxkta40crJu8NasIxyftpSaklDToKy6TiyMawFuTOte79c+a2MHGv3zltUnSivRJocXWoErjunCsl+O5qqcxH+AsVI3TLx9cPArPXyd5B7BEY5pSbsZtWMkkxvn98KjjisXk01z9CMJzT39YGb2iF+eSYTwWKKbnR9+mLyWvKPVuP+zgul0uAskATvTw26CBWig== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: jy2W4R78y8xsfs0vaM5hib6SMFwBlsoZFbsa7IFr/2C5dlxhUZxyeAEa7YnsTuP+0STEM1YKh1owhCePx9SVb7KT1chxxcTrU8fsJCbr3tzS2adoRhqChOcaudvajkZ79Pln0eV9AVG9sRj6kUdDXwTkWifkPlUY8BBGFGvLevLmnI/8zE6/LGf9LfqrOSr8nP0+rO8R7YIIg8xKlLCWrPvR4Ym/a3QtV98guFs52R9W/7+3qe9CTARzNT4uJeQCvTUBCTZe7G6msC6qC6qJc+Nzv7NvUNx2PxzfRfuRVNz2mY1bUcFMP/0k+pOB9Cm24e7AqwDl9zSTD/JwW54eWWF4EX/j7hirjPKFSu5XX3qG/1SchaSq7SZNk3YpQ/5zibuw9M/1wpplTpyCdKEvq68GSgcVk85RFeZz5NXDMabTx9HuIxIvI7VP8MYld/0qbLz7riqfRotc8ADofsT7EpxY5jKRN8gkx2roUvMEcXwhQheE/Y8YCYoumgPWXo1l8m7hfkju0+qVG2NUIMZ9asNj0UQOS0rsii5/bH0LghMrPOArza15K7duihlwJlfaeLFJ+SOFHwimFk8+80QJke+YWH2sDQyK9BIU9urShX6CFvh2KoM3PPmuhFDLBh+Dj/7F9RxgkCYbxlcKXM+dclKAXHESQFF9fUj5/77jodfSup8EybBm+N3ti/wMYX8Idrn2h6N4aKLL6BGsL59vayjSav6HQFUE2ocsCmi193mBtPOL+fhovSUcwxQZ1ZAIT1FkIg54NWebnhxLO30NbdzVyHwRhbvawYNfd0cI+wgck2wQz9PQfOpOuAOCgYI4YkBgRpekyB67AaRb3yUja5JnsTOic86WKtljIu311PxTbT1tZPmu/p1X8WRjoXPp+9z5UBPXmzAGxoC3jBIv8zj4xMHegCPhUERaLfpSRnqp0uE+mPAmSVcb8lbVdasw4RKv/AsdK+JOekxzaCjRN+32LxxeiaSKd051suKr9JHsMZR/WRR09CsOduejO2jZ96jNRLcYZEkCCz0d34l10qgsw7S7cG1dn77cz5hqF3/XPy6PgSndRJAeuac2P/yREVEqk9VXRODl7zFxWICWp/9b3cuEd6oGH/qEEiEOIJAX7d2w1h4Ol4AYG2BMm1+5SwK1W3REj2kaq/z2H9mxRJRhKAP86PHfJTbmAA8pDs1gIqrdFuCGCnNhFZ8ACzC2PLcWqxTybW0rW6vwXGLsk3CE0U0ds3/7hsisTFX3R5zVXNIWAU37X5i5taPkt68ghK6Q/V8/ET/CigyasymwG3QbSIn8IGz2cJ9vHLdkzUwB0cVx1cFYERTQoFzFDrL5Feph47JFZRTKmI/i+kAqnN6W4YV7XfsXi8dLszYb24eH18v1ZslA4lfYIo7KteyGKYb/ySCLaWyKfhDxA7wnIlkE2QVYax2tTHTa75R3sOwWWHIy7EQtegtCPATj9vor62mbl7eGQJsUE8bFZjAlGA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5aa33db3-8420-4427-ecab-08da4a73c3fc X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jun 2022 23:57:09.9142 (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: DB6PR01MB3862 Subject: [FFmpeg-devel] [PATCH 31/41] avcodec/x86/hpeldsp_init: Disable overridden functions on x64 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 5P5zCPxBlpOY x64 always has MMX, MMXEXT, SSE and SSE2 and this means that some functions for MMX, MMXEXT, SSE and 3dnow are always overridden by other functions (unless one e.g. explicitly disables SSE2). This commit therefore disables the 3dnow implementation (which is overridden by the MMXEXT specific implementation) as well as some MMX functions at compile-time for x64. Signed-off-by: Andreas Rheinhardt --- libavcodec/x86/fpel.asm | 2 ++ libavcodec/x86/hpeldsp.asm | 22 +++++++++++++++++++ libavcodec/x86/hpeldsp_init.c | 40 +++++++++++++++++++++++++---------- libavcodec/x86/rnd_template.c | 2 ++ 4 files changed, 55 insertions(+), 11 deletions(-) diff --git a/libavcodec/x86/fpel.asm b/libavcodec/x86/fpel.asm index d38a1b1035..8c810265c3 100644 --- a/libavcodec/x86/fpel.asm +++ b/libavcodec/x86/fpel.asm @@ -91,7 +91,9 @@ cglobal %1_pixels%2, 4,5,4 INIT_MMX mmx OP_PIXELS put, 4 OP_PIXELS put, 8 +%if ARCH_X86_32 OP_PIXELS avg, 8 +%endif OP_PIXELS put, 16 OP_PIXELS avg, 16 diff --git a/libavcodec/x86/hpeldsp.asm b/libavcodec/x86/hpeldsp.asm index ce5d7a4e28..97f9f06539 100644 --- a/libavcodec/x86/hpeldsp.asm +++ b/libavcodec/x86/hpeldsp.asm @@ -83,8 +83,10 @@ cglobal put_pixels8_x2, 4,5 INIT_MMX mmxext PUT_PIXELS8_X2 +%if ARCH_X86_32 INIT_MMX 3dnow PUT_PIXELS8_X2 +%endif ; void ff_put_pixels16_x2(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h) @@ -127,8 +129,10 @@ cglobal put_pixels16_x2, 4,5 INIT_MMX mmxext PUT_PIXELS_16 +%if ARCH_X86_32 INIT_MMX 3dnow PUT_PIXELS_16 +%endif ; The 8_X2 macro can easily be used here INIT_XMM sse2 PUT_PIXELS8_X2 @@ -171,8 +175,10 @@ cglobal put_no_rnd_pixels8_x2, 4,5 INIT_MMX mmxext PUT_NO_RND_PIXELS8_X2 +%if ARCH_X86_32 INIT_MMX 3dnow PUT_NO_RND_PIXELS8_X2 +%endif ; void ff_put_pixels8_y2(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h) @@ -209,8 +215,10 @@ cglobal put_pixels8_y2, 4,5 INIT_MMX mmxext PUT_PIXELS8_Y2 +%if ARCH_X86_32 INIT_MMX 3dnow PUT_PIXELS8_Y2 +%endif ; actually, put_pixels16_y2_sse2 INIT_XMM sse2 PUT_PIXELS8_Y2 @@ -249,8 +257,10 @@ cglobal put_no_rnd_pixels8_y2, 4,5 INIT_MMX mmxext PUT_NO_RND_PIXELS8_Y2 +%if ARCH_X86_32 INIT_MMX 3dnow PUT_NO_RND_PIXELS8_Y2 +%endif ; void ff_avg_pixels8(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h) @@ -279,8 +289,10 @@ cglobal avg_pixels8, 4,5 REP_RET %endmacro +%if ARCH_X86_32 INIT_MMX 3dnow AVG_PIXELS8 +%endif ; void ff_avg_pixels8_x2(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h) @@ -335,12 +347,16 @@ cglobal avg_pixels8_x2, 4,5 REP_RET %endmacro +%if ARCH_X86_32 INIT_MMX mmx AVG_PIXELS8_X2 +%endif INIT_MMX mmxext AVG_PIXELS8_X2 +%if ARCH_X86_32 INIT_MMX 3dnow AVG_PIXELS8_X2 +%endif ; actually avg_pixels16_x2 INIT_XMM sse2 AVG_PIXELS8_X2 @@ -384,8 +400,10 @@ cglobal avg_pixels8_y2, 4,5 INIT_MMX mmxext AVG_PIXELS8_Y2 +%if ARCH_X86_32 INIT_MMX 3dnow AVG_PIXELS8_Y2 +%endif ; actually avg_pixels16_y2 INIT_XMM sse2 AVG_PIXELS8_Y2 @@ -433,8 +451,10 @@ cglobal avg_approx_pixels8_xy2, 4,5 INIT_MMX mmxext AVG_APPROX_PIXELS8_XY2 +%if ARCH_X86_32 INIT_MMX 3dnow AVG_APPROX_PIXELS8_XY2 +%endif ; void ff_avg_pixels16_xy2(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h) @@ -517,8 +537,10 @@ cglobal %1_pixels8_xy2, 4,5 INIT_MMX mmxext SET_PIXELS_XY2 avg +%if ARCH_X86_32 INIT_MMX 3dnow SET_PIXELS_XY2 avg +%endif INIT_XMM sse2 SET_PIXELS_XY2 put SET_PIXELS_XY2 avg diff --git a/libavcodec/x86/hpeldsp_init.c b/libavcodec/x86/hpeldsp_init.c index 6336587281..06ba5390d7 100644 --- a/libavcodec/x86/hpeldsp_init.c +++ b/libavcodec/x86/hpeldsp_init.c @@ -131,19 +131,25 @@ CALL_2X_PIXELS(put_no_rnd_pixels16_xy2_mmx, put_no_rnd_pixels8_xy2_mmx, 8) #undef DEF #define DEF(x, y) ff_ ## x ## _ ## y ## _mmx #define STATIC +#if ARCH_X86_64 +#define NO_AVG +#endif #include "rnd_template.c" +#undef NO_AVG #undef DEF #undef SET_RND #undef PAVGBP #undef PAVGB #if HAVE_MMX +#if ARCH_X86_32 CALL_2X_PIXELS(avg_pixels16_y2_mmx, avg_pixels8_y2_mmx, 8) CALL_2X_PIXELS(put_pixels16_y2_mmx, put_pixels8_y2_mmx, 8) CALL_2X_PIXELS_EXPORT(ff_avg_pixels16_xy2_mmx, ff_avg_pixels8_xy2_mmx, 8) +#endif CALL_2X_PIXELS_EXPORT(ff_put_pixels16_xy2_mmx, ff_put_pixels8_xy2_mmx, 8) #endif @@ -162,38 +168,49 @@ CALL_2X_PIXELS_EXPORT(ff_put_pixels16_xy2_mmx, ff_put_pixels8_xy2_mmx, 8) CALL_2X_PIXELS(avg_pixels16_xy2 ## CPUEXT, ff_avg_pixels8_xy2 ## CPUEXT, 8) \ CALL_2X_PIXELS(avg_approx_pixels16_xy2## CPUEXT, ff_avg_approx_pixels8_xy2## CPUEXT, 8) +#if ARCH_X86_32 HPELDSP_AVG_PIXELS16(_3dnow) +#endif HPELDSP_AVG_PIXELS16(_mmxext) #endif /* HAVE_X86ASM */ #define SET_HPEL_FUNCS_EXT(PFX, IDX, SIZE, CPU) \ if (HAVE_MMX_EXTERNAL) \ - c->PFX ## _pixels_tab IDX [0] = PFX ## _pixels ## SIZE ## _ ## CPU; + c->PFX ## _pixels_tab IDX [0] = PFX ## _pixels ## SIZE ## _ ## CPU #if HAVE_MMX_INLINE -#define SET_HPEL_FUNCS(PFX, IDX, SIZE, CPU) \ +#define SET_HPEL_FUNCS03(PFX, IDX, SIZE, CPU) \ + do { \ + SET_HPEL_FUNCS_EXT(PFX, IDX, SIZE, CPU); \ + c->PFX ## _pixels_tab IDX [3] = PFX ## _pixels ## SIZE ## _xy2_ ## CPU; \ + } while (0) +#define SET_HPEL_FUNCS12(PFX, IDX, SIZE, CPU) \ do { \ - SET_HPEL_FUNCS_EXT(PFX, IDX, SIZE, CPU) \ c->PFX ## _pixels_tab IDX [1] = PFX ## _pixels ## SIZE ## _x2_ ## CPU; \ c->PFX ## _pixels_tab IDX [2] = PFX ## _pixels ## SIZE ## _y2_ ## CPU; \ - c->PFX ## _pixels_tab IDX [3] = PFX ## _pixels ## SIZE ## _xy2_ ## CPU; \ } while (0) #else +#define SET_HPEL_FUNCS03(PFX, IDX, SIZE, CPU) SET_HPEL_FUNCS_EXT(PFX, IDX, SIZE, CPU) +#define SET_HPEL_FUNCS12(PFX, IDX, SIZE, CPU) ((void)0) +#endif #define SET_HPEL_FUNCS(PFX, IDX, SIZE, CPU) \ do { \ - SET_HPEL_FUNCS_EXT(PFX, IDX, SIZE, CPU) \ + SET_HPEL_FUNCS03(PFX, IDX, SIZE, CPU); \ + SET_HPEL_FUNCS12(PFX, IDX, SIZE, CPU); \ } while (0) -#endif static void hpeldsp_init_mmx(HpelDSPContext *c, int flags) { - SET_HPEL_FUNCS(put, [0], 16, mmx); + SET_HPEL_FUNCS03(put, [0], 16, mmx); SET_HPEL_FUNCS(put_no_rnd, [0], 16, mmx); - SET_HPEL_FUNCS(avg, [0], 16, mmx); SET_HPEL_FUNCS(avg_no_rnd, , 16, mmx); - SET_HPEL_FUNCS(put, [1], 8, mmx); + SET_HPEL_FUNCS03(put, [1], 8, mmx); SET_HPEL_FUNCS(put_no_rnd, [1], 8, mmx); +#if ARCH_X86_32 + SET_HPEL_FUNCS12(put, [0], 16, mmx); + SET_HPEL_FUNCS12(put, [1], 8, mmx); + SET_HPEL_FUNCS(avg, [0], 16, mmx); if (HAVE_MMX_EXTERNAL) { c->avg_pixels_tab[1][0] = ff_avg_pixels8_mmx; c->avg_pixels_tab[1][1] = ff_avg_pixels8_x2_mmx; @@ -202,6 +219,7 @@ static void hpeldsp_init_mmx(HpelDSPContext *c, int flags) c->avg_pixels_tab[1][2] = avg_pixels8_y2_mmx; c->avg_pixels_tab[1][3] = ff_avg_pixels8_xy2_mmx; #endif +#endif } static void hpeldsp_init_mmxext(HpelDSPContext *c, int flags) @@ -237,7 +255,7 @@ static void hpeldsp_init_mmxext(HpelDSPContext *c, int flags) static void hpeldsp_init_3dnow(HpelDSPContext *c, int flags) { -#if HAVE_AMD3DNOW_EXTERNAL +#if HAVE_AMD3DNOW_EXTERNAL && ARCH_X86_32 c->put_pixels_tab[0][1] = ff_put_pixels16_x2_3dnow; c->put_pixels_tab[0][2] = put_pixels16_y2_3dnow; @@ -263,7 +281,7 @@ static void hpeldsp_init_3dnow(HpelDSPContext *c, int flags) c->avg_pixels_tab[0][3] = avg_approx_pixels16_xy2_3dnow; c->avg_pixels_tab[1][3] = ff_avg_approx_pixels8_xy2_3dnow; } -#endif /* HAVE_AMD3DNOW_EXTERNAL */ +#endif /* HAVE_AMD3DNOW_EXTERNAL && ARCH_X86_32 */ } static void hpeldsp_init_sse2_fast(HpelDSPContext *c, int flags) diff --git a/libavcodec/x86/rnd_template.c b/libavcodec/x86/rnd_template.c index 09946bd23f..b825eeba6e 100644 --- a/libavcodec/x86/rnd_template.c +++ b/libavcodec/x86/rnd_template.c @@ -97,6 +97,7 @@ av_unused STATIC void DEF(put, pixels8_xy2)(uint8_t *block, const uint8_t *pixel :FF_REG_a, "memory"); } +#ifndef NO_AVG // avg_pixels // this routine is 'slightly' suboptimal but mostly unused av_unused STATIC void DEF(avg, pixels8_xy2)(uint8_t *block, const uint8_t *pixels, @@ -173,3 +174,4 @@ av_unused STATIC void DEF(avg, pixels8_xy2)(uint8_t *block, const uint8_t *pixel :"D"(block), "r"((x86_reg)line_size) :FF_REG_a, "memory"); } +#endif