[PR] swscale/aarch64/ops: convert to new uops architecture (part 1) (PR #23834)
Ramiro Polla via ffmpeg-devel <[email protected]> Fri, 17 Jul 2026 00:33:55 -0000
| Newsgroups | gmane.comp.video.ffmpeg.devel |
|---|---|
| Message-ID | <178424843662.59.12314894104182151191@29965ddac10e> |
PR #23834 opened by Ramiro Polla (ramiro) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23834 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23834.patch This PR is a first step towards converting the aarch64 backend to the new uops architecture. It stops short of using `ff_sws_ops_translate()` and macro-based templates because there are still some discrepancies between the two architectures that need to be ironed out. The function names and ordering (parameter-comparison) are maintained from the current aarch64 architecture to simplify the gradual move to uops.h. The overly-complicated lookup function code is replaced by a simple linear lookup over ops_entries. This allows more simplification, such as removing the field-specific functions, and using AVBPrint instead of custom string functions. >From aa586b4b1bc0d9c66c26a60c25eda78c049d28f4 Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Fri, 12 Jun 2026 18:19:01 +0200 Subject: [PATCH 01/17] swscale/aarch64/ops: convert swizzle operation to a series of moves This is similar to the way SWS_UOP_PERMUTE/SWS_UOP_COPY work and will simplify the move to uops. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops_asmgen.c | 62 +++-------- libswscale/aarch64/ops_entries.c | 170 ++++++++++++++--------------- libswscale/aarch64/ops_impl.c | 33 +++++- libswscale/aarch64/ops_impl.h | 9 +- libswscale/aarch64/ops_impl_conv.c | 88 +++++++++++++-- 5 files changed, 215 insertions(+), 147 deletions(-) diff --git a/libswscale/aarch64/ops_asmgen.c b/libswscale/aarch64/ops_asmgen.c index 2346a26035..c270d72ec9 100644 --- a/libswscale/aarch64/ops_asmgen.c +++ b/libswscale/aarch64/ops_asmgen.c @@ -637,13 +637,12 @@ static void asmgen_op_swap_bytes(SwsAArch64Context *s, const SwsAArch64OpImplPar /*********************************************************************/ /* rearrange channel order, or duplicate channels */ -/* AARCH64_SWS_OP_SWIZZLE */ - -#define SWIZZLE_TMP 0xf +/* AARCH64_SWS_OP_PERMUTE */ +/* AARCH64_SWS_OP_COPY */ static const char *print_swizzle_v(char buf[8], uint8_t n, uint8_t vh) { - if (n == SWIZZLE_TMP) + if (n == AARCH64_MOVE_TMP) snprintf(buf, sizeof(char[8]), "vtmp%c", vh ? 'h' : 'l'); else snprintf(buf, sizeof(char[8]), "v%c[%u]", vh ? 'h' : 'l', n); @@ -653,7 +652,7 @@ static const char *print_swizzle_v(char buf[8], uint8_t n, uint8_t vh) static RasmOp swizzle_a64op(SwsAArch64Context *s, uint8_t n, uint8_t vh) { - if (n == SWIZZLE_TMP) + if (n == AARCH64_MOVE_TMP) return s->vt[vh]; return vh ? s->vh[n] : s->vl[n]; } @@ -670,54 +669,18 @@ static void swizzle_emit(SwsAArch64Context *s, uint8_t dst, uint8_t src) } } -static void asmgen_op_swizzle(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) +static void asmgen_op_move(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { - /* Compute used vectors (src and dst) */ - uint8_t src_used[4] = { 0 }; - bool done[4] = { true, true, true, true }; - LOOP_MASK(p, dst) { - uint8_t src = MASK_GET(p->swizzle, dst); - src_used[src]++; - done[dst] = false; - } + SwsAArch64MoveOp move = p->move; - /* First perform unobstructed copies. */ - for (bool progress = true; progress; ) { - progress = false; - for (int dst = 0; dst < 4; dst++) { - if (done[dst] || src_used[dst]) - continue; - uint8_t src = MASK_GET(p->swizzle, dst); - swizzle_emit(s, dst, src); - src_used[src]--; - done[dst] = true; - progress = true; - } - } - - /* Then swap and rotate remaining operations. */ - for (int dst = 0; dst < 4; dst++) { - if (done[dst]) - continue; - - swizzle_emit(s, SWIZZLE_TMP, dst); - - uint8_t cur_dst = dst; - uint8_t src = MASK_GET(p->swizzle, cur_dst); - while (src != dst) { - swizzle_emit(s, cur_dst, src); - done[cur_dst] = true; - cur_dst = src; - src = MASK_GET(p->swizzle, cur_dst); - } - - swizzle_emit(s, cur_dst, SWIZZLE_TMP); - done[cur_dst] = true; + while (move) { + uint8_t src = (move ) & 0xf; + uint8_t dst = (move >> 4) & 0xf; + swizzle_emit(s, dst, src); + move >>= 8; } } -#undef SWIZZLE_TMP - /*********************************************************************/ /* split tightly packed data into components */ /* AARCH64_SWS_OP_UNPACK */ @@ -1380,7 +1343,8 @@ static void asmgen_op_cps(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) case AARCH64_SWS_OP_WRITE_PACKED: asmgen_op_write_packed(s, p); break; case AARCH64_SWS_OP_WRITE_PLANAR: asmgen_op_write_planar(s, p); break; case AARCH64_SWS_OP_SWAP_BYTES: asmgen_op_swap_bytes(s, p); break; - case AARCH64_SWS_OP_SWIZZLE: asmgen_op_swizzle(s, p); break; + case AARCH64_SWS_OP_PERMUTE: asmgen_op_move(s, p); break; + case AARCH64_SWS_OP_COPY: asmgen_op_move(s, p); break; case AARCH64_SWS_OP_UNPACK: asmgen_op_unpack(s, p); break; case AARCH64_SWS_OP_PACK: asmgen_op_pack(s, p); break; case AARCH64_SWS_OP_LSHIFT: asmgen_op_lshift(s, p); break; diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index 5c90cf3805..2aae4802bd 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -94,91 +94,91 @@ { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x0001, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x0001, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x000f, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x000f, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x000f, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x0123, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x0123, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x0123, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x012f, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x012f, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x012f, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x0321, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x0321, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x03f2, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x0ff1, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x0fff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x0fff, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x100f, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x100f, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x100f, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x1023, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x1023, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x102f, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x102f, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x132f, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x132f, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x1f0f, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x1f3f, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x1f3f, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x1f3f, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x1fff, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x20f3, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x20f3, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x20ff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x20ff, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x2103, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x2103, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x2103, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x210f, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x210f, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0x210f, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf00f, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf00f, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf00f, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf021, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf021, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf0f2, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf0f2, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf0f2, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf0f3, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf0ff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0100 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf0ff, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0100 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf102, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf102, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf102, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf123, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf123, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf123, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf12f, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf12f, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf12f, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf132, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf321, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf321, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf321, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf3f2, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xf3f2, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xff01, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xff01, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xff01, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xff03, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xff03, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xff0f, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xff0f, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xff0f, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xff31, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xff3f, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xff3f, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xff3f, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xfff1, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xfff2, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xfff3, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xfff3, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_SWIZZLE, .swizzle = 0xfff3, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000001ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000002ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000003ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000003ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000003ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000010ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000010ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000010ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000013ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000013ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000013ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000020ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0100 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000020ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0100 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000030ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000030ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000030ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000031ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000130ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1001 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000310ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000310ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000320ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000001031ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000001301ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000002032ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000002032ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000002302ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000002302ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000102132ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000102132ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000102132ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000132102ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000201231ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000201231ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000231201ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000231201ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000231201ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f1201f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f1201f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f3203f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f3203f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00003f2302f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00003f2312f1ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00003f2312f1ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x002f123103f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x002f123103f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x003f231201f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x003f231201f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000002010ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, +{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000002010ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, +{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000002010ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, +{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000103120ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000103120ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000103120ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000302010ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000302010ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000302010ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_COPY, .move = 0x001f01f03020ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_COPY, .move = 0x001f01f03020ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0121, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0121, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0233, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, diff --git a/libswscale/aarch64/ops_impl.c b/libswscale/aarch64/ops_impl.c index d5be4563c6..d056b88162 100644 --- a/libswscale/aarch64/ops_impl.c +++ b/libswscale/aarch64/ops_impl.c @@ -85,7 +85,8 @@ static const char op_types[AARCH64_SWS_OP_TYPE_NB][32] = { [AARCH64_SWS_OP_WRITE_PACKED ] = "AARCH64_SWS_OP_WRITE_PACKED", [AARCH64_SWS_OP_WRITE_PLANAR ] = "AARCH64_SWS_OP_WRITE_PLANAR", [AARCH64_SWS_OP_SWAP_BYTES ] = "AARCH64_SWS_OP_SWAP_BYTES", - [AARCH64_SWS_OP_SWIZZLE ] = "AARCH64_SWS_OP_SWIZZLE", + [AARCH64_SWS_OP_PERMUTE ] = "AARCH64_SWS_OP_PERMUTE", + [AARCH64_SWS_OP_COPY ] = "AARCH64_SWS_OP_COPY", [AARCH64_SWS_OP_UNPACK ] = "AARCH64_SWS_OP_UNPACK", [AARCH64_SWS_OP_PACK ] = "AARCH64_SWS_OP_PACK", [AARCH64_SWS_OP_LSHIFT ] = "AARCH64_SWS_OP_LSHIFT", @@ -120,7 +121,8 @@ static const char op_type_names[AARCH64_SWS_OP_TYPE_NB][16] = { [AARCH64_SWS_OP_WRITE_PACKED ] = "write_packed", [AARCH64_SWS_OP_WRITE_PLANAR ] = "write_planar", [AARCH64_SWS_OP_SWAP_BYTES ] = "swap_bytes", - [AARCH64_SWS_OP_SWIZZLE ] = "swizzle", + [AARCH64_SWS_OP_PERMUTE ] = "permute", + [AARCH64_SWS_OP_COPY ] = "copy", [AARCH64_SWS_OP_UNPACK ] = "unpack", [AARCH64_SWS_OP_PACK ] = "pack", [AARCH64_SWS_OP_LSHIFT ] = "lshift", @@ -282,6 +284,28 @@ static int cmp_u16(void *pa, void *pb) return 0; } +static void print_u48_name(char **pbuf, size_t *prem, void *p) +{ + uint64_t val = *(uint64_t *) p; + buf_appendf(pbuf, prem, "_%012" PRIx64, val); +} + +static void print_u48_val(char **pbuf, size_t *prem, void *p) +{ + uint64_t val = *(uint64_t *) p; + buf_appendf(pbuf, prem, "0x%012" PRIx64 "ULL", val); +} + +static int cmp_u48(void *pa, void *pb) +{ + int64_t ia = (int64_t) *((uint64_t *) pa); + int64_t ib = (int64_t) *((uint64_t *) pb); + int64_t diff = ia - ib; + if (diff) + return diff < 0 ? -1 : 1; + return 0; +} + static void print_u40_name(char **pbuf, size_t *prem, void *p) { uint64_t val = *(uint64_t *) p; @@ -310,7 +334,7 @@ static const ParamField field_mask = { PARAM_FIELD(mask), static const ParamField field_type = { PARAM_FIELD(type), print_pixel_name, print_pixel_val, cmp_pixel }; static const ParamField field_block_size = { PARAM_FIELD(block_size), print_u8_name, print_u8_val, cmp_u8 }; static const ParamField field_shift = { PARAM_FIELD(shift), print_u8_name, print_u8_val, cmp_u8 }; -static const ParamField field_swizzle = { PARAM_FIELD(swizzle), print_u16_name, print_u16_val, cmp_u16 }; +static const ParamField field_move = { PARAM_FIELD(move), print_u48_name, print_u48_val, cmp_u48 }; static const ParamField field_pack = { PARAM_FIELD(pack), print_u16_name, print_u16_val, cmp_u16 }; static const ParamField field_to_type = { PARAM_FIELD(to_type), print_pixel_name, print_pixel_val, cmp_pixel }; static const ParamField field_linear_mask = { PARAM_FIELD(linear.mask), print_u40_name, print_u40_val, cmp_u40 }; @@ -330,7 +354,8 @@ static const ParamField *op_fields[AARCH64_SWS_OP_TYPE_NB][MAX_LEVELS] = { [AARCH64_SWS_OP_WRITE_PACKED ] = { &field_op, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_WRITE_PLANAR ] = { &field_op, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_SWAP_BYTES ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_SWIZZLE ] = { &field_op, &field_swizzle, &field_block_size, &field_type, &field_mask }, + [AARCH64_SWS_OP_PERMUTE ] = { &field_op, &field_move, &field_block_size, &field_type, &field_mask }, + [AARCH64_SWS_OP_COPY ] = { &field_op, &field_move, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_UNPACK ] = { &field_op, &field_pack, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_PACK ] = { &field_op, &field_pack, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_LSHIFT ] = { &field_op, &field_shift, &field_block_size, &field_type, &field_mask }, diff --git a/libswscale/aarch64/ops_impl.h b/libswscale/aarch64/ops_impl.h index 9950ccdad8..04ded26f34 100644 --- a/libswscale/aarch64/ops_impl.h +++ b/libswscale/aarch64/ops_impl.h @@ -46,7 +46,8 @@ typedef enum SwsAArch64OpType { AARCH64_SWS_OP_WRITE_PACKED, AARCH64_SWS_OP_WRITE_PLANAR, AARCH64_SWS_OP_SWAP_BYTES, - AARCH64_SWS_OP_SWIZZLE, + AARCH64_SWS_OP_PERMUTE, + AARCH64_SWS_OP_COPY, AARCH64_SWS_OP_UNPACK, AARCH64_SWS_OP_PACK, AARCH64_SWS_OP_LSHIFT, @@ -65,6 +66,10 @@ typedef enum SwsAArch64OpType { /* Each nibble in the mask corresponds to one component. */ typedef uint16_t SwsAArch64OpMask; +/* Each byte is an LSB src|dst pair until 00 is reached. */ +typedef uint64_t SwsAArch64MoveOp; +#define AARCH64_MOVE_TMP 0xf + /** * Affine coefficient mask for linear op. Packs a 4x5 matrix in execution * order, where the offset is the first element, with 2 bits per element: @@ -96,7 +101,7 @@ typedef struct SwsAArch64OpImplParams { uint8_t block_size; union { uint8_t shift; - SwsAArch64OpMask swizzle; + SwsAArch64MoveOp move; SwsAArch64OpMask pack; SwsAArch64PixelType to_type; SwsAArch64LinearOp linear; diff --git a/libswscale/aarch64/ops_impl_conv.c b/libswscale/aarch64/ops_impl_conv.c index 638c1d63ba..18578879a5 100644 --- a/libswscale/aarch64/ops_impl_conv.c +++ b/libswscale/aarch64/ops_impl_conv.c @@ -52,6 +52,66 @@ static int linear_index_from_sws_op(int idx) return reorder_col[idx]; } +static void swizzle_emit(SwsAArch64OpImplParams *out, uint8_t dst, uint8_t src, int idx) +{ + uint64_t pair = src | (dst << 4); + out->move |= pair << (idx * 8); +} + +static void convert_swizzle_to_moves(const SwsOp *op, SwsAArch64OpImplParams *out) +{ + SwsAArch64OpMask swizzle = 0; + int num_moves = 0; + + MASK_SET(swizzle, 0, op->swizzle.in[0]); + MASK_SET(swizzle, 1, op->swizzle.in[1]); + MASK_SET(swizzle, 2, op->swizzle.in[2]); + MASK_SET(swizzle, 3, op->swizzle.in[3]); + + /* Compute used vectors (src and dst) */ + uint8_t src_used[4] = { 0 }; + bool done[4] = { true, true, true, true }; + LOOP(out->mask, dst) { + uint8_t src = MASK_GET(swizzle, dst); + src_used[src]++; + done[dst] = false; + } + + /* First perform unobstructed copies. */ + for (bool progress = true; progress; ) { + progress = false; + for (int dst = 0; dst < 4; dst++) { + if (done[dst] || src_used[dst]) + continue; + uint8_t src = MASK_GET(swizzle, dst); + swizzle_emit(out, dst, src, num_moves++); + src_used[src]--; + done[dst] = true; + progress = true; + } + } + + /* Then swap and rotate remaining operations. */ + for (int dst = 0; dst < 4; dst++) { + if (done[dst]) + continue; + + swizzle_emit(out, AARCH64_MOVE_TMP, dst, num_moves++); + + uint8_t cur_dst = dst; + uint8_t src = MASK_GET(swizzle, cur_dst); + while (src != dst) { + swizzle_emit(out, cur_dst, src, num_moves++); + done[cur_dst] = true; + cur_dst = src; + src = MASK_GET(swizzle, cur_dst); + } + + swizzle_emit(out, cur_dst, AARCH64_MOVE_TMP, num_moves++); + done[cur_dst] = true; + } +} + /** * Convert SwsOp to a SwsAArch64OpImplParams. Read the comments regarding * SwsAArch64OpImplParams in ops_impl.h for more information. @@ -114,7 +174,23 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, return AVERROR(ENOTSUP); break; case SWS_OP_SWAP_BYTES: out->op = AARCH64_SWS_OP_SWAP_BYTES; break; - case SWS_OP_SWIZZLE: out->op = AARCH64_SWS_OP_SWIZZLE; break; + case SWS_OP_SWIZZLE: { + /** + * Detect whether copies are needed or if a simple permute is + * enough. + */ + out->op = AARCH64_SWS_OP_PERMUTE; + SwsAArch64OpMask seen = 0; + LOOP(out->mask, i) { + uint8_t src = op->swizzle.in[i]; + if (MASK_GET(seen, src)) { + out->op = AARCH64_SWS_OP_COPY; + break; + } + MASK_SET(seen, src, 1); + } + break; + } case SWS_OP_UNPACK: out->op = AARCH64_SWS_OP_UNPACK; break; case SWS_OP_PACK: out->op = AARCH64_SWS_OP_PACK; break; case SWS_OP_LSHIFT: out->op = AARCH64_SWS_OP_LSHIFT; break; @@ -149,17 +225,15 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, case 4: out->mask = 0x1111; break; }; break; - case AARCH64_SWS_OP_SWIZZLE: + case AARCH64_SWS_OP_PERMUTE: + case AARCH64_SWS_OP_COPY: /* Recompute mask taking identity swizzle into account */ out->mask = 0; for (int i = 0; i < 4; i++) { - if (SWS_OP_NEEDED(op, i) && op->swizzle.in[i] != i) { + if (SWS_OP_NEEDED(op, i) && op->swizzle.in[i] != i) MASK_SET(out->mask, i, 1); - MASK_SET(out->swizzle, i, op->swizzle.in[i]); - } else { - MASK_SET(out->swizzle, i, 0xf); - } } + convert_swizzle_to_moves(op, out); /* The element size and type don't matter. */ out->block_size = block_size * ff_sws_pixel_type_size(op->type); out->type = AARCH64_PIXEL_U8; -- 2.52.0 >From b0d1ccedcf8d2ce4dade1dbc65d46c8220faca5c Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Thu, 11 Jun 2026 22:55:19 +0200 Subject: [PATCH 02/17] swscale/aarch64/ops: specialize convert and expand operations This is similar to the way SWS_UOP_TO_{U8,U16,U32,F32} and SWS_UOP_EXPAND_{PAIR,QUAD} work and will simplify the move to uops. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops_asmgen.c | 40 +++++++++-- libswscale/aarch64/ops_entries.c | 104 ++++++++++++++--------------- libswscale/aarch64/ops_impl.c | 25 +++++-- libswscale/aarch64/ops_impl.h | 9 ++- libswscale/aarch64/ops_impl_conv.c | 18 +++-- 5 files changed, 122 insertions(+), 74 deletions(-) diff --git a/libswscale/aarch64/ops_asmgen.c b/libswscale/aarch64/ops_asmgen.c index c270d72ec9..4dffb592a9 100644 --- a/libswscale/aarch64/ops_asmgen.c +++ b/libswscale/aarch64/ops_asmgen.c @@ -845,7 +845,10 @@ static void asmgen_op_clear(SwsAArch64Context *s, const SwsAArch64OpImplParams * /*********************************************************************/ /* convert (cast) between formats */ -/* AARCH64_SWS_OP_CONVERT */ +/* AARCH64_SWS_OP_TO_U8 */ +/* AARCH64_SWS_OP_TO_U16 */ +/* AARCH64_SWS_OP_TO_U32 */ +/* AARCH64_SWS_OP_TO_F32 */ static void asmgen_op_convert(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { @@ -865,7 +868,17 @@ static void asmgen_op_convert(SwsAArch64Context *s, const SwsAArch64OpImplParams } size_t src_el_size = s->el_size; - size_t dst_el_size = aarch64_pixel_size(p->to_type); + SwsAArch64PixelType to_type; + switch (p->op) { + case AARCH64_SWS_OP_TO_U8: to_type = AARCH64_PIXEL_U8; break; + case AARCH64_SWS_OP_TO_U16: to_type = AARCH64_PIXEL_U16; break; + case AARCH64_SWS_OP_TO_U32: to_type = AARCH64_PIXEL_U32; break; + case AARCH64_SWS_OP_TO_F32: to_type = AARCH64_PIXEL_F32; break; + default: + av_assert0(!"Invalid op!"); + break; + } + size_t dst_el_size = aarch64_pixel_size(to_type); /** * This function assumes block_size is either 8 or 16, and that @@ -914,7 +927,7 @@ static void asmgen_op_convert(SwsAArch64Context *s, const SwsAArch64OpImplParams } /* See comment above for high vector bank usage for u32. */ - if (p->to_type == AARCH64_PIXEL_F32) { + if (to_type == AARCH64_PIXEL_F32) { rasm_add_comment(r, "u32 -> f32"); LOOP_MASK(p, i) i_ucvtf(r, vl[i].s4, vl[i].s4); LOOP_MASK(p, i) i_ucvtf(r, vh[i].s4, vh[i].s4); @@ -923,7 +936,8 @@ static void asmgen_op_convert(SwsAArch64Context *s, const SwsAArch64OpImplParams /*********************************************************************/ /* expand integers to the full range */ -/* AARCH64_SWS_OP_EXPAND */ +/* AARCH64_SWS_OP_EXPAND_PAIR */ +/* AARCH64_SWS_OP_EXPAND_QUAD */ static void asmgen_op_expand(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { @@ -932,7 +946,15 @@ static void asmgen_op_expand(SwsAArch64Context *s, const SwsAArch64OpImplParams RasmOp *vh = s->vh; size_t src_el_size = s->el_size; - size_t dst_el_size = aarch64_pixel_size(p->to_type); + SwsAArch64PixelType to_type; + switch (p->op) { + case AARCH64_SWS_OP_EXPAND_PAIR: to_type = AARCH64_PIXEL_U16; break; + case AARCH64_SWS_OP_EXPAND_QUAD: to_type = AARCH64_PIXEL_U32; break; + default: + av_assert0(!"Invalid op!"); + break; + } + size_t dst_el_size = aarch64_pixel_size(to_type); size_t dst_total_size = p->block_size * dst_el_size; size_t dst_vec_size = FFMIN(dst_total_size, 16); @@ -1350,8 +1372,12 @@ static void asmgen_op_cps(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) case AARCH64_SWS_OP_LSHIFT: asmgen_op_lshift(s, p); break; case AARCH64_SWS_OP_RSHIFT: asmgen_op_rshift(s, p); break; case AARCH64_SWS_OP_CLEAR: asmgen_op_clear(s, p); break; - case AARCH64_SWS_OP_CONVERT: asmgen_op_convert(s, p); break; - case AARCH64_SWS_OP_EXPAND: asmgen_op_expand(s, p); break; + case AARCH64_SWS_OP_TO_U8: asmgen_op_convert(s, p); break; + case AARCH64_SWS_OP_TO_U16: asmgen_op_convert(s, p); break; + case AARCH64_SWS_OP_TO_U32: asmgen_op_convert(s, p); break; + case AARCH64_SWS_OP_TO_F32: asmgen_op_convert(s, p); break; + case AARCH64_SWS_OP_EXPAND_PAIR: asmgen_op_expand(s, p); break; + case AARCH64_SWS_OP_EXPAND_QUAD: asmgen_op_expand(s, p); break; case AARCH64_SWS_OP_MIN: asmgen_op_min(s, p); break; case AARCH64_SWS_OP_MAX: asmgen_op_max(s, p); break; case AARCH64_SWS_OP_SCALE: asmgen_op_scale(s, p); break; diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index 2aae4802bd..4f59aef574 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -272,58 +272,58 @@ { .op = AARCH64_SWS_OP_CLEAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }, { .op = AARCH64_SWS_OP_CLEAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, { .op = AARCH64_SWS_OP_CLEAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U8, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U16, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U16, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U16, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0100 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0100 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CONVERT, .to_type = AARCH64_PIXEL_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_EXPAND, .to_type = AARCH64_PIXEL_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_EXPAND, .to_type = AARCH64_PIXEL_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_EXPAND, .to_type = AARCH64_PIXEL_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_EXPAND, .to_type = AARCH64_PIXEL_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_EXPAND, .to_type = AARCH64_PIXEL_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }, +{ .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, +{ .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_TO_U8, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }, +{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, +{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, +{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0100 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0010 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0100 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, +{ .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, +{ .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, { .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, { .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }, { .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, diff --git a/libswscale/aarch64/ops_impl.c b/libswscale/aarch64/ops_impl.c index d056b88162..2ed1effce6 100644 --- a/libswscale/aarch64/ops_impl.c +++ b/libswscale/aarch64/ops_impl.c @@ -92,8 +92,12 @@ static const char op_types[AARCH64_SWS_OP_TYPE_NB][32] = { [AARCH64_SWS_OP_LSHIFT ] = "AARCH64_SWS_OP_LSHIFT", [AARCH64_SWS_OP_RSHIFT ] = "AARCH64_SWS_OP_RSHIFT", [AARCH64_SWS_OP_CLEAR ] = "AARCH64_SWS_OP_CLEAR", - [AARCH64_SWS_OP_CONVERT ] = "AARCH64_SWS_OP_CONVERT", - [AARCH64_SWS_OP_EXPAND ] = "AARCH64_SWS_OP_EXPAND", + [AARCH64_SWS_OP_TO_U8 ] = "AARCH64_SWS_OP_TO_U8", + [AARCH64_SWS_OP_TO_U16 ] = "AARCH64_SWS_OP_TO_U16", + [AARCH64_SWS_OP_TO_U32 ] = "AARCH64_SWS_OP_TO_U32", + [AARCH64_SWS_OP_TO_F32 ] = "AARCH64_SWS_OP_TO_F32", + [AARCH64_SWS_OP_EXPAND_PAIR ] = "AARCH64_SWS_OP_EXPAND_PAIR", + [AARCH64_SWS_OP_EXPAND_QUAD ] = "AARCH64_SWS_OP_EXPAND_QUAD", [AARCH64_SWS_OP_MIN ] = "AARCH64_SWS_OP_MIN", [AARCH64_SWS_OP_MAX ] = "AARCH64_SWS_OP_MAX", [AARCH64_SWS_OP_SCALE ] = "AARCH64_SWS_OP_SCALE", @@ -128,8 +132,12 @@ static const char op_type_names[AARCH64_SWS_OP_TYPE_NB][16] = { [AARCH64_SWS_OP_LSHIFT ] = "lshift", [AARCH64_SWS_OP_RSHIFT ] = "rshift", [AARCH64_SWS_OP_CLEAR ] = "clear", - [AARCH64_SWS_OP_CONVERT ] = "convert", - [AARCH64_SWS_OP_EXPAND ] = "expand", + [AARCH64_SWS_OP_TO_U8 ] = "to_u8", + [AARCH64_SWS_OP_TO_U16 ] = "to_u16", + [AARCH64_SWS_OP_TO_U32 ] = "to_u32", + [AARCH64_SWS_OP_TO_F32 ] = "to_f32", + [AARCH64_SWS_OP_EXPAND_PAIR ] = "expand_pair", + [AARCH64_SWS_OP_EXPAND_QUAD ] = "expand_quad", [AARCH64_SWS_OP_MIN ] = "min", [AARCH64_SWS_OP_MAX ] = "max", [AARCH64_SWS_OP_SCALE ] = "scale", @@ -336,7 +344,6 @@ static const ParamField field_block_size = { PARAM_FIELD(block_size), static const ParamField field_shift = { PARAM_FIELD(shift), print_u8_name, print_u8_val, cmp_u8 }; static const ParamField field_move = { PARAM_FIELD(move), print_u48_name, print_u48_val, cmp_u48 }; static const ParamField field_pack = { PARAM_FIELD(pack), print_u16_name, print_u16_val, cmp_u16 }; -static const ParamField field_to_type = { PARAM_FIELD(to_type), print_pixel_name, print_pixel_val, cmp_pixel }; static const ParamField field_linear_mask = { PARAM_FIELD(linear.mask), print_u40_name, print_u40_val, cmp_u40 }; static const ParamField field_linear_fmla = { PARAM_FIELD(linear.fmla), print_u8_name, print_u8_val, cmp_u8 }; static const ParamField field_dither_y_offset = { PARAM_FIELD(dither.y_offset), print_u16_name, print_u16_val, cmp_u16 }; @@ -361,8 +368,12 @@ static const ParamField *op_fields[AARCH64_SWS_OP_TYPE_NB][MAX_LEVELS] = { [AARCH64_SWS_OP_LSHIFT ] = { &field_op, &field_shift, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_RSHIFT ] = { &field_op, &field_shift, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_CLEAR ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_CONVERT ] = { &field_op, &field_to_type, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_EXPAND ] = { &field_op, &field_to_type, &field_block_size, &field_type, &field_mask }, + [AARCH64_SWS_OP_TO_U8 ] = { &field_op, &field_block_size, &field_type, &field_mask }, + [AARCH64_SWS_OP_TO_U16 ] = { &field_op, &field_block_size, &field_type, &field_mask }, + [AARCH64_SWS_OP_TO_U32 ] = { &field_op, &field_block_size, &field_type, &field_mask }, + [AARCH64_SWS_OP_TO_F32 ] = { &field_op, &field_block_size, &field_type, &field_mask }, + [AARCH64_SWS_OP_EXPAND_PAIR ] = { &field_op, &field_block_size, &field_type, &field_mask }, + [AARCH64_SWS_OP_EXPAND_QUAD ] = { &field_op, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_MIN ] = { &field_op, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_MAX ] = { &field_op, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_SCALE ] = { &field_op, &field_block_size, &field_type, &field_mask }, diff --git a/libswscale/aarch64/ops_impl.h b/libswscale/aarch64/ops_impl.h index 04ded26f34..afad648938 100644 --- a/libswscale/aarch64/ops_impl.h +++ b/libswscale/aarch64/ops_impl.h @@ -53,8 +53,12 @@ typedef enum SwsAArch64OpType { AARCH64_SWS_OP_LSHIFT, AARCH64_SWS_OP_RSHIFT, AARCH64_SWS_OP_CLEAR, - AARCH64_SWS_OP_CONVERT, - AARCH64_SWS_OP_EXPAND, + AARCH64_SWS_OP_TO_U8, + AARCH64_SWS_OP_TO_U16, + AARCH64_SWS_OP_TO_U32, + AARCH64_SWS_OP_TO_F32, + AARCH64_SWS_OP_EXPAND_PAIR, + AARCH64_SWS_OP_EXPAND_QUAD, AARCH64_SWS_OP_MIN, AARCH64_SWS_OP_MAX, AARCH64_SWS_OP_SCALE, @@ -103,7 +107,6 @@ typedef struct SwsAArch64OpImplParams { uint8_t shift; SwsAArch64MoveOp move; SwsAArch64OpMask pack; - SwsAArch64PixelType to_type; SwsAArch64LinearOp linear; SwsAArch64DitherOp dither; }; diff --git a/libswscale/aarch64/ops_impl_conv.c b/libswscale/aarch64/ops_impl_conv.c index 18578879a5..dc70f22e9f 100644 --- a/libswscale/aarch64/ops_impl_conv.c +++ b/libswscale/aarch64/ops_impl_conv.c @@ -197,7 +197,19 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, case SWS_OP_RSHIFT: out->op = AARCH64_SWS_OP_RSHIFT; break; case SWS_OP_CLEAR: out->op = AARCH64_SWS_OP_CLEAR; break; case SWS_OP_CONVERT: - out->op = op->convert.expand ? AARCH64_SWS_OP_EXPAND : AARCH64_SWS_OP_CONVERT; + if (op->convert.expand) { + switch (op->convert.to) { + case SWS_PIXEL_U16: out->op = AARCH64_SWS_OP_EXPAND_PAIR; break; + case SWS_PIXEL_U32: out->op = AARCH64_SWS_OP_EXPAND_QUAD; break; + } + } else { + switch (op->convert.to) { + case SWS_PIXEL_U8: out->op = AARCH64_SWS_OP_TO_U8; break; + case SWS_PIXEL_U16: out->op = AARCH64_SWS_OP_TO_U16; break; + case SWS_PIXEL_U32: out->op = AARCH64_SWS_OP_TO_U32; break; + case SWS_PIXEL_F32: out->op = AARCH64_SWS_OP_TO_F32; break; + } + } break; case SWS_OP_MIN: out->op = AARCH64_SWS_OP_MIN; break; case SWS_OP_MAX: out->op = AARCH64_SWS_OP_MAX; break; @@ -264,10 +276,6 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, MASK_SET(out->mask, i, 1); } break; - case AARCH64_SWS_OP_EXPAND: - case AARCH64_SWS_OP_CONVERT: - out->to_type = sws_pixel_to_aarch64(op->convert.to); - break; case AARCH64_SWS_OP_LINEAR: /** * The out->linear.mask field packs the 4x5 matrix from SwsLinearOp as -- 2.52.0 >From 3050b3cf97065f346a3ed09cc5e9e6b184edef32 Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Fri, 12 Jun 2026 21:18:35 +0200 Subject: [PATCH 03/17] swscale/aarch64/ops: specialize linear operation This is similar to the way SWS_UOP_LINEAR{,_FMA} work and will simplify the move to uops. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops_asmgen.c | 18 +++++---- libswscale/aarch64/ops_entries.c | 64 +++++++++++++++--------------- libswscale/aarch64/ops_impl.c | 6 ++- libswscale/aarch64/ops_impl.h | 2 +- libswscale/aarch64/ops_impl_conv.c | 8 +++- libswscale/tests/sws_ops_aarch64.c | 4 +- 6 files changed, 55 insertions(+), 47 deletions(-) diff --git a/libswscale/aarch64/ops_asmgen.c b/libswscale/aarch64/ops_asmgen.c index 4dffb592a9..260279117c 100644 --- a/libswscale/aarch64/ops_asmgen.c +++ b/libswscale/aarch64/ops_asmgen.c @@ -1053,6 +1053,7 @@ static void asmgen_op_scale(SwsAArch64Context *s, const SwsAArch64OpImplParams * /*********************************************************************/ /* generalized linear affine transform */ /* AARCH64_SWS_OP_LINEAR */ +/* AARCH64_SWS_OP_LINEAR_FMA */ /** * Performs one pass of the linear transform over a single vector bank @@ -1115,7 +1116,14 @@ static void linear_pass(SwsAArch64Context *s, const SwsAArch64OpImplParams *p, } else { i_fmul (r, vx[i], vsrc, vcoeff); CMTF("v%c[%u] = vsrc[%u] * vc[%u][%u];", cvh, i, src_j, vc_i, vc_j); } - } else if (!p->linear.fmla) { + } else if (p->op == AARCH64_SWS_OP_LINEAR_FMA) { + /** + * Most modern aarch64 cores have a fastpath for sequences + * of fmla instructions. This means that even if the coefficient + * is 1, it is still faster to use fmla by 1 instead of fadd. + */ + i_fmla(r, vx[i], vsrc, vcoeff); CMTF("v%c[%u] += vsrc[%u] * vc[%u][%u];", cvh, i, src_j, vc_i, vc_j); + } else { /** * Split the multiply-accumulate into fmul+fadd. All * multiplications are performed first into temporary @@ -1131,13 +1139,6 @@ static void linear_pass(SwsAArch64Context *s, const SwsAArch64OpImplParams *p, } else { i_fadd(r, vx[i], vx[i], vsrc); CMTF("v%c[%u] += vsrc[%u];", cvh, i, vc_j); } - } else { - /** - * Most modern aarch64 cores have a fastpath for sequences - * of fmla instructions. This means that even if the coefficient - * is 1, it is still faster to use fmla by 1 instead of fadd. - */ - i_fmla(r, vx[i], vsrc, vcoeff); CMTF("v%c[%u] += vsrc[%u] * vc[%u][%u];", cvh, i, src_j, vc_i, vc_j); } first = false; } @@ -1382,6 +1383,7 @@ static void asmgen_op_cps(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) case AARCH64_SWS_OP_MAX: asmgen_op_max(s, p); break; case AARCH64_SWS_OP_SCALE: asmgen_op_scale(s, p); break; case AARCH64_SWS_OP_LINEAR: asmgen_op_linear(s, p); break; + case AARCH64_SWS_OP_LINEAR_FMA: asmgen_op_linear(s, p); break; case AARCH64_SWS_OP_DITHER: asmgen_op_dither(s, p); break; /* TODO implement AARCH64_SWS_OP_SHUFFLE */ default: diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index 4f59aef574..3f0fc83e26 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -346,38 +346,38 @@ { .op = AARCH64_SWS_OP_SCALE, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, { .op = AARCH64_SWS_OP_SCALE, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, { .op = AARCH64_SWS_OP_SCALE, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000000000fULL, .linear.fmla = 0, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000000000fULL, .linear.fmla = 1, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x00000000fcULL, .linear.fmla = 0, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x00000000fcULL, .linear.fmla = 1, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x00000000ffULL, .linear.fmla = 0, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x00000000ffULL, .linear.fmla = 1, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000000c000ULL, .linear.fmla = 0, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000000c000ULL, .linear.fmla = 1, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000373dcc7ULL, .linear.fmla = 0, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000373dcc7ULL, .linear.fmla = 1, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x0003f3fccfULL, .linear.fmla = 0, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x0003f3fccfULL, .linear.fmla = 1, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000c00c00cULL, .linear.fmla = 0, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000c00c00cULL, .linear.fmla = 1, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000c30cc0fULL, .linear.fmla = 0, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000c30cc0fULL, .linear.fmla = 1, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000ff3fcfcULL, .linear.fmla = 0, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000ff3fcfcULL, .linear.fmla = 1, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000ff3fcffULL, .linear.fmla = 0, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000ff3fcffULL, .linear.fmla = 1, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc000000000ULL, .linear.fmla = 0, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc000000000ULL, .linear.fmla = 1, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00000000fULL, .linear.fmla = 0, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00000000fULL, .linear.fmla = 1, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc0000000fcULL, .linear.fmla = 0, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc0000000fcULL, .linear.fmla = 1, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc003f3fccfULL, .linear.fmla = 0, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc003f3fccfULL, .linear.fmla = 1, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00c00c00cULL, .linear.fmla = 0, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00c00c00cULL, .linear.fmla = 1, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00ff3fcffULL, .linear.fmla = 0, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00ff3fcffULL, .linear.fmla = 1, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000000000fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x00000000fcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x00000000ffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000000c000ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0010 }, +{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000373dcc7ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x0003f3fccfULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000c00c00cULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000c30cc0fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000ff3fcfcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000ff3fcffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc000000000ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1000 }, +{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00000000fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, +{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc0000000fcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, +{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc003f3fccfULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00c00c00cULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00ff3fcffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000000000fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x00000000fcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x00000000ffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000000c000ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0010 }, +{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000373dcc7ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x0003f3fccfULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000c00c00cULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000c30cc0fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000ff3fcfcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000ff3fcffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc000000000ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1000 }, +{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc00000000fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, +{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc0000000fcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, +{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc003f3fccfULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc00c00c00cULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, +{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc00ff3fcffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x0325, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x032f, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x2305, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, diff --git a/libswscale/aarch64/ops_impl.c b/libswscale/aarch64/ops_impl.c index 2ed1effce6..e0dbcd5d80 100644 --- a/libswscale/aarch64/ops_impl.c +++ b/libswscale/aarch64/ops_impl.c @@ -102,6 +102,7 @@ static const char op_types[AARCH64_SWS_OP_TYPE_NB][32] = { [AARCH64_SWS_OP_MAX ] = "AARCH64_SWS_OP_MAX", [AARCH64_SWS_OP_SCALE ] = "AARCH64_SWS_OP_SCALE", [AARCH64_SWS_OP_LINEAR ] = "AARCH64_SWS_OP_LINEAR", + [AARCH64_SWS_OP_LINEAR_FMA ] = "AARCH64_SWS_OP_LINEAR_FMA", [AARCH64_SWS_OP_DITHER ] = "AARCH64_SWS_OP_DITHER", }; @@ -142,6 +143,7 @@ static const char op_type_names[AARCH64_SWS_OP_TYPE_NB][16] = { [AARCH64_SWS_OP_MAX ] = "max", [AARCH64_SWS_OP_SCALE ] = "scale", [AARCH64_SWS_OP_LINEAR ] = "linear", + [AARCH64_SWS_OP_LINEAR_FMA ] = "linear_fma", [AARCH64_SWS_OP_DITHER ] = "dither", }; @@ -345,7 +347,6 @@ static const ParamField field_shift = { PARAM_FIELD(shift), static const ParamField field_move = { PARAM_FIELD(move), print_u48_name, print_u48_val, cmp_u48 }; static const ParamField field_pack = { PARAM_FIELD(pack), print_u16_name, print_u16_val, cmp_u16 }; static const ParamField field_linear_mask = { PARAM_FIELD(linear.mask), print_u40_name, print_u40_val, cmp_u40 }; -static const ParamField field_linear_fmla = { PARAM_FIELD(linear.fmla), print_u8_name, print_u8_val, cmp_u8 }; static const ParamField field_dither_y_offset = { PARAM_FIELD(dither.y_offset), print_u16_name, print_u16_val, cmp_u16 }; static const ParamField field_dither_size_log2 = { PARAM_FIELD(dither.size_log2), print_u8_name, print_u8_val, cmp_u8 }; @@ -377,6 +378,7 @@ static const ParamField *op_fields[AARCH64_SWS_OP_TYPE_NB][MAX_LEVELS] = { [AARCH64_SWS_OP_MIN ] = { &field_op, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_MAX ] = { &field_op, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_SCALE ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_LINEAR ] = { &field_op, &field_linear_mask, &field_linear_fmla, &field_block_size, &field_type, &field_mask }, + [AARCH64_SWS_OP_LINEAR ] = { &field_op, &field_linear_mask, &field_block_size, &field_type, &field_mask }, + [AARCH64_SWS_OP_LINEAR_FMA ] = { &field_op, &field_linear_mask, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_DITHER ] = { &field_op, &field_dither_y_offset, &field_dither_size_log2, &field_block_size, &field_type, &field_mask }, }; diff --git a/libswscale/aarch64/ops_impl.h b/libswscale/aarch64/ops_impl.h index afad648938..60fc14ee89 100644 --- a/libswscale/aarch64/ops_impl.h +++ b/libswscale/aarch64/ops_impl.h @@ -63,6 +63,7 @@ typedef enum SwsAArch64OpType { AARCH64_SWS_OP_MAX, AARCH64_SWS_OP_SCALE, AARCH64_SWS_OP_LINEAR, + AARCH64_SWS_OP_LINEAR_FMA, AARCH64_SWS_OP_DITHER, AARCH64_SWS_OP_TYPE_NB, } SwsAArch64OpType; @@ -85,7 +86,6 @@ typedef uint64_t SwsAArch64LinearOpMask; typedef struct SwsAArch64LinearOp { SwsAArch64LinearOpMask mask; - uint8_t fmla; } SwsAArch64LinearOp; typedef struct SwsAArch64DitherOp { diff --git a/libswscale/aarch64/ops_impl_conv.c b/libswscale/aarch64/ops_impl_conv.c index dc70f22e9f..8b8dc553a7 100644 --- a/libswscale/aarch64/ops_impl_conv.c +++ b/libswscale/aarch64/ops_impl_conv.c @@ -214,7 +214,11 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, case SWS_OP_MIN: out->op = AARCH64_SWS_OP_MIN; break; case SWS_OP_MAX: out->op = AARCH64_SWS_OP_MAX; break; case SWS_OP_SCALE: out->op = AARCH64_SWS_OP_SCALE; break; - case SWS_OP_LINEAR: out->op = AARCH64_SWS_OP_LINEAR; break; + case SWS_OP_LINEAR: + out->op = (ctx->flags & SWS_BITEXACT) + ? AARCH64_SWS_OP_LINEAR + : AARCH64_SWS_OP_LINEAR_FMA; + break; case SWS_OP_DITHER: out->op = AARCH64_SWS_OP_DITHER; break; case SWS_OP_FILTER_H: case SWS_OP_FILTER_V: @@ -277,6 +281,7 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, } break; case AARCH64_SWS_OP_LINEAR: + case AARCH64_SWS_OP_LINEAR_FMA: /** * The out->linear.mask field packs the 4x5 matrix from SwsLinearOp as * 2 bits per element: @@ -299,7 +304,6 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, LINEAR_MASK_SET(out->linear.mask, i, jj, LINEAR_MASK_X); } } - out->linear.fmla = !(ctx->flags & SWS_BITEXACT); break; case AARCH64_SWS_OP_DITHER: out->mask = 0; diff --git a/libswscale/tests/sws_ops_aarch64.c b/libswscale/tests/sws_ops_aarch64.c index fb53b2194e..c106677462 100644 --- a/libswscale/tests/sws_ops_aarch64.c +++ b/libswscale/tests/sws_ops_aarch64.c @@ -94,12 +94,12 @@ static int collect_ops_compile(SwsContext *ctx, const SwsOpList *ops, ret = aarch64_collect_op(¶ms, root); if (ret < 0) goto end; - if (params.op == AARCH64_SWS_OP_LINEAR) { + if (params.op == AARCH64_SWS_OP_LINEAR_FMA) { /** * Generate both sets of linear op functions that do use * and do not use fmla (selected by SWS_BITEXACT). */ - params.linear.fmla = !params.linear.fmla; + params.op = AARCH64_SWS_OP_LINEAR; ret = aarch64_collect_op(¶ms, root); if (ret < 0) goto end; -- 2.52.0 >From 0477c4f5207a2c3d1b2873ecf3c8da66c10a415c Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Fri, 12 Jun 2026 22:07:48 +0200 Subject: [PATCH 04/17] swscale/aarch64/ops: specialize clear operation There are now more specialized functions for components that clear to zero and one (using `movi` instead of `dup`). This is similar to the way SWS_UOP_CLEAR works and will simplify the move to uops. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops_asmgen.c | 40 +++++++++++++--- libswscale/aarch64/ops_entries.c | 74 +++++++++++++++++------------- libswscale/aarch64/ops_impl.c | 3 +- libswscale/aarch64/ops_impl.h | 7 +++ libswscale/aarch64/ops_impl_conv.c | 15 +++++- 5 files changed, 100 insertions(+), 39 deletions(-) diff --git a/libswscale/aarch64/ops_asmgen.c b/libswscale/aarch64/ops_asmgen.c index 260279117c..1dfc0060e5 100644 --- a/libswscale/aarch64/ops_asmgen.c +++ b/libswscale/aarch64/ops_asmgen.c @@ -823,11 +823,32 @@ static void asmgen_op_rshift(SwsAArch64Context *s, const SwsAArch64OpImplParams /* clear pixel values */ /* AARCH64_SWS_OP_CLEAR */ +static void emit_clear(SwsAArch64Context *s, const SwsAArch64OpImplParams *p, + RasmOp *vx, int i, const char *vx_str) +{ + RasmContext *r = s->rctx; + RasmOp clear_vec = s->vt[0]; + switch (MASK_GET(p->clear, i)) { + case 0: + i_movi(r, vx[i], IMM(0)); CMTF("%s[%u] = 0;", vx_str, i); + break; + case 1: + if (p->block_size * aarch64_pixel_size(p->type) == 8) { + i_movi(r, v_8b (vx[i]), IMM(0xff)); + } else { + i_movi(r, v_16b(vx[i]), IMM(0xff)); + } + CMTF("%s[%u] = UINT_MAX;", vx_str, i); + break; + default: + i_dup (r, vx[i], a64op_elem(clear_vec, i)); CMTF("%s[%u] = broadcast(clear_vec[%u]);", vx_str, i, i); + break; + } +} + static void asmgen_op_clear(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { RasmContext *r = s->rctx; - RasmOp *vl = s->vl; - RasmOp *vh = s->vh; RasmOp clear_vec = s->vt[0]; /** @@ -836,11 +857,18 @@ static void asmgen_op_clear(SwsAArch64Context *s, const SwsAArch64OpImplParams * * - if only 1 element and not vh, load directly with ld1r */ - i_ldr(r, v_q(clear_vec), a64op_off(s->impl, offsetof_impl_priv)); CMT("v128 clear_vec = impl->priv.v128;"); - asmgen_set_load_cont_node(s); + bool load_priv = false; + LOOP_MASK(p, i) { + if (MASK_GET(p->clear, i) == 0xf) + load_priv = true; + } + if (load_priv) { + i_ldr(r, v_q(clear_vec), a64op_off(s->impl, offsetof_impl_priv)); CMT("v128 clear_vec = impl->priv.v128;"); + asmgen_set_load_cont_node(s); + } - LOOP_MASK (p, i) { i_dup(r, vl[i], a64op_elem(clear_vec, i)); CMTF("vl[%u] = broadcast(clear_vec[%u])", i, i); } - LOOP_MASK_VH(s, p, i) { i_dup(r, vh[i], a64op_elem(clear_vec, i)); CMTF("vh[%u] = broadcast(clear_vec[%u])", i, i); } + LOOP_MASK (p, i) { emit_clear(s, p, s->vl, i, "vl"); } + LOOP_MASK_VH(s, p, i) { emit_clear(s, p, s->vh, i, "vh"); } } /*********************************************************************/ diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index 3f0fc83e26..9c4e103007 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -241,37 +241,49 @@ { .op = AARCH64_SWS_OP_RSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, { .op = AARCH64_SWS_OP_RSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, { .op = AARCH64_SWS_OP_RSHIFT, .shift = 6, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1011 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1100 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1101 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1010 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1011 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1101 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CLEAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1011 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1101 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1011 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xff1f, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xff1f, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xff1f, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xff1f, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff0, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff0, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1101 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1100 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0010 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0101 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1000 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1010 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1011 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1101 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, +{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, diff --git a/libswscale/aarch64/ops_impl.c b/libswscale/aarch64/ops_impl.c index e0dbcd5d80..799558613f 100644 --- a/libswscale/aarch64/ops_impl.c +++ b/libswscale/aarch64/ops_impl.c @@ -344,6 +344,7 @@ static const ParamField field_mask = { PARAM_FIELD(mask), static const ParamField field_type = { PARAM_FIELD(type), print_pixel_name, print_pixel_val, cmp_pixel }; static const ParamField field_block_size = { PARAM_FIELD(block_size), print_u8_name, print_u8_val, cmp_u8 }; static const ParamField field_shift = { PARAM_FIELD(shift), print_u8_name, print_u8_val, cmp_u8 }; +static const ParamField field_clear = { PARAM_FIELD(clear), print_u16_name, print_u16_val, cmp_u16 }; static const ParamField field_move = { PARAM_FIELD(move), print_u48_name, print_u48_val, cmp_u48 }; static const ParamField field_pack = { PARAM_FIELD(pack), print_u16_name, print_u16_val, cmp_u16 }; static const ParamField field_linear_mask = { PARAM_FIELD(linear.mask), print_u40_name, print_u40_val, cmp_u40 }; @@ -368,7 +369,7 @@ static const ParamField *op_fields[AARCH64_SWS_OP_TYPE_NB][MAX_LEVELS] = { [AARCH64_SWS_OP_PACK ] = { &field_op, &field_pack, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_LSHIFT ] = { &field_op, &field_shift, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_RSHIFT ] = { &field_op, &field_shift, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_CLEAR ] = { &field_op, &field_block_size, &field_type, &field_mask }, + [AARCH64_SWS_OP_CLEAR ] = { &field_op, &field_clear, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_TO_U8 ] = { &field_op, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_TO_U16 ] = { &field_op, &field_block_size, &field_type, &field_mask }, [AARCH64_SWS_OP_TO_U32 ] = { &field_op, &field_block_size, &field_type, &field_mask }, diff --git a/libswscale/aarch64/ops_impl.h b/libswscale/aarch64/ops_impl.h index 60fc14ee89..7461612ebd 100644 --- a/libswscale/aarch64/ops_impl.h +++ b/libswscale/aarch64/ops_impl.h @@ -71,6 +71,12 @@ typedef enum SwsAArch64OpType { /* Each nibble in the mask corresponds to one component. */ typedef uint16_t SwsAArch64OpMask; +/** + * Each nibble in the mask specifies whether to clear by all 0s (0), + * all 1s (1), or another value (f). + */ +typedef uint16_t SwsAArch64ClearMask; + /* Each byte is an LSB src|dst pair until 00 is reached. */ typedef uint64_t SwsAArch64MoveOp; #define AARCH64_MOVE_TMP 0xf @@ -105,6 +111,7 @@ typedef struct SwsAArch64OpImplParams { uint8_t block_size; union { uint8_t shift; + SwsAArch64ClearMask clear; SwsAArch64MoveOp move; SwsAArch64OpMask pack; SwsAArch64LinearOp linear; diff --git a/libswscale/aarch64/ops_impl_conv.c b/libswscale/aarch64/ops_impl_conv.c index 8b8dc553a7..a84acd746f 100644 --- a/libswscale/aarch64/ops_impl_conv.c +++ b/libswscale/aarch64/ops_impl_conv.c @@ -275,9 +275,22 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, break; case AARCH64_SWS_OP_CLEAR: out->mask = 0; + out->clear = 0; for (int i = 0; i < 4; i++) { - if (SWS_COMP_TEST(op->clear.mask, i)) + int mask_val = 0xf; + if (SWS_COMP_TEST(op->clear.mask, i)) { MASK_SET(out->mask, i, 1); + if (op->clear.value[i].num == 0) { + mask_val = 0; + } else { + uint32_t val = op->clear.value[i].num / op->clear.value[i].den; + if ((op->type == SWS_PIXEL_U8 && val == UINT8_MAX) || + (op->type == SWS_PIXEL_U16 && val == UINT16_MAX) || + (op->type == SWS_PIXEL_U32 && val == UINT32_MAX)) + mask_val = 1; + } + } + MASK_SET(out->clear, i, mask_val); } break; case AARCH64_SWS_OP_LINEAR: -- 2.52.0 >From 661af1a26d2fc241de32ee159e622b2183e30e44 Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Thu, 11 Jun 2026 22:04:58 +0200 Subject: [PATCH 05/17] swscale/aarch64/ops: remove overly-complicated generated lookup function ... and replace it by a simple linear lookup over ops_entries. The previous approach was faster, but for an init function this hardly matters. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/Makefile | 8 +- libswscale/aarch64/ops.c | 28 +- libswscale/aarch64/ops_asmgen.c | 166 +----- libswscale/aarch64/ops_entries.c | 818 ++++++++++++++--------------- libswscale/aarch64/ops_impl.c | 4 +- libswscale/aarch64/ops_lookup.h | 30 -- libswscale/tests/sws_ops_aarch64.c | 20 +- 7 files changed, 471 insertions(+), 603 deletions(-) delete mode 100644 libswscale/aarch64/ops_lookup.h diff --git a/libswscale/aarch64/Makefile b/libswscale/aarch64/Makefile index 0cbdb1b76e..e311f5446a 100644 --- a/libswscale/aarch64/Makefile +++ b/libswscale/aarch64/Makefile @@ -13,15 +13,9 @@ NEON-OBJS += aarch64/hscale.o \ NEON-OBJS-$(CONFIG_UNSTABLE) += aarch64/ops.o NEON-OBJS-$(CONFIG_UNSTABLE) += aarch64/ops_neon.gen.o -NEON-OBJS-$(CONFIG_UNSTABLE) += aarch64/ops_lookup.gen.o $(SUBDIR)aarch64/ops_neon.gen.S: $(SUBDIR)aarch64/ops_asmgen$(HOSTEXESUF) - $(M)$< -ops > [email protected] - $(CP) [email protected] $@ - $(RM) [email protected] - -$(SUBDIR)aarch64/ops_lookup.gen.c: $(SUBDIR)aarch64/ops_asmgen$(HOSTEXESUF) - $(M)$< -lookup > [email protected] + $(M)$< > [email protected] $(CP) [email protected] $@ $(RM) [email protected] diff --git a/libswscale/aarch64/ops.c b/libswscale/aarch64/ops.c index ab2adc37eb..71c0c38b06 100644 --- a/libswscale/aarch64/ops.c +++ b/libswscale/aarch64/ops.c @@ -24,8 +24,6 @@ #include "libavutil/avstring.h" #include "libavutil/tree.h" -#include "ops_lookup.h" - #include "ops_impl_conv.c" /** @@ -42,6 +40,30 @@ static_assert(offsetof_exec_out_bump == offsetof(SwsOpExec, out_bump), "SwsOpExe static_assert(offsetof_impl_cont == offsetof(SwsOpImpl, cont), "SwsOpImpl layout mismatch"); static_assert(offsetof_impl_priv == offsetof(SwsOpImpl, priv), "SwsOpImpl layout mismatch"); +/*********************************************************************/ +/* Forward-declare exported functions. */ +#define ENTRY(fname, ...) extern void fname(void); +#include "ops_entries.c" +#undef ENTRY + +static const struct { + void (*func)(void); + SwsAArch64OpImplParams params; +} ops_entries[] = { +#define ENTRY(fname, ...) { .func = fname, .params = __VA_ARGS__ }, +#include "ops_entries.c" +#undef ENTRY +}; + +/* Look up the exported function pointer for the given parameters. */ +static SwsFuncPtr aarch64_lookup(const SwsAArch64OpImplParams *p) +{ + for (int i = 0; i < FF_ARRAY_ELEMS(ops_entries); i++) + if (!memcmp(p, &ops_entries[i].params, sizeof(SwsAArch64OpImplParams))) + return ops_entries[i].func; + return NULL; +} + /*********************************************************************/ static int aarch64_setup_linear(const SwsAArch64OpImplParams *p, const SwsOp *op, SwsImplResult *res) @@ -199,7 +221,7 @@ static int aarch64_compile(SwsContext *ctx, const SwsOpList *ops, ret = convert_to_aarch64_impl(ctx, ops, i, block_size, ¶ms); if (ret < 0) goto error; - SwsFuncPtr func = ff_sws_aarch64_lookup(¶ms); + SwsFuncPtr func = aarch64_lookup(¶ms); if (!func) { ret = AVERROR(ENOTSUP); goto error; diff --git a/libswscale/aarch64/ops_asmgen.c b/libswscale/aarch64/ops_asmgen.c index 1dfc0060e5..e20424107a 100644 --- a/libswscale/aarch64/ops_asmgen.c +++ b/libswscale/aarch64/ops_asmgen.c @@ -95,7 +95,7 @@ static void *av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size, /*********************************************************************/ #include "rasm.c" #include "rasm_print.c" -#include "ops_impl.c" +#include "ops_impl.h" /** * Implementation parameters for all exported functions. This list is @@ -104,9 +104,16 @@ static void *av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size, * by running: * make fate-sws-ops-entries-aarch64 GEN=1 */ -static const SwsAArch64OpImplParams impl_params[] = { +typedef struct SwsAArch64OpEntry { + const char *name; + SwsAArch64OpImplParams params; +} SwsAArch64OpEntry; + +static const SwsAArch64OpEntry ops_entries[] = { +#define ENTRY(fname, ...) { .name = #fname, .params = __VA_ARGS__ }, #include "ops_entries.c" - { .op = AARCH64_SWS_OP_NONE } +#undef ENTRY + { NULL } }; /*********************************************************************/ @@ -124,24 +131,6 @@ static size_t aarch64_pixel_size(SwsAArch64PixelType fmt) return 0; } -static void impl_func_name(char **buf, size_t *size, const SwsAArch64OpImplParams *params) -{ - buf_appendf(buf, size, "ff_sws"); - const ParamField **fields = op_fields[params->op]; - for (int i = 0; fields[i]; i++) { - const ParamField *field = fields[i]; - void *p = (void *) (((uintptr_t) params) + field->offset); - field->print_str(buf, size, p); - } - buf_appendf(buf, size, "_neon"); -} - -void aarch64_op_impl_func_name(char *buf, size_t size, const SwsAArch64OpImplParams *params) -{ - impl_func_name(&buf, &size, params); - av_assert0(size && "string buffer exhausted"); -} - /*********************************************************************/ typedef struct SwsAArch64Context { RasmContext *rctx; @@ -1340,8 +1329,9 @@ static void asmgen_op_dither(SwsAArch64Context *s, const SwsAArch64OpImplParams } /*********************************************************************/ -static void asmgen_op_cps(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) +static void asmgen_op_cps(SwsAArch64Context *s, const SwsAArch64OpEntry *entry) { + const SwsAArch64OpImplParams *p = &entry->params; RasmContext *r = s->rctx; bool is_read = false; @@ -1363,9 +1353,7 @@ static void asmgen_op_cps(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) break; } - char func_name[128]; - aarch64_op_impl_func_name(func_name, sizeof(func_name), p); - rasm_func_begin(r, func_name, true, !is_read); + rasm_func_begin(r, entry->name, true, !is_read); /** * Set up vector register dimensions and reshape all vectors @@ -1432,112 +1420,6 @@ static void asmgen_op_cps(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) } } -/*********************************************************************/ -static void aarch64_op_impl_lookup_str(char *buf, size_t size, const SwsAArch64OpImplParams *params, - const SwsAArch64OpImplParams *prev, const char *p_str) -{ - int first_diff = 0; - int prev_levels = 0; - int levels = 0; - - /* Compute number of current levels. */ - if (params) { - const ParamField **fields = op_fields[params->op]; - while (fields[levels]) - levels++; - } - - /* Compute number of previous levels. */ - if (prev) { - const ParamField **prev_fields = op_fields[prev->op]; - while (prev_fields[prev_levels]) - prev_levels++; - } - - /* Walk up and check the conditions that match. */ - if (params && prev) { - const ParamField **fields = op_fields[params->op]; - first_diff = -1; - for (int i = 0; fields[i]; i++) { - const ParamField *field = fields[i]; - if (first_diff < 0) { - int diff = field->cmp_val((void *) (((uintptr_t) params) + field->offset), - (void *) (((uintptr_t) prev) + field->offset)); - if (diff) - first_diff = i; - } - } - } - - /* Walk back closing conditions. */ - if (prev) { - for (int i = prev_levels - 1; i > first_diff; i--) { - buf_appendf(&buf, &size, "%*sreturn NULL;\n", 4 * (i + 1), ""); - buf_appendf(&buf, &size, "%*s}\n", 4 * i, ""); - } - } - - /* Walk up adding conditions to return current function. */ - if (params) { - const ParamField **fields = op_fields[params->op]; - for (int i = first_diff; i < levels; i++) { - const ParamField *field = fields[i]; - void *p = (void *) (((uintptr_t) params) + field->offset); - buf_appendf(&buf, &size, "%*sif (%s%s == ", 4 * (i + 1), "", p_str, field->name); - field->print_val(&buf, &size, p); - buf_appendf(&buf, &size, ")"); - if (i == (levels - 1)) { - buf_appendf(&buf, &size, " return "); - impl_func_name(&buf, &size, params); - buf_appendf(&buf, &size, ";\n"); - } else { - buf_appendf(&buf, &size, " {\n"); - } - } - } - - av_assert0(size && "string buffer exhausted"); -} - -static int lookup_gen(void) -{ - char buf[1024]; - - /** - * The lookup function matches the SwsAArch64OpImplParams from - * ops_entries.c to the exported functions generated by asmgen_op(). - * Each call to aarch64_op_impl_lookup_str() generates a code - * fragment to uniquely detect the current function, opening and/or - * closing conditions depending on the parameters of the previous - * function. - */ - - /* External function declarations. */ - printf("#include \"libswscale/aarch64/ops_lookup.h\"\n"); - printf("\n"); - for (const SwsAArch64OpImplParams *p = impl_params; p->op; p++) { - aarch64_op_impl_func_name(buf, sizeof(buf), p); - printf("extern void %s(void);\n", buf); - } - printf("\n"); - - /* Lookup function. */ - printf("SwsFuncPtr ff_sws_aarch64_lookup(const SwsAArch64OpImplParams *p)\n"); - printf("{\n"); - const SwsAArch64OpImplParams *prev = NULL; - for (const SwsAArch64OpImplParams *p = impl_params; p->op; p++) { - aarch64_op_impl_lookup_str(buf, sizeof(buf), p, prev, "p->"); - printf("%s", buf); - prev = p; - } - aarch64_op_impl_lookup_str(buf, sizeof(buf), NULL, prev, "p->"); - printf("%s", buf); - printf(" return NULL;\n"); - printf("}\n"); - - return 0; -} - /*********************************************************************/ /* Generate all functions described by ops_entries.c */ @@ -1633,9 +1515,9 @@ static int asmgen(void) asmgen_process(&s, 0x1111); /* Generate all functions from ops_entries.c using rasm. */ - const SwsAArch64OpImplParams *params = impl_params; - while (params->op) { - asmgen_op_cps(&s, params++); + const SwsAArch64OpEntry *entries = ops_entries; + while (entries->name) { + asmgen_op_cps(&s, entries++); if (rctx->error) { ret = rctx->error; goto error; @@ -1659,23 +1541,9 @@ error: /*********************************************************************/ int main(int argc, char *argv[]) { - bool lookup = false; - bool ops = false; - #ifdef _WIN32 _setmode(_fileno(stdout), _O_BINARY); #endif - for (int i = 1; i < argc; i++) { - if (!strcmp(argv[i], "-ops")) - ops = true; - else if (!strcmp(argv[i], "-lookup")) - lookup = true; - } - if ((lookup && ops) || (!lookup && !ops)) { - fprintf(stderr, "Exactly one of -ops or -lookup must be specified.\n"); - return -1; - } - - return lookup ? lookup_gen() : asmgen(); + return asmgen(); } diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index 9c4e103007..92b3b646c1 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -3,412 +3,412 @@ * To regenerate, run: make fate-sws-ops-entries-aarch64 GEN=1 */ -{ .op = AARCH64_SWS_OP_READ_BIT, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_READ_BIT, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_READ_NIBBLE, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_READ_NIBBLE, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_WRITE_BIT, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_WRITE_NIBBLE, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_WRITE_NIBBLE, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000001ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000002ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000003ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000003ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000003ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000010ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000010ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000010ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000013ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000013ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000013ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000020ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0100 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000020ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0100 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000030ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000030ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000030ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000031ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000130ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000310ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000310ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000320ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000001031ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000001301ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000002032ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000002032ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000002302ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000002302ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000102132ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000102132ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000102132ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000132102ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000201231ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000201231ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000231201ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000231201ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000231201ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f1201f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f1201f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f3203f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f3203f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00003f2302f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00003f2312f1ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00003f2312f1ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x002f123103f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x002f123103f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x003f231201f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x003f231201f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000002010ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, -{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000002010ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, -{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000002010ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, -{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000103120ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000103120ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000103120ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000302010ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000302010ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_COPY, .move = 0x000000302010ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_COPY, .move = 0x001f01f03020ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_COPY, .move = 0x001f01f03020ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0121, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0121, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0233, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0233, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0332, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0332, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0444, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0444, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0555, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0555, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0565, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0565, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_UNPACK, .pack = 0x2aaa, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_UNPACK, .pack = 0x2aaa, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_UNPACK, .pack = 0xaaa2, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0100 }, -{ .op = AARCH64_SWS_OP_UNPACK, .pack = 0xaaa2, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_PACK, .pack = 0x0121, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PACK, .pack = 0x0121, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PACK, .pack = 0x0233, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PACK, .pack = 0x0233, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PACK, .pack = 0x0332, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PACK, .pack = 0x0332, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PACK, .pack = 0x0444, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PACK, .pack = 0x0444, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PACK, .pack = 0x0555, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PACK, .pack = 0x0555, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PACK, .pack = 0x0565, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PACK, .pack = 0x0565, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_PACK, .pack = 0x2aaa, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_PACK, .pack = 0xaaa2, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 1, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 1, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 1, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 2, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 2, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 2, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 2, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 2, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 3, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 5, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 7, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 8, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LSHIFT, .shift = 8, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_RSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_RSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_RSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_RSHIFT, .shift = 4, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_RSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_RSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_RSHIFT, .shift = 6, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1011 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1101 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1011 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xff1f, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xff1f, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xff1f, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xff1f, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff0, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff0, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1101 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1100 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1010 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1011 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1101 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_TO_U8, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_TO_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0100 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0100 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_MAX, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_MAX, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_MAX, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_MAX, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_MAX, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_SCALE, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_SCALE, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_SCALE, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_SCALE, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000000000fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x00000000fcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x00000000ffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000000c000ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000373dcc7ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x0003f3fccfULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000c00c00cULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000c30cc0fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000ff3fcfcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000ff3fcffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc000000000ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00000000fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc0000000fcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc003f3fccfULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00c00c00cULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00ff3fcffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000000000fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x00000000fcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x00000000ffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, -{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000000c000ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000373dcc7ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x0003f3fccfULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000c00c00cULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000c30cc0fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000ff3fcfcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000ff3fcffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc000000000ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc00000000fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc0000000fcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc003f3fccfULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc00c00c00cULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc00ff3fcffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x0325, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x032f, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x2305, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x230f, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x3000, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x302f, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x3ff0, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x5023, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x5032, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x5230, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x5ff0, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x5fff, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1000 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf023, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf032, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf203, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf230, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf2f0, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0101 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf2ff, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0100 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf302, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xff30, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xff3f, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0010 }, -{ .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xfff0, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }, +ENTRY(ff_sws_read_bit_8_u8_0001_neon, { .op = AARCH64_SWS_OP_READ_BIT, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_read_bit_16_u8_0001_neon, { .op = AARCH64_SWS_OP_READ_BIT, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_read_nibble_8_u8_0001_neon, { .op = AARCH64_SWS_OP_READ_NIBBLE, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_read_nibble_16_u8_0001_neon, { .op = AARCH64_SWS_OP_READ_NIBBLE, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_read_packed_8_u8_0011_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_read_packed_8_u8_0111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_read_packed_8_u8_1111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_read_packed_8_u16_0011_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_read_packed_8_u16_0111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_read_packed_8_u16_1111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_read_packed_8_u32_0011_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0011 }) +ENTRY(ff_sws_read_packed_8_u32_0111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_read_packed_8_u32_1111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_read_packed_16_u8_0011_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_read_packed_16_u8_0111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_read_packed_16_u8_1111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_read_packed_16_u16_0011_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_read_packed_16_u16_0111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_read_packed_16_u16_1111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_read_planar_8_u8_0001_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_read_planar_8_u8_0011_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_read_planar_8_u8_0111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_read_planar_8_u8_1111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_read_planar_8_u16_0001_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_read_planar_8_u16_0011_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_read_planar_8_u16_0111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_read_planar_8_u16_1111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_read_planar_8_u32_0001_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }) +ENTRY(ff_sws_read_planar_8_u32_0111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_read_planar_8_u32_1111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_read_planar_16_u8_0001_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_read_planar_16_u8_0111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_read_planar_16_u8_1111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_read_planar_16_u16_0001_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_read_planar_16_u16_0111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_read_planar_16_u16_1111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_write_bit_8_u8_0001_neon, { .op = AARCH64_SWS_OP_WRITE_BIT, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_write_nibble_8_u8_0001_neon, { .op = AARCH64_SWS_OP_WRITE_NIBBLE, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_write_nibble_16_u8_0001_neon, { .op = AARCH64_SWS_OP_WRITE_NIBBLE, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_write_packed_8_u8_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_write_packed_8_u8_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_write_packed_8_u8_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_write_packed_8_u16_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_write_packed_8_u16_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_write_packed_8_u16_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_write_packed_8_u32_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0011 }) +ENTRY(ff_sws_write_packed_8_u32_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_write_packed_8_u32_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_write_packed_16_u8_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_write_packed_16_u8_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_write_packed_16_u8_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_write_packed_16_u16_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_write_packed_16_u16_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_write_packed_16_u16_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_write_planar_8_u8_0001_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_write_planar_8_u8_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_write_planar_8_u8_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_write_planar_8_u8_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_write_planar_8_u16_0001_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_write_planar_8_u16_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_write_planar_8_u16_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_write_planar_8_u16_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_write_planar_8_u32_0001_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }) +ENTRY(ff_sws_write_planar_8_u32_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_write_planar_8_u32_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_write_planar_16_u8_0001_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_write_planar_16_u8_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_write_planar_16_u8_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_write_planar_16_u8_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_write_planar_16_u16_0001_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_write_planar_16_u16_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_write_planar_16_u16_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_write_planar_16_u16_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_swap_bytes_8_u16_0001_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_swap_bytes_8_u16_0010_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }) +ENTRY(ff_sws_swap_bytes_8_u16_0011_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_swap_bytes_8_u16_0111_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_swap_bytes_8_u16_1001_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1001 }) +ENTRY(ff_sws_swap_bytes_8_u16_1110_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_swap_bytes_8_u16_1111_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_swap_bytes_8_u32_0001_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }) +ENTRY(ff_sws_swap_bytes_8_u32_0011_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0011 }) +ENTRY(ff_sws_swap_bytes_8_u32_0111_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_swap_bytes_8_u32_1001_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1001 }) +ENTRY(ff_sws_swap_bytes_8_u32_1110_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1110 }) +ENTRY(ff_sws_swap_bytes_8_u32_1111_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_swap_bytes_16_u16_0001_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_swap_bytes_16_u16_0011_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_swap_bytes_16_u16_0111_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_swap_bytes_16_u16_1110_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_swap_bytes_16_u16_1111_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_permute_000000000001_32_u8_0001_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000001ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_permute_000000000002_32_u8_0001_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000002ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_permute_000000000003_8_u8_0001_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000003ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_permute_000000000003_16_u8_0001_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000003ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_permute_000000000003_32_u8_0001_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000003ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_permute_000000000010_8_u8_0010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000010ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000010_16_u8_0010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000010ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000010_32_u8_0010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000010ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000013_8_u8_0010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000013ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000013_16_u8_0010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000013ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000013_32_u8_0010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000013ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000020_8_u8_0100_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000020ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0100 }) +ENTRY(ff_sws_permute_000000000020_32_u8_0100_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000020ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0100 }) +ENTRY(ff_sws_permute_000000000030_8_u8_1000_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000030ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_permute_000000000030_16_u8_1000_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000030ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_permute_000000000030_32_u8_1000_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000030ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_permute_000000000031_32_u8_1000_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000031ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_permute_000000000130_32_u8_1001_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000130ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1001 }) +ENTRY(ff_sws_permute_000000000310_8_u8_0011_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000310ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_000000000310_16_u8_0011_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000310ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_000000000320_32_u8_0101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000320ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_000000001031_32_u8_1010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000001031ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }) +ENTRY(ff_sws_permute_000000001301_8_u8_0011_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000001301ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_000000002032_8_u8_1100_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000002032ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }) +ENTRY(ff_sws_permute_000000002032_32_u8_1100_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000002032ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }) +ENTRY(ff_sws_permute_000000002302_16_u8_0101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000002302ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_000000002302_32_u8_0101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000002302ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_000000102132_8_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000102132ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_000000102132_16_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000102132ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_000000102132_32_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000102132ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_000000132102_32_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000132102ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_0000001f01f0_8_u8_0011_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_0000001f01f0_16_u8_0011_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_0000001f01f0_32_u8_0011_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_000000201231_8_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000201231ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_000000201231_32_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000201231ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_000000231201_8_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000231201ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_000000231201_16_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000231201ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_000000231201_32_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000231201ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_0000002f02f0_8_u8_0101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_0000002f02f0_16_u8_0101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_0000002f02f0_32_u8_0101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_0000002f12f1_8_u8_0110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_permute_0000002f12f1_16_u8_0110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_permute_0000002f12f1_32_u8_0110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_permute_0000003f13f1_8_u8_1010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }) +ENTRY(ff_sws_permute_0000003f13f1_16_u8_1010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }) +ENTRY(ff_sws_permute_0000003f13f1_32_u8_1010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }) +ENTRY(ff_sws_permute_00001f2102f0_8_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00001f2102f0_16_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00001f2102f0_32_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f1201f0_16_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f1201f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f1201f0_32_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f1201f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f12f103_8_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f12f103_16_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f12f103_32_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f12f130_8_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_00002f12f130_16_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_00002f12f130_32_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_00002f3203f0_8_u8_1101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f3203f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }) +ENTRY(ff_sws_permute_00002f3203f0_16_u8_1101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f3203f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }) +ENTRY(ff_sws_permute_00003f2302f0_16_u8_1101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00003f2302f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }) +ENTRY(ff_sws_permute_00003f2312f1_8_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00003f2312f1ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_00003f2312f1_16_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00003f2312f1ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_001f213203f0_8_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_001f213203f0_16_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_001f213203f0_32_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_002f123103f0_8_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x002f123103f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_002f123103f0_32_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x002f123103f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_003f231201f0_16_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x003f231201f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_003f231201f0_32_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x003f231201f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_2f12f13f03f0_8_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_2f12f13f03f0_16_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_2f12f13f03f0_32_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_copy_000000002010_8_u8_0110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000002010ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_copy_000000002010_16_u8_0110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000002010ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_copy_000000002010_32_u8_0110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000002010ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_copy_000000103120_8_u8_1110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000103120ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_000000103120_16_u8_1110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000103120ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_000000103120_32_u8_1110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000103120ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_000000302010_8_u8_1110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000302010ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_000000302010_16_u8_1110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000302010ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_000000302010_32_u8_1110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000302010ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_001f01f03020_8_u8_1111_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x001f01f03020ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_copy_001f01f03020_16_u8_1111_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x001f01f03020ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_unpack_0121_8_u8_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0121, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0121_16_u8_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0121, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0233_8_u8_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0233, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0233_16_u8_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0233, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0332_8_u8_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0332, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0332_16_u8_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0332, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0444_8_u16_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0444, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0444_16_u16_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0444, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0555_8_u16_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0555, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0555_16_u16_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0555, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0565_8_u16_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0565, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0565_16_u16_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0565, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_2aaa_8_u32_0010_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x2aaa, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0010 }) +ENTRY(ff_sws_unpack_2aaa_8_u32_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x2aaa, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_aaa2_8_u32_0100_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0xaaa2, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0100 }) +ENTRY(ff_sws_unpack_aaa2_8_u32_1110_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0xaaa2, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1110 }) +ENTRY(ff_sws_pack_0121_8_u8_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0121, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0121_16_u8_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0121, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0233_8_u8_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0233, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0233_16_u8_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0233, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0332_8_u8_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0332, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0332_16_u8_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0332, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0444_8_u16_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0444, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0444_16_u16_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0444, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0555_8_u16_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0555, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0555_16_u16_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0555, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0565_8_u16_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0565, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0565_16_u16_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0565, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_2aaa_8_u32_1111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x2aaa, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_pack_aaa2_8_u32_1111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0xaaa2, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_lshift_1_8_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 1, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_1_16_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 1, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_1_16_u16_1110_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 1, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_2_8_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 2, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_2_8_u16_1110_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 2, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_2_8_u32_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 2, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_2_16_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 2, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_2_16_u16_1110_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 2, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_3_16_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 3, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_4_8_u16_0001_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_lshift_4_8_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_4_8_u16_1110_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_4_16_u16_0001_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_lshift_4_16_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_4_16_u16_1110_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_5_16_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 5, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_6_8_u16_0001_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_lshift_6_8_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_6_8_u16_1110_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_6_16_u16_0001_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_lshift_6_16_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_6_16_u16_1110_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_7_16_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 7, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_8_16_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 8, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_8_16_u16_1110_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 8, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_rshift_4_8_u16_0001_neon, { .op = AARCH64_SWS_OP_RSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_rshift_4_8_u16_0010_neon, { .op = AARCH64_SWS_OP_RSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }) +ENTRY(ff_sws_rshift_4_8_u16_0111_neon, { .op = AARCH64_SWS_OP_RSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_rshift_4_16_u16_0111_neon, { .op = AARCH64_SWS_OP_RSHIFT, .shift = 4, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_rshift_6_8_u16_0001_neon, { .op = AARCH64_SWS_OP_RSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_rshift_6_8_u16_0111_neon, { .op = AARCH64_SWS_OP_RSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_rshift_6_16_u16_0111_neon, { .op = AARCH64_SWS_OP_RSHIFT, .shift = 6, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_clear_0fff_8_u8_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_clear_0fff_8_u8_1011_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1011 }) +ENTRY(ff_sws_clear_0fff_8_u16_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }) +ENTRY(ff_sws_clear_0fff_8_u16_1101_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1101 }) +ENTRY(ff_sws_clear_0fff_16_u8_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_clear_0fff_16_u16_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }) +ENTRY(ff_sws_clear_1fff_8_u8_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_clear_1fff_8_u8_1011_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1011 }) +ENTRY(ff_sws_clear_1fff_8_u8_1101_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }) +ENTRY(ff_sws_clear_1fff_8_u16_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }) +ENTRY(ff_sws_clear_1fff_16_u8_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_clear_1fff_16_u16_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }) +ENTRY(ff_sws_clear_ff1f_8_u8_0010_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xff1f, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_clear_ff1f_8_u16_0010_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xff1f, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }) +ENTRY(ff_sws_clear_ff1f_16_u8_0010_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xff1f, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_clear_ff1f_16_u16_0010_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xff1f, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }) +ENTRY(ff_sws_clear_fff0_8_u8_0001_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff0, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff0_16_u8_0001_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff0, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff1_8_u8_0001_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff1_8_u8_1101_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }) +ENTRY(ff_sws_clear_fff1_8_u16_0001_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff1_8_u16_1101_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1101 }) +ENTRY(ff_sws_clear_fff1_16_u8_0001_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff1_16_u8_0111_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_clear_fff1_16_u16_0001_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff1_16_u16_0111_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_clear_ffff_8_u8_0011_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_clear_ffff_8_u8_0101_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_clear_ffff_8_u8_1100_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }) +ENTRY(ff_sws_clear_ffff_8_u16_1100_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1100 }) +ENTRY(ff_sws_clear_ffff_8_u32_0001_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }) +ENTRY(ff_sws_clear_ffff_8_u32_0010_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0010 }) +ENTRY(ff_sws_clear_ffff_8_u32_0101_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0101 }) +ENTRY(ff_sws_clear_ffff_8_u32_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1000 }) +ENTRY(ff_sws_clear_ffff_8_u32_1010_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1010 }) +ENTRY(ff_sws_clear_ffff_8_u32_1011_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1011 }) +ENTRY(ff_sws_clear_ffff_8_u32_1101_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1101 }) +ENTRY(ff_sws_clear_ffff_16_u8_0011_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_clear_ffff_16_u8_0110_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_clear_ffff_16_u16_0001_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_clear_ffff_16_u16_0011_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_clear_ffff_16_u16_0111_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_clear_ffff_16_u16_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }) +ENTRY(ff_sws_to_u8_8_f32_0001_neon, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_to_u8_8_f32_0011_neon, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }) +ENTRY(ff_sws_to_u8_8_f32_0111_neon, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_to_u8_8_f32_1001_neon, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_to_u8_8_f32_1110_neon, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_to_u8_8_f32_1111_neon, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_to_u8_16_u16_0111_neon, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_to_u16_8_u8_0111_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_to_u16_8_u32_0111_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_to_u16_8_u32_1110_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1110 }) +ENTRY(ff_sws_to_u16_8_f32_0001_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_to_u16_8_f32_0011_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }) +ENTRY(ff_sws_to_u16_8_f32_0111_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_to_u16_8_f32_1001_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_to_u16_8_f32_1110_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_to_u16_8_f32_1111_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_to_u16_16_u8_0001_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_to_u16_16_u8_0111_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_to_u16_16_u8_1110_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_to_u32_8_u8_0001_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_to_u32_8_u8_0111_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_to_u32_8_u16_0001_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_to_u32_8_u16_0111_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_to_u32_8_f32_0001_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_to_u32_8_f32_0111_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_to_u32_8_f32_1001_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_to_u32_8_f32_1110_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_to_u32_8_f32_1111_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_to_f32_8_u8_0001_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_to_f32_8_u8_0010_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_to_f32_8_u8_0011_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_to_f32_8_u8_0100_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0100 }) +ENTRY(ff_sws_to_f32_8_u8_0111_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_to_f32_8_u8_1010_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }) +ENTRY(ff_sws_to_f32_8_u8_1100_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }) +ENTRY(ff_sws_to_f32_8_u8_1110_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_to_f32_8_u8_1111_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_to_f32_8_u16_0001_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_to_f32_8_u16_0010_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }) +ENTRY(ff_sws_to_f32_8_u16_0011_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_to_f32_8_u16_0111_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_to_f32_8_u16_1110_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_to_f32_8_u16_1111_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_to_f32_8_u32_0010_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0010 }) +ENTRY(ff_sws_to_f32_8_u32_0100_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0100 }) +ENTRY(ff_sws_to_f32_8_u32_0111_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_to_f32_8_u32_1110_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1110 }) +ENTRY(ff_sws_expand_pair_16_u8_0001_neon, { .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_expand_pair_16_u8_0011_neon, { .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_expand_pair_16_u8_0111_neon, { .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_expand_pair_16_u8_1110_neon, { .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_expand_pair_16_u8_1111_neon, { .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_min_8_f32_0001_neon, { .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_min_8_f32_0011_neon, { .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }) +ENTRY(ff_sws_min_8_f32_0111_neon, { .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_min_8_f32_1001_neon, { .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_min_8_f32_1110_neon, { .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_min_8_f32_1111_neon, { .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_max_8_f32_0001_neon, { .op = AARCH64_SWS_OP_MAX, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_max_8_f32_0011_neon, { .op = AARCH64_SWS_OP_MAX, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }) +ENTRY(ff_sws_max_8_f32_0111_neon, { .op = AARCH64_SWS_OP_MAX, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_max_8_f32_1001_neon, { .op = AARCH64_SWS_OP_MAX, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_max_8_f32_1111_neon, { .op = AARCH64_SWS_OP_MAX, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_scale_8_u32_0001_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }) +ENTRY(ff_sws_scale_8_u32_0111_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_scale_8_f32_0001_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_scale_8_f32_0011_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }) +ENTRY(ff_sws_scale_8_f32_0111_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_scale_8_f32_1110_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_scale_8_f32_1111_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_scale_16_u8_0001_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_scale_16_u8_0111_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_scale_16_u16_0001_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_scale_16_u16_0111_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_linear_000000000f_8_f32_0001_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000000000fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_00000000fc_8_f32_0001_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x00000000fcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_00000000ff_8_f32_0001_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x00000000ffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_000000c000_8_f32_0010_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000000c000ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0010 }) +ENTRY(ff_sws_linear_000373dcc7_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000373dcc7ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_0003f3fccf_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x0003f3fccfULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_000c00c00c_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000c00c00cULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_000c30cc0f_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000c30cc0fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_000ff3fcfc_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000ff3fcfcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_000ff3fcff_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000ff3fcffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_c000000000_8_f32_1000_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc000000000ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1000 }) +ENTRY(ff_sws_linear_c00000000f_8_f32_1001_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00000000fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_linear_c0000000fc_8_f32_1001_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc0000000fcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_linear_c003f3fccf_8_f32_1111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc003f3fccfULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_linear_c00c00c00c_8_f32_1111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00c00c00cULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_linear_c00ff3fcff_8_f32_1111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00ff3fcffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_linear_fma_000000000f_8_f32_0001_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000000000fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_fma_00000000fc_8_f32_0001_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x00000000fcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_fma_00000000ff_8_f32_0001_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x00000000ffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_fma_000000c000_8_f32_0010_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000000c000ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0010 }) +ENTRY(ff_sws_linear_fma_000373dcc7_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000373dcc7ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_0003f3fccf_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x0003f3fccfULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_000c00c00c_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000c00c00cULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_000c30cc0f_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000c30cc0fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_000ff3fcfc_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000ff3fcfcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_000ff3fcff_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000ff3fcffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_c000000000_8_f32_1000_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc000000000ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1000 }) +ENTRY(ff_sws_linear_fma_c00000000f_8_f32_1001_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc00000000fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_linear_fma_c0000000fc_8_f32_1001_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc0000000fcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_linear_fma_c003f3fccf_8_f32_1111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc003f3fccfULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_linear_fma_c00c00c00c_8_f32_1111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc00c00c00cULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_linear_fma_c00ff3fcff_8_f32_1111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc00ff3fcffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_0325_4_8_f32_1111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x0325, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_032f_4_8_f32_1110_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x032f, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_dither_2305_4_8_f32_1111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x2305, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_230f_4_8_f32_1110_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x230f, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_dither_3000_4_8_f32_1111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x3000, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_302f_4_8_f32_1110_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x302f, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_dither_3ff0_4_8_f32_1001_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x3ff0, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_dither_5023_4_8_f32_1111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x5023, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_5032_4_8_f32_1111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x5032, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_5230_4_8_f32_1111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x5230, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_5ff0_4_8_f32_1001_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x5ff0, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_dither_5fff_4_8_f32_1000_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x5fff, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1000 }) +ENTRY(ff_sws_dither_f023_4_8_f32_0111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf023, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_dither_f032_4_8_f32_0111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf032, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_dither_f203_4_8_f32_0111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf203, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_dither_f230_4_8_f32_0111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf230, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_dither_f2f0_4_8_f32_0101_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf2f0, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0101 }) +ENTRY(ff_sws_dither_f2ff_4_8_f32_0100_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf2ff, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0100 }) +ENTRY(ff_sws_dither_f302_4_8_f32_0111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf302, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_dither_ff30_4_8_f32_0011_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xff30, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }) +ENTRY(ff_sws_dither_ff3f_4_8_f32_0010_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xff3f, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0010 }) +ENTRY(ff_sws_dither_fff0_4_8_f32_0001_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xfff0, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) diff --git a/libswscale/aarch64/ops_impl.c b/libswscale/aarch64/ops_impl.c index 799558613f..f30cc18baf 100644 --- a/libswscale/aarch64/ops_impl.c +++ b/libswscale/aarch64/ops_impl.c @@ -191,8 +191,8 @@ static void buf_appendf(char **pbuf, size_t *prem, const char *fmt, ...) /** * The following structure is used to describe one field from * SwsAArch64OpImplParams. This will be used to serialize the parameter - * structure, generate function names and lookup strings, and compare - * two sets of parameters. + * structure, generate function names, and compare two sets of + * parameters. */ typedef struct ParamField { diff --git a/libswscale/aarch64/ops_lookup.h b/libswscale/aarch64/ops_lookup.h deleted file mode 100644 index 06858991d8..0000000000 --- a/libswscale/aarch64/ops_lookup.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2026 Ramiro Polla - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef SWSCALE_AARCH64_OPS_LOOKUP_H -#define SWSCALE_AARCH64_OPS_LOOKUP_H - -#include "libswscale/ops_chain.h" -#include "libswscale/aarch64/ops_impl.h" - -/* Look up the exported function pointer for the given parameters. */ -SwsFuncPtr ff_sws_aarch64_lookup(const SwsAArch64OpImplParams *p); - -#endif /* SWSCALE_AARCH64_OPS_LOOKUP_H */ diff --git a/libswscale/tests/sws_ops_aarch64.c b/libswscale/tests/sws_ops_aarch64.c index c106677462..a48e95a8a3 100644 --- a/libswscale/tests/sws_ops_aarch64.c +++ b/libswscale/tests/sws_ops_aarch64.c @@ -147,9 +147,23 @@ static int register_op(SwsContext *ctx, void *opaque, SwsOpList *ops) } /*********************************************************************/ +static void impl_func_name(char **buf, size_t *size, const SwsAArch64OpImplParams *params) +{ + buf_appendf(buf, size, "ff_sws"); + const ParamField **fields = op_fields[params->op]; + for (int i = 0; fields[i]; i++) { + const ParamField *field = fields[i]; + void *p = (void *) (((uintptr_t) params) + field->offset); + field->print_str(buf, size, p); + } + buf_appendf(buf, size, "_neon"); +} + static void serialize_op(char *buf, size_t size, const SwsAArch64OpImplParams *params) { - buf_appendf(&buf, &size, "{"); + buf_appendf(&buf, &size, "ENTRY("); + impl_func_name(&buf, &size, params); + buf_appendf(&buf, &size, ", {"); const ParamField **fields = op_fields[params->op]; for (int i = 0; fields[i]; i++) { const ParamField *field = fields[i]; @@ -159,7 +173,7 @@ static void serialize_op(char *buf, size_t size, const SwsAArch64OpImplParams *p buf_appendf(&buf, &size, " .%s = ", field->name); field->print_val(&buf, &size, p); } - buf_appendf(&buf, &size, " }"); + buf_appendf(&buf, &size, " })"); av_assert0(size && "string buffer exhausted"); } @@ -171,7 +185,7 @@ static int print_op(void *opaque, void *elem) char buf[256]; serialize_op(buf, sizeof(buf), params); - fprintf(fp, "%s,\n", buf); + fprintf(fp, "%s\n", buf); av_free(params); -- 2.52.0 >From 5753ceb8dd6a0994e05c47a825a6bfc052b0e0b6 Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Thu, 18 Jun 2026 01:18:22 +0200 Subject: [PATCH 06/17] swscale/aarch64/ops: remove overly-complicated field-specific functions ... and replace them by simple switches. Since the last commit, op_fields is no longer used by aarch64/ops_asmgen, so it can be simplified into its only user. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops_impl.c | 385 ----------------------------- libswscale/tests/sws_ops_aarch64.c | 225 +++++++++++++++-- 2 files changed, 200 insertions(+), 410 deletions(-) delete mode 100644 libswscale/aarch64/ops_impl.c diff --git a/libswscale/aarch64/ops_impl.c b/libswscale/aarch64/ops_impl.c deleted file mode 100644 index f30cc18baf..0000000000 --- a/libswscale/aarch64/ops_impl.c +++ /dev/null @@ -1,385 +0,0 @@ -/* - * Copyright (C) 2026 Ramiro Polla - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * This file is used both by sws_ops_aarch64 to generate ops_entries.c and - * by the standalone build-time tool that generates the static assembly - * functions (aarch64/ops_asmgen). Therefore, it must not depend on internal - * FFmpeg libraries. - */ - -#include <inttypes.h> -#include <stdarg.h> -#include <stdbool.h> -#include <stdio.h> - -#include "libavutil/attributes.h" - -/** - * NOTE: ops_asmgen contains header redefinitions to provide av_assert0 - * while not depending on internal FFmpeg libraries. - */ -#include "libavutil/avassert.h" - -#include "ops_impl.h" - -/*********************************************************************/ -static const char pixel_types[AARCH64_PIXEL_TYPE_NB][32] = { - [AARCH64_PIXEL_U8 ] = "AARCH64_PIXEL_U8", - [AARCH64_PIXEL_U16] = "AARCH64_PIXEL_U16", - [AARCH64_PIXEL_U32] = "AARCH64_PIXEL_U32", - [AARCH64_PIXEL_F32] = "AARCH64_PIXEL_F32", -}; - -static const char *aarch64_pixel_type(SwsAArch64PixelType fmt) -{ - if (fmt >= AARCH64_PIXEL_TYPE_NB) { - av_assert0(!"Invalid pixel type!"); - return NULL; - } - return pixel_types[fmt]; -} - -static const char pixel_type_names[AARCH64_PIXEL_TYPE_NB][4] = { - [AARCH64_PIXEL_U8 ] = "u8", - [AARCH64_PIXEL_U16] = "u16", - [AARCH64_PIXEL_U32] = "u32", - [AARCH64_PIXEL_F32] = "f32", -}; - -static const char *aarch64_pixel_type_name(SwsAArch64PixelType fmt) -{ - if (fmt >= AARCH64_PIXEL_TYPE_NB) { - av_assert0(!"Invalid pixel type!"); - return NULL; - } - return pixel_type_names[fmt]; -} - -/*********************************************************************/ -static const char op_types[AARCH64_SWS_OP_TYPE_NB][32] = { - [AARCH64_SWS_OP_NONE ] = "AARCH64_SWS_OP_NONE", - [AARCH64_SWS_OP_READ_BIT ] = "AARCH64_SWS_OP_READ_BIT", - [AARCH64_SWS_OP_READ_NIBBLE ] = "AARCH64_SWS_OP_READ_NIBBLE", - [AARCH64_SWS_OP_READ_PACKED ] = "AARCH64_SWS_OP_READ_PACKED", - [AARCH64_SWS_OP_READ_PLANAR ] = "AARCH64_SWS_OP_READ_PLANAR", - [AARCH64_SWS_OP_WRITE_BIT ] = "AARCH64_SWS_OP_WRITE_BIT", - [AARCH64_SWS_OP_WRITE_NIBBLE ] = "AARCH64_SWS_OP_WRITE_NIBBLE", - [AARCH64_SWS_OP_WRITE_PACKED ] = "AARCH64_SWS_OP_WRITE_PACKED", - [AARCH64_SWS_OP_WRITE_PLANAR ] = "AARCH64_SWS_OP_WRITE_PLANAR", - [AARCH64_SWS_OP_SWAP_BYTES ] = "AARCH64_SWS_OP_SWAP_BYTES", - [AARCH64_SWS_OP_PERMUTE ] = "AARCH64_SWS_OP_PERMUTE", - [AARCH64_SWS_OP_COPY ] = "AARCH64_SWS_OP_COPY", - [AARCH64_SWS_OP_UNPACK ] = "AARCH64_SWS_OP_UNPACK", - [AARCH64_SWS_OP_PACK ] = "AARCH64_SWS_OP_PACK", - [AARCH64_SWS_OP_LSHIFT ] = "AARCH64_SWS_OP_LSHIFT", - [AARCH64_SWS_OP_RSHIFT ] = "AARCH64_SWS_OP_RSHIFT", - [AARCH64_SWS_OP_CLEAR ] = "AARCH64_SWS_OP_CLEAR", - [AARCH64_SWS_OP_TO_U8 ] = "AARCH64_SWS_OP_TO_U8", - [AARCH64_SWS_OP_TO_U16 ] = "AARCH64_SWS_OP_TO_U16", - [AARCH64_SWS_OP_TO_U32 ] = "AARCH64_SWS_OP_TO_U32", - [AARCH64_SWS_OP_TO_F32 ] = "AARCH64_SWS_OP_TO_F32", - [AARCH64_SWS_OP_EXPAND_PAIR ] = "AARCH64_SWS_OP_EXPAND_PAIR", - [AARCH64_SWS_OP_EXPAND_QUAD ] = "AARCH64_SWS_OP_EXPAND_QUAD", - [AARCH64_SWS_OP_MIN ] = "AARCH64_SWS_OP_MIN", - [AARCH64_SWS_OP_MAX ] = "AARCH64_SWS_OP_MAX", - [AARCH64_SWS_OP_SCALE ] = "AARCH64_SWS_OP_SCALE", - [AARCH64_SWS_OP_LINEAR ] = "AARCH64_SWS_OP_LINEAR", - [AARCH64_SWS_OP_LINEAR_FMA ] = "AARCH64_SWS_OP_LINEAR_FMA", - [AARCH64_SWS_OP_DITHER ] = "AARCH64_SWS_OP_DITHER", -}; - -static const char *aarch64_op_type(SwsAArch64OpType op) -{ - if (op == AARCH64_SWS_OP_NONE || op >= AARCH64_SWS_OP_TYPE_NB) { - av_assert0(!"Invalid op type!"); - return NULL; - } - return op_types[op]; -} - -static const char op_type_names[AARCH64_SWS_OP_TYPE_NB][16] = { - [AARCH64_SWS_OP_NONE ] = "none", - [AARCH64_SWS_OP_READ_BIT ] = "read_bit", - [AARCH64_SWS_OP_READ_NIBBLE ] = "read_nibble", - [AARCH64_SWS_OP_READ_PACKED ] = "read_packed", - [AARCH64_SWS_OP_READ_PLANAR ] = "read_planar", - [AARCH64_SWS_OP_WRITE_BIT ] = "write_bit", - [AARCH64_SWS_OP_WRITE_NIBBLE ] = "write_nibble", - [AARCH64_SWS_OP_WRITE_PACKED ] = "write_packed", - [AARCH64_SWS_OP_WRITE_PLANAR ] = "write_planar", - [AARCH64_SWS_OP_SWAP_BYTES ] = "swap_bytes", - [AARCH64_SWS_OP_PERMUTE ] = "permute", - [AARCH64_SWS_OP_COPY ] = "copy", - [AARCH64_SWS_OP_UNPACK ] = "unpack", - [AARCH64_SWS_OP_PACK ] = "pack", - [AARCH64_SWS_OP_LSHIFT ] = "lshift", - [AARCH64_SWS_OP_RSHIFT ] = "rshift", - [AARCH64_SWS_OP_CLEAR ] = "clear", - [AARCH64_SWS_OP_TO_U8 ] = "to_u8", - [AARCH64_SWS_OP_TO_U16 ] = "to_u16", - [AARCH64_SWS_OP_TO_U32 ] = "to_u32", - [AARCH64_SWS_OP_TO_F32 ] = "to_f32", - [AARCH64_SWS_OP_EXPAND_PAIR ] = "expand_pair", - [AARCH64_SWS_OP_EXPAND_QUAD ] = "expand_quad", - [AARCH64_SWS_OP_MIN ] = "min", - [AARCH64_SWS_OP_MAX ] = "max", - [AARCH64_SWS_OP_SCALE ] = "scale", - [AARCH64_SWS_OP_LINEAR ] = "linear", - [AARCH64_SWS_OP_LINEAR_FMA ] = "linear_fma", - [AARCH64_SWS_OP_DITHER ] = "dither", -}; - -static const char *aarch64_op_type_name(SwsAArch64OpType op) -{ - if (op == AARCH64_SWS_OP_NONE || op >= AARCH64_SWS_OP_TYPE_NB) { - av_assert0(!"Invalid op type!"); - return NULL; - } - return op_type_names[op]; -} - -/*********************************************************************/ -/* - * Helper string concatenation function that does not depend on the - * FFmpeg libraries, so it may be used standalone. - */ -av_printf_format(3, 4) -static void buf_appendf(char **pbuf, size_t *prem, const char *fmt, ...) -{ - char *buf = *pbuf; - size_t rem = *prem; - if (!rem) - return; - - va_list ap; - va_start(ap, fmt); - int n = vsnprintf(buf, rem, fmt, ap); - va_end(ap); - - if (n > 0) { - if (n < rem) { - buf += n; - rem -= n; - } else { - buf += rem - 1; - rem = 0; - } - *pbuf = buf; - *prem = rem; - } -} - -/*********************************************************************/ -/** - * The following structure is used to describe one field from - * SwsAArch64OpImplParams. This will be used to serialize the parameter - * structure, generate function names, and compare two sets of - * parameters. - */ - -typedef struct ParamField { - const char *name; - size_t offset; - size_t size; - void (*print_str)(char **pbuf, size_t *prem, void *p); - void (*print_val)(char **pbuf, size_t *prem, void *p); - int (*cmp_val)(void *pa, void *pb); -} ParamField; - -#define PARAM_FIELD(name) #name, offsetof(SwsAArch64OpImplParams, name), sizeof(((SwsAArch64OpImplParams *) 0)->name) - -static void print_op_name(char **pbuf, size_t *prem, void *p) -{ - SwsAArch64OpType op = *(SwsAArch64OpType *) p; - buf_appendf(pbuf, prem, "_%s", aarch64_op_type_name(op)); -} - -static void print_op_val(char **pbuf, size_t *prem, void *p) -{ - SwsAArch64OpType op = *(SwsAArch64OpType *) p; - buf_appendf(pbuf, prem, "%s", aarch64_op_type(op)); -} - -static int cmp_op(void *pa, void *pb) -{ - int64_t ia = (int64_t) *((SwsAArch64OpType *) pa); - int64_t ib = (int64_t) *((SwsAArch64OpType *) pb); - int64_t diff = ia - ib; - if (diff) - return diff < 0 ? -1 : 1; - return 0; -} - -static void print_pixel_name(char **pbuf, size_t *prem, void *p) -{ - SwsAArch64PixelType type = *(SwsAArch64PixelType *) p; - buf_appendf(pbuf, prem, "_%s", aarch64_pixel_type_name(type)); -} - -static void print_pixel_val(char **pbuf, size_t *prem, void *p) -{ - SwsAArch64PixelType type = *(SwsAArch64PixelType *) p; - buf_appendf(pbuf, prem, "%s", aarch64_pixel_type(type)); -} - -static int cmp_pixel(void *pa, void *pb) -{ - int64_t ia = (int64_t) *((SwsAArch64PixelType *) pa); - int64_t ib = (int64_t) *((SwsAArch64PixelType *) pb); - int64_t diff = ia - ib; - if (diff) - return diff < 0 ? -1 : 1; - return 0; -} - -static void print_u8_name(char **pbuf, size_t *prem, void *p) -{ - uint8_t val = *(uint8_t *) p; - buf_appendf(pbuf, prem, "_%u", val); -} - -static void print_u8_val(char **pbuf, size_t *prem, void *p) -{ - uint8_t val = *(uint8_t *) p; - buf_appendf(pbuf, prem, "%u", val); -} - -static int cmp_u8(void *pa, void *pb) -{ - int64_t ia = (int64_t) *((uint8_t *) pa); - int64_t ib = (int64_t) *((uint8_t *) pb); - int64_t diff = ia - ib; - if (diff) - return diff < 0 ? -1 : 1; - return 0; -} - -static void print_u16_name(char **pbuf, size_t *prem, void *p) -{ - uint16_t val = *(uint16_t *) p; - buf_appendf(pbuf, prem, "_%04x", val); -} - -static void print_u16_val(char **pbuf, size_t *prem, void *p) -{ - uint16_t val = *(uint16_t *) p; - buf_appendf(pbuf, prem, "0x%04x", val); -} - -static int cmp_u16(void *pa, void *pb) -{ - int64_t ia = (int64_t) *((uint16_t *) pa); - int64_t ib = (int64_t) *((uint16_t *) pb); - int64_t diff = ia - ib; - if (diff) - return diff < 0 ? -1 : 1; - return 0; -} - -static void print_u48_name(char **pbuf, size_t *prem, void *p) -{ - uint64_t val = *(uint64_t *) p; - buf_appendf(pbuf, prem, "_%012" PRIx64, val); -} - -static void print_u48_val(char **pbuf, size_t *prem, void *p) -{ - uint64_t val = *(uint64_t *) p; - buf_appendf(pbuf, prem, "0x%012" PRIx64 "ULL", val); -} - -static int cmp_u48(void *pa, void *pb) -{ - int64_t ia = (int64_t) *((uint64_t *) pa); - int64_t ib = (int64_t) *((uint64_t *) pb); - int64_t diff = ia - ib; - if (diff) - return diff < 0 ? -1 : 1; - return 0; -} - -static void print_u40_name(char **pbuf, size_t *prem, void *p) -{ - uint64_t val = *(uint64_t *) p; - buf_appendf(pbuf, prem, "_%010" PRIx64, val); -} - -static void print_u40_val(char **pbuf, size_t *prem, void *p) -{ - uint64_t val = *(uint64_t *) p; - buf_appendf(pbuf, prem, "0x%010" PRIx64 "ULL", val); -} - -static int cmp_u40(void *pa, void *pb) -{ - int64_t ia = (int64_t) *((uint64_t *) pa); - int64_t ib = (int64_t) *((uint64_t *) pb); - int64_t diff = ia - ib; - if (diff) - return diff < 0 ? -1 : 1; - return 0; -} - -/*********************************************************************/ -static const ParamField field_op = { PARAM_FIELD(op), print_op_name, print_op_val, cmp_op }; -static const ParamField field_mask = { PARAM_FIELD(mask), print_u16_name, print_u16_val, cmp_u16 }; -static const ParamField field_type = { PARAM_FIELD(type), print_pixel_name, print_pixel_val, cmp_pixel }; -static const ParamField field_block_size = { PARAM_FIELD(block_size), print_u8_name, print_u8_val, cmp_u8 }; -static const ParamField field_shift = { PARAM_FIELD(shift), print_u8_name, print_u8_val, cmp_u8 }; -static const ParamField field_clear = { PARAM_FIELD(clear), print_u16_name, print_u16_val, cmp_u16 }; -static const ParamField field_move = { PARAM_FIELD(move), print_u48_name, print_u48_val, cmp_u48 }; -static const ParamField field_pack = { PARAM_FIELD(pack), print_u16_name, print_u16_val, cmp_u16 }; -static const ParamField field_linear_mask = { PARAM_FIELD(linear.mask), print_u40_name, print_u40_val, cmp_u40 }; -static const ParamField field_dither_y_offset = { PARAM_FIELD(dither.y_offset), print_u16_name, print_u16_val, cmp_u16 }; -static const ParamField field_dither_size_log2 = { PARAM_FIELD(dither.size_log2), print_u8_name, print_u8_val, cmp_u8 }; - -/* Fields needed to uniquely identify each SwsAArch64OpType. */ -#define MAX_LEVELS 8 -static const ParamField *op_fields[AARCH64_SWS_OP_TYPE_NB][MAX_LEVELS] = { - [AARCH64_SWS_OP_READ_BIT ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_READ_NIBBLE ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_READ_PACKED ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_READ_PLANAR ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_WRITE_BIT ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_WRITE_NIBBLE ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_WRITE_PACKED ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_WRITE_PLANAR ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_SWAP_BYTES ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_PERMUTE ] = { &field_op, &field_move, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_COPY ] = { &field_op, &field_move, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_UNPACK ] = { &field_op, &field_pack, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_PACK ] = { &field_op, &field_pack, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_LSHIFT ] = { &field_op, &field_shift, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_RSHIFT ] = { &field_op, &field_shift, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_CLEAR ] = { &field_op, &field_clear, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_TO_U8 ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_TO_U16 ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_TO_U32 ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_TO_F32 ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_EXPAND_PAIR ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_EXPAND_QUAD ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_MIN ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_MAX ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_SCALE ] = { &field_op, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_LINEAR ] = { &field_op, &field_linear_mask, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_LINEAR_FMA ] = { &field_op, &field_linear_mask, &field_block_size, &field_type, &field_mask }, - [AARCH64_SWS_OP_DITHER ] = { &field_op, &field_dither_y_offset, &field_dither_size_log2, &field_block_size, &field_type, &field_mask }, -}; diff --git a/libswscale/tests/sws_ops_aarch64.c b/libswscale/tests/sws_ops_aarch64.c index a48e95a8a3..dd7f4f0a85 100644 --- a/libswscale/tests/sws_ops_aarch64.c +++ b/libswscale/tests/sws_ops_aarch64.c @@ -20,6 +20,7 @@ #include <stdio.h> +#include "libavutil/avassert.h" #include "libavutil/mem.h" #include "libavutil/tree.h" #include "libswscale/graph.h" @@ -28,7 +29,6 @@ #include "libswscale/op_list_gen_template.c" #include "libswscale/ops_dispatch.h" -#include "libswscale/aarch64/ops_impl.c" #include "libswscale/aarch64/ops_impl_conv.c" #ifdef _WIN32 @@ -36,20 +36,86 @@ #include <fcntl.h> #endif +/*********************************************************************/ +/* + * Helper string concatenation function that does not depend on the + * FFmpeg libraries, so it may be used standalone. + */ +av_printf_format(3, 4) +static void buf_appendf(char **pbuf, size_t *prem, const char *fmt, ...) +{ + char *buf = *pbuf; + size_t rem = *prem; + if (!rem) + return; + + va_list ap; + va_start(ap, fmt); + int n = vsnprintf(buf, rem, fmt, ap); + va_end(ap); + + if (n > 0) { + if (n < rem) { + buf += n; + rem -= n; + } else { + buf += rem - 1; + rem = 0; + } + *pbuf = buf; + *prem = rem; + } +} + /*********************************************************************/ static int aarch64_op_impl_cmp(const void *a, const void *b) { const SwsAArch64OpImplParams *pa = (const SwsAArch64OpImplParams *) a; const SwsAArch64OpImplParams *pb = (const SwsAArch64OpImplParams *) b; - const ParamField **fields = op_fields[pa->op]; - for (int i = 0; fields[i]; i++) { - const ParamField *field = fields[i]; - int diff = field->cmp_val((void *) (((uintptr_t) pa) + field->offset), - (void *) (((uintptr_t) pb) + field->offset)); - if (diff) - return diff; + if (pa->op != pb->op) + return (int) pa->op - pb->op; + + switch (pa->op) { + case AARCH64_SWS_OP_PERMUTE: + case AARCH64_SWS_OP_COPY: + if (pa->move != pb->move) + return (int64_t) (pa->move - pb->move) < 0 ? -1 : 1; + break; + case AARCH64_SWS_OP_UNPACK: + case AARCH64_SWS_OP_PACK: + if (pa->pack != pb->pack) + return (int) pa->pack - pb->pack; + break; + case AARCH64_SWS_OP_LSHIFT: + case AARCH64_SWS_OP_RSHIFT: + if (pa->shift != pb->shift) + return (int) pa->shift - pb->shift; + break; + case AARCH64_SWS_OP_CLEAR: + if (pa->clear != pb->clear) + return (int) pa->clear - pb->clear; + break; + case AARCH64_SWS_OP_LINEAR: + case AARCH64_SWS_OP_LINEAR_FMA: + if (pa->linear.mask != pb->linear.mask) + return (int64_t) (pa->linear.mask - pb->linear.mask) < 0 ? -1 : 1; + break; + case AARCH64_SWS_OP_DITHER: + if (pa->dither.y_offset != pb->dither.y_offset) + return (int) pa->dither.y_offset - pb->dither.y_offset; + if (pa->dither.size_log2 != pb->dither.size_log2) + return (int) pa->dither.size_log2 - pb->dither.size_log2; + break; } + + if (pa->block_size != pb->block_size) + return (int) pa->block_size - pb->block_size; + if (pa->type != pb->type) + return (int) pa->type - pb->type; + if (pa->mask != pb->mask) + return (int) pa->mask - pb->mask; + return 0; } @@ -147,33 +213,142 @@ static int register_op(SwsContext *ctx, void *opaque, SwsOpList *ops) } /*********************************************************************/ +static const char op_type_names[AARCH64_SWS_OP_TYPE_NB][16] = { + [AARCH64_SWS_OP_READ_BIT ] = "read_bit", + [AARCH64_SWS_OP_READ_NIBBLE ] = "read_nibble", + [AARCH64_SWS_OP_READ_PACKED ] = "read_packed", + [AARCH64_SWS_OP_READ_PLANAR ] = "read_planar", + [AARCH64_SWS_OP_WRITE_BIT ] = "write_bit", + [AARCH64_SWS_OP_WRITE_NIBBLE ] = "write_nibble", + [AARCH64_SWS_OP_WRITE_PACKED ] = "write_packed", + [AARCH64_SWS_OP_WRITE_PLANAR ] = "write_planar", + [AARCH64_SWS_OP_SWAP_BYTES ] = "swap_bytes", + [AARCH64_SWS_OP_PERMUTE ] = "permute", + [AARCH64_SWS_OP_COPY ] = "copy", + [AARCH64_SWS_OP_UNPACK ] = "unpack", + [AARCH64_SWS_OP_PACK ] = "pack", + [AARCH64_SWS_OP_LSHIFT ] = "lshift", + [AARCH64_SWS_OP_RSHIFT ] = "rshift", + [AARCH64_SWS_OP_CLEAR ] = "clear", + [AARCH64_SWS_OP_TO_U8 ] = "to_u8", + [AARCH64_SWS_OP_TO_U16 ] = "to_u16", + [AARCH64_SWS_OP_TO_U32 ] = "to_u32", + [AARCH64_SWS_OP_TO_F32 ] = "to_f32", + [AARCH64_SWS_OP_EXPAND_PAIR ] = "expand_pair", + [AARCH64_SWS_OP_EXPAND_QUAD ] = "expand_quad", + [AARCH64_SWS_OP_MIN ] = "min", + [AARCH64_SWS_OP_MAX ] = "max", + [AARCH64_SWS_OP_SCALE ] = "scale", + [AARCH64_SWS_OP_LINEAR ] = "linear", + [AARCH64_SWS_OP_LINEAR_FMA ] = "linear_fma", + [AARCH64_SWS_OP_DITHER ] = "dither", +}; + +static const char pixel_type_names[AARCH64_PIXEL_TYPE_NB][4] = { + [AARCH64_PIXEL_U8 ] = "u8", + [AARCH64_PIXEL_U16] = "u16", + [AARCH64_PIXEL_U32] = "u32", + [AARCH64_PIXEL_F32] = "f32", +}; + static void impl_func_name(char **buf, size_t *size, const SwsAArch64OpImplParams *params) { - buf_appendf(buf, size, "ff_sws"); - const ParamField **fields = op_fields[params->op]; - for (int i = 0; fields[i]; i++) { - const ParamField *field = fields[i]; - void *p = (void *) (((uintptr_t) params) + field->offset); - field->print_str(buf, size, p); + buf_appendf(buf, size, "ff_sws_%s", op_type_names[params->op]); + switch (params->op) { + case AARCH64_SWS_OP_PERMUTE: + case AARCH64_SWS_OP_COPY: + buf_appendf(buf, size, "_%012" PRIx64, params->move); + break; + case AARCH64_SWS_OP_UNPACK: + case AARCH64_SWS_OP_PACK: + buf_appendf(buf, size, "_%04x", params->pack); + break; + case AARCH64_SWS_OP_LSHIFT: + case AARCH64_SWS_OP_RSHIFT: + buf_appendf(buf, size, "_%u", params->shift); + break; + case AARCH64_SWS_OP_CLEAR: + buf_appendf(buf, size, "_%04x", params->clear); + break; + case AARCH64_SWS_OP_LINEAR: + case AARCH64_SWS_OP_LINEAR_FMA: + buf_appendf(buf, size, "_%010" PRIx64, params->linear.mask); + break; + case AARCH64_SWS_OP_DITHER: + buf_appendf(buf, size, "_%04x_%u", params->dither.y_offset, params->dither.size_log2); + break; } - buf_appendf(buf, size, "_neon"); + buf_appendf(buf, size, "_%u_%s_%04x_neon", params->block_size, pixel_type_names[params->type], params->mask); } +static const char op_types[AARCH64_SWS_OP_TYPE_NB][32] = { + [AARCH64_SWS_OP_READ_BIT ] = "AARCH64_SWS_OP_READ_BIT", + [AARCH64_SWS_OP_READ_NIBBLE ] = "AARCH64_SWS_OP_READ_NIBBLE", + [AARCH64_SWS_OP_READ_PACKED ] = "AARCH64_SWS_OP_READ_PACKED", + [AARCH64_SWS_OP_READ_PLANAR ] = "AARCH64_SWS_OP_READ_PLANAR", + [AARCH64_SWS_OP_WRITE_BIT ] = "AARCH64_SWS_OP_WRITE_BIT", + [AARCH64_SWS_OP_WRITE_NIBBLE ] = "AARCH64_SWS_OP_WRITE_NIBBLE", + [AARCH64_SWS_OP_WRITE_PACKED ] = "AARCH64_SWS_OP_WRITE_PACKED", + [AARCH64_SWS_OP_WRITE_PLANAR ] = "AARCH64_SWS_OP_WRITE_PLANAR", + [AARCH64_SWS_OP_SWAP_BYTES ] = "AARCH64_SWS_OP_SWAP_BYTES", + [AARCH64_SWS_OP_PERMUTE ] = "AARCH64_SWS_OP_PERMUTE", + [AARCH64_SWS_OP_COPY ] = "AARCH64_SWS_OP_COPY", + [AARCH64_SWS_OP_UNPACK ] = "AARCH64_SWS_OP_UNPACK", + [AARCH64_SWS_OP_PACK ] = "AARCH64_SWS_OP_PACK", + [AARCH64_SWS_OP_LSHIFT ] = "AARCH64_SWS_OP_LSHIFT", + [AARCH64_SWS_OP_RSHIFT ] = "AARCH64_SWS_OP_RSHIFT", + [AARCH64_SWS_OP_CLEAR ] = "AARCH64_SWS_OP_CLEAR", + [AARCH64_SWS_OP_TO_U8 ] = "AARCH64_SWS_OP_TO_U8", + [AARCH64_SWS_OP_TO_U16 ] = "AARCH64_SWS_OP_TO_U16", + [AARCH64_SWS_OP_TO_U32 ] = "AARCH64_SWS_OP_TO_U32", + [AARCH64_SWS_OP_TO_F32 ] = "AARCH64_SWS_OP_TO_F32", + [AARCH64_SWS_OP_EXPAND_PAIR ] = "AARCH64_SWS_OP_EXPAND_PAIR", + [AARCH64_SWS_OP_EXPAND_QUAD ] = "AARCH64_SWS_OP_EXPAND_QUAD", + [AARCH64_SWS_OP_MIN ] = "AARCH64_SWS_OP_MIN", + [AARCH64_SWS_OP_MAX ] = "AARCH64_SWS_OP_MAX", + [AARCH64_SWS_OP_SCALE ] = "AARCH64_SWS_OP_SCALE", + [AARCH64_SWS_OP_LINEAR ] = "AARCH64_SWS_OP_LINEAR", + [AARCH64_SWS_OP_LINEAR_FMA ] = "AARCH64_SWS_OP_LINEAR_FMA", + [AARCH64_SWS_OP_DITHER ] = "AARCH64_SWS_OP_DITHER", +}; + +static const char pixel_types[AARCH64_PIXEL_TYPE_NB][32] = { + [AARCH64_PIXEL_U8 ] = "AARCH64_PIXEL_U8", + [AARCH64_PIXEL_U16] = "AARCH64_PIXEL_U16", + [AARCH64_PIXEL_U32] = "AARCH64_PIXEL_U32", + [AARCH64_PIXEL_F32] = "AARCH64_PIXEL_F32", +}; + static void serialize_op(char *buf, size_t size, const SwsAArch64OpImplParams *params) { buf_appendf(&buf, &size, "ENTRY("); impl_func_name(&buf, &size, params); - buf_appendf(&buf, &size, ", {"); - const ParamField **fields = op_fields[params->op]; - for (int i = 0; fields[i]; i++) { - const ParamField *field = fields[i]; - void *p = (void *) (((uintptr_t) params) + field->offset); - if (i) - buf_appendf(&buf, &size, ","); - buf_appendf(&buf, &size, " .%s = ", field->name); - field->print_val(&buf, &size, p); + buf_appendf(&buf, &size, ", { .op = %s", op_types[params->op]); + switch (params->op) { + case AARCH64_SWS_OP_PERMUTE: + case AARCH64_SWS_OP_COPY: + buf_appendf(&buf, &size, ", .move = 0x%012" PRIx64 "ULL", params->move); + break; + case AARCH64_SWS_OP_UNPACK: + case AARCH64_SWS_OP_PACK: + buf_appendf(&buf, &size, ", .pack = 0x%04x", params->pack); + break; + case AARCH64_SWS_OP_LSHIFT: + case AARCH64_SWS_OP_RSHIFT: + buf_appendf(&buf, &size, ", .shift = %u", params->shift); + break; + case AARCH64_SWS_OP_CLEAR: + buf_appendf(&buf, &size, ", .clear = 0x%04x", params->clear); + break; + case AARCH64_SWS_OP_LINEAR: + case AARCH64_SWS_OP_LINEAR_FMA: + buf_appendf(&buf, &size, ", .linear.mask = 0x%010" PRIx64 "ULL", params->linear.mask); + break; + case AARCH64_SWS_OP_DITHER: + buf_appendf(&buf, &size, ", .dither.y_offset = 0x%04x, .dither.size_log2 = %u", params->dither.y_offset, params->dither.size_log2); + break; } - buf_appendf(&buf, &size, " })"); + buf_appendf(&buf, &size, ", .block_size = %u, .type = %s, .mask = 0x%04x })", params->block_size, pixel_types[params->type], params->mask); av_assert0(size && "string buffer exhausted"); } -- 2.52.0 >From 30f0835a517e1714f874df1dc51a97c9d93d96fd Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Thu, 18 Jun 2026 01:39:35 +0200 Subject: [PATCH 07/17] swscale/tests/sws_ops_aarch64: use AVBPrint instead of custom string functions buf_appendf() was used when this code still needed to run standalone in aarch64/ops_asmgen. Since this is no longer the case, use AVBPrint instead. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/tests/sws_ops_aarch64.c | 81 ++++++++++-------------------- 1 file changed, 26 insertions(+), 55 deletions(-) diff --git a/libswscale/tests/sws_ops_aarch64.c b/libswscale/tests/sws_ops_aarch64.c index dd7f4f0a85..a8844b47d5 100644 --- a/libswscale/tests/sws_ops_aarch64.c +++ b/libswscale/tests/sws_ops_aarch64.c @@ -21,6 +21,7 @@ #include <stdio.h> #include "libavutil/avassert.h" +#include "libavutil/bprint.h" #include "libavutil/mem.h" #include "libavutil/tree.h" #include "libswscale/graph.h" @@ -36,37 +37,6 @@ #include <fcntl.h> #endif -/*********************************************************************/ -/* - * Helper string concatenation function that does not depend on the - * FFmpeg libraries, so it may be used standalone. - */ -av_printf_format(3, 4) -static void buf_appendf(char **pbuf, size_t *prem, const char *fmt, ...) -{ - char *buf = *pbuf; - size_t rem = *prem; - if (!rem) - return; - - va_list ap; - va_start(ap, fmt); - int n = vsnprintf(buf, rem, fmt, ap); - va_end(ap); - - if (n > 0) { - if (n < rem) { - buf += n; - rem -= n; - } else { - buf += rem - 1; - rem = 0; - } - *pbuf = buf; - *prem = rem; - } -} - /*********************************************************************/ static int aarch64_op_impl_cmp(const void *a, const void *b) { @@ -251,34 +221,34 @@ static const char pixel_type_names[AARCH64_PIXEL_TYPE_NB][4] = { [AARCH64_PIXEL_F32] = "f32", }; -static void impl_func_name(char **buf, size_t *size, const SwsAArch64OpImplParams *params) +static void impl_func_name(AVBPrint *bp, const SwsAArch64OpImplParams *params) { - buf_appendf(buf, size, "ff_sws_%s", op_type_names[params->op]); + av_bprintf(bp, "ff_sws_%s", op_type_names[params->op]); switch (params->op) { case AARCH64_SWS_OP_PERMUTE: case AARCH64_SWS_OP_COPY: - buf_appendf(buf, size, "_%012" PRIx64, params->move); + av_bprintf(bp, "_%012" PRIx64, params->move); break; case AARCH64_SWS_OP_UNPACK: case AARCH64_SWS_OP_PACK: - buf_appendf(buf, size, "_%04x", params->pack); + av_bprintf(bp, "_%04x", params->pack); break; case AARCH64_SWS_OP_LSHIFT: case AARCH64_SWS_OP_RSHIFT: - buf_appendf(buf, size, "_%u", params->shift); + av_bprintf(bp, "_%u", params->shift); break; case AARCH64_SWS_OP_CLEAR: - buf_appendf(buf, size, "_%04x", params->clear); + av_bprintf(bp, "_%04x", params->clear); break; case AARCH64_SWS_OP_LINEAR: case AARCH64_SWS_OP_LINEAR_FMA: - buf_appendf(buf, size, "_%010" PRIx64, params->linear.mask); + av_bprintf(bp, "_%010" PRIx64, params->linear.mask); break; case AARCH64_SWS_OP_DITHER: - buf_appendf(buf, size, "_%04x_%u", params->dither.y_offset, params->dither.size_log2); + av_bprintf(bp, "_%04x_%u", params->dither.y_offset, params->dither.size_log2); break; } - buf_appendf(buf, size, "_%u_%s_%04x_neon", params->block_size, pixel_type_names[params->type], params->mask); + av_bprintf(bp, "_%u_%s_%04x_neon", params->block_size, pixel_type_names[params->type], params->mask); } static const char op_types[AARCH64_SWS_OP_TYPE_NB][32] = { @@ -319,37 +289,36 @@ static const char pixel_types[AARCH64_PIXEL_TYPE_NB][32] = { [AARCH64_PIXEL_F32] = "AARCH64_PIXEL_F32", }; -static void serialize_op(char *buf, size_t size, const SwsAArch64OpImplParams *params) +static void serialize_op(AVBPrint *bp, const SwsAArch64OpImplParams *params) { - buf_appendf(&buf, &size, "ENTRY("); - impl_func_name(&buf, &size, params); - buf_appendf(&buf, &size, ", { .op = %s", op_types[params->op]); + av_bprintf(bp, "ENTRY("); + impl_func_name(bp, params); + av_bprintf(bp, ", { .op = %s", op_types[params->op]); switch (params->op) { case AARCH64_SWS_OP_PERMUTE: case AARCH64_SWS_OP_COPY: - buf_appendf(&buf, &size, ", .move = 0x%012" PRIx64 "ULL", params->move); + av_bprintf(bp, ", .move = 0x%012" PRIx64 "ULL", params->move); break; case AARCH64_SWS_OP_UNPACK: case AARCH64_SWS_OP_PACK: - buf_appendf(&buf, &size, ", .pack = 0x%04x", params->pack); + av_bprintf(bp, ", .pack = 0x%04x", params->pack); break; case AARCH64_SWS_OP_LSHIFT: case AARCH64_SWS_OP_RSHIFT: - buf_appendf(&buf, &size, ", .shift = %u", params->shift); + av_bprintf(bp, ", .shift = %u", params->shift); break; case AARCH64_SWS_OP_CLEAR: - buf_appendf(&buf, &size, ", .clear = 0x%04x", params->clear); + av_bprintf(bp, ", .clear = 0x%04x", params->clear); break; case AARCH64_SWS_OP_LINEAR: case AARCH64_SWS_OP_LINEAR_FMA: - buf_appendf(&buf, &size, ", .linear.mask = 0x%010" PRIx64 "ULL", params->linear.mask); + av_bprintf(bp, ", .linear.mask = 0x%010" PRIx64 "ULL", params->linear.mask); break; case AARCH64_SWS_OP_DITHER: - buf_appendf(&buf, &size, ", .dither.y_offset = 0x%04x, .dither.size_log2 = %u", params->dither.y_offset, params->dither.size_log2); + av_bprintf(bp, ", .dither.y_offset = 0x%04x, .dither.size_log2 = %u", params->dither.y_offset, params->dither.size_log2); break; } - buf_appendf(&buf, &size, ", .block_size = %u, .type = %s, .mask = 0x%04x })", params->block_size, pixel_types[params->type], params->mask); - av_assert0(size && "string buffer exhausted"); + av_bprintf(bp, ", .block_size = %u, .type = %s, .mask = 0x%04x })", params->block_size, pixel_types[params->type], params->mask); } /* Serialize SwsAArch64OpImplParams for one function. */ @@ -358,9 +327,11 @@ static int print_op(void *opaque, void *elem) SwsAArch64OpImplParams *params = (SwsAArch64OpImplParams *) elem; FILE *fp = (FILE *) opaque; - char buf[256]; - serialize_op(buf, sizeof(buf), params); - fprintf(fp, "%s\n", buf); + AVBPrint bp; + av_bprint_init(&bp, 0, AV_BPRINT_SIZE_UNLIMITED); + serialize_op(&bp, params); + fprintf(fp, "%s\n", bp.str); + av_bprint_finalize(&bp, NULL); av_free(params); -- 2.52.0 >From 0de0c1f6a0cf6ddbd573d8c1fbbd59ab6c7fba3a Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Thu, 11 Jun 2026 22:35:24 +0200 Subject: [PATCH 08/17] swscale/aarch64/ops: use SwsUOpType/SwsPixelType instead of SwsAArch64OpType/SwsAArch64PixelType Also use ff_sws_pixel_type_size() instead of aarch64_pixel_size(). This is a step towards the move to uops. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops_asmgen.c | 195 ++++--- libswscale/aarch64/ops_entries.c | 818 ++++++++++++++--------------- libswscale/aarch64/ops_impl.h | 49 +- libswscale/aarch64/ops_impl_conv.c | 143 +++-- libswscale/tests/sws_ops_aarch64.c | 214 ++++---- 5 files changed, 676 insertions(+), 743 deletions(-) diff --git a/libswscale/aarch64/ops_asmgen.c b/libswscale/aarch64/ops_asmgen.c index e20424107a..3cbbcae60b 100644 --- a/libswscale/aarch64/ops_asmgen.c +++ b/libswscale/aarch64/ops_asmgen.c @@ -116,21 +116,6 @@ static const SwsAArch64OpEntry ops_entries[] = { { NULL } }; -/*********************************************************************/ -static size_t aarch64_pixel_size(SwsAArch64PixelType fmt) -{ - switch (fmt) { - case AARCH64_PIXEL_U8: return 1; - case AARCH64_PIXEL_U16: return 2; - case AARCH64_PIXEL_U32: return 4; - case AARCH64_PIXEL_F32: return 4; - default: - av_assert0(!"Invalid pixel type!"); - break; - } - return 0; -} - /*********************************************************************/ typedef struct SwsAArch64Context { RasmContext *rctx; @@ -384,10 +369,10 @@ static void asmgen_set_load_cont_node(SwsAArch64Context *s) /*********************************************************************/ /* gather raw pixels from planes */ -/* AARCH64_SWS_OP_READ_BIT */ -/* AARCH64_SWS_OP_READ_NIBBLE */ -/* AARCH64_SWS_OP_READ_PACKED */ -/* AARCH64_SWS_OP_READ_PLANAR */ +/* SWS_UOP_READ_BIT */ +/* SWS_UOP_READ_NIBBLE */ +/* SWS_UOP_READ_PACKED */ +/* SWS_UOP_READ_PLANAR */ static void asmgen_op_read_bit(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { @@ -494,10 +479,10 @@ static void asmgen_op_read_planar(SwsAArch64Context *s, const SwsAArch64OpImplPa /*********************************************************************/ /* write raw pixels to planes */ -/* AARCH64_SWS_OP_WRITE_BIT */ -/* AARCH64_SWS_OP_WRITE_NIBBLE */ -/* AARCH64_SWS_OP_WRITE_PACKED */ -/* AARCH64_SWS_OP_WRITE_PLANAR */ +/* SWS_UOP_WRITE_BIT */ +/* SWS_UOP_WRITE_NIBBLE */ +/* SWS_UOP_WRITE_PACKED */ +/* SWS_UOP_WRITE_PLANAR */ static void asmgen_op_write_bit(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { @@ -599,7 +584,7 @@ static void asmgen_op_write_planar(SwsAArch64Context *s, const SwsAArch64OpImplP /*********************************************************************/ /* swap byte order (for differing endianness) */ -/* AARCH64_SWS_OP_SWAP_BYTES */ +/* SWS_UOP_SWAP_BYTES */ static void asmgen_op_swap_bytes(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { @@ -612,7 +597,7 @@ static void asmgen_op_swap_bytes(SwsAArch64Context *s, const SwsAArch64OpImplPar a64op_vec_views(s->vh[i], &vh[i]); } - switch (aarch64_pixel_size(p->type)) { + switch (ff_sws_pixel_type_size(p->type)) { case sizeof(uint16_t): LOOP_MASK (p, i) i_rev16(r, vl[i].b16, vl[i].b16); LOOP_MASK_VH(s, p, i) i_rev16(r, vh[i].b16, vh[i].b16); @@ -626,8 +611,8 @@ static void asmgen_op_swap_bytes(SwsAArch64Context *s, const SwsAArch64OpImplPar /*********************************************************************/ /* rearrange channel order, or duplicate channels */ -/* AARCH64_SWS_OP_PERMUTE */ -/* AARCH64_SWS_OP_COPY */ +/* SWS_UOP_PERMUTE */ +/* SWS_UOP_COPY */ static const char *print_swizzle_v(char buf[8], uint8_t n, uint8_t vh) { @@ -672,7 +657,7 @@ static void asmgen_op_move(SwsAArch64Context *s, const SwsAArch64OpImplParams *p /*********************************************************************/ /* split tightly packed data into components */ -/* AARCH64_SWS_OP_UNPACK */ +/* SWS_UOP_UNPACK */ static void asmgen_op_unpack(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { @@ -744,7 +729,7 @@ static void asmgen_op_unpack(SwsAArch64Context *s, const SwsAArch64OpImplParams /*********************************************************************/ /* compress components into tightly packed data */ -/* AARCH64_SWS_OP_PACK */ +/* SWS_UOP_PACK */ static void asmgen_op_pack(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { @@ -782,7 +767,7 @@ static void asmgen_op_pack(SwsAArch64Context *s, const SwsAArch64OpImplParams *p /*********************************************************************/ /* logical left shift of raw pixel values */ -/* AARCH64_SWS_OP_LSHIFT */ +/* SWS_UOP_LSHIFT */ static void asmgen_op_lshift(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { @@ -796,7 +781,7 @@ static void asmgen_op_lshift(SwsAArch64Context *s, const SwsAArch64OpImplParams /*********************************************************************/ /* right shift of raw pixel values */ -/* AARCH64_SWS_OP_RSHIFT */ +/* SWS_UOP_RSHIFT */ static void asmgen_op_rshift(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { @@ -810,7 +795,7 @@ static void asmgen_op_rshift(SwsAArch64Context *s, const SwsAArch64OpImplParams /*********************************************************************/ /* clear pixel values */ -/* AARCH64_SWS_OP_CLEAR */ +/* SWS_UOP_CLEAR */ static void emit_clear(SwsAArch64Context *s, const SwsAArch64OpImplParams *p, RasmOp *vx, int i, const char *vx_str) @@ -822,7 +807,7 @@ static void emit_clear(SwsAArch64Context *s, const SwsAArch64OpImplParams *p, i_movi(r, vx[i], IMM(0)); CMTF("%s[%u] = 0;", vx_str, i); break; case 1: - if (p->block_size * aarch64_pixel_size(p->type) == 8) { + if (p->block_size * ff_sws_pixel_type_size(p->type) == 8) { i_movi(r, v_8b (vx[i]), IMM(0xff)); } else { i_movi(r, v_16b(vx[i]), IMM(0xff)); @@ -862,10 +847,10 @@ static void asmgen_op_clear(SwsAArch64Context *s, const SwsAArch64OpImplParams * /*********************************************************************/ /* convert (cast) between formats */ -/* AARCH64_SWS_OP_TO_U8 */ -/* AARCH64_SWS_OP_TO_U16 */ -/* AARCH64_SWS_OP_TO_U32 */ -/* AARCH64_SWS_OP_TO_F32 */ +/* SWS_UOP_TO_U8 */ +/* SWS_UOP_TO_U16 */ +/* SWS_UOP_TO_U32 */ +/* SWS_UOP_TO_F32 */ static void asmgen_op_convert(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { @@ -885,24 +870,24 @@ static void asmgen_op_convert(SwsAArch64Context *s, const SwsAArch64OpImplParams } size_t src_el_size = s->el_size; - SwsAArch64PixelType to_type; - switch (p->op) { - case AARCH64_SWS_OP_TO_U8: to_type = AARCH64_PIXEL_U8; break; - case AARCH64_SWS_OP_TO_U16: to_type = AARCH64_PIXEL_U16; break; - case AARCH64_SWS_OP_TO_U32: to_type = AARCH64_PIXEL_U32; break; - case AARCH64_SWS_OP_TO_F32: to_type = AARCH64_PIXEL_F32; break; + SwsPixelType to_type; + switch (p->uop) { + case SWS_UOP_TO_U8: to_type = SWS_PIXEL_U8; break; + case SWS_UOP_TO_U16: to_type = SWS_PIXEL_U16; break; + case SWS_UOP_TO_U32: to_type = SWS_PIXEL_U32; break; + case SWS_UOP_TO_F32: to_type = SWS_PIXEL_F32; break; default: - av_assert0(!"Invalid op!"); + av_assert0(!"Invalid uop!"); break; } - size_t dst_el_size = aarch64_pixel_size(to_type); + size_t dst_el_size = ff_sws_pixel_type_size(to_type); /** * This function assumes block_size is either 8 or 16, and that * we're always using the most amount of vector registers possible. * Therefore, u32 always uses the high vector bank. */ - if (p->type == AARCH64_PIXEL_F32) { + if (p->type == SWS_PIXEL_F32) { rasm_add_comment(r, "f32 -> u32"); LOOP_MASK(p, i) i_fcvtzu(r, vl[i].s4, vl[i].s4); LOOP_MASK(p, i) i_fcvtzu(r, vh[i].s4, vh[i].s4); @@ -944,7 +929,7 @@ static void asmgen_op_convert(SwsAArch64Context *s, const SwsAArch64OpImplParams } /* See comment above for high vector bank usage for u32. */ - if (to_type == AARCH64_PIXEL_F32) { + if (to_type == SWS_PIXEL_F32) { rasm_add_comment(r, "u32 -> f32"); LOOP_MASK(p, i) i_ucvtf(r, vl[i].s4, vl[i].s4); LOOP_MASK(p, i) i_ucvtf(r, vh[i].s4, vh[i].s4); @@ -953,8 +938,8 @@ static void asmgen_op_convert(SwsAArch64Context *s, const SwsAArch64OpImplParams /*********************************************************************/ /* expand integers to the full range */ -/* AARCH64_SWS_OP_EXPAND_PAIR */ -/* AARCH64_SWS_OP_EXPAND_QUAD */ +/* SWS_UOP_EXPAND_PAIR */ +/* SWS_UOP_EXPAND_QUAD */ static void asmgen_op_expand(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { @@ -963,15 +948,15 @@ static void asmgen_op_expand(SwsAArch64Context *s, const SwsAArch64OpImplParams RasmOp *vh = s->vh; size_t src_el_size = s->el_size; - SwsAArch64PixelType to_type; - switch (p->op) { - case AARCH64_SWS_OP_EXPAND_PAIR: to_type = AARCH64_PIXEL_U16; break; - case AARCH64_SWS_OP_EXPAND_QUAD: to_type = AARCH64_PIXEL_U32; break; + SwsPixelType to_type; + switch (p->uop) { + case SWS_UOP_EXPAND_PAIR: to_type = SWS_PIXEL_U16; break; + case SWS_UOP_EXPAND_QUAD: to_type = SWS_PIXEL_U32; break; default: - av_assert0(!"Invalid op!"); + av_assert0(!"Invalid uop!"); break; } - size_t dst_el_size = aarch64_pixel_size(to_type); + size_t dst_el_size = ff_sws_pixel_type_size(to_type); size_t dst_total_size = p->block_size * dst_el_size; size_t dst_vec_size = FFMIN(dst_total_size, 16); @@ -994,7 +979,7 @@ static void asmgen_op_expand(SwsAArch64Context *s, const SwsAArch64OpImplParams /*********************************************************************/ /* numeric minimum */ -/* AARCH64_SWS_OP_MIN */ +/* SWS_UOP_MIN */ static void asmgen_op_min(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { @@ -1008,7 +993,7 @@ static void asmgen_op_min(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) asmgen_set_load_cont_node(s); LOOP_MASK(p, i) { i_dup(r, vt[i], a64op_elem(min_vec, i)); CMTF("v128 vmin%u = min_vec[%u];", i, i); } - if (p->type == AARCH64_PIXEL_F32) { + if (p->type == SWS_PIXEL_F32) { LOOP_MASK (p, i) { i_fmin(r, vl[i], vl[i], vt[i]); CMTF("vl[%u] = min(vl[%u], vmin%u);", i, i, i); } LOOP_MASK_VH(s, p, i) { i_fmin(r, vh[i], vh[i], vt[i]); CMTF("vh[%u] = min(vh[%u], vmin%u);", i, i, i); } } else { @@ -1019,7 +1004,7 @@ static void asmgen_op_min(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) /*********************************************************************/ /* numeric maximum */ -/* AARCH64_SWS_OP_MAX */ +/* SWS_UOP_MAX */ static void asmgen_op_max(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { @@ -1033,7 +1018,7 @@ static void asmgen_op_max(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) asmgen_set_load_cont_node(s); LOOP_MASK(p, i) { i_dup(r, vt[i], a64op_elem(max_vec, i)); CMTF("v128 vmax%u = max_vec[%u];", i, i); } - if (p->type == AARCH64_PIXEL_F32) { + if (p->type == SWS_PIXEL_F32) { LOOP_MASK (p, i) { i_fmax(r, vl[i], vl[i], vt[i]); CMTF("vl[%u] = max(vl[%u], vmax%u);", i, i, i); } LOOP_MASK_VH(s, p, i) { i_fmax(r, vh[i], vh[i], vt[i]); CMTF("vh[%u] = max(vh[%u], vmax%u);", i, i, i); } } else { @@ -1044,7 +1029,7 @@ static void asmgen_op_max(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) /*********************************************************************/ /* multiplication by scalar */ -/* AARCH64_SWS_OP_SCALE */ +/* SWS_UOP_SCALE */ static void asmgen_op_scale(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { @@ -1058,7 +1043,7 @@ static void asmgen_op_scale(SwsAArch64Context *s, const SwsAArch64OpImplParams * asmgen_set_load_cont_node(s); i_ld1r(r, vv_1(scale_vec), a64op_base(priv_ptr)); CMT("v128 scale_vec = broadcast(*scale_vec_ptr);"); - if (p->type == AARCH64_PIXEL_F32) { + if (p->type == SWS_PIXEL_F32) { LOOP_MASK (p, i) { i_fmul(r, vl[i], vl[i], scale_vec); CMTF("vl[%u] *= scale_vec;", i); } LOOP_MASK_VH(s, p, i) { i_fmul(r, vh[i], vh[i], scale_vec); CMTF("vh[%u] *= scale_vec;", i); } } else { @@ -1069,8 +1054,8 @@ static void asmgen_op_scale(SwsAArch64Context *s, const SwsAArch64OpImplParams * /*********************************************************************/ /* generalized linear affine transform */ -/* AARCH64_SWS_OP_LINEAR */ -/* AARCH64_SWS_OP_LINEAR_FMA */ +/* SWS_UOP_LINEAR */ +/* SWS_UOP_LINEAR_FMA */ /** * Performs one pass of the linear transform over a single vector bank @@ -1133,7 +1118,7 @@ static void linear_pass(SwsAArch64Context *s, const SwsAArch64OpImplParams *p, } else { i_fmul (r, vx[i], vsrc, vcoeff); CMTF("v%c[%u] = vsrc[%u] * vc[%u][%u];", cvh, i, src_j, vc_i, vc_j); } - } else if (p->op == AARCH64_SWS_OP_LINEAR_FMA) { + } else if (p->uop == SWS_UOP_LINEAR_FMA) { /** * Most modern aarch64 cores have a fastpath for sequences * of fmla instructions. This means that even if the coefficient @@ -1205,7 +1190,7 @@ static void asmgen_op_linear(SwsAArch64Context *s, const SwsAArch64OpImplParams /*********************************************************************/ /* add dithering noise */ -/* AARCH64_SWS_OP_DITHER */ +/* SWS_UOP_DITHER */ static void asmgen_op_dither(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { @@ -1336,17 +1321,17 @@ static void asmgen_op_cps(SwsAArch64Context *s, const SwsAArch64OpEntry *entry) bool is_read = false; bool is_write = false; - switch (p->op) { - case AARCH64_SWS_OP_READ_BIT: - case AARCH64_SWS_OP_READ_NIBBLE: - case AARCH64_SWS_OP_READ_PACKED: - case AARCH64_SWS_OP_READ_PLANAR: + switch (p->uop) { + case SWS_UOP_READ_BIT: + case SWS_UOP_READ_NIBBLE: + case SWS_UOP_READ_PACKED: + case SWS_UOP_READ_PLANAR: is_read = true; break; - case AARCH64_SWS_OP_WRITE_BIT: - case AARCH64_SWS_OP_WRITE_NIBBLE: - case AARCH64_SWS_OP_WRITE_PACKED: - case AARCH64_SWS_OP_WRITE_PLANAR: + case SWS_UOP_WRITE_BIT: + case SWS_UOP_WRITE_NIBBLE: + case SWS_UOP_WRITE_PACKED: + case SWS_UOP_WRITE_PLANAR: is_write = true; break; default: @@ -1359,7 +1344,7 @@ static void asmgen_op_cps(SwsAArch64Context *s, const SwsAArch64OpEntry *entry) * Set up vector register dimensions and reshape all vectors * accordingly. */ - size_t el_size = aarch64_pixel_size(p->type); + size_t el_size = ff_sws_pixel_type_size(p->type); size_t total_size = p->block_size * el_size; s->vec_size = FFMIN(total_size, 16); @@ -1372,36 +1357,36 @@ static void asmgen_op_cps(SwsAArch64Context *s, const SwsAArch64OpEntry *entry) /* Common start for continuation-passing style (CPS) functions. */ asmgen_set_load_cont_node(s); - switch (p->op) { - case AARCH64_SWS_OP_READ_BIT: asmgen_op_read_bit(s, p); break; - case AARCH64_SWS_OP_READ_NIBBLE: asmgen_op_read_nibble(s, p); break; - case AARCH64_SWS_OP_READ_PACKED: asmgen_op_read_packed(s, p); break; - case AARCH64_SWS_OP_READ_PLANAR: asmgen_op_read_planar(s, p); break; - case AARCH64_SWS_OP_WRITE_BIT: asmgen_op_write_bit(s, p); break; - case AARCH64_SWS_OP_WRITE_NIBBLE: asmgen_op_write_nibble(s, p); break; - case AARCH64_SWS_OP_WRITE_PACKED: asmgen_op_write_packed(s, p); break; - case AARCH64_SWS_OP_WRITE_PLANAR: asmgen_op_write_planar(s, p); break; - case AARCH64_SWS_OP_SWAP_BYTES: asmgen_op_swap_bytes(s, p); break; - case AARCH64_SWS_OP_PERMUTE: asmgen_op_move(s, p); break; - case AARCH64_SWS_OP_COPY: asmgen_op_move(s, p); break; - case AARCH64_SWS_OP_UNPACK: asmgen_op_unpack(s, p); break; - case AARCH64_SWS_OP_PACK: asmgen_op_pack(s, p); break; - case AARCH64_SWS_OP_LSHIFT: asmgen_op_lshift(s, p); break; - case AARCH64_SWS_OP_RSHIFT: asmgen_op_rshift(s, p); break; - case AARCH64_SWS_OP_CLEAR: asmgen_op_clear(s, p); break; - case AARCH64_SWS_OP_TO_U8: asmgen_op_convert(s, p); break; - case AARCH64_SWS_OP_TO_U16: asmgen_op_convert(s, p); break; - case AARCH64_SWS_OP_TO_U32: asmgen_op_convert(s, p); break; - case AARCH64_SWS_OP_TO_F32: asmgen_op_convert(s, p); break; - case AARCH64_SWS_OP_EXPAND_PAIR: asmgen_op_expand(s, p); break; - case AARCH64_SWS_OP_EXPAND_QUAD: asmgen_op_expand(s, p); break; - case AARCH64_SWS_OP_MIN: asmgen_op_min(s, p); break; - case AARCH64_SWS_OP_MAX: asmgen_op_max(s, p); break; - case AARCH64_SWS_OP_SCALE: asmgen_op_scale(s, p); break; - case AARCH64_SWS_OP_LINEAR: asmgen_op_linear(s, p); break; - case AARCH64_SWS_OP_LINEAR_FMA: asmgen_op_linear(s, p); break; - case AARCH64_SWS_OP_DITHER: asmgen_op_dither(s, p); break; - /* TODO implement AARCH64_SWS_OP_SHUFFLE */ + switch (p->uop) { + case SWS_UOP_READ_BIT: asmgen_op_read_bit(s, p); break; + case SWS_UOP_READ_NIBBLE: asmgen_op_read_nibble(s, p); break; + case SWS_UOP_READ_PACKED: asmgen_op_read_packed(s, p); break; + case SWS_UOP_READ_PLANAR: asmgen_op_read_planar(s, p); break; + case SWS_UOP_WRITE_BIT: asmgen_op_write_bit(s, p); break; + case SWS_UOP_WRITE_NIBBLE: asmgen_op_write_nibble(s, p); break; + case SWS_UOP_WRITE_PACKED: asmgen_op_write_packed(s, p); break; + case SWS_UOP_WRITE_PLANAR: asmgen_op_write_planar(s, p); break; + case SWS_UOP_SWAP_BYTES: asmgen_op_swap_bytes(s, p); break; + case SWS_UOP_PERMUTE: asmgen_op_move(s, p); break; + case SWS_UOP_COPY: asmgen_op_move(s, p); break; + case SWS_UOP_UNPACK: asmgen_op_unpack(s, p); break; + case SWS_UOP_PACK: asmgen_op_pack(s, p); break; + case SWS_UOP_LSHIFT: asmgen_op_lshift(s, p); break; + case SWS_UOP_RSHIFT: asmgen_op_rshift(s, p); break; + case SWS_UOP_CLEAR: asmgen_op_clear(s, p); break; + case SWS_UOP_TO_U8: asmgen_op_convert(s, p); break; + case SWS_UOP_TO_U16: asmgen_op_convert(s, p); break; + case SWS_UOP_TO_U32: asmgen_op_convert(s, p); break; + case SWS_UOP_TO_F32: asmgen_op_convert(s, p); break; + case SWS_UOP_EXPAND_PAIR: asmgen_op_expand(s, p); break; + case SWS_UOP_EXPAND_QUAD: asmgen_op_expand(s, p); break; + case SWS_UOP_MIN: asmgen_op_min(s, p); break; + case SWS_UOP_MAX: asmgen_op_max(s, p); break; + case SWS_UOP_SCALE: asmgen_op_scale(s, p); break; + case SWS_UOP_LINEAR: asmgen_op_linear(s, p); break; + case SWS_UOP_LINEAR_FMA: asmgen_op_linear(s, p); break; + case SWS_UOP_DITHER: asmgen_op_dither(s, p); break; + /* TODO implement SWS_UOP_SHUFFLE */ default: break; } diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index 92b3b646c1..092ed6ab60 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -3,412 +3,412 @@ * To regenerate, run: make fate-sws-ops-entries-aarch64 GEN=1 */ -ENTRY(ff_sws_read_bit_8_u8_0001_neon, { .op = AARCH64_SWS_OP_READ_BIT, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_read_bit_16_u8_0001_neon, { .op = AARCH64_SWS_OP_READ_BIT, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_read_nibble_8_u8_0001_neon, { .op = AARCH64_SWS_OP_READ_NIBBLE, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_read_nibble_16_u8_0001_neon, { .op = AARCH64_SWS_OP_READ_NIBBLE, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_read_packed_8_u8_0011_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_read_packed_8_u8_0111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_read_packed_8_u8_1111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_read_packed_8_u16_0011_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_read_packed_8_u16_0111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_read_packed_8_u16_1111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_read_packed_8_u32_0011_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0011 }) -ENTRY(ff_sws_read_packed_8_u32_0111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_read_packed_8_u32_1111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_read_packed_16_u8_0011_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_read_packed_16_u8_0111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_read_packed_16_u8_1111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_read_packed_16_u16_0011_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_read_packed_16_u16_0111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_read_packed_16_u16_1111_neon, { .op = AARCH64_SWS_OP_READ_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_read_planar_8_u8_0001_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_read_planar_8_u8_0011_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_read_planar_8_u8_0111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_read_planar_8_u8_1111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_read_planar_8_u16_0001_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_read_planar_8_u16_0011_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_read_planar_8_u16_0111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_read_planar_8_u16_1111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_read_planar_8_u32_0001_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }) -ENTRY(ff_sws_read_planar_8_u32_0111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_read_planar_8_u32_1111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_read_planar_16_u8_0001_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_read_planar_16_u8_0111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_read_planar_16_u8_1111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_read_planar_16_u16_0001_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_read_planar_16_u16_0111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_read_planar_16_u16_1111_neon, { .op = AARCH64_SWS_OP_READ_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_write_bit_8_u8_0001_neon, { .op = AARCH64_SWS_OP_WRITE_BIT, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_write_nibble_8_u8_0001_neon, { .op = AARCH64_SWS_OP_WRITE_NIBBLE, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_write_nibble_16_u8_0001_neon, { .op = AARCH64_SWS_OP_WRITE_NIBBLE, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_write_packed_8_u8_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_write_packed_8_u8_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_write_packed_8_u8_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_write_packed_8_u16_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_write_packed_8_u16_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_write_packed_8_u16_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_write_packed_8_u32_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0011 }) -ENTRY(ff_sws_write_packed_8_u32_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_write_packed_8_u32_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_write_packed_16_u8_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_write_packed_16_u8_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_write_packed_16_u8_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_write_packed_16_u16_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_write_packed_16_u16_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_write_packed_16_u16_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PACKED, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_write_planar_8_u8_0001_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_write_planar_8_u8_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_write_planar_8_u8_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_write_planar_8_u8_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_write_planar_8_u16_0001_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_write_planar_8_u16_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_write_planar_8_u16_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_write_planar_8_u16_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_write_planar_8_u32_0001_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }) -ENTRY(ff_sws_write_planar_8_u32_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_write_planar_8_u32_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_write_planar_16_u8_0001_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_write_planar_16_u8_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_write_planar_16_u8_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_write_planar_16_u8_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_write_planar_16_u16_0001_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_write_planar_16_u16_0011_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_write_planar_16_u16_0111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_write_planar_16_u16_1111_neon, { .op = AARCH64_SWS_OP_WRITE_PLANAR, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_swap_bytes_8_u16_0001_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_swap_bytes_8_u16_0010_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }) -ENTRY(ff_sws_swap_bytes_8_u16_0011_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_swap_bytes_8_u16_0111_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_swap_bytes_8_u16_1001_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1001 }) -ENTRY(ff_sws_swap_bytes_8_u16_1110_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_swap_bytes_8_u16_1111_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_swap_bytes_8_u32_0001_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }) -ENTRY(ff_sws_swap_bytes_8_u32_0011_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0011 }) -ENTRY(ff_sws_swap_bytes_8_u32_0111_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_swap_bytes_8_u32_1001_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1001 }) -ENTRY(ff_sws_swap_bytes_8_u32_1110_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1110 }) -ENTRY(ff_sws_swap_bytes_8_u32_1111_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_swap_bytes_16_u16_0001_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_swap_bytes_16_u16_0011_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_swap_bytes_16_u16_0111_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_swap_bytes_16_u16_1110_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_swap_bytes_16_u16_1111_neon, { .op = AARCH64_SWS_OP_SWAP_BYTES, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_permute_000000000001_32_u8_0001_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000001ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000002_32_u8_0001_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000002ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000003_8_u8_0001_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000003ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000003_16_u8_0001_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000003ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000003_32_u8_0001_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000003ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000010_8_u8_0010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000010ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000010_16_u8_0010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000010ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000010_32_u8_0010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000010ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000013_8_u8_0010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000013ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000013_16_u8_0010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000013ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000013_32_u8_0010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000013ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000020_8_u8_0100_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000020ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0100 }) -ENTRY(ff_sws_permute_000000000020_32_u8_0100_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000020ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0100 }) -ENTRY(ff_sws_permute_000000000030_8_u8_1000_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000030ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_permute_000000000030_16_u8_1000_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000030ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_permute_000000000030_32_u8_1000_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000030ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_permute_000000000031_32_u8_1000_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000031ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_permute_000000000130_32_u8_1001_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000130ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1001 }) -ENTRY(ff_sws_permute_000000000310_8_u8_0011_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000310ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_000000000310_16_u8_0011_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000310ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_000000000320_32_u8_0101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000000320ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_000000001031_32_u8_1010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000001031ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }) -ENTRY(ff_sws_permute_000000001301_8_u8_0011_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000001301ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_000000002032_8_u8_1100_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000002032ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }) -ENTRY(ff_sws_permute_000000002032_32_u8_1100_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000002032ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }) -ENTRY(ff_sws_permute_000000002302_16_u8_0101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000002302ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_000000002302_32_u8_0101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000002302ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_000000102132_8_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000102132ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_000000102132_16_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000102132ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_000000102132_32_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000102132ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_000000132102_32_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000132102ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_0000001f01f0_8_u8_0011_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_0000001f01f0_16_u8_0011_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_0000001f01f0_32_u8_0011_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_000000201231_8_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000201231ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_000000201231_32_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000201231ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_000000231201_8_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000231201ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_000000231201_16_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000231201ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_000000231201_32_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x000000231201ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_0000002f02f0_8_u8_0101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_0000002f02f0_16_u8_0101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_0000002f02f0_32_u8_0101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_0000002f12f1_8_u8_0110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_permute_0000002f12f1_16_u8_0110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_permute_0000002f12f1_32_u8_0110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_permute_0000003f13f1_8_u8_1010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }) -ENTRY(ff_sws_permute_0000003f13f1_16_u8_1010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }) -ENTRY(ff_sws_permute_0000003f13f1_32_u8_1010_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }) -ENTRY(ff_sws_permute_00001f2102f0_8_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00001f2102f0_16_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00001f2102f0_32_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f1201f0_16_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f1201f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f1201f0_32_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f1201f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f12f103_8_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f12f103_16_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f12f103_32_u8_0111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f12f130_8_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_00002f12f130_16_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_00002f12f130_32_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_00002f3203f0_8_u8_1101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f3203f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }) -ENTRY(ff_sws_permute_00002f3203f0_16_u8_1101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00002f3203f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }) -ENTRY(ff_sws_permute_00003f2302f0_16_u8_1101_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00003f2302f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }) -ENTRY(ff_sws_permute_00003f2312f1_8_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00003f2312f1ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_00003f2312f1_16_u8_1110_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x00003f2312f1ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_001f213203f0_8_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_001f213203f0_16_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_001f213203f0_32_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_002f123103f0_8_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x002f123103f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_002f123103f0_32_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x002f123103f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_003f231201f0_16_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x003f231201f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_003f231201f0_32_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x003f231201f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_2f12f13f03f0_8_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_2f12f13f03f0_16_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_2f12f13f03f0_32_u8_1111_neon, { .op = AARCH64_SWS_OP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_copy_000000002010_8_u8_0110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000002010ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_copy_000000002010_16_u8_0110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000002010ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_copy_000000002010_32_u8_0110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000002010ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_copy_000000103120_8_u8_1110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000103120ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_000000103120_16_u8_1110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000103120ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_000000103120_32_u8_1110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000103120ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_000000302010_8_u8_1110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000302010ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_000000302010_16_u8_1110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000302010ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_000000302010_32_u8_1110_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x000000302010ULL, .block_size = 32, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_001f01f03020_8_u8_1111_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x001f01f03020ULL, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_copy_001f01f03020_16_u8_1111_neon, { .op = AARCH64_SWS_OP_COPY, .move = 0x001f01f03020ULL, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_unpack_0121_8_u8_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0121, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0121_16_u8_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0121, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0233_8_u8_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0233, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0233_16_u8_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0233, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0332_8_u8_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0332, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0332_16_u8_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0332, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0444_8_u16_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0444, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0444_16_u16_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0444, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0555_8_u16_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0555, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0555_16_u16_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0555, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0565_8_u16_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0565, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0565_16_u16_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x0565, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_2aaa_8_u32_0010_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x2aaa, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0010 }) -ENTRY(ff_sws_unpack_2aaa_8_u32_0111_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0x2aaa, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_aaa2_8_u32_0100_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0xaaa2, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0100 }) -ENTRY(ff_sws_unpack_aaa2_8_u32_1110_neon, { .op = AARCH64_SWS_OP_UNPACK, .pack = 0xaaa2, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1110 }) -ENTRY(ff_sws_pack_0121_8_u8_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0121, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0121_16_u8_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0121, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0233_8_u8_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0233, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0233_16_u8_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0233, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0332_8_u8_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0332, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0332_16_u8_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0332, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0444_8_u16_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0444, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0444_16_u16_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0444, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0555_8_u16_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0555, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0555_16_u16_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0555, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0565_8_u16_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0565, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0565_16_u16_0111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x0565, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_2aaa_8_u32_1111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0x2aaa, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_pack_aaa2_8_u32_1111_neon, { .op = AARCH64_SWS_OP_PACK, .pack = 0xaaa2, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_lshift_1_8_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 1, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_1_16_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 1, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_1_16_u16_1110_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 1, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_2_8_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 2, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_2_8_u16_1110_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 2, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_2_8_u32_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 2, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_2_16_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 2, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_2_16_u16_1110_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 2, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_3_16_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 3, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_4_8_u16_0001_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_lshift_4_8_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_4_8_u16_1110_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_4_16_u16_0001_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_lshift_4_16_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_4_16_u16_1110_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 4, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_5_16_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 5, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_6_8_u16_0001_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_lshift_6_8_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_6_8_u16_1110_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_6_16_u16_0001_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_lshift_6_16_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_6_16_u16_1110_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 6, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_7_16_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 7, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_8_16_u16_0111_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 8, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_8_16_u16_1110_neon, { .op = AARCH64_SWS_OP_LSHIFT, .shift = 8, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_rshift_4_8_u16_0001_neon, { .op = AARCH64_SWS_OP_RSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_rshift_4_8_u16_0010_neon, { .op = AARCH64_SWS_OP_RSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }) -ENTRY(ff_sws_rshift_4_8_u16_0111_neon, { .op = AARCH64_SWS_OP_RSHIFT, .shift = 4, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_rshift_4_16_u16_0111_neon, { .op = AARCH64_SWS_OP_RSHIFT, .shift = 4, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_rshift_6_8_u16_0001_neon, { .op = AARCH64_SWS_OP_RSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_rshift_6_8_u16_0111_neon, { .op = AARCH64_SWS_OP_RSHIFT, .shift = 6, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_rshift_6_16_u16_0111_neon, { .op = AARCH64_SWS_OP_RSHIFT, .shift = 6, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_clear_0fff_8_u8_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_clear_0fff_8_u8_1011_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1011 }) -ENTRY(ff_sws_clear_0fff_8_u16_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }) -ENTRY(ff_sws_clear_0fff_8_u16_1101_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1101 }) -ENTRY(ff_sws_clear_0fff_16_u8_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_clear_0fff_16_u16_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x0fff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }) -ENTRY(ff_sws_clear_1fff_8_u8_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_clear_1fff_8_u8_1011_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1011 }) -ENTRY(ff_sws_clear_1fff_8_u8_1101_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }) -ENTRY(ff_sws_clear_1fff_8_u16_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }) -ENTRY(ff_sws_clear_1fff_16_u8_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_clear_1fff_16_u16_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0x1fff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }) -ENTRY(ff_sws_clear_ff1f_8_u8_0010_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xff1f, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_clear_ff1f_8_u16_0010_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xff1f, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }) -ENTRY(ff_sws_clear_ff1f_16_u8_0010_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xff1f, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_clear_ff1f_16_u16_0010_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xff1f, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }) -ENTRY(ff_sws_clear_fff0_8_u8_0001_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff0, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff0_16_u8_0001_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff0, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff1_8_u8_0001_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff1_8_u8_1101_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1101 }) -ENTRY(ff_sws_clear_fff1_8_u16_0001_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff1_8_u16_1101_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1101 }) -ENTRY(ff_sws_clear_fff1_16_u8_0001_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff1_16_u8_0111_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_clear_fff1_16_u16_0001_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff1_16_u16_0111_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_clear_ffff_8_u8_0011_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_clear_ffff_8_u8_0101_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_clear_ffff_8_u8_1100_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }) -ENTRY(ff_sws_clear_ffff_8_u16_1100_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1100 }) -ENTRY(ff_sws_clear_ffff_8_u32_0001_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }) -ENTRY(ff_sws_clear_ffff_8_u32_0010_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0010 }) -ENTRY(ff_sws_clear_ffff_8_u32_0101_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0101 }) -ENTRY(ff_sws_clear_ffff_8_u32_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1000 }) -ENTRY(ff_sws_clear_ffff_8_u32_1010_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1010 }) -ENTRY(ff_sws_clear_ffff_8_u32_1011_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1011 }) -ENTRY(ff_sws_clear_ffff_8_u32_1101_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1101 }) -ENTRY(ff_sws_clear_ffff_16_u8_0011_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_clear_ffff_16_u8_0110_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_clear_ffff_16_u16_0001_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_clear_ffff_16_u16_0011_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_clear_ffff_16_u16_0111_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_clear_ffff_16_u16_1000_neon, { .op = AARCH64_SWS_OP_CLEAR, .clear = 0xffff, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x1000 }) -ENTRY(ff_sws_to_u8_8_f32_0001_neon, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_to_u8_8_f32_0011_neon, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }) -ENTRY(ff_sws_to_u8_8_f32_0111_neon, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_to_u8_8_f32_1001_neon, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_to_u8_8_f32_1110_neon, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_to_u8_8_f32_1111_neon, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_to_u8_16_u16_0111_neon, { .op = AARCH64_SWS_OP_TO_U8, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_to_u16_8_u8_0111_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_to_u16_8_u32_0111_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_to_u16_8_u32_1110_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1110 }) -ENTRY(ff_sws_to_u16_8_f32_0001_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_to_u16_8_f32_0011_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }) -ENTRY(ff_sws_to_u16_8_f32_0111_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_to_u16_8_f32_1001_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_to_u16_8_f32_1110_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_to_u16_8_f32_1111_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_to_u16_16_u8_0001_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_to_u16_16_u8_0111_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_to_u16_16_u8_1110_neon, { .op = AARCH64_SWS_OP_TO_U16, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_to_u32_8_u8_0001_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_to_u32_8_u8_0111_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_to_u32_8_u16_0001_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_to_u32_8_u16_0111_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_to_u32_8_f32_0001_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_to_u32_8_f32_0111_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_to_u32_8_f32_1001_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_to_u32_8_f32_1110_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_to_u32_8_f32_1111_neon, { .op = AARCH64_SWS_OP_TO_U32, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_to_f32_8_u8_0001_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_to_f32_8_u8_0010_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_to_f32_8_u8_0011_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_to_f32_8_u8_0100_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0100 }) -ENTRY(ff_sws_to_f32_8_u8_0111_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_to_f32_8_u8_1010_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1010 }) -ENTRY(ff_sws_to_f32_8_u8_1100_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1100 }) -ENTRY(ff_sws_to_f32_8_u8_1110_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_to_f32_8_u8_1111_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_to_f32_8_u16_0001_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_to_f32_8_u16_0010_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0010 }) -ENTRY(ff_sws_to_f32_8_u16_0011_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_to_f32_8_u16_0111_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_to_f32_8_u16_1110_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_to_f32_8_u16_1111_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_to_f32_8_u32_0010_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0010 }) -ENTRY(ff_sws_to_f32_8_u32_0100_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0100 }) -ENTRY(ff_sws_to_f32_8_u32_0111_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_to_f32_8_u32_1110_neon, { .op = AARCH64_SWS_OP_TO_F32, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x1110 }) -ENTRY(ff_sws_expand_pair_16_u8_0001_neon, { .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_expand_pair_16_u8_0011_neon, { .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_expand_pair_16_u8_0111_neon, { .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_expand_pair_16_u8_1110_neon, { .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_expand_pair_16_u8_1111_neon, { .op = AARCH64_SWS_OP_EXPAND_PAIR, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_min_8_f32_0001_neon, { .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_min_8_f32_0011_neon, { .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }) -ENTRY(ff_sws_min_8_f32_0111_neon, { .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_min_8_f32_1001_neon, { .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_min_8_f32_1110_neon, { .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_min_8_f32_1111_neon, { .op = AARCH64_SWS_OP_MIN, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_max_8_f32_0001_neon, { .op = AARCH64_SWS_OP_MAX, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_max_8_f32_0011_neon, { .op = AARCH64_SWS_OP_MAX, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }) -ENTRY(ff_sws_max_8_f32_0111_neon, { .op = AARCH64_SWS_OP_MAX, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_max_8_f32_1001_neon, { .op = AARCH64_SWS_OP_MAX, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_max_8_f32_1111_neon, { .op = AARCH64_SWS_OP_MAX, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_scale_8_u32_0001_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0001 }) -ENTRY(ff_sws_scale_8_u32_0111_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_scale_8_f32_0001_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_scale_8_f32_0011_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }) -ENTRY(ff_sws_scale_8_f32_0111_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_scale_8_f32_1110_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_scale_8_f32_1111_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_scale_16_u8_0001_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_scale_16_u8_0111_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 16, .type = AARCH64_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_scale_16_u16_0001_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_scale_16_u16_0111_neon, { .op = AARCH64_SWS_OP_SCALE, .block_size = 16, .type = AARCH64_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_linear_000000000f_8_f32_0001_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000000000fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_00000000fc_8_f32_0001_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x00000000fcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_00000000ff_8_f32_0001_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x00000000ffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_000000c000_8_f32_0010_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000000c000ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0010 }) -ENTRY(ff_sws_linear_000373dcc7_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000373dcc7ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_0003f3fccf_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x0003f3fccfULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_000c00c00c_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000c00c00cULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_000c30cc0f_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000c30cc0fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_000ff3fcfc_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000ff3fcfcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_000ff3fcff_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0x000ff3fcffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_c000000000_8_f32_1000_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc000000000ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1000 }) -ENTRY(ff_sws_linear_c00000000f_8_f32_1001_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00000000fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_linear_c0000000fc_8_f32_1001_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc0000000fcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_linear_c003f3fccf_8_f32_1111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc003f3fccfULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_linear_c00c00c00c_8_f32_1111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00c00c00cULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_linear_c00ff3fcff_8_f32_1111_neon, { .op = AARCH64_SWS_OP_LINEAR, .linear.mask = 0xc00ff3fcffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_linear_fma_000000000f_8_f32_0001_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000000000fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_fma_00000000fc_8_f32_0001_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x00000000fcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_fma_00000000ff_8_f32_0001_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x00000000ffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_fma_000000c000_8_f32_0010_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000000c000ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0010 }) -ENTRY(ff_sws_linear_fma_000373dcc7_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000373dcc7ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_0003f3fccf_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x0003f3fccfULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_000c00c00c_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000c00c00cULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_000c30cc0f_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000c30cc0fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_000ff3fcfc_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000ff3fcfcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_000ff3fcff_8_f32_0111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0x000ff3fcffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_c000000000_8_f32_1000_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc000000000ULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1000 }) -ENTRY(ff_sws_linear_fma_c00000000f_8_f32_1001_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc00000000fULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_linear_fma_c0000000fc_8_f32_1001_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc0000000fcULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_linear_fma_c003f3fccf_8_f32_1111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc003f3fccfULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_linear_fma_c00c00c00c_8_f32_1111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc00c00c00cULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_linear_fma_c00ff3fcff_8_f32_1111_neon, { .op = AARCH64_SWS_OP_LINEAR_FMA, .linear.mask = 0xc00ff3fcffULL, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_0325_4_8_f32_1111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x0325, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_032f_4_8_f32_1110_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x032f, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_dither_2305_4_8_f32_1111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x2305, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_230f_4_8_f32_1110_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x230f, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_dither_3000_4_8_f32_1111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x3000, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_302f_4_8_f32_1110_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x302f, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_dither_3ff0_4_8_f32_1001_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x3ff0, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_dither_5023_4_8_f32_1111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x5023, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_5032_4_8_f32_1111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x5032, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_5230_4_8_f32_1111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x5230, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_5ff0_4_8_f32_1001_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x5ff0, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_dither_5fff_4_8_f32_1000_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0x5fff, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x1000 }) -ENTRY(ff_sws_dither_f023_4_8_f32_0111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf023, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_dither_f032_4_8_f32_0111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf032, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_dither_f203_4_8_f32_0111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf203, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_dither_f230_4_8_f32_0111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf230, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_dither_f2f0_4_8_f32_0101_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf2f0, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0101 }) -ENTRY(ff_sws_dither_f2ff_4_8_f32_0100_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf2ff, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0100 }) -ENTRY(ff_sws_dither_f302_4_8_f32_0111_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xf302, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_dither_ff30_4_8_f32_0011_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xff30, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0011 }) -ENTRY(ff_sws_dither_ff3f_4_8_f32_0010_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xff3f, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0010 }) -ENTRY(ff_sws_dither_fff0_4_8_f32_0001_neon, { .op = AARCH64_SWS_OP_DITHER, .dither.y_offset = 0xfff0, .dither.size_log2 = 4, .block_size = 8, .type = AARCH64_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_read_planar_8_u8_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_read_planar_8_u8_0011_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_read_planar_8_u8_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_read_planar_8_u8_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_read_planar_8_u16_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_read_planar_8_u16_0011_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_read_planar_8_u16_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_read_planar_8_u16_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_read_planar_8_u32_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0001 }) +ENTRY(ff_sws_read_planar_8_u32_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_read_planar_8_u32_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_read_planar_16_u8_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_read_planar_16_u8_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_read_planar_16_u8_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_read_planar_16_u16_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_read_planar_16_u16_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_read_planar_16_u16_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_read_packed_8_u8_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_read_packed_8_u8_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_read_packed_8_u8_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_read_packed_8_u16_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_read_packed_8_u16_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_read_packed_8_u16_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_read_packed_8_u32_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0011 }) +ENTRY(ff_sws_read_packed_8_u32_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_read_packed_8_u32_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_read_packed_16_u8_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_read_packed_16_u8_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_read_packed_16_u8_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_read_packed_16_u16_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_read_packed_16_u16_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_read_packed_16_u16_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_read_nibble_8_u8_0001_neon, { .uop = SWS_UOP_READ_NIBBLE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_read_nibble_16_u8_0001_neon, { .uop = SWS_UOP_READ_NIBBLE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_read_bit_8_u8_0001_neon, { .uop = SWS_UOP_READ_BIT, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_read_bit_16_u8_0001_neon, { .uop = SWS_UOP_READ_BIT, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_write_planar_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_write_planar_8_u8_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_write_planar_8_u8_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_write_planar_8_u8_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_write_planar_8_u16_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_write_planar_8_u16_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_write_planar_8_u16_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_write_planar_8_u16_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_write_planar_8_u32_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0001 }) +ENTRY(ff_sws_write_planar_8_u32_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_write_planar_8_u32_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_write_planar_16_u8_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_write_planar_16_u8_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_write_planar_16_u8_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_write_planar_16_u8_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_write_planar_16_u16_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_write_planar_16_u16_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_write_planar_16_u16_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_write_planar_16_u16_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_write_packed_8_u8_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_write_packed_8_u8_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_write_packed_8_u8_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_write_packed_8_u16_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_write_packed_8_u16_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_write_packed_8_u16_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_write_packed_8_u32_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0011 }) +ENTRY(ff_sws_write_packed_8_u32_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_write_packed_8_u32_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_write_packed_16_u8_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_write_packed_16_u8_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_write_packed_16_u8_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_write_packed_16_u16_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_write_packed_16_u16_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_write_packed_16_u16_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_write_nibble_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_NIBBLE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_write_nibble_16_u8_0001_neon, { .uop = SWS_UOP_WRITE_NIBBLE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_write_bit_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_BIT, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_permute_000000000001_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000001ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_permute_000000000002_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000002ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_permute_000000000003_8_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000003ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_permute_000000000003_16_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000003ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_permute_000000000003_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000003ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_permute_000000000010_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000010ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000010_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000010ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000010_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000010ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000013_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000013ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000013_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000013ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000013_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000013ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000020_8_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000020ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0100 }) +ENTRY(ff_sws_permute_000000000020_32_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000020ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0100 }) +ENTRY(ff_sws_permute_000000000030_8_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000030ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_permute_000000000030_16_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000030ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_permute_000000000030_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000030ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_permute_000000000031_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000031ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_permute_000000000130_32_u8_1001_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000130ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1001 }) +ENTRY(ff_sws_permute_000000000310_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000310ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_000000000310_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000310ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_000000000320_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000320ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_000000001031_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000001031ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1010 }) +ENTRY(ff_sws_permute_000000001301_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000001301ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_000000002032_8_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000002032ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1100 }) +ENTRY(ff_sws_permute_000000002032_32_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000002032ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1100 }) +ENTRY(ff_sws_permute_000000002302_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000002302ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_000000002302_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000002302ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_000000102132_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000102132ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_000000102132_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000102132ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_000000102132_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000102132ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_000000132102_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000132102ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_0000001f01f0_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_0000001f01f0_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_0000001f01f0_32_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_000000201231_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000201231ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_000000201231_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000201231ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_000000231201_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000231201ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_000000231201_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000231201ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_000000231201_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000231201ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_0000002f02f0_8_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_0000002f02f0_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_0000002f02f0_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_0000002f12f1_8_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_permute_0000002f12f1_16_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_permute_0000002f12f1_32_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_permute_0000003f13f1_8_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1010 }) +ENTRY(ff_sws_permute_0000003f13f1_16_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1010 }) +ENTRY(ff_sws_permute_0000003f13f1_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1010 }) +ENTRY(ff_sws_permute_00001f2102f0_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00001f2102f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00001f2102f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f1201f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f1201f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f1201f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f1201f0ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f12f103_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f12f103_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f12f103_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f12f130_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_00002f12f130_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_00002f12f130_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_00002f3203f0_8_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f3203f0ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1101 }) +ENTRY(ff_sws_permute_00002f3203f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f3203f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1101 }) +ENTRY(ff_sws_permute_00003f2302f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00003f2302f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1101 }) +ENTRY(ff_sws_permute_00003f2312f1_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00003f2312f1ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_00003f2312f1_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00003f2312f1ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_001f213203f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_001f213203f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_001f213203f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_002f123103f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x002f123103f0ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_002f123103f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x002f123103f0ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_003f231201f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x003f231201f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_003f231201f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x003f231201f0ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_2f12f13f03f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_2f12f13f03f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_2f12f13f03f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_copy_000000002010_8_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000002010ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_copy_000000002010_16_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000002010ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_copy_000000002010_32_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000002010ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_copy_000000103120_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000103120ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_000000103120_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000103120ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_000000103120_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000103120ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_000000302010_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000302010ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_000000302010_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000302010ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_000000302010_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000302010ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_001f01f03020_8_u8_1111_neon, { .uop = SWS_UOP_COPY, .move = 0x001f01f03020ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_copy_001f01f03020_16_u8_1111_neon, { .uop = SWS_UOP_COPY, .move = 0x001f01f03020ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_swap_bytes_8_u16_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_swap_bytes_8_u16_0010_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0010 }) +ENTRY(ff_sws_swap_bytes_8_u16_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_swap_bytes_8_u16_0111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_swap_bytes_8_u16_1001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1001 }) +ENTRY(ff_sws_swap_bytes_8_u16_1110_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_swap_bytes_8_u16_1111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_swap_bytes_8_u32_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0001 }) +ENTRY(ff_sws_swap_bytes_8_u32_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0011 }) +ENTRY(ff_sws_swap_bytes_8_u32_0111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_swap_bytes_8_u32_1001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1001 }) +ENTRY(ff_sws_swap_bytes_8_u32_1110_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1110 }) +ENTRY(ff_sws_swap_bytes_8_u32_1111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_swap_bytes_16_u16_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_swap_bytes_16_u16_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_swap_bytes_16_u16_0111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_swap_bytes_16_u16_1110_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_swap_bytes_16_u16_1111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_expand_pair_16_u8_0001_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_expand_pair_16_u8_0011_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_expand_pair_16_u8_0111_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_expand_pair_16_u8_1110_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_expand_pair_16_u8_1111_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_to_u8_8_f32_0001_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_to_u8_8_f32_0011_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0011 }) +ENTRY(ff_sws_to_u8_8_f32_0111_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_to_u8_8_f32_1001_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_to_u8_8_f32_1110_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_to_u8_8_f32_1111_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_to_u8_16_u16_0111_neon, { .uop = SWS_UOP_TO_U8, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_to_u16_8_u8_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_to_u16_8_u32_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_to_u16_8_u32_1110_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1110 }) +ENTRY(ff_sws_to_u16_8_f32_0001_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_to_u16_8_f32_0011_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0011 }) +ENTRY(ff_sws_to_u16_8_f32_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_to_u16_8_f32_1001_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_to_u16_8_f32_1110_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_to_u16_8_f32_1111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_to_u16_16_u8_0001_neon, { .uop = SWS_UOP_TO_U16, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_to_u16_16_u8_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_to_u16_16_u8_1110_neon, { .uop = SWS_UOP_TO_U16, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_to_u32_8_u8_0001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_to_u32_8_u8_0111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_to_u32_8_u16_0001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_to_u32_8_u16_0111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_to_u32_8_f32_0001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_to_u32_8_f32_0111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_to_u32_8_f32_1001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_to_u32_8_f32_1110_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_to_u32_8_f32_1111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_to_f32_8_u8_0001_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_to_f32_8_u8_0010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_to_f32_8_u8_0011_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_to_f32_8_u8_0100_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0100 }) +ENTRY(ff_sws_to_f32_8_u8_0111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_to_f32_8_u8_1010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1010 }) +ENTRY(ff_sws_to_f32_8_u8_1100_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1100 }) +ENTRY(ff_sws_to_f32_8_u8_1110_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_to_f32_8_u8_1111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_to_f32_8_u16_0001_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_to_f32_8_u16_0010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0010 }) +ENTRY(ff_sws_to_f32_8_u16_0011_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_to_f32_8_u16_0111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_to_f32_8_u16_1110_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_to_f32_8_u16_1111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1111 }) +ENTRY(ff_sws_to_f32_8_u32_0010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0010 }) +ENTRY(ff_sws_to_f32_8_u32_0100_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0100 }) +ENTRY(ff_sws_to_f32_8_u32_0111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_to_f32_8_u32_1110_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1110 }) +ENTRY(ff_sws_scale_8_u32_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0001 }) +ENTRY(ff_sws_scale_8_u32_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_scale_8_f32_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_scale_8_f32_0011_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0011 }) +ENTRY(ff_sws_scale_8_f32_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_scale_8_f32_1110_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_scale_8_f32_1111_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_scale_16_u8_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_scale_16_u8_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_scale_16_u16_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_scale_16_u16_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_min_8_f32_0001_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_min_8_f32_0011_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0011 }) +ENTRY(ff_sws_min_8_f32_0111_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_min_8_f32_1001_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_min_8_f32_1110_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_min_8_f32_1111_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_max_8_f32_0001_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_max_8_f32_0011_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0011 }) +ENTRY(ff_sws_max_8_f32_0111_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_max_8_f32_1001_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_max_8_f32_1111_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_unpack_0121_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0121, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0121_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0121, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0233_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0233, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0233_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0233, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0332_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0332, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0332_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0332, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0444_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0444, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0444_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0444, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0555_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0555, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0555_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0555, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0565_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0565, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0565_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0565, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_2aaa_8_u32_0010_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x2aaa, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0010 }) +ENTRY(ff_sws_unpack_2aaa_8_u32_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x2aaa, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_aaa2_8_u32_0100_neon, { .uop = SWS_UOP_UNPACK, .pack = 0xaaa2, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0100 }) +ENTRY(ff_sws_unpack_aaa2_8_u32_1110_neon, { .uop = SWS_UOP_UNPACK, .pack = 0xaaa2, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1110 }) +ENTRY(ff_sws_pack_0121_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0121, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0121_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0121, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0233_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0233, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0233_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0233, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0332_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0332, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0332_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0332, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0444_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0444, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0444_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0444, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0555_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0555, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0555_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0555, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0565_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0565, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0565_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0565, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_2aaa_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = 0x2aaa, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_pack_aaa2_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = 0xaaa2, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_lshift_1_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 1, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_1_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 1, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_1_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = 1, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_2_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 2, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_2_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = 2, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_2_8_u32_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 2, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_2_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 2, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_2_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = 2, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_3_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 3, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_4_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = 4, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_lshift_4_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 4, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_4_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = 4, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_4_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = 4, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_lshift_4_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 4, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_4_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = 4, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_5_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 5, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_6_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = 6, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_lshift_6_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 6, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_6_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = 6, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_6_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = 6, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_lshift_6_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 6, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_6_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = 6, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_7_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 7, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_8_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 8, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_8_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = 8, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_rshift_4_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .shift = 4, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_rshift_4_8_u16_0010_neon, { .uop = SWS_UOP_RSHIFT, .shift = 4, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0010 }) +ENTRY(ff_sws_rshift_4_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = 4, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_rshift_4_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = 4, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_rshift_6_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .shift = 6, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_rshift_6_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = 6, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_rshift_6_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = 6, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_clear_0fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_clear_0fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1011 }) +ENTRY(ff_sws_clear_0fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1000 }) +ENTRY(ff_sws_clear_0fff_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1101 }) +ENTRY(ff_sws_clear_0fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x0fff, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_clear_0fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x0fff, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1000 }) +ENTRY(ff_sws_clear_1fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_clear_1fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1011 }) +ENTRY(ff_sws_clear_1fff_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1101 }) +ENTRY(ff_sws_clear_1fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1000 }) +ENTRY(ff_sws_clear_1fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x1fff, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_clear_1fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x1fff, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1000 }) +ENTRY(ff_sws_clear_ff1f_8_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xff1f, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_clear_ff1f_8_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xff1f, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0010 }) +ENTRY(ff_sws_clear_ff1f_16_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xff1f, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_clear_ff1f_16_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xff1f, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0010 }) +ENTRY(ff_sws_clear_fff0_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff0, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff0_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff0, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff1_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff1_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1101 }) +ENTRY(ff_sws_clear_fff1_8_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff1_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1101 }) +ENTRY(ff_sws_clear_fff1_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff1_16_u8_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_clear_fff1_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff1_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_clear_ffff_8_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_clear_ffff_8_u8_0101_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_clear_ffff_8_u8_1100_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1100 }) +ENTRY(ff_sws_clear_ffff_8_u16_1100_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1100 }) +ENTRY(ff_sws_clear_ffff_8_u32_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0001 }) +ENTRY(ff_sws_clear_ffff_8_u32_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0010 }) +ENTRY(ff_sws_clear_ffff_8_u32_0101_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0101 }) +ENTRY(ff_sws_clear_ffff_8_u32_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1000 }) +ENTRY(ff_sws_clear_ffff_8_u32_1010_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1010 }) +ENTRY(ff_sws_clear_ffff_8_u32_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1011 }) +ENTRY(ff_sws_clear_ffff_8_u32_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1101 }) +ENTRY(ff_sws_clear_ffff_16_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_clear_ffff_16_u8_0110_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_clear_ffff_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_clear_ffff_16_u16_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_clear_ffff_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_clear_ffff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1000 }) +ENTRY(ff_sws_linear_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x000000000fULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x00000000fcULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x00000000ffULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x000000c000ULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0010 }) +ENTRY(ff_sws_linear_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x000373dcc7ULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x0003f3fccfULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x000c00c00cULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x000c30cc0fULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x000ff3fcfcULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x000ff3fcffULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0xc000000000ULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1000 }) +ENTRY(ff_sws_linear_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0xc00000000fULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_linear_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0xc0000000fcULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_linear_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0xc003f3fccfULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_linear_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0xc00c00c00cULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_linear_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0xc00ff3fcffULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_linear_fma_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x000000000fULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_fma_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x00000000fcULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_fma_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x00000000ffULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_fma_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x000000c000ULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0010 }) +ENTRY(ff_sws_linear_fma_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x000373dcc7ULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x0003f3fccfULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x000c00c00cULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x000c30cc0fULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x000ff3fcfcULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x000ff3fcffULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0xc000000000ULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1000 }) +ENTRY(ff_sws_linear_fma_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0xc00000000fULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_linear_fma_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0xc0000000fcULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_linear_fma_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0xc003f3fccfULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_linear_fma_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0xc00c00c00cULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_linear_fma_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0xc00ff3fcffULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_0325_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x0325, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_032f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x032f, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_dither_2305_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x2305, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_230f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x230f, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_dither_3000_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x3000, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_302f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x302f, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_dither_3ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x3ff0, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_dither_5023_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x5023, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_5032_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x5032, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_5230_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x5230, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_5ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x5ff0, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_dither_5fff_4_8_f32_1000_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x5fff, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1000 }) +ENTRY(ff_sws_dither_f023_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xf023, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_dither_f032_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xf032, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_dither_f203_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xf203, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_dither_f230_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xf230, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_dither_f2f0_4_8_f32_0101_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xf2f0, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0101 }) +ENTRY(ff_sws_dither_f2ff_4_8_f32_0100_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xf2ff, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0100 }) +ENTRY(ff_sws_dither_f302_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xf302, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_dither_ff30_4_8_f32_0011_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xff30, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0011 }) +ENTRY(ff_sws_dither_ff3f_4_8_f32_0010_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xff3f, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0010 }) +ENTRY(ff_sws_dither_fff0_4_8_f32_0001_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xfff0, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) diff --git a/libswscale/aarch64/ops_impl.h b/libswscale/aarch64/ops_impl.h index 7461612ebd..7a5e87a0c2 100644 --- a/libswscale/aarch64/ops_impl.h +++ b/libswscale/aarch64/ops_impl.h @@ -25,48 +25,7 @@ #include <stddef.h> #include <stdint.h> -/* Similar to SwsPixelType */ -typedef enum SwsAArch64PixelType { - AARCH64_PIXEL_U8, - AARCH64_PIXEL_U16, - AARCH64_PIXEL_U32, - AARCH64_PIXEL_F32, - AARCH64_PIXEL_TYPE_NB, -} SwsAArch64PixelType; - -/* Similar to SwsOpType */ -typedef enum SwsAArch64OpType { - AARCH64_SWS_OP_NONE = 0, - AARCH64_SWS_OP_READ_BIT, - AARCH64_SWS_OP_READ_NIBBLE, - AARCH64_SWS_OP_READ_PACKED, - AARCH64_SWS_OP_READ_PLANAR, - AARCH64_SWS_OP_WRITE_BIT, - AARCH64_SWS_OP_WRITE_NIBBLE, - AARCH64_SWS_OP_WRITE_PACKED, - AARCH64_SWS_OP_WRITE_PLANAR, - AARCH64_SWS_OP_SWAP_BYTES, - AARCH64_SWS_OP_PERMUTE, - AARCH64_SWS_OP_COPY, - AARCH64_SWS_OP_UNPACK, - AARCH64_SWS_OP_PACK, - AARCH64_SWS_OP_LSHIFT, - AARCH64_SWS_OP_RSHIFT, - AARCH64_SWS_OP_CLEAR, - AARCH64_SWS_OP_TO_U8, - AARCH64_SWS_OP_TO_U16, - AARCH64_SWS_OP_TO_U32, - AARCH64_SWS_OP_TO_F32, - AARCH64_SWS_OP_EXPAND_PAIR, - AARCH64_SWS_OP_EXPAND_QUAD, - AARCH64_SWS_OP_MIN, - AARCH64_SWS_OP_MAX, - AARCH64_SWS_OP_SCALE, - AARCH64_SWS_OP_LINEAR, - AARCH64_SWS_OP_LINEAR_FMA, - AARCH64_SWS_OP_DITHER, - AARCH64_SWS_OP_TYPE_NB, -} SwsAArch64OpType; +#include "libswscale/uops.h" /* Each nibble in the mask corresponds to one component. */ typedef uint16_t SwsAArch64OpMask; @@ -100,14 +59,14 @@ typedef struct SwsAArch64DitherOp { } SwsAArch64DitherOp; /** - * SwsAArch64OpImplParams describes the parameters for an SwsAArch64OpType + * SwsAArch64OpImplParams describes the parameters for an SwsUOpType * operation. It consists of simplified parameters from the SwsOp structure, * with the purpose of being straight-forward to implement and execute. */ typedef struct SwsAArch64OpImplParams { - SwsAArch64OpType op; + SwsUOpType uop; SwsAArch64OpMask mask; - SwsAArch64PixelType type; + SwsPixelType type; uint8_t block_size; union { uint8_t shift; diff --git a/libswscale/aarch64/ops_impl_conv.c b/libswscale/aarch64/ops_impl_conv.c index a84acd746f..f962838fe5 100644 --- a/libswscale/aarch64/ops_impl_conv.c +++ b/libswscale/aarch64/ops_impl_conv.c @@ -29,17 +29,6 @@ #include "ops_impl.h" -static uint8_t sws_pixel_to_aarch64(SwsPixelType type) -{ - switch (type) { - case SWS_PIXEL_U8: return AARCH64_PIXEL_U8; - case SWS_PIXEL_U16: return AARCH64_PIXEL_U16; - case SWS_PIXEL_U32: return AARCH64_PIXEL_U32; - case SWS_PIXEL_F32: return AARCH64_PIXEL_F32; - } - return 0; -} - /** * The column index order for SwsLinearOp.mask follows the affine transform * order, where the offset is the last element. SwsAArch64LinearOpMask, on @@ -133,25 +122,25 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, MASK_SET(out->mask, i, 1); } - out->type = sws_pixel_to_aarch64(op->type); + out->type = op->type; - /* Map SwsOpType to SwsAArch64OpType */ + /* Map SwsOpType to SwsUOpType */ switch (op->op) { case SWS_OP_READ: if (op->rw.filter.op) return AVERROR(ENOTSUP); /** * The different types of read operations have been split into - * their own SwsAArch64OpType to simplify the implementation. + * their own SwsUOpType to simplify the implementation. */ if (op->rw.frac == 1) - out->op = AARCH64_SWS_OP_READ_NIBBLE; + out->uop = SWS_UOP_READ_NIBBLE; else if (op->rw.frac == 3) - out->op = AARCH64_SWS_OP_READ_BIT; + out->uop = SWS_UOP_READ_BIT; else if (op->rw.mode == SWS_RW_PACKED && op->rw.elems > 1) - out->op = AARCH64_SWS_OP_READ_PACKED; + out->uop = SWS_UOP_READ_PACKED; else if (op->rw.mode == SWS_RW_PACKED || op->rw.mode == SWS_RW_PLANAR) - out->op = AARCH64_SWS_OP_READ_PLANAR; + out->uop = SWS_UOP_READ_PLANAR; else return AVERROR(ENOTSUP); break; @@ -160,80 +149,80 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, return AVERROR(ENOTSUP); /** * The different types of write operations have been split into - * their own SwsAArch64OpType to simplify the implementation. + * their own SwsUOpType to simplify the implementation. */ if (op->rw.frac == 1) - out->op = AARCH64_SWS_OP_WRITE_NIBBLE; + out->uop = SWS_UOP_WRITE_NIBBLE; else if (op->rw.frac == 3) - out->op = AARCH64_SWS_OP_WRITE_BIT; + out->uop = SWS_UOP_WRITE_BIT; else if (op->rw.mode == SWS_RW_PACKED && op->rw.elems > 1) - out->op = AARCH64_SWS_OP_WRITE_PACKED; + out->uop = SWS_UOP_WRITE_PACKED; else if (op->rw.mode == SWS_RW_PACKED || op->rw.mode == SWS_RW_PLANAR) - out->op = AARCH64_SWS_OP_WRITE_PLANAR; + out->uop = SWS_UOP_WRITE_PLANAR; else return AVERROR(ENOTSUP); break; - case SWS_OP_SWAP_BYTES: out->op = AARCH64_SWS_OP_SWAP_BYTES; break; + case SWS_OP_SWAP_BYTES: out->uop = SWS_UOP_SWAP_BYTES; break; case SWS_OP_SWIZZLE: { /** * Detect whether copies are needed or if a simple permute is * enough. */ - out->op = AARCH64_SWS_OP_PERMUTE; + out->uop = SWS_UOP_PERMUTE; SwsAArch64OpMask seen = 0; LOOP(out->mask, i) { uint8_t src = op->swizzle.in[i]; if (MASK_GET(seen, src)) { - out->op = AARCH64_SWS_OP_COPY; + out->uop = SWS_UOP_COPY; break; } MASK_SET(seen, src, 1); } break; } - case SWS_OP_UNPACK: out->op = AARCH64_SWS_OP_UNPACK; break; - case SWS_OP_PACK: out->op = AARCH64_SWS_OP_PACK; break; - case SWS_OP_LSHIFT: out->op = AARCH64_SWS_OP_LSHIFT; break; - case SWS_OP_RSHIFT: out->op = AARCH64_SWS_OP_RSHIFT; break; - case SWS_OP_CLEAR: out->op = AARCH64_SWS_OP_CLEAR; break; + case SWS_OP_UNPACK: out->uop = SWS_UOP_UNPACK; break; + case SWS_OP_PACK: out->uop = SWS_UOP_PACK; break; + case SWS_OP_LSHIFT: out->uop = SWS_UOP_LSHIFT; break; + case SWS_OP_RSHIFT: out->uop = SWS_UOP_RSHIFT; break; + case SWS_OP_CLEAR: out->uop = SWS_UOP_CLEAR; break; case SWS_OP_CONVERT: if (op->convert.expand) { switch (op->convert.to) { - case SWS_PIXEL_U16: out->op = AARCH64_SWS_OP_EXPAND_PAIR; break; - case SWS_PIXEL_U32: out->op = AARCH64_SWS_OP_EXPAND_QUAD; break; + case SWS_PIXEL_U16: out->uop = SWS_UOP_EXPAND_PAIR; break; + case SWS_PIXEL_U32: out->uop = SWS_UOP_EXPAND_QUAD; break; } } else { switch (op->convert.to) { - case SWS_PIXEL_U8: out->op = AARCH64_SWS_OP_TO_U8; break; - case SWS_PIXEL_U16: out->op = AARCH64_SWS_OP_TO_U16; break; - case SWS_PIXEL_U32: out->op = AARCH64_SWS_OP_TO_U32; break; - case SWS_PIXEL_F32: out->op = AARCH64_SWS_OP_TO_F32; break; + case SWS_PIXEL_U8: out->uop = SWS_UOP_TO_U8; break; + case SWS_PIXEL_U16: out->uop = SWS_UOP_TO_U16; break; + case SWS_PIXEL_U32: out->uop = SWS_UOP_TO_U32; break; + case SWS_PIXEL_F32: out->uop = SWS_UOP_TO_F32; break; } } break; - case SWS_OP_MIN: out->op = AARCH64_SWS_OP_MIN; break; - case SWS_OP_MAX: out->op = AARCH64_SWS_OP_MAX; break; - case SWS_OP_SCALE: out->op = AARCH64_SWS_OP_SCALE; break; + case SWS_OP_MIN: out->uop = SWS_UOP_MIN; break; + case SWS_OP_MAX: out->uop = SWS_UOP_MAX; break; + case SWS_OP_SCALE: out->uop = SWS_UOP_SCALE; break; case SWS_OP_LINEAR: - out->op = (ctx->flags & SWS_BITEXACT) - ? AARCH64_SWS_OP_LINEAR - : AARCH64_SWS_OP_LINEAR_FMA; + out->uop = (ctx->flags & SWS_BITEXACT) + ? SWS_UOP_LINEAR + : SWS_UOP_LINEAR_FMA; break; - case SWS_OP_DITHER: out->op = AARCH64_SWS_OP_DITHER; break; + case SWS_OP_DITHER: out->uop = SWS_UOP_DITHER; break; case SWS_OP_FILTER_H: case SWS_OP_FILTER_V: return AVERROR(ENOTSUP); } - switch (out->op) { - case AARCH64_SWS_OP_READ_BIT: - case AARCH64_SWS_OP_READ_NIBBLE: - case AARCH64_SWS_OP_READ_PACKED: - case AARCH64_SWS_OP_READ_PLANAR: - case AARCH64_SWS_OP_WRITE_BIT: - case AARCH64_SWS_OP_WRITE_NIBBLE: - case AARCH64_SWS_OP_WRITE_PACKED: - case AARCH64_SWS_OP_WRITE_PLANAR: + switch (out->uop) { + case SWS_UOP_READ_BIT: + case SWS_UOP_READ_NIBBLE: + case SWS_UOP_READ_PACKED: + case SWS_UOP_READ_PLANAR: + case SWS_UOP_WRITE_BIT: + case SWS_UOP_WRITE_NIBBLE: + case SWS_UOP_WRITE_PACKED: + case SWS_UOP_WRITE_PLANAR: switch (op->rw.elems) { case 1: out->mask = 0x0001; break; case 2: out->mask = 0x0011; break; @@ -241,8 +230,8 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, case 4: out->mask = 0x1111; break; }; break; - case AARCH64_SWS_OP_PERMUTE: - case AARCH64_SWS_OP_COPY: + case SWS_UOP_PERMUTE: + case SWS_UOP_COPY: /* Recompute mask taking identity swizzle into account */ out->mask = 0; for (int i = 0; i < 4; i++) { @@ -252,15 +241,15 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, convert_swizzle_to_moves(op, out); /* The element size and type don't matter. */ out->block_size = block_size * ff_sws_pixel_type_size(op->type); - out->type = AARCH64_PIXEL_U8; + out->type = SWS_PIXEL_U8; break; - case AARCH64_SWS_OP_UNPACK: + case SWS_UOP_UNPACK: MASK_SET(out->pack, 0, op->pack.pattern[0]); MASK_SET(out->pack, 1, op->pack.pattern[1]); MASK_SET(out->pack, 2, op->pack.pattern[2]); MASK_SET(out->pack, 3, op->pack.pattern[3]); break; - case AARCH64_SWS_OP_PACK: + case SWS_UOP_PACK: out->mask = 0; for (int i = 0; i < 4 && op->pack.pattern[i]; i++) MASK_SET(out->mask, i, 1); @@ -269,11 +258,11 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, MASK_SET(out->pack, 2, op->pack.pattern[2]); MASK_SET(out->pack, 3, op->pack.pattern[3]); break; - case AARCH64_SWS_OP_LSHIFT: - case AARCH64_SWS_OP_RSHIFT: + case SWS_UOP_LSHIFT: + case SWS_UOP_RSHIFT: out->shift = op->shift.amount; break; - case AARCH64_SWS_OP_CLEAR: + case SWS_UOP_CLEAR: out->mask = 0; out->clear = 0; for (int i = 0; i < 4; i++) { @@ -293,8 +282,8 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, MASK_SET(out->clear, i, mask_val); } break; - case AARCH64_SWS_OP_LINEAR: - case AARCH64_SWS_OP_LINEAR_FMA: + case SWS_UOP_LINEAR: + case SWS_UOP_LINEAR_FMA: /** * The out->linear.mask field packs the 4x5 matrix from SwsLinearOp as * 2 bits per element: @@ -318,7 +307,7 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, } } break; - case AARCH64_SWS_OP_DITHER: + case SWS_UOP_DITHER: out->mask = 0; MASK_SET(out->mask, 0, op->dither.y_offset[0] >= 0); MASK_SET(out->mask, 1, op->dither.y_offset[1] >= 0); @@ -332,20 +321,20 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, break; } - switch (out->op) { - case AARCH64_SWS_OP_READ_BIT: - case AARCH64_SWS_OP_READ_NIBBLE: - case AARCH64_SWS_OP_READ_PACKED: - case AARCH64_SWS_OP_READ_PLANAR: - case AARCH64_SWS_OP_WRITE_BIT: - case AARCH64_SWS_OP_WRITE_NIBBLE: - case AARCH64_SWS_OP_WRITE_PACKED: - case AARCH64_SWS_OP_WRITE_PLANAR: - case AARCH64_SWS_OP_SWAP_BYTES: - case AARCH64_SWS_OP_CLEAR: + switch (out->uop) { + case SWS_UOP_READ_BIT: + case SWS_UOP_READ_NIBBLE: + case SWS_UOP_READ_PACKED: + case SWS_UOP_READ_PLANAR: + case SWS_UOP_WRITE_BIT: + case SWS_UOP_WRITE_NIBBLE: + case SWS_UOP_WRITE_PACKED: + case SWS_UOP_WRITE_PLANAR: + case SWS_UOP_SWAP_BYTES: + case SWS_UOP_CLEAR: /* Only the element size matters, not the type. */ - if (out->type == AARCH64_PIXEL_F32) - out->type = AARCH64_PIXEL_U32; + if (out->type == SWS_PIXEL_F32) + out->type = SWS_PIXEL_U32; break; } diff --git a/libswscale/tests/sws_ops_aarch64.c b/libswscale/tests/sws_ops_aarch64.c index a8844b47d5..cda3140abc 100644 --- a/libswscale/tests/sws_ops_aarch64.c +++ b/libswscale/tests/sws_ops_aarch64.c @@ -43,35 +43,35 @@ static int aarch64_op_impl_cmp(const void *a, const void *b) const SwsAArch64OpImplParams *pa = (const SwsAArch64OpImplParams *) a; const SwsAArch64OpImplParams *pb = (const SwsAArch64OpImplParams *) b; - if (pa->op != pb->op) - return (int) pa->op - pb->op; + if (pa->uop != pb->uop) + return (int) pa->uop - pb->uop; - switch (pa->op) { - case AARCH64_SWS_OP_PERMUTE: - case AARCH64_SWS_OP_COPY: + switch (pa->uop) { + case SWS_UOP_PERMUTE: + case SWS_UOP_COPY: if (pa->move != pb->move) return (int64_t) (pa->move - pb->move) < 0 ? -1 : 1; break; - case AARCH64_SWS_OP_UNPACK: - case AARCH64_SWS_OP_PACK: + case SWS_UOP_UNPACK: + case SWS_UOP_PACK: if (pa->pack != pb->pack) return (int) pa->pack - pb->pack; break; - case AARCH64_SWS_OP_LSHIFT: - case AARCH64_SWS_OP_RSHIFT: + case SWS_UOP_LSHIFT: + case SWS_UOP_RSHIFT: if (pa->shift != pb->shift) return (int) pa->shift - pb->shift; break; - case AARCH64_SWS_OP_CLEAR: + case SWS_UOP_CLEAR: if (pa->clear != pb->clear) return (int) pa->clear - pb->clear; break; - case AARCH64_SWS_OP_LINEAR: - case AARCH64_SWS_OP_LINEAR_FMA: + case SWS_UOP_LINEAR: + case SWS_UOP_LINEAR_FMA: if (pa->linear.mask != pb->linear.mask) return (int64_t) (pa->linear.mask - pb->linear.mask) < 0 ? -1 : 1; break; - case AARCH64_SWS_OP_DITHER: + case SWS_UOP_DITHER: if (pa->dither.y_offset != pb->dither.y_offset) return (int) pa->dither.y_offset - pb->dither.y_offset; if (pa->dither.size_log2 != pb->dither.size_log2) @@ -130,12 +130,12 @@ static int collect_ops_compile(SwsContext *ctx, const SwsOpList *ops, ret = aarch64_collect_op(¶ms, root); if (ret < 0) goto end; - if (params.op == AARCH64_SWS_OP_LINEAR_FMA) { + if (params.uop == SWS_UOP_LINEAR_FMA) { /** * Generate both sets of linear op functions that do use * and do not use fmla (selected by SWS_BITEXACT). */ - params.op = AARCH64_SWS_OP_LINEAR; + params.uop = SWS_UOP_LINEAR; ret = aarch64_collect_op(¶ms, root); if (ret < 0) goto end; @@ -183,138 +183,138 @@ static int register_op(SwsContext *ctx, void *opaque, SwsOpList *ops) } /*********************************************************************/ -static const char op_type_names[AARCH64_SWS_OP_TYPE_NB][16] = { - [AARCH64_SWS_OP_READ_BIT ] = "read_bit", - [AARCH64_SWS_OP_READ_NIBBLE ] = "read_nibble", - [AARCH64_SWS_OP_READ_PACKED ] = "read_packed", - [AARCH64_SWS_OP_READ_PLANAR ] = "read_planar", - [AARCH64_SWS_OP_WRITE_BIT ] = "write_bit", - [AARCH64_SWS_OP_WRITE_NIBBLE ] = "write_nibble", - [AARCH64_SWS_OP_WRITE_PACKED ] = "write_packed", - [AARCH64_SWS_OP_WRITE_PLANAR ] = "write_planar", - [AARCH64_SWS_OP_SWAP_BYTES ] = "swap_bytes", - [AARCH64_SWS_OP_PERMUTE ] = "permute", - [AARCH64_SWS_OP_COPY ] = "copy", - [AARCH64_SWS_OP_UNPACK ] = "unpack", - [AARCH64_SWS_OP_PACK ] = "pack", - [AARCH64_SWS_OP_LSHIFT ] = "lshift", - [AARCH64_SWS_OP_RSHIFT ] = "rshift", - [AARCH64_SWS_OP_CLEAR ] = "clear", - [AARCH64_SWS_OP_TO_U8 ] = "to_u8", - [AARCH64_SWS_OP_TO_U16 ] = "to_u16", - [AARCH64_SWS_OP_TO_U32 ] = "to_u32", - [AARCH64_SWS_OP_TO_F32 ] = "to_f32", - [AARCH64_SWS_OP_EXPAND_PAIR ] = "expand_pair", - [AARCH64_SWS_OP_EXPAND_QUAD ] = "expand_quad", - [AARCH64_SWS_OP_MIN ] = "min", - [AARCH64_SWS_OP_MAX ] = "max", - [AARCH64_SWS_OP_SCALE ] = "scale", - [AARCH64_SWS_OP_LINEAR ] = "linear", - [AARCH64_SWS_OP_LINEAR_FMA ] = "linear_fma", - [AARCH64_SWS_OP_DITHER ] = "dither", +static const char op_type_names[SWS_UOP_TYPE_NB][16] = { + [SWS_UOP_READ_BIT ] = "read_bit", + [SWS_UOP_READ_NIBBLE ] = "read_nibble", + [SWS_UOP_READ_PACKED ] = "read_packed", + [SWS_UOP_READ_PLANAR ] = "read_planar", + [SWS_UOP_WRITE_BIT ] = "write_bit", + [SWS_UOP_WRITE_NIBBLE ] = "write_nibble", + [SWS_UOP_WRITE_PACKED ] = "write_packed", + [SWS_UOP_WRITE_PLANAR ] = "write_planar", + [SWS_UOP_SWAP_BYTES ] = "swap_bytes", + [SWS_UOP_PERMUTE ] = "permute", + [SWS_UOP_COPY ] = "copy", + [SWS_UOP_UNPACK ] = "unpack", + [SWS_UOP_PACK ] = "pack", + [SWS_UOP_LSHIFT ] = "lshift", + [SWS_UOP_RSHIFT ] = "rshift", + [SWS_UOP_CLEAR ] = "clear", + [SWS_UOP_TO_U8 ] = "to_u8", + [SWS_UOP_TO_U16 ] = "to_u16", + [SWS_UOP_TO_U32 ] = "to_u32", + [SWS_UOP_TO_F32 ] = "to_f32", + [SWS_UOP_EXPAND_PAIR ] = "expand_pair", + [SWS_UOP_EXPAND_QUAD ] = "expand_quad", + [SWS_UOP_MIN ] = "min", + [SWS_UOP_MAX ] = "max", + [SWS_UOP_SCALE ] = "scale", + [SWS_UOP_LINEAR ] = "linear", + [SWS_UOP_LINEAR_FMA ] = "linear_fma", + [SWS_UOP_DITHER ] = "dither", }; -static const char pixel_type_names[AARCH64_PIXEL_TYPE_NB][4] = { - [AARCH64_PIXEL_U8 ] = "u8", - [AARCH64_PIXEL_U16] = "u16", - [AARCH64_PIXEL_U32] = "u32", - [AARCH64_PIXEL_F32] = "f32", +static const char pixel_type_names[SWS_PIXEL_TYPE_NB][4] = { + [SWS_PIXEL_U8 ] = "u8", + [SWS_PIXEL_U16] = "u16", + [SWS_PIXEL_U32] = "u32", + [SWS_PIXEL_F32] = "f32", }; static void impl_func_name(AVBPrint *bp, const SwsAArch64OpImplParams *params) { - av_bprintf(bp, "ff_sws_%s", op_type_names[params->op]); - switch (params->op) { - case AARCH64_SWS_OP_PERMUTE: - case AARCH64_SWS_OP_COPY: + av_bprintf(bp, "ff_sws_%s", op_type_names[params->uop]); + switch (params->uop) { + case SWS_UOP_PERMUTE: + case SWS_UOP_COPY: av_bprintf(bp, "_%012" PRIx64, params->move); break; - case AARCH64_SWS_OP_UNPACK: - case AARCH64_SWS_OP_PACK: + case SWS_UOP_UNPACK: + case SWS_UOP_PACK: av_bprintf(bp, "_%04x", params->pack); break; - case AARCH64_SWS_OP_LSHIFT: - case AARCH64_SWS_OP_RSHIFT: + case SWS_UOP_LSHIFT: + case SWS_UOP_RSHIFT: av_bprintf(bp, "_%u", params->shift); break; - case AARCH64_SWS_OP_CLEAR: + case SWS_UOP_CLEAR: av_bprintf(bp, "_%04x", params->clear); break; - case AARCH64_SWS_OP_LINEAR: - case AARCH64_SWS_OP_LINEAR_FMA: + case SWS_UOP_LINEAR: + case SWS_UOP_LINEAR_FMA: av_bprintf(bp, "_%010" PRIx64, params->linear.mask); break; - case AARCH64_SWS_OP_DITHER: + case SWS_UOP_DITHER: av_bprintf(bp, "_%04x_%u", params->dither.y_offset, params->dither.size_log2); break; } av_bprintf(bp, "_%u_%s_%04x_neon", params->block_size, pixel_type_names[params->type], params->mask); } -static const char op_types[AARCH64_SWS_OP_TYPE_NB][32] = { - [AARCH64_SWS_OP_READ_BIT ] = "AARCH64_SWS_OP_READ_BIT", - [AARCH64_SWS_OP_READ_NIBBLE ] = "AARCH64_SWS_OP_READ_NIBBLE", - [AARCH64_SWS_OP_READ_PACKED ] = "AARCH64_SWS_OP_READ_PACKED", - [AARCH64_SWS_OP_READ_PLANAR ] = "AARCH64_SWS_OP_READ_PLANAR", - [AARCH64_SWS_OP_WRITE_BIT ] = "AARCH64_SWS_OP_WRITE_BIT", - [AARCH64_SWS_OP_WRITE_NIBBLE ] = "AARCH64_SWS_OP_WRITE_NIBBLE", - [AARCH64_SWS_OP_WRITE_PACKED ] = "AARCH64_SWS_OP_WRITE_PACKED", - [AARCH64_SWS_OP_WRITE_PLANAR ] = "AARCH64_SWS_OP_WRITE_PLANAR", - [AARCH64_SWS_OP_SWAP_BYTES ] = "AARCH64_SWS_OP_SWAP_BYTES", - [AARCH64_SWS_OP_PERMUTE ] = "AARCH64_SWS_OP_PERMUTE", - [AARCH64_SWS_OP_COPY ] = "AARCH64_SWS_OP_COPY", - [AARCH64_SWS_OP_UNPACK ] = "AARCH64_SWS_OP_UNPACK", - [AARCH64_SWS_OP_PACK ] = "AARCH64_SWS_OP_PACK", - [AARCH64_SWS_OP_LSHIFT ] = "AARCH64_SWS_OP_LSHIFT", - [AARCH64_SWS_OP_RSHIFT ] = "AARCH64_SWS_OP_RSHIFT", - [AARCH64_SWS_OP_CLEAR ] = "AARCH64_SWS_OP_CLEAR", - [AARCH64_SWS_OP_TO_U8 ] = "AARCH64_SWS_OP_TO_U8", - [AARCH64_SWS_OP_TO_U16 ] = "AARCH64_SWS_OP_TO_U16", - [AARCH64_SWS_OP_TO_U32 ] = "AARCH64_SWS_OP_TO_U32", - [AARCH64_SWS_OP_TO_F32 ] = "AARCH64_SWS_OP_TO_F32", - [AARCH64_SWS_OP_EXPAND_PAIR ] = "AARCH64_SWS_OP_EXPAND_PAIR", - [AARCH64_SWS_OP_EXPAND_QUAD ] = "AARCH64_SWS_OP_EXPAND_QUAD", - [AARCH64_SWS_OP_MIN ] = "AARCH64_SWS_OP_MIN", - [AARCH64_SWS_OP_MAX ] = "AARCH64_SWS_OP_MAX", - [AARCH64_SWS_OP_SCALE ] = "AARCH64_SWS_OP_SCALE", - [AARCH64_SWS_OP_LINEAR ] = "AARCH64_SWS_OP_LINEAR", - [AARCH64_SWS_OP_LINEAR_FMA ] = "AARCH64_SWS_OP_LINEAR_FMA", - [AARCH64_SWS_OP_DITHER ] = "AARCH64_SWS_OP_DITHER", +static const char op_types[SWS_UOP_TYPE_NB][32] = { + [SWS_UOP_READ_BIT ] = "SWS_UOP_READ_BIT", + [SWS_UOP_READ_NIBBLE ] = "SWS_UOP_READ_NIBBLE", + [SWS_UOP_READ_PACKED ] = "SWS_UOP_READ_PACKED", + [SWS_UOP_READ_PLANAR ] = "SWS_UOP_READ_PLANAR", + [SWS_UOP_WRITE_BIT ] = "SWS_UOP_WRITE_BIT", + [SWS_UOP_WRITE_NIBBLE ] = "SWS_UOP_WRITE_NIBBLE", + [SWS_UOP_WRITE_PACKED ] = "SWS_UOP_WRITE_PACKED", + [SWS_UOP_WRITE_PLANAR ] = "SWS_UOP_WRITE_PLANAR", + [SWS_UOP_SWAP_BYTES ] = "SWS_UOP_SWAP_BYTES", + [SWS_UOP_PERMUTE ] = "SWS_UOP_PERMUTE", + [SWS_UOP_COPY ] = "SWS_UOP_COPY", + [SWS_UOP_UNPACK ] = "SWS_UOP_UNPACK", + [SWS_UOP_PACK ] = "SWS_UOP_PACK", + [SWS_UOP_LSHIFT ] = "SWS_UOP_LSHIFT", + [SWS_UOP_RSHIFT ] = "SWS_UOP_RSHIFT", + [SWS_UOP_CLEAR ] = "SWS_UOP_CLEAR", + [SWS_UOP_TO_U8 ] = "SWS_UOP_TO_U8", + [SWS_UOP_TO_U16 ] = "SWS_UOP_TO_U16", + [SWS_UOP_TO_U32 ] = "SWS_UOP_TO_U32", + [SWS_UOP_TO_F32 ] = "SWS_UOP_TO_F32", + [SWS_UOP_EXPAND_PAIR ] = "SWS_UOP_EXPAND_PAIR", + [SWS_UOP_EXPAND_QUAD ] = "SWS_UOP_EXPAND_QUAD", + [SWS_UOP_MIN ] = "SWS_UOP_MIN", + [SWS_UOP_MAX ] = "SWS_UOP_MAX", + [SWS_UOP_SCALE ] = "SWS_UOP_SCALE", + [SWS_UOP_LINEAR ] = "SWS_UOP_LINEAR", + [SWS_UOP_LINEAR_FMA ] = "SWS_UOP_LINEAR_FMA", + [SWS_UOP_DITHER ] = "SWS_UOP_DITHER", }; -static const char pixel_types[AARCH64_PIXEL_TYPE_NB][32] = { - [AARCH64_PIXEL_U8 ] = "AARCH64_PIXEL_U8", - [AARCH64_PIXEL_U16] = "AARCH64_PIXEL_U16", - [AARCH64_PIXEL_U32] = "AARCH64_PIXEL_U32", - [AARCH64_PIXEL_F32] = "AARCH64_PIXEL_F32", +static const char pixel_types[SWS_PIXEL_TYPE_NB][32] = { + [SWS_PIXEL_U8 ] = "SWS_PIXEL_U8", + [SWS_PIXEL_U16] = "SWS_PIXEL_U16", + [SWS_PIXEL_U32] = "SWS_PIXEL_U32", + [SWS_PIXEL_F32] = "SWS_PIXEL_F32", }; static void serialize_op(AVBPrint *bp, const SwsAArch64OpImplParams *params) { av_bprintf(bp, "ENTRY("); impl_func_name(bp, params); - av_bprintf(bp, ", { .op = %s", op_types[params->op]); - switch (params->op) { - case AARCH64_SWS_OP_PERMUTE: - case AARCH64_SWS_OP_COPY: + av_bprintf(bp, ", { .uop = %s", op_types[params->uop]); + switch (params->uop) { + case SWS_UOP_PERMUTE: + case SWS_UOP_COPY: av_bprintf(bp, ", .move = 0x%012" PRIx64 "ULL", params->move); break; - case AARCH64_SWS_OP_UNPACK: - case AARCH64_SWS_OP_PACK: + case SWS_UOP_UNPACK: + case SWS_UOP_PACK: av_bprintf(bp, ", .pack = 0x%04x", params->pack); break; - case AARCH64_SWS_OP_LSHIFT: - case AARCH64_SWS_OP_RSHIFT: + case SWS_UOP_LSHIFT: + case SWS_UOP_RSHIFT: av_bprintf(bp, ", .shift = %u", params->shift); break; - case AARCH64_SWS_OP_CLEAR: + case SWS_UOP_CLEAR: av_bprintf(bp, ", .clear = 0x%04x", params->clear); break; - case AARCH64_SWS_OP_LINEAR: - case AARCH64_SWS_OP_LINEAR_FMA: + case SWS_UOP_LINEAR: + case SWS_UOP_LINEAR_FMA: av_bprintf(bp, ", .linear.mask = 0x%010" PRIx64 "ULL", params->linear.mask); break; - case AARCH64_SWS_OP_DITHER: + case SWS_UOP_DITHER: av_bprintf(bp, ", .dither.y_offset = 0x%04x, .dither.size_log2 = %u", params->dither.y_offset, params->dither.size_log2); break; } -- 2.52.0 >From a1e4fc55268e5f01e1157c4178a54033f03a8670 Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Wed, 17 Jun 2026 16:54:46 +0200 Subject: [PATCH 09/17] swscale/aarch64/ops: use SwsShiftUOp for SwsAArch64OpImplParams.shift This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops_asmgen.c | 10 +++-- libswscale/aarch64/ops_entries.c | 64 +++++++++++++++--------------- libswscale/aarch64/ops_impl.h | 2 +- libswscale/aarch64/ops_impl_conv.c | 2 +- libswscale/tests/sws_ops_aarch64.c | 8 ++-- 5 files changed, 44 insertions(+), 42 deletions(-) diff --git a/libswscale/aarch64/ops_asmgen.c b/libswscale/aarch64/ops_asmgen.c index 3cbbcae60b..06f1a028a7 100644 --- a/libswscale/aarch64/ops_asmgen.c +++ b/libswscale/aarch64/ops_asmgen.c @@ -771,12 +771,13 @@ static void asmgen_op_pack(SwsAArch64Context *s, const SwsAArch64OpImplParams *p static void asmgen_op_lshift(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { + uint8_t shift = p->shift.amount; RasmContext *r = s->rctx; RasmOp *vl = s->vl; RasmOp *vh = s->vh; - LOOP_MASK (p, i) { i_shl(r, vl[i], vl[i], IMM(p->shift)); CMTF("vl[%u] <<= %u;", i, p->shift); } - LOOP_MASK_VH(s, p, i) { i_shl(r, vh[i], vh[i], IMM(p->shift)); CMTF("vh[%u] <<= %u;", i, p->shift); } + LOOP_MASK (p, i) { i_shl(r, vl[i], vl[i], IMM(shift)); CMTF("vl[%u] <<= %u;", i, shift); } + LOOP_MASK_VH(s, p, i) { i_shl(r, vh[i], vh[i], IMM(shift)); CMTF("vh[%u] <<= %u;", i, shift); } } /*********************************************************************/ @@ -785,12 +786,13 @@ static void asmgen_op_lshift(SwsAArch64Context *s, const SwsAArch64OpImplParams static void asmgen_op_rshift(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { + uint8_t shift = p->shift.amount; RasmContext *r = s->rctx; RasmOp *vl = s->vl; RasmOp *vh = s->vh; - LOOP_MASK (p, i) { i_ushr(r, vl[i], vl[i], IMM(p->shift)); CMTF("vl[%u] >>= %u;", i, p->shift); } - LOOP_MASK_VH(s, p, i) { i_ushr(r, vh[i], vh[i], IMM(p->shift)); CMTF("vh[%u] >>= %u;", i, p->shift); } + LOOP_MASK (p, i) { i_ushr(r, vl[i], vl[i], IMM(shift)); CMTF("vl[%u] >>= %u;", i, shift); } + LOOP_MASK_VH(s, p, i) { i_ushr(r, vh[i], vh[i], IMM(shift)); CMTF("vh[%u] >>= %u;", i, shift); } } /*********************************************************************/ diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index 092ed6ab60..66f9044c98 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -283,38 +283,38 @@ ENTRY(ff_sws_pack_0565_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0565, . ENTRY(ff_sws_pack_0565_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0565, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) ENTRY(ff_sws_pack_2aaa_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = 0x2aaa, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) ENTRY(ff_sws_pack_aaa2_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = 0xaaa2, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_lshift_1_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 1, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_1_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 1, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_1_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = 1, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_2_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 2, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_2_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = 2, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_2_8_u32_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 2, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_2_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 2, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_2_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = 2, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_3_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 3, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_4_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = 4, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_lshift_4_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 4, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_4_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = 4, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_4_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = 4, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_lshift_4_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 4, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_4_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = 4, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_5_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 5, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_6_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = 6, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_lshift_6_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 6, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_6_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = 6, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_6_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = 6, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_lshift_6_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 6, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_6_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = 6, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_7_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 7, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_8_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = 8, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_8_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = 8, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_rshift_4_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .shift = 4, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_rshift_4_8_u16_0010_neon, { .uop = SWS_UOP_RSHIFT, .shift = 4, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0010 }) -ENTRY(ff_sws_rshift_4_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = 4, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_rshift_4_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = 4, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_rshift_6_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .shift = 6, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_rshift_6_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = 6, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_rshift_6_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = 6, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_1_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_1_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_1_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_2_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_2_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_2_8_u32_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_2_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_2_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_3_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 3 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_4_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_lshift_4_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_4_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_4_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_lshift_4_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_4_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_5_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 5 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_6_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_lshift_6_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_6_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_6_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_lshift_6_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_6_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_lshift_7_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 7 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_8_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_lshift_8_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) +ENTRY(ff_sws_rshift_4_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_rshift_4_8_u16_0010_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0010 }) +ENTRY(ff_sws_rshift_4_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_rshift_4_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_rshift_6_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_rshift_6_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_rshift_6_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) ENTRY(ff_sws_clear_0fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1000 }) ENTRY(ff_sws_clear_0fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1011 }) ENTRY(ff_sws_clear_0fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1000 }) diff --git a/libswscale/aarch64/ops_impl.h b/libswscale/aarch64/ops_impl.h index 7a5e87a0c2..3e3fa13b73 100644 --- a/libswscale/aarch64/ops_impl.h +++ b/libswscale/aarch64/ops_impl.h @@ -69,7 +69,7 @@ typedef struct SwsAArch64OpImplParams { SwsPixelType type; uint8_t block_size; union { - uint8_t shift; + SwsShiftUOp shift; SwsAArch64ClearMask clear; SwsAArch64MoveOp move; SwsAArch64OpMask pack; diff --git a/libswscale/aarch64/ops_impl_conv.c b/libswscale/aarch64/ops_impl_conv.c index f962838fe5..6dbdfb2930 100644 --- a/libswscale/aarch64/ops_impl_conv.c +++ b/libswscale/aarch64/ops_impl_conv.c @@ -260,7 +260,7 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, break; case SWS_UOP_LSHIFT: case SWS_UOP_RSHIFT: - out->shift = op->shift.amount; + out->shift.amount = op->shift.amount; break; case SWS_UOP_CLEAR: out->mask = 0; diff --git a/libswscale/tests/sws_ops_aarch64.c b/libswscale/tests/sws_ops_aarch64.c index cda3140abc..10034016bb 100644 --- a/libswscale/tests/sws_ops_aarch64.c +++ b/libswscale/tests/sws_ops_aarch64.c @@ -59,8 +59,8 @@ static int aarch64_op_impl_cmp(const void *a, const void *b) break; case SWS_UOP_LSHIFT: case SWS_UOP_RSHIFT: - if (pa->shift != pb->shift) - return (int) pa->shift - pb->shift; + if (pa->shift.amount != pb->shift.amount) + return (int) pa->shift.amount - pb->shift.amount; break; case SWS_UOP_CLEAR: if (pa->clear != pb->clear) @@ -235,7 +235,7 @@ static void impl_func_name(AVBPrint *bp, const SwsAArch64OpImplParams *params) break; case SWS_UOP_LSHIFT: case SWS_UOP_RSHIFT: - av_bprintf(bp, "_%u", params->shift); + av_bprintf(bp, "_%u", params->shift.amount); break; case SWS_UOP_CLEAR: av_bprintf(bp, "_%04x", params->clear); @@ -305,7 +305,7 @@ static void serialize_op(AVBPrint *bp, const SwsAArch64OpImplParams *params) break; case SWS_UOP_LSHIFT: case SWS_UOP_RSHIFT: - av_bprintf(bp, ", .shift = %u", params->shift); + av_bprintf(bp, ", .shift = { .amount = %u }", params->shift.amount); break; case SWS_UOP_CLEAR: av_bprintf(bp, ", .clear = 0x%04x", params->clear); -- 2.52.0 >From f25bf3a7f90237afafe8b31d8c9af2df97f20410 Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Wed, 17 Jun 2026 17:04:14 +0200 Subject: [PATCH 10/17] swscale/aarch64/ops: use SwsClearUOp for SwsAArch64OpImplParams.clear This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops_asmgen.c | 12 ++--- libswscale/aarch64/ops_entries.c | 86 +++++++++++++++--------------- libswscale/aarch64/ops_impl.h | 8 +-- libswscale/aarch64/ops_impl_conv.c | 7 +-- libswscale/tests/sws_ops_aarch64.c | 28 ++++++++-- 5 files changed, 73 insertions(+), 68 deletions(-) diff --git a/libswscale/aarch64/ops_asmgen.c b/libswscale/aarch64/ops_asmgen.c index 06f1a028a7..faf5af041e 100644 --- a/libswscale/aarch64/ops_asmgen.c +++ b/libswscale/aarch64/ops_asmgen.c @@ -804,21 +804,17 @@ static void emit_clear(SwsAArch64Context *s, const SwsAArch64OpImplParams *p, { RasmContext *r = s->rctx; RasmOp clear_vec = s->vt[0]; - switch (MASK_GET(p->clear, i)) { - case 0: + if (SWS_COMP_TEST(p->clear.zero, i)) { i_movi(r, vx[i], IMM(0)); CMTF("%s[%u] = 0;", vx_str, i); - break; - case 1: + } else if (SWS_COMP_TEST(p->clear.one, i)) { if (p->block_size * ff_sws_pixel_type_size(p->type) == 8) { i_movi(r, v_8b (vx[i]), IMM(0xff)); } else { i_movi(r, v_16b(vx[i]), IMM(0xff)); } CMTF("%s[%u] = UINT_MAX;", vx_str, i); - break; - default: + } else { i_dup (r, vx[i], a64op_elem(clear_vec, i)); CMTF("%s[%u] = broadcast(clear_vec[%u]);", vx_str, i, i); - break; } } @@ -835,7 +831,7 @@ static void asmgen_op_clear(SwsAArch64Context *s, const SwsAArch64OpImplParams * bool load_priv = false; LOOP_MASK(p, i) { - if (MASK_GET(p->clear, i) == 0xf) + if (!SWS_COMP_TEST(p->clear.zero, i) && !SWS_COMP_TEST(p->clear.one, i)) load_priv = true; } if (load_priv) { diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index 66f9044c98..75f7261527 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -315,49 +315,49 @@ ENTRY(ff_sws_rshift_4_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amo ENTRY(ff_sws_rshift_6_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) ENTRY(ff_sws_rshift_6_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) ENTRY(ff_sws_rshift_6_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_clear_0fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_clear_0fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1011 }) -ENTRY(ff_sws_clear_0fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1000 }) -ENTRY(ff_sws_clear_0fff_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x0fff, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1101 }) -ENTRY(ff_sws_clear_0fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x0fff, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_clear_0fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x0fff, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1000 }) -ENTRY(ff_sws_clear_1fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_clear_1fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1011 }) -ENTRY(ff_sws_clear_1fff_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1101 }) -ENTRY(ff_sws_clear_1fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x1fff, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1000 }) -ENTRY(ff_sws_clear_1fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x1fff, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_clear_1fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0x1fff, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1000 }) -ENTRY(ff_sws_clear_ff1f_8_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xff1f, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_clear_ff1f_8_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xff1f, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0010 }) -ENTRY(ff_sws_clear_ff1f_16_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xff1f, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_clear_ff1f_16_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xff1f, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0010 }) -ENTRY(ff_sws_clear_fff0_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff0, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff0_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff0, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff1_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff1_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1101 }) -ENTRY(ff_sws_clear_fff1_8_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff1_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff1, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1101 }) -ENTRY(ff_sws_clear_fff1_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff1_16_u8_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_clear_fff1_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff1_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xfff1, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_clear_ffff_8_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_clear_ffff_8_u8_0101_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_clear_ffff_8_u8_1100_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1100 }) -ENTRY(ff_sws_clear_ffff_8_u16_1100_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1100 }) -ENTRY(ff_sws_clear_ffff_8_u32_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0001 }) -ENTRY(ff_sws_clear_ffff_8_u32_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0010 }) -ENTRY(ff_sws_clear_ffff_8_u32_0101_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0101 }) -ENTRY(ff_sws_clear_ffff_8_u32_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1000 }) -ENTRY(ff_sws_clear_ffff_8_u32_1010_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1010 }) -ENTRY(ff_sws_clear_ffff_8_u32_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1011 }) -ENTRY(ff_sws_clear_ffff_8_u32_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1101 }) -ENTRY(ff_sws_clear_ffff_16_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_clear_ffff_16_u8_0110_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_clear_ffff_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_clear_ffff_16_u16_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_clear_ffff_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_clear_ffff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = 0xffff, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1000 }) +ENTRY(ff_sws_clear_0fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_clear_0fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1011 }) +ENTRY(ff_sws_clear_0fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1000 }) +ENTRY(ff_sws_clear_0fff_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1101 }) +ENTRY(ff_sws_clear_0fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_clear_0fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1000 }) +ENTRY(ff_sws_clear_1fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_clear_1fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1011 }) +ENTRY(ff_sws_clear_1fff_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1101 }) +ENTRY(ff_sws_clear_1fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1000 }) +ENTRY(ff_sws_clear_1fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_clear_1fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1000 }) +ENTRY(ff_sws_clear_ff1f_8_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x2, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_clear_ff1f_8_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x2, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0010 }) +ENTRY(ff_sws_clear_ff1f_16_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x2, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_clear_ff1f_16_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x2, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0010 }) +ENTRY(ff_sws_clear_fff0_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x1 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff0_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x1 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff1_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff1_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1101 }) +ENTRY(ff_sws_clear_fff1_8_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff1_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1101 }) +ENTRY(ff_sws_clear_fff1_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff1_16_u8_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_clear_fff1_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_clear_fff1_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_clear_ffff_8_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_clear_ffff_8_u8_0101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_clear_ffff_8_u8_1100_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1100 }) +ENTRY(ff_sws_clear_ffff_8_u16_1100_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1100 }) +ENTRY(ff_sws_clear_ffff_8_u32_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0001 }) +ENTRY(ff_sws_clear_ffff_8_u32_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0010 }) +ENTRY(ff_sws_clear_ffff_8_u32_0101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0101 }) +ENTRY(ff_sws_clear_ffff_8_u32_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1000 }) +ENTRY(ff_sws_clear_ffff_8_u32_1010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1010 }) +ENTRY(ff_sws_clear_ffff_8_u32_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1011 }) +ENTRY(ff_sws_clear_ffff_8_u32_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1101 }) +ENTRY(ff_sws_clear_ffff_16_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_clear_ffff_16_u8_0110_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_clear_ffff_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) +ENTRY(ff_sws_clear_ffff_16_u16_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0011 }) +ENTRY(ff_sws_clear_ffff_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_clear_ffff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1000 }) ENTRY(ff_sws_linear_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x000000000fULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) ENTRY(ff_sws_linear_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x00000000fcULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) ENTRY(ff_sws_linear_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x00000000ffULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) diff --git a/libswscale/aarch64/ops_impl.h b/libswscale/aarch64/ops_impl.h index 3e3fa13b73..5b9046807c 100644 --- a/libswscale/aarch64/ops_impl.h +++ b/libswscale/aarch64/ops_impl.h @@ -30,12 +30,6 @@ /* Each nibble in the mask corresponds to one component. */ typedef uint16_t SwsAArch64OpMask; -/** - * Each nibble in the mask specifies whether to clear by all 0s (0), - * all 1s (1), or another value (f). - */ -typedef uint16_t SwsAArch64ClearMask; - /* Each byte is an LSB src|dst pair until 00 is reached. */ typedef uint64_t SwsAArch64MoveOp; #define AARCH64_MOVE_TMP 0xf @@ -70,7 +64,7 @@ typedef struct SwsAArch64OpImplParams { uint8_t block_size; union { SwsShiftUOp shift; - SwsAArch64ClearMask clear; + SwsClearUOp clear; SwsAArch64MoveOp move; SwsAArch64OpMask pack; SwsAArch64LinearOp linear; diff --git a/libswscale/aarch64/ops_impl_conv.c b/libswscale/aarch64/ops_impl_conv.c index 6dbdfb2930..c6922b9dc3 100644 --- a/libswscale/aarch64/ops_impl_conv.c +++ b/libswscale/aarch64/ops_impl_conv.c @@ -264,22 +264,19 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, break; case SWS_UOP_CLEAR: out->mask = 0; - out->clear = 0; for (int i = 0; i < 4; i++) { - int mask_val = 0xf; if (SWS_COMP_TEST(op->clear.mask, i)) { MASK_SET(out->mask, i, 1); if (op->clear.value[i].num == 0) { - mask_val = 0; + out->clear.zero |= SWS_COMP(i); } else { uint32_t val = op->clear.value[i].num / op->clear.value[i].den; if ((op->type == SWS_PIXEL_U8 && val == UINT8_MAX) || (op->type == SWS_PIXEL_U16 && val == UINT16_MAX) || (op->type == SWS_PIXEL_U32 && val == UINT32_MAX)) - mask_val = 1; + out->clear.one |= SWS_COMP(i); } } - MASK_SET(out->clear, i, mask_val); } break; case SWS_UOP_LINEAR: diff --git a/libswscale/tests/sws_ops_aarch64.c b/libswscale/tests/sws_ops_aarch64.c index 10034016bb..60ef4cabce 100644 --- a/libswscale/tests/sws_ops_aarch64.c +++ b/libswscale/tests/sws_ops_aarch64.c @@ -38,6 +38,21 @@ #endif /*********************************************************************/ +static uint16_t clear_to_mask(const SwsClearUOp *clear) +{ + uint16_t mask = 0; + for (int i = 0; i < 4; i++) { + if (SWS_COMP_TEST(clear->zero, i)) { + /* no-op */ + } else if (SWS_COMP_TEST(clear->one, i)) { + MASK_SET(mask, i, 1); + } else { + MASK_SET(mask, i, 0xf); + } + } + return mask; +} + static int aarch64_op_impl_cmp(const void *a, const void *b) { const SwsAArch64OpImplParams *pa = (const SwsAArch64OpImplParams *) a; @@ -62,10 +77,13 @@ static int aarch64_op_impl_cmp(const void *a, const void *b) if (pa->shift.amount != pb->shift.amount) return (int) pa->shift.amount - pb->shift.amount; break; - case SWS_UOP_CLEAR: - if (pa->clear != pb->clear) - return (int) pa->clear - pb->clear; + case SWS_UOP_CLEAR: { + uint16_t ia = clear_to_mask(&pa->clear); + uint16_t ib = clear_to_mask(&pb->clear); + if (ia != ib) + return (int) ia - ib; break; + } case SWS_UOP_LINEAR: case SWS_UOP_LINEAR_FMA: if (pa->linear.mask != pb->linear.mask) @@ -238,7 +256,7 @@ static void impl_func_name(AVBPrint *bp, const SwsAArch64OpImplParams *params) av_bprintf(bp, "_%u", params->shift.amount); break; case SWS_UOP_CLEAR: - av_bprintf(bp, "_%04x", params->clear); + av_bprintf(bp, "_%04x", clear_to_mask(¶ms->clear)); break; case SWS_UOP_LINEAR: case SWS_UOP_LINEAR_FMA: @@ -308,7 +326,7 @@ static void serialize_op(AVBPrint *bp, const SwsAArch64OpImplParams *params) av_bprintf(bp, ", .shift = { .amount = %u }", params->shift.amount); break; case SWS_UOP_CLEAR: - av_bprintf(bp, ", .clear = 0x%04x", params->clear); + av_bprintf(bp, ", .clear = { .one = 0x%0x, .zero = 0x%0x }", params->clear.one, params->clear.zero); break; case SWS_UOP_LINEAR: case SWS_UOP_LINEAR_FMA: -- 2.52.0 >From 508a9de3c0221b9acb1ffbd44d13bc971225791c Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Wed, 17 Jun 2026 17:37:25 +0200 Subject: [PATCH 11/17] swscale/aarch64/ops: use SwsMoveUOp for SwsAArch64OpImplParams.move This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops_asmgen.c | 20 ++-- libswscale/aarch64/ops_entries.c | 170 ++++++++++++++--------------- libswscale/aarch64/ops_impl.h | 6 +- libswscale/aarch64/ops_impl_conv.c | 16 +-- libswscale/tests/sws_ops_aarch64.c | 30 ++++- 5 files changed, 126 insertions(+), 116 deletions(-) diff --git a/libswscale/aarch64/ops_asmgen.c b/libswscale/aarch64/ops_asmgen.c index faf5af041e..78967f9647 100644 --- a/libswscale/aarch64/ops_asmgen.c +++ b/libswscale/aarch64/ops_asmgen.c @@ -614,9 +614,9 @@ static void asmgen_op_swap_bytes(SwsAArch64Context *s, const SwsAArch64OpImplPar /* SWS_UOP_PERMUTE */ /* SWS_UOP_COPY */ -static const char *print_swizzle_v(char buf[8], uint8_t n, uint8_t vh) +static const char *print_swizzle_v(char buf[8], int8_t n, uint8_t vh) { - if (n == AARCH64_MOVE_TMP) + if (n == -1) snprintf(buf, sizeof(char[8]), "vtmp%c", vh ? 'h' : 'l'); else snprintf(buf, sizeof(char[8]), "v%c[%u]", vh ? 'h' : 'l', n); @@ -624,14 +624,14 @@ static const char *print_swizzle_v(char buf[8], uint8_t n, uint8_t vh) } #define PRINT_SWIZZLE_V(n, vh) print_swizzle_v((char[8]){ 0 }, n, vh) -static RasmOp swizzle_a64op(SwsAArch64Context *s, uint8_t n, uint8_t vh) +static RasmOp swizzle_a64op(SwsAArch64Context *s, int8_t n, uint8_t vh) { - if (n == AARCH64_MOVE_TMP) + if (n == -1) return s->vt[vh]; return vh ? s->vh[n] : s->vl[n]; } -static void swizzle_emit(SwsAArch64Context *s, uint8_t dst, uint8_t src) +static void swizzle_emit(SwsAArch64Context *s, int8_t dst, int8_t src) { RasmContext *r = s->rctx; RasmOp src_op[2] = { swizzle_a64op(s, src, 0), swizzle_a64op(s, src, 1) }; @@ -645,14 +645,8 @@ static void swizzle_emit(SwsAArch64Context *s, uint8_t dst, uint8_t src) static void asmgen_op_move(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { - SwsAArch64MoveOp move = p->move; - - while (move) { - uint8_t src = (move ) & 0xf; - uint8_t dst = (move >> 4) & 0xf; - swizzle_emit(s, dst, src); - move >>= 8; - } + for (int i = 0; i < p->move.num_moves; i++) + swizzle_emit(s, p->move.dst[i], p->move.src[i]); } /*********************************************************************/ diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index 75f7261527..0260f080f3 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -76,91 +76,91 @@ ENTRY(ff_sws_write_packed_16_u16_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .bloc ENTRY(ff_sws_write_nibble_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_NIBBLE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) ENTRY(ff_sws_write_nibble_16_u8_0001_neon, { .uop = SWS_UOP_WRITE_NIBBLE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) ENTRY(ff_sws_write_bit_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_BIT, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000001_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000001ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000002_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000002ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000003_8_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000003ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000003_16_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000003ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000003_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000003ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000010_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000010ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000010_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000010ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000010_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000010ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000013_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000013ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000013_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000013ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000013_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000013ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000020_8_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000020ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0100 }) -ENTRY(ff_sws_permute_000000000020_32_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000020ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0100 }) -ENTRY(ff_sws_permute_000000000030_8_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000030ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_permute_000000000030_16_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000030ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_permute_000000000030_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000030ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_permute_000000000031_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000031ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_permute_000000000130_32_u8_1001_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000130ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1001 }) -ENTRY(ff_sws_permute_000000000310_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000310ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_000000000310_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000310ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_000000000320_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000000320ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_000000001031_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000001031ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1010 }) -ENTRY(ff_sws_permute_000000001301_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000001301ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_000000002032_8_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000002032ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1100 }) -ENTRY(ff_sws_permute_000000002032_32_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000002032ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1100 }) -ENTRY(ff_sws_permute_000000002302_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000002302ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_000000002302_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000002302ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_000000102132_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000102132ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_000000102132_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000102132ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_000000102132_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000102132ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_000000132102_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000132102ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_0000001f01f0_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_0000001f01f0_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_0000001f01f0_32_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000001f01f0ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_000000201231_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000201231ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_000000201231_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000201231ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_000000231201_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000231201ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_000000231201_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000231201ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_000000231201_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x000000231201ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_0000002f02f0_8_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_0000002f02f0_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_0000002f02f0_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000002f02f0ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_0000002f12f1_8_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_permute_0000002f12f1_16_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_permute_0000002f12f1_32_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000002f12f1ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_permute_0000003f13f1_8_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1010 }) -ENTRY(ff_sws_permute_0000003f13f1_16_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1010 }) -ENTRY(ff_sws_permute_0000003f13f1_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x0000003f13f1ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1010 }) -ENTRY(ff_sws_permute_00001f2102f0_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00001f2102f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00001f2102f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00001f2102f0ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f1201f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f1201f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f1201f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f1201f0ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f12f103_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f12f103_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f12f103_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f12f103ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f12f130_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_00002f12f130_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_00002f12f130_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f12f130ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_00002f3203f0_8_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f3203f0ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1101 }) -ENTRY(ff_sws_permute_00002f3203f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00002f3203f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1101 }) -ENTRY(ff_sws_permute_00003f2302f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00003f2302f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1101 }) -ENTRY(ff_sws_permute_00003f2312f1_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00003f2312f1ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_00003f2312f1_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x00003f2312f1ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_001f213203f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_001f213203f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_001f213203f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x001f213203f0ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_002f123103f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x002f123103f0ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_002f123103f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x002f123103f0ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_003f231201f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x003f231201f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_003f231201f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x003f231201f0ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_2f12f13f03f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_2f12f13f03f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_2f12f13f03f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = 0x2f12f13f03f0ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_copy_000000002010_8_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000002010ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_copy_000000002010_16_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000002010ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_copy_000000002010_32_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000002010ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_copy_000000103120_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000103120ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_000000103120_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000103120ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_000000103120_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000103120ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_000000302010_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000302010ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_000000302010_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000302010ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_000000302010_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = 0x000000302010ULL, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_001f01f03020_8_u8_1111_neon, { .uop = SWS_UOP_COPY, .move = 0x001f01f03020ULL, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_copy_001f01f03020_16_u8_1111_neon, { .uop = SWS_UOP_COPY, .move = 0x001f01f03020ULL, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_000000000001_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_permute_000000000002_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_permute_000000000003_8_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_permute_000000000003_16_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_permute_000000000003_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0001 }) +ENTRY(ff_sws_permute_000000000010_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000010_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000010_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000013_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000013_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000013_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0010 }) +ENTRY(ff_sws_permute_000000000020_8_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0100 }) +ENTRY(ff_sws_permute_000000000020_32_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0100 }) +ENTRY(ff_sws_permute_000000000030_8_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_permute_000000000030_16_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_permute_000000000030_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_permute_000000000031_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1000 }) +ENTRY(ff_sws_permute_000000000130_32_u8_1001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1001 }) +ENTRY(ff_sws_permute_000000000310_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_000000000310_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_000000000320_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_000000001031_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {3, 1, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1010 }) +ENTRY(ff_sws_permute_000000001301_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {0, 1, 0, 0, 0, 0}, .src = {1, 3, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_000000002032_8_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {3, 2, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1100 }) +ENTRY(ff_sws_permute_000000002032_32_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {3, 2, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1100 }) +ENTRY(ff_sws_permute_000000002302_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {0, 2, 0, 0, 0, 0}, .src = {2, 3, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_000000002302_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {0, 2, 0, 0, 0, 0}, .src = {2, 3, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_000000102132_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_000000102132_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_000000102132_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_000000132102_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {0, 2, 1, 0, 0, 0}, .src = {2, 1, 3, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_0000001f01f0_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_0000001f01f0_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_0000001f01f0_32_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0011 }) +ENTRY(ff_sws_permute_000000201231_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 1, 2, 0, 0, 0}, .src = {1, 2, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_000000201231_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 1, 2, 0, 0, 0}, .src = {1, 2, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_000000231201_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_000000231201_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_000000231201_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_0000002f02f0_8_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_0000002f02f0_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_0000002f02f0_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0101 }) +ENTRY(ff_sws_permute_0000002f12f1_8_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_permute_0000002f12f1_16_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_permute_0000002f12f1_32_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_permute_0000003f13f1_8_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1010 }) +ENTRY(ff_sws_permute_0000003f13f1_16_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1010 }) +ENTRY(ff_sws_permute_0000003f13f1_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1010 }) +ENTRY(ff_sws_permute_00001f2102f0_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00001f2102f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00001f2102f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f1201f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f1201f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f12f103_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f12f103_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f12f103_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_permute_00002f12f130_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_00002f12f130_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_00002f12f130_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_00002f3203f0_8_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 3, 2, 0, 0}, .src = {0, 3, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1101 }) +ENTRY(ff_sws_permute_00002f3203f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 3, 2, 0, 0}, .src = {0, 3, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1101 }) +ENTRY(ff_sws_permute_00003f2302f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 2, 3, 0, 0}, .src = {0, 2, 3, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1101 }) +ENTRY(ff_sws_permute_00003f2312f1_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 1, 2, 3, 0, 0}, .src = {1, 2, 3, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_00003f2312f1_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 1, 2, 3, 0, 0}, .src = {1, 2, 3, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_permute_001f213203f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_001f213203f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_001f213203f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_002f123103f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 1, 2, 0}, .src = {0, 3, 1, 2, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_002f123103f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 1, 2, 0}, .src = {0, 3, 1, 2, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_003f231201f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 1, 2, 3, 0}, .src = {0, 1, 2, 3, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_003f231201f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 1, 2, 3, 0}, .src = {0, 1, 2, 3, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_2f12f13f03f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_2f12f13f03f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_permute_2f12f13f03f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_copy_000000002010_8_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_copy_000000002010_16_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_copy_000000002010_32_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0110 }) +ENTRY(ff_sws_copy_000000103120_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_000000103120_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_000000103120_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_000000302010_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_000000302010_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_000000302010_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) +ENTRY(ff_sws_copy_001f01f03020_8_u8_1111_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 5, .dst = {2, 3, -1, 0, 1, 0}, .src = {0, 0, 0, 1, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) +ENTRY(ff_sws_copy_001f01f03020_16_u8_1111_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 5, .dst = {2, 3, -1, 0, 1, 0}, .src = {0, 0, 0, 1, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) ENTRY(ff_sws_swap_bytes_8_u16_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) ENTRY(ff_sws_swap_bytes_8_u16_0010_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0010 }) ENTRY(ff_sws_swap_bytes_8_u16_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0011 }) diff --git a/libswscale/aarch64/ops_impl.h b/libswscale/aarch64/ops_impl.h index 5b9046807c..96c0510a7f 100644 --- a/libswscale/aarch64/ops_impl.h +++ b/libswscale/aarch64/ops_impl.h @@ -30,10 +30,6 @@ /* Each nibble in the mask corresponds to one component. */ typedef uint16_t SwsAArch64OpMask; -/* Each byte is an LSB src|dst pair until 00 is reached. */ -typedef uint64_t SwsAArch64MoveOp; -#define AARCH64_MOVE_TMP 0xf - /** * Affine coefficient mask for linear op. Packs a 4x5 matrix in execution * order, where the offset is the first element, with 2 bits per element: @@ -65,7 +61,7 @@ typedef struct SwsAArch64OpImplParams { union { SwsShiftUOp shift; SwsClearUOp clear; - SwsAArch64MoveOp move; + SwsMoveUOp move; SwsAArch64OpMask pack; SwsAArch64LinearOp linear; SwsAArch64DitherOp dither; diff --git a/libswscale/aarch64/ops_impl_conv.c b/libswscale/aarch64/ops_impl_conv.c index c6922b9dc3..b8580d690f 100644 --- a/libswscale/aarch64/ops_impl_conv.c +++ b/libswscale/aarch64/ops_impl_conv.c @@ -41,16 +41,16 @@ static int linear_index_from_sws_op(int idx) return reorder_col[idx]; } -static void swizzle_emit(SwsAArch64OpImplParams *out, uint8_t dst, uint8_t src, int idx) +static void swizzle_emit(SwsAArch64OpImplParams *out, uint8_t dst, uint8_t src) { - uint64_t pair = src | (dst << 4); - out->move |= pair << (idx * 8); + int idx = out->move.num_moves++; + out->move.dst[idx] = dst; + out->move.src[idx] = src; } static void convert_swizzle_to_moves(const SwsOp *op, SwsAArch64OpImplParams *out) { SwsAArch64OpMask swizzle = 0; - int num_moves = 0; MASK_SET(swizzle, 0, op->swizzle.in[0]); MASK_SET(swizzle, 1, op->swizzle.in[1]); @@ -73,7 +73,7 @@ static void convert_swizzle_to_moves(const SwsOp *op, SwsAArch64OpImplParams *ou if (done[dst] || src_used[dst]) continue; uint8_t src = MASK_GET(swizzle, dst); - swizzle_emit(out, dst, src, num_moves++); + swizzle_emit(out, dst, src); src_used[src]--; done[dst] = true; progress = true; @@ -85,18 +85,18 @@ static void convert_swizzle_to_moves(const SwsOp *op, SwsAArch64OpImplParams *ou if (done[dst]) continue; - swizzle_emit(out, AARCH64_MOVE_TMP, dst, num_moves++); + swizzle_emit(out, -1, dst); uint8_t cur_dst = dst; uint8_t src = MASK_GET(swizzle, cur_dst); while (src != dst) { - swizzle_emit(out, cur_dst, src, num_moves++); + swizzle_emit(out, cur_dst, src); done[cur_dst] = true; cur_dst = src; src = MASK_GET(swizzle, cur_dst); } - swizzle_emit(out, cur_dst, AARCH64_MOVE_TMP, num_moves++); + swizzle_emit(out, cur_dst, -1); done[cur_dst] = true; } } diff --git a/libswscale/tests/sws_ops_aarch64.c b/libswscale/tests/sws_ops_aarch64.c index 60ef4cabce..ffb4233f32 100644 --- a/libswscale/tests/sws_ops_aarch64.c +++ b/libswscale/tests/sws_ops_aarch64.c @@ -53,6 +53,18 @@ static uint16_t clear_to_mask(const SwsClearUOp *clear) return mask; } +static uint64_t move_to_mask(const SwsMoveUOp *move) +{ + uint64_t mask = 0; + for (int i = 0; i < move->num_moves; i++) { + uint8_t dst = move->dst[i] < 0 ? 0xf : move->dst[i]; + uint8_t src = move->src[i] < 0 ? 0xf : move->src[i]; + uint64_t pair = src | (dst << 4); + mask |= pair << (i * 8); + } + return mask; +} + static int aarch64_op_impl_cmp(const void *a, const void *b) { const SwsAArch64OpImplParams *pa = (const SwsAArch64OpImplParams *) a; @@ -63,10 +75,13 @@ static int aarch64_op_impl_cmp(const void *a, const void *b) switch (pa->uop) { case SWS_UOP_PERMUTE: - case SWS_UOP_COPY: - if (pa->move != pb->move) - return (int64_t) (pa->move - pb->move) < 0 ? -1 : 1; + case SWS_UOP_COPY: { + uint64_t ia = move_to_mask(&pa->move); + uint64_t ib = move_to_mask(&pb->move); + if (ia != ib) + return (int64_t) (ia - ib) < 0 ? -1 : 1; break; + } case SWS_UOP_UNPACK: case SWS_UOP_PACK: if (pa->pack != pb->pack) @@ -245,7 +260,7 @@ static void impl_func_name(AVBPrint *bp, const SwsAArch64OpImplParams *params) switch (params->uop) { case SWS_UOP_PERMUTE: case SWS_UOP_COPY: - av_bprintf(bp, "_%012" PRIx64, params->move); + av_bprintf(bp, "_%012" PRIx64, move_to_mask(¶ms->move)); break; case SWS_UOP_UNPACK: case SWS_UOP_PACK: @@ -315,7 +330,12 @@ static void serialize_op(AVBPrint *bp, const SwsAArch64OpImplParams *params) switch (params->uop) { case SWS_UOP_PERMUTE: case SWS_UOP_COPY: - av_bprintf(bp, ", .move = 0x%012" PRIx64 "ULL", params->move); + av_bprintf(bp, ", .move = { .num_moves = %d, .dst = {%d, %d, %d, %d, %d, %d}, .src = {%d, %d, %d, %d, %d, %d} }", + params->move.num_moves, + params->move.dst[0], params->move.dst[1], params->move.dst[2], + params->move.dst[3], params->move.dst[4], params->move.dst[5], + params->move.src[0], params->move.src[1], params->move.src[2], + params->move.src[3], params->move.src[4], params->move.src[5]); break; case SWS_UOP_UNPACK: case SWS_UOP_PACK: -- 2.52.0 >From d84701f6bd39b3707878ac70fee04abb425216c6 Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Wed, 17 Jun 2026 17:50:54 +0200 Subject: [PATCH 12/17] swscale/aarch64/ops: use SwsPackUOp for SwsAArch64OpImplParams.pack This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops_asmgen.c | 14 +++---- libswscale/aarch64/ops_entries.c | 60 +++++++++++++++--------------- libswscale/aarch64/ops_impl.h | 2 +- libswscale/aarch64/ops_impl_conv.c | 12 ++---- libswscale/tests/sws_ops_aarch64.c | 23 +++++++++--- 5 files changed, 60 insertions(+), 51 deletions(-) diff --git a/libswscale/aarch64/ops_asmgen.c b/libswscale/aarch64/ops_asmgen.c index 78967f9647..1a3fce319c 100644 --- a/libswscale/aarch64/ops_asmgen.c +++ b/libswscale/aarch64/ops_asmgen.c @@ -665,16 +665,16 @@ static void asmgen_op_unpack(SwsAArch64Context *s, const SwsAArch64OpImplParams uint8_t cur_vt = 0; const int offsets[4] = { - MASK_GET(p->pack, 3) + MASK_GET(p->pack, 2) + MASK_GET(p->pack, 1), - MASK_GET(p->pack, 3) + MASK_GET(p->pack, 2), - MASK_GET(p->pack, 3), + p->pack.pattern[3] + p->pack.pattern[2] + p->pack.pattern[1], + p->pack.pattern[3] + p->pack.pattern[2], + p->pack.pattern[3], 0 }; /* Generate masks. */ rasm_add_comment(r, "generate masks"); LOOP_MASK(p, i) { - uint32_t val = (1u << MASK_GET(p->pack, i)) - 1; + uint32_t val = (1u << p->pack.pattern[i]) - 1; for (int j = 0; j < 4; j++) { if (mask_val[j] == val) { mask_val[i] = mask_val[j]; @@ -732,9 +732,9 @@ static void asmgen_op_pack(SwsAArch64Context *s, const SwsAArch64OpImplParams *p RasmOp *vh = s->vh; const int offsets[4] = { - MASK_GET(p->pack, 3) + MASK_GET(p->pack, 2) + MASK_GET(p->pack, 1), - MASK_GET(p->pack, 3) + MASK_GET(p->pack, 2), - MASK_GET(p->pack, 3), + p->pack.pattern[3] + p->pack.pattern[2] + p->pack.pattern[1], + p->pack.pattern[3] + p->pack.pattern[2], + p->pack.pattern[3], 0 }; uint16_t offset_mask = 0; diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index 0260f080f3..1a3dd57540 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -253,36 +253,36 @@ ENTRY(ff_sws_max_8_f32_0011_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = ENTRY(ff_sws_max_8_f32_0111_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) ENTRY(ff_sws_max_8_f32_1001_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) ENTRY(ff_sws_max_8_f32_1111_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_unpack_0121_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0121, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0121_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0121, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0233_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0233, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0233_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0233, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0332_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0332, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0332_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0332, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0444_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0444, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0444_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0444, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0555_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0555, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0555_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0555, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0565_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0565, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0565_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x0565, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_2aaa_8_u32_0010_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x2aaa, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0010 }) -ENTRY(ff_sws_unpack_2aaa_8_u32_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = 0x2aaa, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_aaa2_8_u32_0100_neon, { .uop = SWS_UOP_UNPACK, .pack = 0xaaa2, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0100 }) -ENTRY(ff_sws_unpack_aaa2_8_u32_1110_neon, { .uop = SWS_UOP_UNPACK, .pack = 0xaaa2, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1110 }) -ENTRY(ff_sws_pack_0121_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0121, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0121_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0121, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0233_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0233, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0233_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0233, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0332_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0332, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0332_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0332, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0444_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0444, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0444_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0444, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0555_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0555, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0555_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0555, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0565_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0565, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0565_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = 0x0565, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_2aaa_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = 0x2aaa, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_pack_aaa2_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = 0xaaa2, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_unpack_0121_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0121_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0233_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0233_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0332_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0332_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0444_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0444_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0555_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0555_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0565_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_0565_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_2aaa_8_u32_0010_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0010 }) +ENTRY(ff_sws_unpack_2aaa_8_u32_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) +ENTRY(ff_sws_unpack_aaa2_8_u32_0100_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0100 }) +ENTRY(ff_sws_unpack_aaa2_8_u32_1110_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1110 }) +ENTRY(ff_sws_pack_0121_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0121_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0233_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0233_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0332_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0332_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0444_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0444_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0555_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0555_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0565_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_0565_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) +ENTRY(ff_sws_pack_2aaa_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) +ENTRY(ff_sws_pack_aaa2_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) ENTRY(ff_sws_lshift_1_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) ENTRY(ff_sws_lshift_1_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) ENTRY(ff_sws_lshift_1_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) diff --git a/libswscale/aarch64/ops_impl.h b/libswscale/aarch64/ops_impl.h index 96c0510a7f..c15135668d 100644 --- a/libswscale/aarch64/ops_impl.h +++ b/libswscale/aarch64/ops_impl.h @@ -62,7 +62,7 @@ typedef struct SwsAArch64OpImplParams { SwsShiftUOp shift; SwsClearUOp clear; SwsMoveUOp move; - SwsAArch64OpMask pack; + SwsPackUOp pack; SwsAArch64LinearOp linear; SwsAArch64DitherOp dither; }; diff --git a/libswscale/aarch64/ops_impl_conv.c b/libswscale/aarch64/ops_impl_conv.c index b8580d690f..c4a7e98a75 100644 --- a/libswscale/aarch64/ops_impl_conv.c +++ b/libswscale/aarch64/ops_impl_conv.c @@ -244,19 +244,15 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, out->type = SWS_PIXEL_U8; break; case SWS_UOP_UNPACK: - MASK_SET(out->pack, 0, op->pack.pattern[0]); - MASK_SET(out->pack, 1, op->pack.pattern[1]); - MASK_SET(out->pack, 2, op->pack.pattern[2]); - MASK_SET(out->pack, 3, op->pack.pattern[3]); + for (int i = 0; i < 4; i++) + out->pack.pattern[i] = op->pack.pattern[i]; break; case SWS_UOP_PACK: out->mask = 0; for (int i = 0; i < 4 && op->pack.pattern[i]; i++) MASK_SET(out->mask, i, 1); - MASK_SET(out->pack, 0, op->pack.pattern[0]); - MASK_SET(out->pack, 1, op->pack.pattern[1]); - MASK_SET(out->pack, 2, op->pack.pattern[2]); - MASK_SET(out->pack, 3, op->pack.pattern[3]); + for (int i = 0; i < 4; i++) + out->pack.pattern[i] = op->pack.pattern[i]; break; case SWS_UOP_LSHIFT: case SWS_UOP_RSHIFT: diff --git a/libswscale/tests/sws_ops_aarch64.c b/libswscale/tests/sws_ops_aarch64.c index ffb4233f32..0ca7f8f36c 100644 --- a/libswscale/tests/sws_ops_aarch64.c +++ b/libswscale/tests/sws_ops_aarch64.c @@ -65,6 +65,14 @@ static uint64_t move_to_mask(const SwsMoveUOp *move) return mask; } +static uint16_t pack_to_mask(const SwsPackUOp *pack) +{ + uint16_t mask = 0; + for (int i = 0; i < 4; i++) + MASK_SET(mask, i, pack->pattern[i]); + return mask; +} + static int aarch64_op_impl_cmp(const void *a, const void *b) { const SwsAArch64OpImplParams *pa = (const SwsAArch64OpImplParams *) a; @@ -83,10 +91,13 @@ static int aarch64_op_impl_cmp(const void *a, const void *b) break; } case SWS_UOP_UNPACK: - case SWS_UOP_PACK: - if (pa->pack != pb->pack) - return (int) pa->pack - pb->pack; + case SWS_UOP_PACK: { + uint16_t ia = pack_to_mask(&pa->pack); + uint16_t ib = pack_to_mask(&pb->pack); + if (ia != ib) + return (int) ia - ib; break; + } case SWS_UOP_LSHIFT: case SWS_UOP_RSHIFT: if (pa->shift.amount != pb->shift.amount) @@ -264,7 +275,7 @@ static void impl_func_name(AVBPrint *bp, const SwsAArch64OpImplParams *params) break; case SWS_UOP_UNPACK: case SWS_UOP_PACK: - av_bprintf(bp, "_%04x", params->pack); + av_bprintf(bp, "_%04x", pack_to_mask(¶ms->pack)); break; case SWS_UOP_LSHIFT: case SWS_UOP_RSHIFT: @@ -339,7 +350,9 @@ static void serialize_op(AVBPrint *bp, const SwsAArch64OpImplParams *params) break; case SWS_UOP_UNPACK: case SWS_UOP_PACK: - av_bprintf(bp, ", .pack = 0x%04x", params->pack); + av_bprintf(bp, ", .pack = { .pattern = {%d, %d, %d, %d} }", + params->pack.pattern[0], params->pack.pattern[1], + params->pack.pattern[2], params->pack.pattern[3]); break; case SWS_UOP_LSHIFT: case SWS_UOP_RSHIFT: -- 2.52.0 >From 35ca6914b486d10a8b281c21a15e901782bbb2fc Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Wed, 17 Jun 2026 20:01:49 +0200 Subject: [PATCH 13/17] swscale/aarch64/ops: use SwsLinearUOp for SwsAArch64OpImplParams.linear This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops.c | 14 ++++--- libswscale/aarch64/ops_asmgen.c | 18 ++++----- libswscale/aarch64/ops_entries.c | 64 +++++++++++++++--------------- libswscale/aarch64/ops_impl.h | 53 ++----------------------- libswscale/aarch64/ops_impl_conv.c | 32 ++++----------- libswscale/tests/sws_ops_aarch64.c | 28 ++++++++++--- 6 files changed, 83 insertions(+), 126 deletions(-) diff --git a/libswscale/aarch64/ops.c b/libswscale/aarch64/ops.c index 71c0c38b06..1634cf2e49 100644 --- a/libswscale/aarch64/ops.c +++ b/libswscale/aarch64/ops.c @@ -79,14 +79,16 @@ static int aarch64_setup_linear(const SwsAArch64OpImplParams *p, return AVERROR(ENOMEM); /** - * Copy non-zero coefficients, reordered to match SwsAArch64LinearOpMask. - * The coefficients are packed in sequential order. The same order must - * be followed in asmgen_op_linear(). + * Copy non-zero coefficients, packed in sequential order, offset first. + * The same order must be followed in asmgen_op_linear(). */ int i_coeff = 0; - LOOP_LINEAR_MASK(p, i, j) { - const int jj = linear_index_to_sws_op(j); - coeffs[i_coeff++] = (float) op->lin.m[i][jj].num / op->lin.m[i][jj].den; + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 5; j++) { + const int jj = (j == 0) ? 4 : (j - 1); + if (!(p->linear.zero & SWS_MASK(i, jj))) + coeffs[i_coeff++] = (float) op->lin.m[i][jj].num / op->lin.m[i][jj].den; + } } res->priv.ptr = coeffs; diff --git a/libswscale/aarch64/ops_asmgen.c b/libswscale/aarch64/ops_asmgen.c index 1a3fce319c..6bbacda14b 100644 --- a/libswscale/aarch64/ops_asmgen.c +++ b/libswscale/aarch64/ops_asmgen.c @@ -1093,10 +1093,10 @@ static void linear_pass(SwsAArch64Context *s, const SwsAArch64OpImplParams *p, bool first = true; RasmNode *pre_mul = rasm_get_current_node(r); for (int j = 0; j < 5; j++) { - if (!LINEAR_MASK_GET(p->linear.mask, i, j)) + bool is_offset = (j == 0); + int src_j = is_offset ? 4 : (j - 1); + if (p->linear.zero & SWS_MASK(i, src_j)) continue; - bool is_offset = linear_index_is_offset(j); - int src_j = linear_index_to_vx(j); RasmOp vsrc = src_vx[src_j]; uint8_t vc_i = i_coeff / 4; uint8_t vc_j = i_coeff & 3; @@ -1105,7 +1105,7 @@ static void linear_pass(SwsAArch64Context *s, const SwsAArch64OpImplParams *p, if (first && is_offset) { i_dup (r, vx[i], vcoeff); CMTF("v%c[%u] = broadcast(vc[%u][%u]);", cvh, i, vc_i, vc_j); } else if (first && !is_offset) { - if (LINEAR_MASK_GET(p->linear.mask, i, j) == LINEAR_MASK_1) { + if (p->linear.one & SWS_MASK(i, src_j)) { i_mov16b(r, vx[i], vsrc); CMTF("v%c[%u] = vsrc[%u];", cvh, i, src_j); } else { i_fmul (r, vx[i], vsrc, vcoeff); CMTF("v%c[%u] = vsrc[%u] * vc[%u][%u];", cvh, i, src_j, vc_i, vc_j); @@ -1125,7 +1125,7 @@ static void linear_pass(SwsAArch64Context *s, const SwsAArch64OpImplParams *p, * to reduce the dependency chain. * There is no need to perform multiplications by 1. */ - if (LINEAR_MASK_GET(p->linear.mask, i, j) != LINEAR_MASK_1) { + if (!(p->linear.one & SWS_MASK(i, src_j))) { pre_mul = rasm_set_current_node(r, pre_mul); i_fmul(r, vtmp[vc_j], vsrc, vcoeff); CMTF("vtmp[%u] = vsrc[%u] * vc[%u][%u];", vc_j, src_j, vc_i, vc_j); pre_mul = rasm_set_current_node(r, pre_mul); @@ -1165,12 +1165,12 @@ static void asmgen_op_linear(SwsAArch64Context *s, const SwsAArch64OpImplParams bool overwritten[4] = { false, false, false, false }; LOOP_MASK(p, i) { for (int j = 0; j < 5; j++) { - if (!LINEAR_MASK_GET(p->linear.mask, i, j)) + bool is_offset = (j == 0); + int src_j = is_offset ? 4 : (j - 1); + if (p->linear.zero & SWS_MASK(i, src_j)) continue; - bool is_offset = linear_index_is_offset(j); - int src_j = linear_index_to_vx(j); if (!is_offset && overwritten[src_j]) - MASK_SET(save_mask, j - 1, 1); + MASK_SET(save_mask, src_j, 1); overwritten[i] = true; } } diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index 1a3dd57540..027f6b1ea5 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -358,38 +358,38 @@ ENTRY(ff_sws_clear_ffff_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .on ENTRY(ff_sws_clear_ffff_16_u16_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0011 }) ENTRY(ff_sws_clear_ffff_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) ENTRY(ff_sws_clear_ffff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1000 }) -ENTRY(ff_sws_linear_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x000000000fULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x00000000fcULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x00000000ffULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x000000c000ULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0010 }) -ENTRY(ff_sws_linear_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x000373dcc7ULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x0003f3fccfULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x000c00c00cULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x000c30cc0fULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x000ff3fcfcULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0x000ff3fcffULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0xc000000000ULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1000 }) -ENTRY(ff_sws_linear_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0xc00000000fULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_linear_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0xc0000000fcULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_linear_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0xc003f3fccfULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_linear_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0xc00c00c00cULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_linear_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear.mask = 0xc00ff3fcffULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_linear_fma_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x000000000fULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_fma_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x00000000fcULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_fma_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x00000000ffULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_fma_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x000000c000ULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0010 }) -ENTRY(ff_sws_linear_fma_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x000373dcc7ULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x0003f3fccfULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x000c00c00cULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x000c30cc0fULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x000ff3fcfcULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0x000ff3fcffULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0xc000000000ULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1000 }) -ENTRY(ff_sws_linear_fma_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0xc00000000fULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_linear_fma_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0xc0000000fcULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_linear_fma_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0xc003f3fccfULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_linear_fma_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0xc00c00c00cULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_linear_fma_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear.mask = 0xc00ff3fcffULL, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_linear_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xffff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfffe8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfffbf }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0010 }) +ENTRY(ff_sws_linear_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x421, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfadae }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfa118 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfa108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbffff }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1000 }) +ENTRY(ff_sws_linear_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_linear_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbfff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_linear_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_linear_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_linear_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xba108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_linear_fma_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_fma_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xffff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_fma_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfffe8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_linear_fma_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfffbf }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0010 }) +ENTRY(ff_sws_linear_fma_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x421, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfadae }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfa118 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfa108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_linear_fma_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbffff }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1000 }) +ENTRY(ff_sws_linear_fma_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_linear_fma_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbfff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_linear_fma_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_linear_fma_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_linear_fma_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xba108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) ENTRY(ff_sws_dither_0325_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x0325, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) ENTRY(ff_sws_dither_032f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x032f, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) ENTRY(ff_sws_dither_2305_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x2305, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) diff --git a/libswscale/aarch64/ops_impl.h b/libswscale/aarch64/ops_impl.h index c15135668d..378ce013d3 100644 --- a/libswscale/aarch64/ops_impl.h +++ b/libswscale/aarch64/ops_impl.h @@ -30,19 +30,6 @@ /* Each nibble in the mask corresponds to one component. */ typedef uint16_t SwsAArch64OpMask; -/** - * Affine coefficient mask for linear op. Packs a 4x5 matrix in execution - * order, where the offset is the first element, with 2 bits per element: - * 00: m[i][j] == 0 - * 01: m[i][j] == 1 - * 11: m[i][j] is any other coefficient - */ -typedef uint64_t SwsAArch64LinearOpMask; - -typedef struct SwsAArch64LinearOp { - SwsAArch64LinearOpMask mask; -} SwsAArch64LinearOp; - typedef struct SwsAArch64DitherOp { uint16_t y_offset; uint8_t size_log2; @@ -63,7 +50,7 @@ typedef struct SwsAArch64OpImplParams { SwsClearUOp clear; SwsMoveUOp move; SwsPackUOp pack; - SwsAArch64LinearOp linear; + SwsLinearUOp linear; SwsAArch64DitherOp dither; }; } SwsAArch64OpImplParams; @@ -83,48 +70,16 @@ typedef struct SwsAArch64OpImplParams { #define LOOP_MASK(p, idx) LOOP(p->mask, idx) #define LOOP_MASK_BWD(p, idx) LOOP_BWD(p->mask, idx) -#define LINEAR_MASK_GET(mask, idx, jdx) (((mask) >> (2 * ((5 * (idx) + (jdx))))) & 3) -#define LINEAR_MASK_SET(mask, idx, jdx, val) do { \ - (mask) |= ((((SwsAArch64LinearOpMask) (val)) & 3) << (2 * ((5 * (idx) + (jdx))))); \ -} while (0) -#define LINEAR_MASK_0 0 -#define LINEAR_MASK_1 1 -#define LINEAR_MASK_X 3 - -#define LOOP_LINEAR_MASK(p, idx, jdx) \ - LOOP_MASK(p, idx) \ - for (int jdx = 0; jdx < 5; jdx++) \ - if (LINEAR_MASK_GET(p->linear.mask, idx, jdx)) - /* Compute number of vector registers needed to store all coefficients. */ static inline int linear_num_vregs(const SwsAArch64OpImplParams *params) { int count = 0; - LOOP_LINEAR_MASK(params, i, j) - count++; + for (int i = 0; i < 4 * 5; i++) + if (!(params->linear.zero & (1ULL << i))) + count++; return (count + 3) / 4; } -static inline int linear_index_to_sws_op(int idx) -{ - const int reorder_col[5] = { 4, 0, 1, 2, 3 }; - return reorder_col[idx]; -} - -static inline int linear_index_is_offset(int idx) -{ - return (idx == 0); -} - -static inline int linear_index_to_vx(int idx) -{ - /* The offset shouldn't map to any vx, but to please UBSan we map - * it to 0. */ - if (linear_index_is_offset(idx)) - return 0; - return (idx - 1); -} - /** * These values will be used by ops_asmgen to access fields inside of * SwsOpExec and SwsOpImpl. The sizes are checked in aarch64/ops.c when diff --git a/libswscale/aarch64/ops_impl_conv.c b/libswscale/aarch64/ops_impl_conv.c index c4a7e98a75..d114868b6a 100644 --- a/libswscale/aarch64/ops_impl_conv.c +++ b/libswscale/aarch64/ops_impl_conv.c @@ -29,18 +29,6 @@ #include "ops_impl.h" -/** - * The column index order for SwsLinearOp.mask follows the affine transform - * order, where the offset is the last element. SwsAArch64LinearOpMask, on - * the other hand, follows execution order, where the offset is the first - * element. - */ -static int linear_index_from_sws_op(int idx) -{ - const int reorder_col[5] = { 1, 2, 3, 4, 0 }; - return reorder_col[idx]; -} - static void swizzle_emit(SwsAArch64OpImplParams *out, uint8_t dst, uint8_t src) { int idx = out->move.num_moves++; @@ -277,26 +265,20 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, break; case SWS_UOP_LINEAR: case SWS_UOP_LINEAR_FMA: - /** - * The out->linear.mask field packs the 4x5 matrix from SwsLinearOp as - * 2 bits per element: - * 00: m[i][j] == 0 - * 01: m[i][j] == 1 - * 11: m[i][j] is any other coefficient - */ out->mask = 0; for (int i = 0; i < 4; i++) { - /* Skip unused or identity rows */ - if (!SWS_OP_NEEDED(op, i) || !(op->lin.mask & SWS_MASK_ROW(i))) + if (!SWS_OP_NEEDED(op, i) || !(op->lin.mask & SWS_MASK_ROW(i))) { + for (int j = 0; j < 5; j++) + out->linear.zero |= SWS_MASK(i, j); continue; + } MASK_SET(out->mask, i, 1); for (int j = 0; j < 5; j++) { const AVRational64 k = op->lin.m[i][j]; - int jj = linear_index_from_sws_op(j); if (j < 4 && k.num == k.den) - LINEAR_MASK_SET(out->linear.mask, i, jj, LINEAR_MASK_1); - else if (k.num != 0) - LINEAR_MASK_SET(out->linear.mask, i, jj, LINEAR_MASK_X); + out->linear.one |= SWS_MASK(i, j); + else if (k.num == 0) + out->linear.zero |= SWS_MASK(i, j); } } break; diff --git a/libswscale/tests/sws_ops_aarch64.c b/libswscale/tests/sws_ops_aarch64.c index 0ca7f8f36c..c8fd7e432a 100644 --- a/libswscale/tests/sws_ops_aarch64.c +++ b/libswscale/tests/sws_ops_aarch64.c @@ -73,6 +73,21 @@ static uint16_t pack_to_mask(const SwsPackUOp *pack) return mask; } +static uint64_t linear_to_mask(const SwsLinearUOp *linear) +{ + uint64_t mask = 0; + for (int i = 0; i < 4; i++) { + for (int j = 0; j < 5; j++) { + int jj = (j == 0) ? 4 : (j - 1); + if (linear->one & SWS_MASK(i, jj)) + mask |= 1ULL << (2 * ((5 * i + j))); + else if (!(linear->zero & SWS_MASK(i, jj))) + mask |= 3ULL << (2 * ((5 * i + j))); + } + } + return mask; +} + static int aarch64_op_impl_cmp(const void *a, const void *b) { const SwsAArch64OpImplParams *pa = (const SwsAArch64OpImplParams *) a; @@ -111,10 +126,13 @@ static int aarch64_op_impl_cmp(const void *a, const void *b) break; } case SWS_UOP_LINEAR: - case SWS_UOP_LINEAR_FMA: - if (pa->linear.mask != pb->linear.mask) - return (int64_t) (pa->linear.mask - pb->linear.mask) < 0 ? -1 : 1; + case SWS_UOP_LINEAR_FMA: { + uint64_t ia = linear_to_mask(&pa->linear); + uint64_t ib = linear_to_mask(&pb->linear); + if (ia != ib) + return (int64_t) (ia - ib) < 0 ? -1 : 1; break; + } case SWS_UOP_DITHER: if (pa->dither.y_offset != pb->dither.y_offset) return (int) pa->dither.y_offset - pb->dither.y_offset; @@ -286,7 +304,7 @@ static void impl_func_name(AVBPrint *bp, const SwsAArch64OpImplParams *params) break; case SWS_UOP_LINEAR: case SWS_UOP_LINEAR_FMA: - av_bprintf(bp, "_%010" PRIx64, params->linear.mask); + av_bprintf(bp, "_%010" PRIx64, linear_to_mask(¶ms->linear)); break; case SWS_UOP_DITHER: av_bprintf(bp, "_%04x_%u", params->dither.y_offset, params->dither.size_log2); @@ -363,7 +381,7 @@ static void serialize_op(AVBPrint *bp, const SwsAArch64OpImplParams *params) break; case SWS_UOP_LINEAR: case SWS_UOP_LINEAR_FMA: - av_bprintf(bp, ", .linear.mask = 0x%010" PRIx64 "ULL", params->linear.mask); + av_bprintf(bp, ", .linear = { .one = 0x%x, .zero = 0x%x }", params->linear.one, params->linear.zero); break; case SWS_UOP_DITHER: av_bprintf(bp, ", .dither.y_offset = 0x%04x, .dither.size_log2 = %u", params->dither.y_offset, params->dither.size_log2); -- 2.52.0 >From d227de5b41d1aefc6a08f6464fcda49c1a42c1a6 Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Wed, 17 Jun 2026 21:49:31 +0200 Subject: [PATCH 14/17] swscale/aarch64/ops: use SwsDitherUOp for SwsAArch64OpImplParams.dither This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops_asmgen.c | 6 ++-- libswscale/aarch64/ops_entries.c | 44 +++++++++++++++--------------- libswscale/aarch64/ops_impl.h | 7 +---- libswscale/aarch64/ops_impl_conv.c | 9 +++--- libswscale/tests/sws_ops_aarch64.c | 26 ++++++++++++++---- 5 files changed, 52 insertions(+), 40 deletions(-) diff --git a/libswscale/aarch64/ops_asmgen.c b/libswscale/aarch64/ops_asmgen.c index 6bbacda14b..74e2514ad9 100644 --- a/libswscale/aarch64/ops_asmgen.c +++ b/libswscale/aarch64/ops_asmgen.c @@ -1216,10 +1216,10 @@ static void asmgen_op_dither(SwsAArch64Context *s, const SwsAArch64OpImplParams /* Very cheap bucket sort. */ int max_offset = 0; LOOP_MASK(p, i) - max_offset = FFMAX(max_offset, MASK_GET(p->dither.y_offset, i)); + max_offset = FFMAX(max_offset, p->dither.y_offset[i]); for (int y_off = 0; y_off <= max_offset; y_off++) { LOOP_MASK(p, i) { - if (MASK_GET(p->dither.y_offset, i) == y_off) + if (p->dither.y_offset[i] == y_off) sorted[n_comps++] = i; } } @@ -1261,7 +1261,7 @@ static void asmgen_op_dither(SwsAArch64Context *s, const SwsAArch64OpImplParams int prev_i = 0; for (int sorted_i = 0; sorted_i < n_comps; sorted_i++) { int i = sorted[sorted_i]; - uint8_t y_off = MASK_GET(p->dither.y_offset, i); + uint8_t y_off = p->dither.y_offset[i]; bool do_load = (y_off != last_y_off); if (last_y_off < 0) { diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index 027f6b1ea5..cc29d102b1 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -390,25 +390,25 @@ ENTRY(ff_sws_linear_fma_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, ENTRY(ff_sws_linear_fma_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) ENTRY(ff_sws_linear_fma_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) ENTRY(ff_sws_linear_fma_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xba108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_0325_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x0325, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_032f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x032f, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_dither_2305_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x2305, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_230f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x230f, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_dither_3000_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x3000, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_302f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x302f, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_dither_3ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x3ff0, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_dither_5023_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x5023, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_5032_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x5032, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_5230_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x5230, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_5ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x5ff0, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_dither_5fff_4_8_f32_1000_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0x5fff, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1000 }) -ENTRY(ff_sws_dither_f023_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xf023, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_dither_f032_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xf032, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_dither_f203_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xf203, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_dither_f230_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xf230, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_dither_f2f0_4_8_f32_0101_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xf2f0, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0101 }) -ENTRY(ff_sws_dither_f2ff_4_8_f32_0100_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xf2ff, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0100 }) -ENTRY(ff_sws_dither_f302_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xf302, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_dither_ff30_4_8_f32_0011_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xff30, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0011 }) -ENTRY(ff_sws_dither_ff3f_4_8_f32_0010_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xff3f, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0010 }) -ENTRY(ff_sws_dither_fff0_4_8_f32_0001_neon, { .uop = SWS_UOP_DITHER, .dither.y_offset = 0xfff0, .dither.size_log2 = 4, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_dither_0325_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {5, 2, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_032f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 2, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_dither_2305_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {5, 0, 3, 2}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_230f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 3, 2}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_dither_3000_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_302f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 2, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) +ENTRY(ff_sws_dither_3ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_dither_5023_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {3, 2, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_5032_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {2, 3, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_5230_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 3, 2, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) +ENTRY(ff_sws_dither_5ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) +ENTRY(ff_sws_dither_5fff_4_8_f32_1000_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1000 }) +ENTRY(ff_sws_dither_f023_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {3, 2, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_dither_f032_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {2, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_dither_f203_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {3, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_dither_f230_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 3, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_dither_f2f0_4_8_f32_0101_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0101 }) +ENTRY(ff_sws_dither_f2ff_4_8_f32_0100_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0100 }) +ENTRY(ff_sws_dither_f302_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {2, 0, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) +ENTRY(ff_sws_dither_ff30_4_8_f32_0011_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0011 }) +ENTRY(ff_sws_dither_ff3f_4_8_f32_0010_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0010 }) +ENTRY(ff_sws_dither_fff0_4_8_f32_0001_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) diff --git a/libswscale/aarch64/ops_impl.h b/libswscale/aarch64/ops_impl.h index 378ce013d3..88f8d030f9 100644 --- a/libswscale/aarch64/ops_impl.h +++ b/libswscale/aarch64/ops_impl.h @@ -30,11 +30,6 @@ /* Each nibble in the mask corresponds to one component. */ typedef uint16_t SwsAArch64OpMask; -typedef struct SwsAArch64DitherOp { - uint16_t y_offset; - uint8_t size_log2; -} SwsAArch64DitherOp; - /** * SwsAArch64OpImplParams describes the parameters for an SwsUOpType * operation. It consists of simplified parameters from the SwsOp structure, @@ -51,7 +46,7 @@ typedef struct SwsAArch64OpImplParams { SwsMoveUOp move; SwsPackUOp pack; SwsLinearUOp linear; - SwsAArch64DitherOp dither; + SwsDitherUOp dither; }; } SwsAArch64OpImplParams; diff --git a/libswscale/aarch64/ops_impl_conv.c b/libswscale/aarch64/ops_impl_conv.c index d114868b6a..49ae24ee68 100644 --- a/libswscale/aarch64/ops_impl_conv.c +++ b/libswscale/aarch64/ops_impl_conv.c @@ -288,10 +288,11 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, MASK_SET(out->mask, 1, op->dither.y_offset[1] >= 0); MASK_SET(out->mask, 2, op->dither.y_offset[2] >= 0); MASK_SET(out->mask, 3, op->dither.y_offset[3] >= 0); - MASK_SET(out->dither.y_offset, 0, op->dither.y_offset[0]); - MASK_SET(out->dither.y_offset, 1, op->dither.y_offset[1]); - MASK_SET(out->dither.y_offset, 2, op->dither.y_offset[2]); - MASK_SET(out->dither.y_offset, 3, op->dither.y_offset[3]); + LOOP(out->mask, i) { + out->dither.y_offset[i] = op->dither.y_offset[i]; + } else { + out->dither.y_offset[i] = 0xf; + } out->dither.size_log2 = op->dither.size_log2; break; } diff --git a/libswscale/tests/sws_ops_aarch64.c b/libswscale/tests/sws_ops_aarch64.c index c8fd7e432a..2fc54264b0 100644 --- a/libswscale/tests/sws_ops_aarch64.c +++ b/libswscale/tests/sws_ops_aarch64.c @@ -88,6 +88,14 @@ static uint64_t linear_to_mask(const SwsLinearUOp *linear) return mask; } +static uint16_t dither_to_mask(const SwsDitherUOp *dither) +{ + uint16_t mask = 0; + for (int i = 0; i < 4; i++) + MASK_SET(mask, i, dither->y_offset[i]); + return mask; +} + static int aarch64_op_impl_cmp(const void *a, const void *b) { const SwsAArch64OpImplParams *pa = (const SwsAArch64OpImplParams *) a; @@ -133,13 +141,16 @@ static int aarch64_op_impl_cmp(const void *a, const void *b) return (int64_t) (ia - ib) < 0 ? -1 : 1; break; } - case SWS_UOP_DITHER: - if (pa->dither.y_offset != pb->dither.y_offset) - return (int) pa->dither.y_offset - pb->dither.y_offset; + case SWS_UOP_DITHER: { + uint16_t ia = dither_to_mask(&pa->dither); + uint16_t ib = dither_to_mask(&pb->dither); + if (ia != ib) + return (int) ia - ib; if (pa->dither.size_log2 != pb->dither.size_log2) return (int) pa->dither.size_log2 - pb->dither.size_log2; break; } + } if (pa->block_size != pb->block_size) return (int) pa->block_size - pb->block_size; @@ -307,7 +318,7 @@ static void impl_func_name(AVBPrint *bp, const SwsAArch64OpImplParams *params) av_bprintf(bp, "_%010" PRIx64, linear_to_mask(¶ms->linear)); break; case SWS_UOP_DITHER: - av_bprintf(bp, "_%04x_%u", params->dither.y_offset, params->dither.size_log2); + av_bprintf(bp, "_%04x_%u", dither_to_mask(¶ms->dither), params->dither.size_log2); break; } av_bprintf(bp, "_%u_%s_%04x_neon", params->block_size, pixel_type_names[params->type], params->mask); @@ -384,7 +395,12 @@ static void serialize_op(AVBPrint *bp, const SwsAArch64OpImplParams *params) av_bprintf(bp, ", .linear = { .one = 0x%x, .zero = 0x%x }", params->linear.one, params->linear.zero); break; case SWS_UOP_DITHER: - av_bprintf(bp, ", .dither.y_offset = 0x%04x, .dither.size_log2 = %u", params->dither.y_offset, params->dither.size_log2); + av_bprintf(bp, ", .dither = { .y_offset = {%u, %u, %u, %u}, .size_log2 = %u }", + (params->dither.y_offset[0] == 0xf) ? 0 : params->dither.y_offset[0], + (params->dither.y_offset[1] == 0xf) ? 0 : params->dither.y_offset[1], + (params->dither.y_offset[2] == 0xf) ? 0 : params->dither.y_offset[2], + (params->dither.y_offset[3] == 0xf) ? 0 : params->dither.y_offset[3], + params->dither.size_log2); break; } av_bprintf(bp, ", .block_size = %u, .type = %s, .mask = 0x%04x })", params->block_size, pixel_types[params->type], params->mask); -- 2.52.0 >From d914d8e818f1cc1bd8bcd0a5cc8cc186be979db4 Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Wed, 17 Jun 2026 22:55:01 +0200 Subject: [PATCH 15/17] swscale/aarch64/ops: use SwsCompMask for SwsAArch64OpImplParams.mask This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops_asmgen.c | 38 +- libswscale/aarch64/ops_entries.c | 818 ++++++++++++++--------------- libswscale/aarch64/ops_impl.h | 23 +- libswscale/aarch64/ops_impl_conv.c | 55 +- libswscale/tests/sws_ops_aarch64.c | 12 +- 5 files changed, 476 insertions(+), 470 deletions(-) diff --git a/libswscale/aarch64/ops_asmgen.c b/libswscale/aarch64/ops_asmgen.c index 74e2514ad9..7fce6d2600 100644 --- a/libswscale/aarch64/ops_asmgen.c +++ b/libswscale/aarch64/ops_asmgen.c @@ -260,7 +260,7 @@ static void clobber_gpr(RasmOp regs[MAX_SAVED_REGS], unsigned *count, } static unsigned clobbered_gprs(const SwsAArch64Context *s, - SwsAArch64OpMask mask, + SwsCompMask mask, RasmOp regs[MAX_SAVED_REGS]) { unsigned count = 0; @@ -274,7 +274,7 @@ static unsigned clobbered_gprs(const SwsAArch64Context *s, return count; } -static void asmgen_process(SwsAArch64Context *s, SwsAArch64OpMask mask) +static void asmgen_process(SwsAArch64Context *s, SwsCompMask mask) { RasmContext *r = s->rctx; char func_name[128]; @@ -285,7 +285,7 @@ static void asmgen_process(SwsAArch64Context *s, SwsAArch64OpMask mask) * The description in x86/ops_include.asm mostly holds as well here. */ - snprintf(func_name, sizeof(func_name), "ff_sws_process_%04x_neon", mask); + snprintf(func_name, sizeof(func_name), "ff_sws_process_%04x_neon", nibble_mask(mask)); rasm_func_begin(r, func_name, true, false); @@ -442,9 +442,9 @@ static void asmgen_op_read_packed_n(SwsAArch64Context *s, const SwsAArch64OpImpl RasmContext *r = s->rctx; switch (p->mask) { - case 0x0011: i_ld2(r, vv_2(vx[0], vx[1]), a64op_post(s->in[0], s->vec_size * 2)); break; - case 0x0111: i_ld3(r, vv_3(vx[0], vx[1], vx[2]), a64op_post(s->in[0], s->vec_size * 3)); break; - case 0x1111: i_ld4(r, vv_4(vx[0], vx[1], vx[2], vx[3]), a64op_post(s->in[0], s->vec_size * 4)); break; + case SWS_COMP_MASK(1, 1, 0, 0): i_ld2(r, vv_2(vx[0], vx[1]), a64op_post(s->in[0], s->vec_size * 2)); break; + case SWS_COMP_MASK(1, 1, 1, 0): i_ld3(r, vv_3(vx[0], vx[1], vx[2]), a64op_post(s->in[0], s->vec_size * 3)); break; + case SWS_COMP_MASK(1, 1, 1, 1): i_ld4(r, vv_4(vx[0], vx[1], vx[2], vx[3]), a64op_post(s->in[0], s->vec_size * 4)); break; } } @@ -547,9 +547,9 @@ static void asmgen_op_write_packed_n(SwsAArch64Context *s, const SwsAArch64OpImp RasmContext *r = s->rctx; switch (p->mask) { - case 0x0011: i_st2(r, vv_2(vx[0], vx[1]), a64op_post(s->out[0], s->vec_size * 2)); break; - case 0x0111: i_st3(r, vv_3(vx[0], vx[1], vx[2]), a64op_post(s->out[0], s->vec_size * 3)); break; - case 0x1111: i_st4(r, vv_4(vx[0], vx[1], vx[2], vx[3]), a64op_post(s->out[0], s->vec_size * 4)); break; + case SWS_COMP_MASK(1, 1, 0, 0): i_st2(r, vv_2(vx[0], vx[1]), a64op_post(s->out[0], s->vec_size * 2)); break; + case SWS_COMP_MASK(1, 1, 1, 0): i_st3(r, vv_3(vx[0], vx[1], vx[2]), a64op_post(s->out[0], s->vec_size * 3)); break; + case SWS_COMP_MASK(1, 1, 1, 1): i_st4(r, vv_4(vx[0], vx[1], vx[2], vx[3]), a64op_post(s->out[0], s->vec_size * 4)); break; } } @@ -737,10 +737,10 @@ static void asmgen_op_pack(SwsAArch64Context *s, const SwsAArch64OpImplParams *p p->pack.pattern[3], 0 }; - uint16_t offset_mask = 0; + SwsCompMask offset_mask = 0; LOOP_MASK(p, i) { if (offsets[i]) - MASK_SET(offset_mask, i, 1); + offset_mask |= SWS_COMP(i); } /* Perform left shift. */ @@ -1055,7 +1055,7 @@ static void asmgen_op_scale(SwsAArch64Context *s, const SwsAArch64OpImplParams * */ static void linear_pass(SwsAArch64Context *s, const SwsAArch64OpImplParams *p, RasmOp *vt, RasmOp *vc, - int save_mask, bool vh_pass) + SwsCompMask save_mask, bool vh_pass) { RasmContext *r = s->rctx; /** @@ -1076,7 +1076,7 @@ static void linear_pass(SwsAArch64Context *s, const SwsAArch64OpImplParams *p, RasmOp src_vx[4] = { vx[0], vx[1], vx[2], vx[3] }; if (save_mask) { for (int i = 0; i < 4; i++) { - if (MASK_GET(save_mask, i)) { + if (save_mask & SWS_COMP(i)) { src_vx[i] = vt[i]; i_mov16b(r, vt[i], vx[i]); CMTF("vsrc[%u] = v%c[%u];", i, cvh, i); } @@ -1161,7 +1161,7 @@ static void asmgen_op_linear(SwsAArch64Context *s, const SwsAArch64OpImplParams i_ld1(r, coeff_veclist, a64op_base(ptr)); CMT("coeff_veclist = *vcoeff_ptr;"); /* Compute mask for rows that must be saved before being overwritten. */ - uint16_t save_mask = 0; + SwsCompMask save_mask = 0; bool overwritten[4] = { false, false, false, false }; LOOP_MASK(p, i) { for (int j = 0; j < 5; j++) { @@ -1170,7 +1170,7 @@ static void asmgen_op_linear(SwsAArch64Context *s, const SwsAArch64OpImplParams if (p->linear.zero & SWS_MASK(i, src_j)) continue; if (!is_offset && overwritten[src_j]) - MASK_SET(save_mask, src_j, 1); + save_mask |= SWS_COMP(src_j); overwritten[i] = true; } } @@ -1486,10 +1486,10 @@ static int asmgen(void) s.out_bump[3] = a64op_gpx(27); /* Generate all process functions using rasm. */ - asmgen_process(&s, 0x0001); - asmgen_process(&s, 0x0011); - asmgen_process(&s, 0x0111); - asmgen_process(&s, 0x1111); + asmgen_process(&s, SWS_COMP_MASK(1, 0, 0, 0)); + asmgen_process(&s, SWS_COMP_MASK(1, 1, 0, 0)); + asmgen_process(&s, SWS_COMP_MASK(1, 1, 1, 0)); + asmgen_process(&s, SWS_COMP_MASK(1, 1, 1, 1)); /* Generate all functions from ops_entries.c using rasm. */ const SwsAArch64OpEntry *entries = ops_entries; diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index cc29d102b1..976a91481f 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -3,412 +3,412 @@ * To regenerate, run: make fate-sws-ops-entries-aarch64 GEN=1 */ -ENTRY(ff_sws_read_planar_8_u8_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_read_planar_8_u8_0011_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_read_planar_8_u8_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_read_planar_8_u8_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_read_planar_8_u16_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_read_planar_8_u16_0011_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_read_planar_8_u16_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_read_planar_8_u16_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_read_planar_8_u32_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0001 }) -ENTRY(ff_sws_read_planar_8_u32_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_read_planar_8_u32_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_read_planar_16_u8_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_read_planar_16_u8_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_read_planar_16_u8_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_read_planar_16_u16_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_read_planar_16_u16_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_read_planar_16_u16_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_read_packed_8_u8_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_read_packed_8_u8_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_read_packed_8_u8_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_read_packed_8_u16_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_read_packed_8_u16_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_read_packed_8_u16_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_read_packed_8_u32_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0011 }) -ENTRY(ff_sws_read_packed_8_u32_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_read_packed_8_u32_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_read_packed_16_u8_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_read_packed_16_u8_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_read_packed_16_u8_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_read_packed_16_u16_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_read_packed_16_u16_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_read_packed_16_u16_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_read_nibble_8_u8_0001_neon, { .uop = SWS_UOP_READ_NIBBLE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_read_nibble_16_u8_0001_neon, { .uop = SWS_UOP_READ_NIBBLE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_read_bit_8_u8_0001_neon, { .uop = SWS_UOP_READ_BIT, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_read_bit_16_u8_0001_neon, { .uop = SWS_UOP_READ_BIT, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_write_planar_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_write_planar_8_u8_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_write_planar_8_u8_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_write_planar_8_u8_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_write_planar_8_u16_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_write_planar_8_u16_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_write_planar_8_u16_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_write_planar_8_u16_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_write_planar_8_u32_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0001 }) -ENTRY(ff_sws_write_planar_8_u32_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_write_planar_8_u32_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_write_planar_16_u8_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_write_planar_16_u8_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_write_planar_16_u8_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_write_planar_16_u8_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_write_planar_16_u16_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_write_planar_16_u16_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_write_planar_16_u16_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_write_planar_16_u16_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_write_packed_8_u8_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_write_packed_8_u8_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_write_packed_8_u8_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_write_packed_8_u16_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_write_packed_8_u16_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_write_packed_8_u16_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_write_packed_8_u32_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0011 }) -ENTRY(ff_sws_write_packed_8_u32_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_write_packed_8_u32_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_write_packed_16_u8_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_write_packed_16_u8_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_write_packed_16_u8_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_write_packed_16_u16_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_write_packed_16_u16_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_write_packed_16_u16_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_write_nibble_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_NIBBLE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_write_nibble_16_u8_0001_neon, { .uop = SWS_UOP_WRITE_NIBBLE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_write_bit_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_BIT, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000001_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000002_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000003_8_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000003_16_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000003_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_permute_000000000010_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000010_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000010_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000013_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000013_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000013_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_permute_000000000020_8_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0100 }) -ENTRY(ff_sws_permute_000000000020_32_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0100 }) -ENTRY(ff_sws_permute_000000000030_8_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_permute_000000000030_16_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_permute_000000000030_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_permute_000000000031_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_permute_000000000130_32_u8_1001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1001 }) -ENTRY(ff_sws_permute_000000000310_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_000000000310_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_000000000320_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_000000001031_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {3, 1, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1010 }) -ENTRY(ff_sws_permute_000000001301_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {0, 1, 0, 0, 0, 0}, .src = {1, 3, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_000000002032_8_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {3, 2, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1100 }) -ENTRY(ff_sws_permute_000000002032_32_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {3, 2, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1100 }) -ENTRY(ff_sws_permute_000000002302_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {0, 2, 0, 0, 0, 0}, .src = {2, 3, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_000000002302_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {0, 2, 0, 0, 0, 0}, .src = {2, 3, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_000000102132_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_000000102132_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_000000102132_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_000000132102_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {0, 2, 1, 0, 0, 0}, .src = {2, 1, 3, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_0000001f01f0_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_0000001f01f0_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_0000001f01f0_32_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_permute_000000201231_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 1, 2, 0, 0, 0}, .src = {1, 2, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_000000201231_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 1, 2, 0, 0, 0}, .src = {1, 2, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_000000231201_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_000000231201_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_000000231201_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_0000002f02f0_8_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_0000002f02f0_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_0000002f02f0_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_permute_0000002f12f1_8_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_permute_0000002f12f1_16_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_permute_0000002f12f1_32_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_permute_0000003f13f1_8_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1010 }) -ENTRY(ff_sws_permute_0000003f13f1_16_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1010 }) -ENTRY(ff_sws_permute_0000003f13f1_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1010 }) -ENTRY(ff_sws_permute_00001f2102f0_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00001f2102f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00001f2102f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f1201f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f1201f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f12f103_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f12f103_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f12f103_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_permute_00002f12f130_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_00002f12f130_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_00002f12f130_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_00002f3203f0_8_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 3, 2, 0, 0}, .src = {0, 3, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1101 }) -ENTRY(ff_sws_permute_00002f3203f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 3, 2, 0, 0}, .src = {0, 3, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1101 }) -ENTRY(ff_sws_permute_00003f2302f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 2, 3, 0, 0}, .src = {0, 2, 3, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1101 }) -ENTRY(ff_sws_permute_00003f2312f1_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 1, 2, 3, 0, 0}, .src = {1, 2, 3, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_00003f2312f1_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 1, 2, 3, 0, 0}, .src = {1, 2, 3, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_permute_001f213203f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_001f213203f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_001f213203f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_002f123103f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 1, 2, 0}, .src = {0, 3, 1, 2, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_002f123103f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 1, 2, 0}, .src = {0, 3, 1, 2, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_003f231201f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 1, 2, 3, 0}, .src = {0, 1, 2, 3, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_003f231201f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 1, 2, 3, 0}, .src = {0, 1, 2, 3, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_2f12f13f03f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_2f12f13f03f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_permute_2f12f13f03f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_copy_000000002010_8_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_copy_000000002010_16_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_copy_000000002010_32_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_copy_000000103120_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_000000103120_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_000000103120_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_000000302010_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_000000302010_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_000000302010_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_copy_001f01f03020_8_u8_1111_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 5, .dst = {2, 3, -1, 0, 1, 0}, .src = {0, 0, 0, 1, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_copy_001f01f03020_16_u8_1111_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 5, .dst = {2, 3, -1, 0, 1, 0}, .src = {0, 0, 0, 1, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_swap_bytes_8_u16_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_swap_bytes_8_u16_0010_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0010 }) -ENTRY(ff_sws_swap_bytes_8_u16_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_swap_bytes_8_u16_0111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_swap_bytes_8_u16_1001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1001 }) -ENTRY(ff_sws_swap_bytes_8_u16_1110_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_swap_bytes_8_u16_1111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_swap_bytes_8_u32_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0001 }) -ENTRY(ff_sws_swap_bytes_8_u32_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0011 }) -ENTRY(ff_sws_swap_bytes_8_u32_0111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_swap_bytes_8_u32_1001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1001 }) -ENTRY(ff_sws_swap_bytes_8_u32_1110_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1110 }) -ENTRY(ff_sws_swap_bytes_8_u32_1111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_swap_bytes_16_u16_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_swap_bytes_16_u16_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_swap_bytes_16_u16_0111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_swap_bytes_16_u16_1110_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_swap_bytes_16_u16_1111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_expand_pair_16_u8_0001_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_expand_pair_16_u8_0011_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_expand_pair_16_u8_0111_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_expand_pair_16_u8_1110_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_expand_pair_16_u8_1111_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_to_u8_8_f32_0001_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_to_u8_8_f32_0011_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0011 }) -ENTRY(ff_sws_to_u8_8_f32_0111_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_to_u8_8_f32_1001_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_to_u8_8_f32_1110_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_to_u8_8_f32_1111_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_to_u8_16_u16_0111_neon, { .uop = SWS_UOP_TO_U8, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_to_u16_8_u8_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_to_u16_8_u32_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_to_u16_8_u32_1110_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1110 }) -ENTRY(ff_sws_to_u16_8_f32_0001_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_to_u16_8_f32_0011_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0011 }) -ENTRY(ff_sws_to_u16_8_f32_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_to_u16_8_f32_1001_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_to_u16_8_f32_1110_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_to_u16_8_f32_1111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_to_u16_16_u8_0001_neon, { .uop = SWS_UOP_TO_U16, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_to_u16_16_u8_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_to_u16_16_u8_1110_neon, { .uop = SWS_UOP_TO_U16, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_to_u32_8_u8_0001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_to_u32_8_u8_0111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_to_u32_8_u16_0001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_to_u32_8_u16_0111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_to_u32_8_f32_0001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_to_u32_8_f32_0111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_to_u32_8_f32_1001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_to_u32_8_f32_1110_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_to_u32_8_f32_1111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_to_f32_8_u8_0001_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_to_f32_8_u8_0010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_to_f32_8_u8_0011_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_to_f32_8_u8_0100_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0100 }) -ENTRY(ff_sws_to_f32_8_u8_0111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_to_f32_8_u8_1010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1010 }) -ENTRY(ff_sws_to_f32_8_u8_1100_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1100 }) -ENTRY(ff_sws_to_f32_8_u8_1110_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1110 }) -ENTRY(ff_sws_to_f32_8_u8_1111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1111 }) -ENTRY(ff_sws_to_f32_8_u16_0001_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_to_f32_8_u16_0010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0010 }) -ENTRY(ff_sws_to_f32_8_u16_0011_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_to_f32_8_u16_0111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_to_f32_8_u16_1110_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_to_f32_8_u16_1111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1111 }) -ENTRY(ff_sws_to_f32_8_u32_0010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0010 }) -ENTRY(ff_sws_to_f32_8_u32_0100_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0100 }) -ENTRY(ff_sws_to_f32_8_u32_0111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_to_f32_8_u32_1110_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1110 }) -ENTRY(ff_sws_scale_8_u32_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0001 }) -ENTRY(ff_sws_scale_8_u32_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_scale_8_f32_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_scale_8_f32_0011_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0011 }) -ENTRY(ff_sws_scale_8_f32_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_scale_8_f32_1110_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_scale_8_f32_1111_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_scale_16_u8_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_scale_16_u8_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_scale_16_u16_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_scale_16_u16_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_min_8_f32_0001_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_min_8_f32_0011_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0011 }) -ENTRY(ff_sws_min_8_f32_0111_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_min_8_f32_1001_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_min_8_f32_1110_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_min_8_f32_1111_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_max_8_f32_0001_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_max_8_f32_0011_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0011 }) -ENTRY(ff_sws_max_8_f32_0111_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_max_8_f32_1001_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_max_8_f32_1111_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_unpack_0121_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0121_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0233_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0233_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0332_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0332_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0444_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0444_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0555_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0555_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0565_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_0565_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_2aaa_8_u32_0010_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0010 }) -ENTRY(ff_sws_unpack_2aaa_8_u32_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_unpack_aaa2_8_u32_0100_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0100 }) -ENTRY(ff_sws_unpack_aaa2_8_u32_1110_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1110 }) -ENTRY(ff_sws_pack_0121_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0121_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0233_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0233_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0332_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0332_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0444_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0444_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0555_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0555_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0565_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_0565_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_pack_2aaa_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_pack_aaa2_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1111 }) -ENTRY(ff_sws_lshift_1_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_1_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_1_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_2_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_2_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_2_8_u32_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_2_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_2_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_3_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 3 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_4_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_lshift_4_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_4_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_4_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_lshift_4_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_4_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_5_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 5 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_6_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_lshift_6_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_6_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_6_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_lshift_6_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_6_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_lshift_7_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 7 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_8_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_lshift_8_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1110 }) -ENTRY(ff_sws_rshift_4_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_rshift_4_8_u16_0010_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0010 }) -ENTRY(ff_sws_rshift_4_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_rshift_4_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_rshift_6_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_rshift_6_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_rshift_6_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_clear_0fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_clear_0fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1011 }) -ENTRY(ff_sws_clear_0fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1000 }) -ENTRY(ff_sws_clear_0fff_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1101 }) -ENTRY(ff_sws_clear_0fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_clear_0fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1000 }) -ENTRY(ff_sws_clear_1fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_clear_1fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1011 }) -ENTRY(ff_sws_clear_1fff_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1101 }) -ENTRY(ff_sws_clear_1fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1000 }) -ENTRY(ff_sws_clear_1fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1000 }) -ENTRY(ff_sws_clear_1fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1000 }) -ENTRY(ff_sws_clear_ff1f_8_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x2, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_clear_ff1f_8_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x2, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0010 }) -ENTRY(ff_sws_clear_ff1f_16_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x2, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0010 }) -ENTRY(ff_sws_clear_ff1f_16_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x2, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0010 }) -ENTRY(ff_sws_clear_fff0_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x1 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff0_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x1 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff1_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff1_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1101 }) -ENTRY(ff_sws_clear_fff1_8_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff1_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1101 }) -ENTRY(ff_sws_clear_fff1_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff1_16_u8_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0111 }) -ENTRY(ff_sws_clear_fff1_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_clear_fff1_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_clear_ffff_8_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_clear_ffff_8_u8_0101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x0101 }) -ENTRY(ff_sws_clear_ffff_8_u8_1100_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1100 }) -ENTRY(ff_sws_clear_ffff_8_u16_1100_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1100 }) -ENTRY(ff_sws_clear_ffff_8_u32_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0001 }) -ENTRY(ff_sws_clear_ffff_8_u32_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0010 }) -ENTRY(ff_sws_clear_ffff_8_u32_0101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x0101 }) -ENTRY(ff_sws_clear_ffff_8_u32_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1000 }) -ENTRY(ff_sws_clear_ffff_8_u32_1010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1010 }) -ENTRY(ff_sws_clear_ffff_8_u32_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1011 }) -ENTRY(ff_sws_clear_ffff_8_u32_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1101 }) -ENTRY(ff_sws_clear_ffff_16_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0011 }) -ENTRY(ff_sws_clear_ffff_16_u8_0110_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x0110 }) -ENTRY(ff_sws_clear_ffff_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0001 }) -ENTRY(ff_sws_clear_ffff_16_u16_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0011 }) -ENTRY(ff_sws_clear_ffff_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x0111 }) -ENTRY(ff_sws_clear_ffff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1000 }) -ENTRY(ff_sws_linear_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xffff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfffe8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfffbf }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0010 }) -ENTRY(ff_sws_linear_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x421, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfadae }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfa118 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfa108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbffff }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1000 }) -ENTRY(ff_sws_linear_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_linear_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbfff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_linear_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_linear_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_linear_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xba108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_linear_fma_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_fma_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xffff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_fma_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfffe8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) -ENTRY(ff_sws_linear_fma_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfffbf }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0010 }) -ENTRY(ff_sws_linear_fma_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x421, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfadae }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfa118 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfa108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_linear_fma_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbffff }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1000 }) -ENTRY(ff_sws_linear_fma_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_linear_fma_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbfff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_linear_fma_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_linear_fma_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_linear_fma_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xba108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_0325_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {5, 2, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_032f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 2, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_dither_2305_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {5, 0, 3, 2}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_230f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 3, 2}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_dither_3000_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_302f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 2, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1110 }) -ENTRY(ff_sws_dither_3ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_dither_5023_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {3, 2, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_5032_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {2, 3, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_5230_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 3, 2, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1111 }) -ENTRY(ff_sws_dither_5ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1001 }) -ENTRY(ff_sws_dither_5fff_4_8_f32_1000_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1000 }) -ENTRY(ff_sws_dither_f023_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {3, 2, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_dither_f032_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {2, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_dither_f203_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {3, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_dither_f230_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 3, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_dither_f2f0_4_8_f32_0101_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0101 }) -ENTRY(ff_sws_dither_f2ff_4_8_f32_0100_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0100 }) -ENTRY(ff_sws_dither_f302_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {2, 0, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0111 }) -ENTRY(ff_sws_dither_ff30_4_8_f32_0011_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0011 }) -ENTRY(ff_sws_dither_ff3f_4_8_f32_0010_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0010 }) -ENTRY(ff_sws_dither_fff0_4_8_f32_0001_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x0001 }) +ENTRY(ff_sws_read_planar_8_u8_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_read_planar_8_u8_0011_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_read_planar_8_u8_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_read_planar_8_u8_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_read_planar_8_u16_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_read_planar_8_u16_0011_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_read_planar_8_u16_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_read_planar_8_u16_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_read_planar_8_u32_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1 }) +ENTRY(ff_sws_read_planar_8_u32_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_read_planar_8_u32_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) +ENTRY(ff_sws_read_planar_16_u8_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_read_planar_16_u8_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_read_planar_16_u8_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_read_planar_16_u16_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_read_planar_16_u16_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_read_planar_16_u16_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_read_packed_8_u8_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_read_packed_8_u8_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_read_packed_8_u8_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_read_packed_8_u16_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_read_packed_8_u16_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_read_packed_8_u16_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_read_packed_8_u32_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x3 }) +ENTRY(ff_sws_read_packed_8_u32_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_read_packed_8_u32_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) +ENTRY(ff_sws_read_packed_16_u8_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_read_packed_16_u8_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_read_packed_16_u8_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_read_packed_16_u16_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_read_packed_16_u16_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_read_packed_16_u16_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_read_nibble_8_u8_0001_neon, { .uop = SWS_UOP_READ_NIBBLE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_read_nibble_16_u8_0001_neon, { .uop = SWS_UOP_READ_NIBBLE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_read_bit_8_u8_0001_neon, { .uop = SWS_UOP_READ_BIT, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_read_bit_16_u8_0001_neon, { .uop = SWS_UOP_READ_BIT, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_write_planar_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_write_planar_8_u8_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_write_planar_8_u8_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_write_planar_8_u8_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_write_planar_8_u16_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_write_planar_8_u16_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_write_planar_8_u16_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_write_planar_8_u16_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_write_planar_8_u32_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1 }) +ENTRY(ff_sws_write_planar_8_u32_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_write_planar_8_u32_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) +ENTRY(ff_sws_write_planar_16_u8_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_write_planar_16_u8_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_write_planar_16_u8_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_write_planar_16_u8_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_write_planar_16_u16_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_write_planar_16_u16_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_write_planar_16_u16_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_write_planar_16_u16_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_write_packed_8_u8_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_write_packed_8_u8_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_write_packed_8_u8_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_write_packed_8_u16_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_write_packed_8_u16_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_write_packed_8_u16_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_write_packed_8_u32_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x3 }) +ENTRY(ff_sws_write_packed_8_u32_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_write_packed_8_u32_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) +ENTRY(ff_sws_write_packed_16_u8_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_write_packed_16_u8_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_write_packed_16_u8_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_write_packed_16_u16_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_write_packed_16_u16_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_write_packed_16_u16_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_write_nibble_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_NIBBLE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_write_nibble_16_u8_0001_neon, { .uop = SWS_UOP_WRITE_NIBBLE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_write_bit_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_BIT, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_permute_000000000001_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_permute_000000000002_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_permute_000000000003_8_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_permute_000000000003_16_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_permute_000000000003_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_permute_000000000010_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_permute_000000000010_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_permute_000000000010_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_permute_000000000013_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_permute_000000000013_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_permute_000000000013_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_permute_000000000020_8_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x4 }) +ENTRY(ff_sws_permute_000000000020_32_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x4 }) +ENTRY(ff_sws_permute_000000000030_8_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x8 }) +ENTRY(ff_sws_permute_000000000030_16_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x8 }) +ENTRY(ff_sws_permute_000000000030_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x8 }) +ENTRY(ff_sws_permute_000000000031_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x8 }) +ENTRY(ff_sws_permute_000000000130_32_u8_1001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x9 }) +ENTRY(ff_sws_permute_000000000310_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_permute_000000000310_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_permute_000000000320_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x5 }) +ENTRY(ff_sws_permute_000000001031_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {3, 1, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xa }) +ENTRY(ff_sws_permute_000000001301_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {0, 1, 0, 0, 0, 0}, .src = {1, 3, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_permute_000000002032_8_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {3, 2, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xc }) +ENTRY(ff_sws_permute_000000002032_32_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {3, 2, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xc }) +ENTRY(ff_sws_permute_000000002302_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {0, 2, 0, 0, 0, 0}, .src = {2, 3, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x5 }) +ENTRY(ff_sws_permute_000000002302_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {0, 2, 0, 0, 0, 0}, .src = {2, 3, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x5 }) +ENTRY(ff_sws_permute_000000102132_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_000000102132_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_000000102132_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_000000132102_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {0, 2, 1, 0, 0, 0}, .src = {2, 1, 3, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_0000001f01f0_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_permute_0000001f01f0_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_permute_0000001f01f0_32_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_permute_000000201231_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 1, 2, 0, 0, 0}, .src = {1, 2, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_000000201231_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 1, 2, 0, 0, 0}, .src = {1, 2, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_000000231201_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_000000231201_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_000000231201_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_0000002f02f0_8_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x5 }) +ENTRY(ff_sws_permute_0000002f02f0_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x5 }) +ENTRY(ff_sws_permute_0000002f02f0_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x5 }) +ENTRY(ff_sws_permute_0000002f12f1_8_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x6 }) +ENTRY(ff_sws_permute_0000002f12f1_16_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x6 }) +ENTRY(ff_sws_permute_0000002f12f1_32_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x6 }) +ENTRY(ff_sws_permute_0000003f13f1_8_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xa }) +ENTRY(ff_sws_permute_0000003f13f1_16_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xa }) +ENTRY(ff_sws_permute_0000003f13f1_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xa }) +ENTRY(ff_sws_permute_00001f2102f0_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_00001f2102f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_00001f2102f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_00002f1201f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_00002f1201f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_00002f12f103_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_00002f12f103_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_00002f12f103_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_00002f12f130_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_00002f12f130_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_00002f12f130_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_00002f3203f0_8_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 3, 2, 0, 0}, .src = {0, 3, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xd }) +ENTRY(ff_sws_permute_00002f3203f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 3, 2, 0, 0}, .src = {0, 3, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xd }) +ENTRY(ff_sws_permute_00003f2302f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 2, 3, 0, 0}, .src = {0, 2, 3, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xd }) +ENTRY(ff_sws_permute_00003f2312f1_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 1, 2, 3, 0, 0}, .src = {1, 2, 3, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_00003f2312f1_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 1, 2, 3, 0, 0}, .src = {1, 2, 3, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_001f213203f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_001f213203f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_001f213203f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_002f123103f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 1, 2, 0}, .src = {0, 3, 1, 2, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_002f123103f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 1, 2, 0}, .src = {0, 3, 1, 2, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_003f231201f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 1, 2, 3, 0}, .src = {0, 1, 2, 3, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_003f231201f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 1, 2, 3, 0}, .src = {0, 1, 2, 3, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_2f12f13f03f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_2f12f13f03f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_2f12f13f03f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_copy_000000002010_8_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x6 }) +ENTRY(ff_sws_copy_000000002010_16_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x6 }) +ENTRY(ff_sws_copy_000000002010_32_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x6 }) +ENTRY(ff_sws_copy_000000103120_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_copy_000000103120_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_copy_000000103120_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_copy_000000302010_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_copy_000000302010_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_copy_000000302010_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_copy_001f01f03020_8_u8_1111_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 5, .dst = {2, 3, -1, 0, 1, 0}, .src = {0, 0, 0, 1, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_copy_001f01f03020_16_u8_1111_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 5, .dst = {2, 3, -1, 0, 1, 0}, .src = {0, 0, 0, 1, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_swap_bytes_8_u16_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_swap_bytes_8_u16_0010_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2 }) +ENTRY(ff_sws_swap_bytes_8_u16_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_swap_bytes_8_u16_0111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_swap_bytes_8_u16_1001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x9 }) +ENTRY(ff_sws_swap_bytes_8_u16_1110_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_swap_bytes_8_u16_1111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_swap_bytes_8_u32_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1 }) +ENTRY(ff_sws_swap_bytes_8_u32_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x3 }) +ENTRY(ff_sws_swap_bytes_8_u32_0111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_swap_bytes_8_u32_1001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x9 }) +ENTRY(ff_sws_swap_bytes_8_u32_1110_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xe }) +ENTRY(ff_sws_swap_bytes_8_u32_1111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) +ENTRY(ff_sws_swap_bytes_16_u16_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_swap_bytes_16_u16_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_swap_bytes_16_u16_0111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_swap_bytes_16_u16_1110_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_swap_bytes_16_u16_1111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_expand_pair_16_u8_0001_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_expand_pair_16_u8_0011_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_expand_pair_16_u8_0111_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_expand_pair_16_u8_1110_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_expand_pair_16_u8_1111_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_to_u8_8_f32_0001_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_to_u8_8_f32_0011_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) +ENTRY(ff_sws_to_u8_8_f32_0111_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_to_u8_8_f32_1001_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_to_u8_8_f32_1110_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) +ENTRY(ff_sws_to_u8_8_f32_1111_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_to_u8_16_u16_0111_neon, { .uop = SWS_UOP_TO_U8, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_to_u16_8_u8_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_to_u16_8_u32_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_to_u16_8_u32_1110_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xe }) +ENTRY(ff_sws_to_u16_8_f32_0001_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_to_u16_8_f32_0011_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) +ENTRY(ff_sws_to_u16_8_f32_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_to_u16_8_f32_1001_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_to_u16_8_f32_1110_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) +ENTRY(ff_sws_to_u16_8_f32_1111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_to_u16_16_u8_0001_neon, { .uop = SWS_UOP_TO_U16, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_to_u16_16_u8_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_to_u16_16_u8_1110_neon, { .uop = SWS_UOP_TO_U16, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_to_u32_8_u8_0001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_to_u32_8_u8_0111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_to_u32_8_u16_0001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_to_u32_8_u16_0111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_to_u32_8_f32_0001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_to_u32_8_f32_0111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_to_u32_8_f32_1001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_to_u32_8_f32_1110_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) +ENTRY(ff_sws_to_u32_8_f32_1111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_to_f32_8_u8_0001_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_to_f32_8_u8_0010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_to_f32_8_u8_0011_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_to_f32_8_u8_0100_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x4 }) +ENTRY(ff_sws_to_f32_8_u8_0111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_to_f32_8_u8_1010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xa }) +ENTRY(ff_sws_to_f32_8_u8_1100_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xc }) +ENTRY(ff_sws_to_f32_8_u8_1110_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_to_f32_8_u8_1111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_to_f32_8_u16_0001_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_to_f32_8_u16_0010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2 }) +ENTRY(ff_sws_to_f32_8_u16_0011_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_to_f32_8_u16_0111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_to_f32_8_u16_1110_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_to_f32_8_u16_1111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_to_f32_8_u32_0010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x2 }) +ENTRY(ff_sws_to_f32_8_u32_0100_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x4 }) +ENTRY(ff_sws_to_f32_8_u32_0111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_to_f32_8_u32_1110_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xe }) +ENTRY(ff_sws_scale_8_u32_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1 }) +ENTRY(ff_sws_scale_8_u32_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_scale_8_f32_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_scale_8_f32_0011_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) +ENTRY(ff_sws_scale_8_f32_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_scale_8_f32_1110_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) +ENTRY(ff_sws_scale_8_f32_1111_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_scale_16_u8_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_scale_16_u8_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_scale_16_u16_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_scale_16_u16_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_min_8_f32_0001_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_min_8_f32_0011_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) +ENTRY(ff_sws_min_8_f32_0111_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_min_8_f32_1001_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_min_8_f32_1110_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) +ENTRY(ff_sws_min_8_f32_1111_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_max_8_f32_0001_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_max_8_f32_0011_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) +ENTRY(ff_sws_max_8_f32_0111_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_max_8_f32_1001_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_max_8_f32_1111_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_unpack_0121_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0121_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0233_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0233_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0332_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0332_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0444_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0444_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0555_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0555_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0565_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0565_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_unpack_2aaa_8_u32_0010_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x2 }) +ENTRY(ff_sws_unpack_2aaa_8_u32_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_unpack_aaa2_8_u32_0100_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x4 }) +ENTRY(ff_sws_unpack_aaa2_8_u32_1110_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xe }) +ENTRY(ff_sws_pack_0121_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_pack_0121_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_pack_0233_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_pack_0233_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_pack_0332_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_pack_0332_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_pack_0444_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_pack_0444_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_pack_0555_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_pack_0555_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_pack_0565_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_pack_0565_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_pack_2aaa_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) +ENTRY(ff_sws_pack_aaa2_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) +ENTRY(ff_sws_lshift_1_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_1_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_1_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_lshift_2_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_2_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_lshift_2_8_u32_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_lshift_2_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_2_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_lshift_3_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 3 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_4_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_lshift_4_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_4_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_lshift_4_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_lshift_4_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_4_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_lshift_5_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 5 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_6_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_lshift_6_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_6_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_lshift_6_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_lshift_6_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_6_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_lshift_7_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 7 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_8_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_8_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_rshift_4_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_rshift_4_8_u16_0010_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2 }) +ENTRY(ff_sws_rshift_4_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_rshift_4_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_rshift_6_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_rshift_6_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_rshift_6_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_clear_0fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x8 }) +ENTRY(ff_sws_clear_0fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xb }) +ENTRY(ff_sws_clear_0fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x8 }) +ENTRY(ff_sws_clear_0fff_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xd }) +ENTRY(ff_sws_clear_0fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x8 }) +ENTRY(ff_sws_clear_0fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x8 }) +ENTRY(ff_sws_clear_1fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x8 }) +ENTRY(ff_sws_clear_1fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xb }) +ENTRY(ff_sws_clear_1fff_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xd }) +ENTRY(ff_sws_clear_1fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x8 }) +ENTRY(ff_sws_clear_1fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x8 }) +ENTRY(ff_sws_clear_1fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x8 }) +ENTRY(ff_sws_clear_ff1f_8_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x2, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_clear_ff1f_8_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x2, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2 }) +ENTRY(ff_sws_clear_ff1f_16_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x2, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_clear_ff1f_16_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x2, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x2 }) +ENTRY(ff_sws_clear_fff0_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x1 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_clear_fff0_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x1 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_clear_fff1_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_clear_fff1_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xd }) +ENTRY(ff_sws_clear_fff1_8_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_clear_fff1_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xd }) +ENTRY(ff_sws_clear_fff1_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_clear_fff1_16_u8_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_clear_fff1_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_clear_fff1_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_clear_ffff_8_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_clear_ffff_8_u8_0101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x5 }) +ENTRY(ff_sws_clear_ffff_8_u8_1100_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xc }) +ENTRY(ff_sws_clear_ffff_8_u16_1100_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xc }) +ENTRY(ff_sws_clear_ffff_8_u32_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1 }) +ENTRY(ff_sws_clear_ffff_8_u32_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x2 }) +ENTRY(ff_sws_clear_ffff_8_u32_0101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x5 }) +ENTRY(ff_sws_clear_ffff_8_u32_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x8 }) +ENTRY(ff_sws_clear_ffff_8_u32_1010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xa }) +ENTRY(ff_sws_clear_ffff_8_u32_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xb }) +ENTRY(ff_sws_clear_ffff_8_u32_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xd }) +ENTRY(ff_sws_clear_ffff_16_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_clear_ffff_16_u8_0110_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x6 }) +ENTRY(ff_sws_clear_ffff_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_clear_ffff_16_u16_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_clear_ffff_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_clear_ffff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x8 }) +ENTRY(ff_sws_linear_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_linear_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xffff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_linear_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfffe8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_linear_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfffbf }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2 }) +ENTRY(ff_sws_linear_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x421, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfadae }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfa118 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfa108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbffff }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8 }) +ENTRY(ff_sws_linear_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_linear_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbfff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_linear_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_linear_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_linear_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xba108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_linear_fma_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_linear_fma_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xffff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_linear_fma_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfffe8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_linear_fma_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfffbf }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2 }) +ENTRY(ff_sws_linear_fma_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x421, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_fma_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_fma_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_fma_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfadae }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_fma_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfa118 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_fma_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfa108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_fma_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbffff }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8 }) +ENTRY(ff_sws_linear_fma_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_linear_fma_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbfff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_linear_fma_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_linear_fma_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_linear_fma_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xba108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_dither_0325_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {5, 2, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_dither_032f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 2, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) +ENTRY(ff_sws_dither_2305_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {5, 0, 3, 2}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_dither_230f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 3, 2}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) +ENTRY(ff_sws_dither_3000_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_dither_302f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 2, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) +ENTRY(ff_sws_dither_3ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_dither_5023_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {3, 2, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_dither_5032_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {2, 3, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_dither_5230_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 3, 2, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_dither_5ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_dither_5fff_4_8_f32_1000_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8 }) +ENTRY(ff_sws_dither_f023_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {3, 2, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_dither_f032_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {2, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_dither_f203_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {3, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_dither_f230_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 3, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_dither_f2f0_4_8_f32_0101_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x5 }) +ENTRY(ff_sws_dither_f2ff_4_8_f32_0100_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x4 }) +ENTRY(ff_sws_dither_f302_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {2, 0, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_dither_ff30_4_8_f32_0011_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) +ENTRY(ff_sws_dither_ff3f_4_8_f32_0010_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2 }) +ENTRY(ff_sws_dither_fff0_4_8_f32_0001_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) diff --git a/libswscale/aarch64/ops_impl.h b/libswscale/aarch64/ops_impl.h index 88f8d030f9..94198835d0 100644 --- a/libswscale/aarch64/ops_impl.h +++ b/libswscale/aarch64/ops_impl.h @@ -28,7 +28,16 @@ #include "libswscale/uops.h" /* Each nibble in the mask corresponds to one component. */ -typedef uint16_t SwsAArch64OpMask; +#define NIBBLE_GET(mask, idx) (((mask) >> ((idx) << 2)) & 0xf) +#define NIBBLE_SET(mask, idx, val) do { (mask) |= (((val) & 0xf) << ((idx) << 2)); } while (0) + +static inline uint16_t nibble_mask(SwsCompMask mask) +{ + uint16_t ret = 0; + for (int i = 0; i < 4; i++) + NIBBLE_SET(ret, i, !!(mask & SWS_COMP(i))); + return ret; +} /** * SwsAArch64OpImplParams describes the parameters for an SwsUOpType @@ -37,7 +46,7 @@ typedef uint16_t SwsAArch64OpMask; */ typedef struct SwsAArch64OpImplParams { SwsUOpType uop; - SwsAArch64OpMask mask; + SwsCompMask mask; SwsPixelType type; uint8_t block_size; union { @@ -50,17 +59,13 @@ typedef struct SwsAArch64OpImplParams { }; } SwsAArch64OpImplParams; -/* SwsAArch64OpMask-related helpers. */ - -#define MASK_GET(mask, idx) (((mask) >> ((idx) << 2)) & 0xf) -#define MASK_SET(mask, idx, val) do { (mask) |= (((val) & 0xf) << ((idx) << 2)); } while (0) - +/* SwsCompMask-related helpers. */ #define LOOP(mask, idx) \ for (int idx = 0; idx < 4; idx++) \ - if (MASK_GET(mask, idx)) + if (mask & SWS_COMP(idx)) #define LOOP_BWD(mask, idx) \ for (int idx = 3; idx >= 0; idx--) \ - if (MASK_GET(mask, idx)) + if (mask & SWS_COMP(idx)) #define LOOP_MASK(p, idx) LOOP(p->mask, idx) #define LOOP_MASK_BWD(p, idx) LOOP_BWD(p->mask, idx) diff --git a/libswscale/aarch64/ops_impl_conv.c b/libswscale/aarch64/ops_impl_conv.c index 49ae24ee68..4972822c89 100644 --- a/libswscale/aarch64/ops_impl_conv.c +++ b/libswscale/aarch64/ops_impl_conv.c @@ -38,18 +38,20 @@ static void swizzle_emit(SwsAArch64OpImplParams *out, uint8_t dst, uint8_t src) static void convert_swizzle_to_moves(const SwsOp *op, SwsAArch64OpImplParams *out) { - SwsAArch64OpMask swizzle = 0; - - MASK_SET(swizzle, 0, op->swizzle.in[0]); - MASK_SET(swizzle, 1, op->swizzle.in[1]); - MASK_SET(swizzle, 2, op->swizzle.in[2]); - MASK_SET(swizzle, 3, op->swizzle.in[3]); + SwsSwizzleOp swizzle = { + .in = { + op->swizzle.in[0], + op->swizzle.in[1], + op->swizzle.in[2], + op->swizzle.in[3], + } + }; /* Compute used vectors (src and dst) */ uint8_t src_used[4] = { 0 }; bool done[4] = { true, true, true, true }; LOOP(out->mask, dst) { - uint8_t src = MASK_GET(swizzle, dst); + uint8_t src = swizzle.in[dst]; src_used[src]++; done[dst] = false; } @@ -60,7 +62,7 @@ static void convert_swizzle_to_moves(const SwsOp *op, SwsAArch64OpImplParams *ou for (int dst = 0; dst < 4; dst++) { if (done[dst] || src_used[dst]) continue; - uint8_t src = MASK_GET(swizzle, dst); + uint8_t src = swizzle.in[dst]; swizzle_emit(out, dst, src); src_used[src]--; done[dst] = true; @@ -76,12 +78,12 @@ static void convert_swizzle_to_moves(const SwsOp *op, SwsAArch64OpImplParams *ou swizzle_emit(out, -1, dst); uint8_t cur_dst = dst; - uint8_t src = MASK_GET(swizzle, cur_dst); + uint8_t src = swizzle.in[cur_dst]; while (src != dst) { swizzle_emit(out, cur_dst, src); done[cur_dst] = true; cur_dst = src; - src = MASK_GET(swizzle, cur_dst); + src = swizzle.in[cur_dst]; } swizzle_emit(out, cur_dst, -1); @@ -107,7 +109,7 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, out->mask = 0; for (int i = 0; i < 4; i++) { if (SWS_OP_NEEDED(op, i)) - MASK_SET(out->mask, i, 1); + out->mask |= SWS_COMP(i); } out->type = op->type; @@ -157,14 +159,14 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, * enough. */ out->uop = SWS_UOP_PERMUTE; - SwsAArch64OpMask seen = 0; + SwsCompMask seen = 0; LOOP(out->mask, i) { uint8_t src = op->swizzle.in[i]; - if (MASK_GET(seen, src)) { + if (seen & SWS_COMP(src)) { out->uop = SWS_UOP_COPY; break; } - MASK_SET(seen, src, 1); + seen |= SWS_COMP(src); } break; } @@ -212,10 +214,10 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, case SWS_UOP_WRITE_PACKED: case SWS_UOP_WRITE_PLANAR: switch (op->rw.elems) { - case 1: out->mask = 0x0001; break; - case 2: out->mask = 0x0011; break; - case 3: out->mask = 0x0111; break; - case 4: out->mask = 0x1111; break; + case 1: out->mask = SWS_COMP_MASK(1, 0, 0, 0); break; + case 2: out->mask = SWS_COMP_MASK(1, 1, 0, 0); break; + case 3: out->mask = SWS_COMP_MASK(1, 1, 1, 0); break; + case 4: out->mask = SWS_COMP_MASK(1, 1, 1, 1); break; }; break; case SWS_UOP_PERMUTE: @@ -224,7 +226,7 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, out->mask = 0; for (int i = 0; i < 4; i++) { if (SWS_OP_NEEDED(op, i) && op->swizzle.in[i] != i) - MASK_SET(out->mask, i, 1); + out->mask |= SWS_COMP(i); } convert_swizzle_to_moves(op, out); /* The element size and type don't matter. */ @@ -238,7 +240,7 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, case SWS_UOP_PACK: out->mask = 0; for (int i = 0; i < 4 && op->pack.pattern[i]; i++) - MASK_SET(out->mask, i, 1); + out->mask |= SWS_COMP(i); for (int i = 0; i < 4; i++) out->pack.pattern[i] = op->pack.pattern[i]; break; @@ -250,7 +252,7 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, out->mask = 0; for (int i = 0; i < 4; i++) { if (SWS_COMP_TEST(op->clear.mask, i)) { - MASK_SET(out->mask, i, 1); + out->mask |= SWS_COMP(i); if (op->clear.value[i].num == 0) { out->clear.zero |= SWS_COMP(i); } else { @@ -272,7 +274,7 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, out->linear.zero |= SWS_MASK(i, j); continue; } - MASK_SET(out->mask, i, 1); + out->mask |= SWS_COMP(i); for (int j = 0; j < 5; j++) { const AVRational64 k = op->lin.m[i][j]; if (j < 4 && k.num == k.den) @@ -283,11 +285,10 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, } break; case SWS_UOP_DITHER: - out->mask = 0; - MASK_SET(out->mask, 0, op->dither.y_offset[0] >= 0); - MASK_SET(out->mask, 1, op->dither.y_offset[1] >= 0); - MASK_SET(out->mask, 2, op->dither.y_offset[2] >= 0); - MASK_SET(out->mask, 3, op->dither.y_offset[3] >= 0); + out->mask = SWS_COMP_MASK(op->dither.y_offset[0] >= 0, + op->dither.y_offset[1] >= 0, + op->dither.y_offset[2] >= 0, + op->dither.y_offset[3] >= 0); LOOP(out->mask, i) { out->dither.y_offset[i] = op->dither.y_offset[i]; } else { diff --git a/libswscale/tests/sws_ops_aarch64.c b/libswscale/tests/sws_ops_aarch64.c index 2fc54264b0..e3880cba81 100644 --- a/libswscale/tests/sws_ops_aarch64.c +++ b/libswscale/tests/sws_ops_aarch64.c @@ -45,9 +45,9 @@ static uint16_t clear_to_mask(const SwsClearUOp *clear) if (SWS_COMP_TEST(clear->zero, i)) { /* no-op */ } else if (SWS_COMP_TEST(clear->one, i)) { - MASK_SET(mask, i, 1); + NIBBLE_SET(mask, i, 1); } else { - MASK_SET(mask, i, 0xf); + NIBBLE_SET(mask, i, 0xf); } } return mask; @@ -69,7 +69,7 @@ static uint16_t pack_to_mask(const SwsPackUOp *pack) { uint16_t mask = 0; for (int i = 0; i < 4; i++) - MASK_SET(mask, i, pack->pattern[i]); + NIBBLE_SET(mask, i, pack->pattern[i]); return mask; } @@ -92,7 +92,7 @@ static uint16_t dither_to_mask(const SwsDitherUOp *dither) { uint16_t mask = 0; for (int i = 0; i < 4; i++) - MASK_SET(mask, i, dither->y_offset[i]); + NIBBLE_SET(mask, i, dither->y_offset[i]); return mask; } @@ -321,7 +321,7 @@ static void impl_func_name(AVBPrint *bp, const SwsAArch64OpImplParams *params) av_bprintf(bp, "_%04x_%u", dither_to_mask(¶ms->dither), params->dither.size_log2); break; } - av_bprintf(bp, "_%u_%s_%04x_neon", params->block_size, pixel_type_names[params->type], params->mask); + av_bprintf(bp, "_%u_%s_%04x_neon", params->block_size, pixel_type_names[params->type], nibble_mask(params->mask)); } static const char op_types[SWS_UOP_TYPE_NB][32] = { @@ -403,7 +403,7 @@ static void serialize_op(AVBPrint *bp, const SwsAArch64OpImplParams *params) params->dither.size_log2); break; } - av_bprintf(bp, ", .block_size = %u, .type = %s, .mask = 0x%04x })", params->block_size, pixel_types[params->type], params->mask); + av_bprintf(bp, ", .block_size = %u, .type = %s, .mask = 0x%x })", params->block_size, pixel_types[params->type], params->mask); } /* Serialize SwsAArch64OpImplParams for one function. */ -- 2.52.0 >From 779908c3fe23db73babd7932263e04fec662dd39 Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Wed, 17 Jun 2026 23:13:55 +0200 Subject: [PATCH 16/17] swscale/aarch64/ops: use SwsUOpParams for SwsAArch64OpImplParams's parameter fields This is one more step to eventually replace the parameter fields in SwsAArch64OpImplParams by generic structs from libswscale/uops.h. The function names and ordering in ops_entries.c is maintained to simplify the gradual move to uops.h. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops.c | 2 +- libswscale/aarch64/ops_asmgen.c | 44 +-- libswscale/aarch64/ops_entries.c | 488 ++++++++++++++--------------- libswscale/aarch64/ops_impl.h | 11 +- libswscale/aarch64/ops_impl_conv.c | 28 +- libswscale/tests/sws_ops_aarch64.c | 80 ++--- 6 files changed, 325 insertions(+), 328 deletions(-) diff --git a/libswscale/aarch64/ops.c b/libswscale/aarch64/ops.c index 1634cf2e49..6e1de6a458 100644 --- a/libswscale/aarch64/ops.c +++ b/libswscale/aarch64/ops.c @@ -86,7 +86,7 @@ static int aarch64_setup_linear(const SwsAArch64OpImplParams *p, for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j++) { const int jj = (j == 0) ? 4 : (j - 1); - if (!(p->linear.zero & SWS_MASK(i, jj))) + if (!(p->par.lin.zero & SWS_MASK(i, jj))) coeffs[i_coeff++] = (float) op->lin.m[i][jj].num / op->lin.m[i][jj].den; } } diff --git a/libswscale/aarch64/ops_asmgen.c b/libswscale/aarch64/ops_asmgen.c index 7fce6d2600..4698fddd26 100644 --- a/libswscale/aarch64/ops_asmgen.c +++ b/libswscale/aarch64/ops_asmgen.c @@ -645,8 +645,8 @@ static void swizzle_emit(SwsAArch64Context *s, int8_t dst, int8_t src) static void asmgen_op_move(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { - for (int i = 0; i < p->move.num_moves; i++) - swizzle_emit(s, p->move.dst[i], p->move.src[i]); + for (int i = 0; i < p->par.move.num_moves; i++) + swizzle_emit(s, p->par.move.dst[i], p->par.move.src[i]); } /*********************************************************************/ @@ -665,16 +665,16 @@ static void asmgen_op_unpack(SwsAArch64Context *s, const SwsAArch64OpImplParams uint8_t cur_vt = 0; const int offsets[4] = { - p->pack.pattern[3] + p->pack.pattern[2] + p->pack.pattern[1], - p->pack.pattern[3] + p->pack.pattern[2], - p->pack.pattern[3], + p->par.pack.pattern[3] + p->par.pack.pattern[2] + p->par.pack.pattern[1], + p->par.pack.pattern[3] + p->par.pack.pattern[2], + p->par.pack.pattern[3], 0 }; /* Generate masks. */ rasm_add_comment(r, "generate masks"); LOOP_MASK(p, i) { - uint32_t val = (1u << p->pack.pattern[i]) - 1; + uint32_t val = (1u << p->par.pack.pattern[i]) - 1; for (int j = 0; j < 4; j++) { if (mask_val[j] == val) { mask_val[i] = mask_val[j]; @@ -732,9 +732,9 @@ static void asmgen_op_pack(SwsAArch64Context *s, const SwsAArch64OpImplParams *p RasmOp *vh = s->vh; const int offsets[4] = { - p->pack.pattern[3] + p->pack.pattern[2] + p->pack.pattern[1], - p->pack.pattern[3] + p->pack.pattern[2], - p->pack.pattern[3], + p->par.pack.pattern[3] + p->par.pack.pattern[2] + p->par.pack.pattern[1], + p->par.pack.pattern[3] + p->par.pack.pattern[2], + p->par.pack.pattern[3], 0 }; SwsCompMask offset_mask = 0; @@ -765,7 +765,7 @@ static void asmgen_op_pack(SwsAArch64Context *s, const SwsAArch64OpImplParams *p static void asmgen_op_lshift(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { - uint8_t shift = p->shift.amount; + uint8_t shift = p->par.shift.amount; RasmContext *r = s->rctx; RasmOp *vl = s->vl; RasmOp *vh = s->vh; @@ -780,7 +780,7 @@ static void asmgen_op_lshift(SwsAArch64Context *s, const SwsAArch64OpImplParams static void asmgen_op_rshift(SwsAArch64Context *s, const SwsAArch64OpImplParams *p) { - uint8_t shift = p->shift.amount; + uint8_t shift = p->par.shift.amount; RasmContext *r = s->rctx; RasmOp *vl = s->vl; RasmOp *vh = s->vh; @@ -798,9 +798,9 @@ static void emit_clear(SwsAArch64Context *s, const SwsAArch64OpImplParams *p, { RasmContext *r = s->rctx; RasmOp clear_vec = s->vt[0]; - if (SWS_COMP_TEST(p->clear.zero, i)) { + if (SWS_COMP_TEST(p->par.clear.zero, i)) { i_movi(r, vx[i], IMM(0)); CMTF("%s[%u] = 0;", vx_str, i); - } else if (SWS_COMP_TEST(p->clear.one, i)) { + } else if (SWS_COMP_TEST(p->par.clear.one, i)) { if (p->block_size * ff_sws_pixel_type_size(p->type) == 8) { i_movi(r, v_8b (vx[i]), IMM(0xff)); } else { @@ -825,7 +825,7 @@ static void asmgen_op_clear(SwsAArch64Context *s, const SwsAArch64OpImplParams * bool load_priv = false; LOOP_MASK(p, i) { - if (!SWS_COMP_TEST(p->clear.zero, i) && !SWS_COMP_TEST(p->clear.one, i)) + if (!SWS_COMP_TEST(p->par.clear.zero, i) && !SWS_COMP_TEST(p->par.clear.one, i)) load_priv = true; } if (load_priv) { @@ -1095,7 +1095,7 @@ static void linear_pass(SwsAArch64Context *s, const SwsAArch64OpImplParams *p, for (int j = 0; j < 5; j++) { bool is_offset = (j == 0); int src_j = is_offset ? 4 : (j - 1); - if (p->linear.zero & SWS_MASK(i, src_j)) + if (p->par.lin.zero & SWS_MASK(i, src_j)) continue; RasmOp vsrc = src_vx[src_j]; uint8_t vc_i = i_coeff / 4; @@ -1105,7 +1105,7 @@ static void linear_pass(SwsAArch64Context *s, const SwsAArch64OpImplParams *p, if (first && is_offset) { i_dup (r, vx[i], vcoeff); CMTF("v%c[%u] = broadcast(vc[%u][%u]);", cvh, i, vc_i, vc_j); } else if (first && !is_offset) { - if (p->linear.one & SWS_MASK(i, src_j)) { + if (p->par.lin.one & SWS_MASK(i, src_j)) { i_mov16b(r, vx[i], vsrc); CMTF("v%c[%u] = vsrc[%u];", cvh, i, src_j); } else { i_fmul (r, vx[i], vsrc, vcoeff); CMTF("v%c[%u] = vsrc[%u] * vc[%u][%u];", cvh, i, src_j, vc_i, vc_j); @@ -1125,7 +1125,7 @@ static void linear_pass(SwsAArch64Context *s, const SwsAArch64OpImplParams *p, * to reduce the dependency chain. * There is no need to perform multiplications by 1. */ - if (!(p->linear.one & SWS_MASK(i, src_j))) { + if (!(p->par.lin.one & SWS_MASK(i, src_j))) { pre_mul = rasm_set_current_node(r, pre_mul); i_fmul(r, vtmp[vc_j], vsrc, vcoeff); CMTF("vtmp[%u] = vsrc[%u] * vc[%u][%u];", vc_j, src_j, vc_i, vc_j); pre_mul = rasm_set_current_node(r, pre_mul); @@ -1167,7 +1167,7 @@ static void asmgen_op_linear(SwsAArch64Context *s, const SwsAArch64OpImplParams for (int j = 0; j < 5; j++) { bool is_offset = (j == 0); int src_j = is_offset ? 4 : (j - 1); - if (p->linear.zero & SWS_MASK(i, src_j)) + if (p->par.lin.zero & SWS_MASK(i, src_j)) continue; if (!is_offset && overwritten[src_j]) save_mask |= SWS_COMP(src_j); @@ -1216,10 +1216,10 @@ static void asmgen_op_dither(SwsAArch64Context *s, const SwsAArch64OpImplParams /* Very cheap bucket sort. */ int max_offset = 0; LOOP_MASK(p, i) - max_offset = FFMAX(max_offset, p->dither.y_offset[i]); + max_offset = FFMAX(max_offset, p->par.dither.y_offset[i]); for (int y_off = 0; y_off <= max_offset; y_off++) { LOOP_MASK(p, i) { - if (p->dither.y_offset[i] == y_off) + if (p->par.dither.y_offset[i] == y_off) sorted[n_comps++] = i; } } @@ -1248,7 +1248,7 @@ static void asmgen_op_dither(SwsAArch64Context *s, const SwsAArch64OpImplParams * lsb = log2(block_size) + log2(sizeof(float)) */ const int block_size_log2 = (p->block_size == 16) ? 4 : 3; - const int dither_size_log2 = p->dither.size_log2; + const int dither_size_log2 = p->par.dither.size_log2; const int sizeof_float_log2 = 2; if (dither_size_log2 != block_size_log2) { RasmOp lsb = IMM(block_size_log2 + sizeof_float_log2); @@ -1261,7 +1261,7 @@ static void asmgen_op_dither(SwsAArch64Context *s, const SwsAArch64OpImplParams int prev_i = 0; for (int sorted_i = 0; sorted_i < n_comps; sorted_i++) { int i = sorted[sorted_i]; - uint8_t y_off = p->dither.y_offset[i]; + uint8_t y_off = p->par.dither.y_offset[i]; bool do_load = (y_off != last_y_off); if (last_y_off < 0) { diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index 976a91481f..2c226edf0e 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -76,91 +76,91 @@ ENTRY(ff_sws_write_packed_16_u16_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .bloc ENTRY(ff_sws_write_nibble_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_NIBBLE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) ENTRY(ff_sws_write_nibble_16_u8_0001_neon, { .uop = SWS_UOP_WRITE_NIBBLE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) ENTRY(ff_sws_write_bit_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_BIT, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_permute_000000000001_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_permute_000000000002_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_permute_000000000003_8_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_permute_000000000003_16_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_permute_000000000003_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_permute_000000000010_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_permute_000000000010_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_permute_000000000010_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_permute_000000000013_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_permute_000000000013_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_permute_000000000013_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_permute_000000000020_8_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x4 }) -ENTRY(ff_sws_permute_000000000020_32_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x4 }) -ENTRY(ff_sws_permute_000000000030_8_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x8 }) -ENTRY(ff_sws_permute_000000000030_16_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x8 }) -ENTRY(ff_sws_permute_000000000030_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x8 }) -ENTRY(ff_sws_permute_000000000031_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x8 }) -ENTRY(ff_sws_permute_000000000130_32_u8_1001_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x9 }) -ENTRY(ff_sws_permute_000000000310_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_permute_000000000310_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_permute_000000000320_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x5 }) -ENTRY(ff_sws_permute_000000001031_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {3, 1, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xa }) -ENTRY(ff_sws_permute_000000001301_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {0, 1, 0, 0, 0, 0}, .src = {1, 3, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_permute_000000002032_8_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {3, 2, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xc }) -ENTRY(ff_sws_permute_000000002032_32_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {3, 2, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xc }) -ENTRY(ff_sws_permute_000000002302_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {0, 2, 0, 0, 0, 0}, .src = {2, 3, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x5 }) -ENTRY(ff_sws_permute_000000002302_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 2, .dst = {0, 2, 0, 0, 0, 0}, .src = {2, 3, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x5 }) -ENTRY(ff_sws_permute_000000102132_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_000000102132_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_000000102132_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_000000132102_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {0, 2, 1, 0, 0, 0}, .src = {2, 1, 3, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_0000001f01f0_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_permute_0000001f01f0_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_permute_0000001f01f0_32_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_permute_000000201231_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 1, 2, 0, 0, 0}, .src = {1, 2, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_000000201231_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {3, 1, 2, 0, 0, 0}, .src = {1, 2, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_000000231201_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_000000231201_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_000000231201_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_0000002f02f0_8_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x5 }) -ENTRY(ff_sws_permute_0000002f02f0_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x5 }) -ENTRY(ff_sws_permute_0000002f02f0_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x5 }) -ENTRY(ff_sws_permute_0000002f12f1_8_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x6 }) -ENTRY(ff_sws_permute_0000002f12f1_16_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x6 }) -ENTRY(ff_sws_permute_0000002f12f1_32_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x6 }) -ENTRY(ff_sws_permute_0000003f13f1_8_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xa }) -ENTRY(ff_sws_permute_0000003f13f1_16_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xa }) -ENTRY(ff_sws_permute_0000003f13f1_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xa }) -ENTRY(ff_sws_permute_00001f2102f0_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_00001f2102f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_00001f2102f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_00002f1201f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_00002f1201f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_00002f12f103_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_00002f12f103_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_00002f12f103_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_00002f12f130_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_00002f12f130_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_00002f12f130_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_00002f3203f0_8_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 3, 2, 0, 0}, .src = {0, 3, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xd }) -ENTRY(ff_sws_permute_00002f3203f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 3, 2, 0, 0}, .src = {0, 3, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xd }) -ENTRY(ff_sws_permute_00003f2302f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 0, 2, 3, 0, 0}, .src = {0, 2, 3, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xd }) -ENTRY(ff_sws_permute_00003f2312f1_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 1, 2, 3, 0, 0}, .src = {1, 2, 3, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_00003f2312f1_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 4, .dst = {-1, 1, 2, 3, 0, 0}, .src = {1, 2, 3, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_001f213203f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_001f213203f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_001f213203f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_002f123103f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 1, 2, 0}, .src = {0, 3, 1, 2, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_002f123103f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 3, 1, 2, 0}, .src = {0, 3, 1, 2, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_003f231201f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 1, 2, 3, 0}, .src = {0, 1, 2, 3, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_003f231201f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 5, .dst = {-1, 0, 1, 2, 3, 0}, .src = {0, 1, 2, 3, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_2f12f13f03f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_2f12f13f03f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_2f12f13f03f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_copy_000000002010_8_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x6 }) -ENTRY(ff_sws_copy_000000002010_16_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x6 }) -ENTRY(ff_sws_copy_000000002010_32_u8_0110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x6 }) -ENTRY(ff_sws_copy_000000103120_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_copy_000000103120_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_copy_000000103120_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_copy_000000302010_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_copy_000000302010_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_copy_000000302010_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_copy_001f01f03020_8_u8_1111_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 5, .dst = {2, 3, -1, 0, 1, 0}, .src = {0, 0, 0, 1, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_copy_001f01f03020_16_u8_1111_neon, { .uop = SWS_UOP_COPY, .move = { .num_moves = 5, .dst = {2, 3, -1, 0, 1, 0}, .src = {0, 0, 0, 1, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_000000000001_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_permute_000000000002_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_permute_000000000003_8_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_permute_000000000003_16_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_permute_000000000003_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_permute_000000000010_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_permute_000000000010_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_permute_000000000010_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_permute_000000000013_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_permute_000000000013_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_permute_000000000013_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_permute_000000000020_8_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x4 }) +ENTRY(ff_sws_permute_000000000020_32_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x4 }) +ENTRY(ff_sws_permute_000000000030_8_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x8 }) +ENTRY(ff_sws_permute_000000000030_16_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x8 }) +ENTRY(ff_sws_permute_000000000030_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x8 }) +ENTRY(ff_sws_permute_000000000031_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x8 }) +ENTRY(ff_sws_permute_000000000130_32_u8_1001_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x9 }) +ENTRY(ff_sws_permute_000000000310_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_permute_000000000310_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_permute_000000000320_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x5 }) +ENTRY(ff_sws_permute_000000001031_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {3, 1, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xa }) +ENTRY(ff_sws_permute_000000001301_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {0, 1, 0, 0, 0, 0}, .src = {1, 3, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_permute_000000002032_8_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {3, 2, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xc }) +ENTRY(ff_sws_permute_000000002032_32_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {3, 2, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xc }) +ENTRY(ff_sws_permute_000000002302_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {0, 2, 0, 0, 0, 0}, .src = {2, 3, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x5 }) +ENTRY(ff_sws_permute_000000002302_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {0, 2, 0, 0, 0, 0}, .src = {2, 3, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x5 }) +ENTRY(ff_sws_permute_000000102132_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_000000102132_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_000000102132_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_000000132102_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {0, 2, 1, 0, 0, 0}, .src = {2, 1, 3, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_0000001f01f0_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_permute_0000001f01f0_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_permute_0000001f01f0_32_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_permute_000000201231_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {3, 1, 2, 0, 0, 0}, .src = {1, 2, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_000000201231_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {3, 1, 2, 0, 0, 0}, .src = {1, 2, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_000000231201_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_000000231201_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_000000231201_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_0000002f02f0_8_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x5 }) +ENTRY(ff_sws_permute_0000002f02f0_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x5 }) +ENTRY(ff_sws_permute_0000002f02f0_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x5 }) +ENTRY(ff_sws_permute_0000002f12f1_8_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x6 }) +ENTRY(ff_sws_permute_0000002f12f1_16_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x6 }) +ENTRY(ff_sws_permute_0000002f12f1_32_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x6 }) +ENTRY(ff_sws_permute_0000003f13f1_8_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xa }) +ENTRY(ff_sws_permute_0000003f13f1_16_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xa }) +ENTRY(ff_sws_permute_0000003f13f1_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xa }) +ENTRY(ff_sws_permute_00001f2102f0_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_00001f2102f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_00001f2102f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_00002f1201f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 0, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_00002f1201f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 0, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_00002f12f103_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_00002f12f103_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_00002f12f103_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_permute_00002f12f130_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_00002f12f130_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_00002f12f130_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_00002f3203f0_8_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 0, 3, 2, 0, 0}, .src = {0, 3, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xd }) +ENTRY(ff_sws_permute_00002f3203f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 0, 3, 2, 0, 0}, .src = {0, 3, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xd }) +ENTRY(ff_sws_permute_00003f2302f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 0, 2, 3, 0, 0}, .src = {0, 2, 3, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xd }) +ENTRY(ff_sws_permute_00003f2312f1_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 1, 2, 3, 0, 0}, .src = {1, 2, 3, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_00003f2312f1_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 1, 2, 3, 0, 0}, .src = {1, 2, 3, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_permute_001f213203f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_001f213203f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_001f213203f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_002f123103f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 5, .dst = {-1, 0, 3, 1, 2, 0}, .src = {0, 3, 1, 2, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_002f123103f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 5, .dst = {-1, 0, 3, 1, 2, 0}, .src = {0, 3, 1, 2, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_003f231201f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 5, .dst = {-1, 0, 1, 2, 3, 0}, .src = {0, 1, 2, 3, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_003f231201f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 5, .dst = {-1, 0, 1, 2, 3, 0}, .src = {0, 1, 2, 3, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_2f12f13f03f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_2f12f13f03f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_permute_2f12f13f03f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_copy_000000002010_8_u8_0110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x6 }) +ENTRY(ff_sws_copy_000000002010_16_u8_0110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x6 }) +ENTRY(ff_sws_copy_000000002010_32_u8_0110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x6 }) +ENTRY(ff_sws_copy_000000103120_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_copy_000000103120_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_copy_000000103120_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_copy_000000302010_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_copy_000000302010_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_copy_000000302010_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_copy_001f01f03020_8_u8_1111_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 5, .dst = {2, 3, -1, 0, 1, 0}, .src = {0, 0, 0, 1, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_copy_001f01f03020_16_u8_1111_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 5, .dst = {2, 3, -1, 0, 1, 0}, .src = {0, 0, 0, 1, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) ENTRY(ff_sws_swap_bytes_8_u16_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) ENTRY(ff_sws_swap_bytes_8_u16_0010_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2 }) ENTRY(ff_sws_swap_bytes_8_u16_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) @@ -253,162 +253,162 @@ ENTRY(ff_sws_max_8_f32_0011_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = ENTRY(ff_sws_max_8_f32_0111_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) ENTRY(ff_sws_max_8_f32_1001_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) ENTRY(ff_sws_max_8_f32_1111_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_unpack_0121_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0121_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0233_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0233_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0332_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0332_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0444_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0444_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0555_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0555_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0565_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0565_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_unpack_2aaa_8_u32_0010_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x2 }) -ENTRY(ff_sws_unpack_2aaa_8_u32_0111_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) -ENTRY(ff_sws_unpack_aaa2_8_u32_0100_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x4 }) -ENTRY(ff_sws_unpack_aaa2_8_u32_1110_neon, { .uop = SWS_UOP_UNPACK, .pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xe }) -ENTRY(ff_sws_pack_0121_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_pack_0121_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {1, 2, 1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_pack_0233_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_pack_0233_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {3, 3, 2, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_pack_0332_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_pack_0332_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {2, 3, 3, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_pack_0444_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_pack_0444_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {4, 4, 4, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_pack_0555_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_pack_0555_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 5, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_pack_0565_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_pack_0565_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {5, 6, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_pack_2aaa_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) -ENTRY(ff_sws_pack_aaa2_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) -ENTRY(ff_sws_lshift_1_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_1_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_1_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 1 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_lshift_2_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_2_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_lshift_2_8_u32_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) -ENTRY(ff_sws_lshift_2_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_2_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 2 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_lshift_3_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 3 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_4_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_lshift_4_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_4_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_lshift_4_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_lshift_4_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_4_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_lshift_5_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 5 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_6_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_lshift_6_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_6_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_lshift_6_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_lshift_6_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_6_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_lshift_7_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 7 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_8_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_8_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .shift = { .amount = 8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_rshift_4_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_rshift_4_8_u16_0010_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2 }) -ENTRY(ff_sws_rshift_4_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_rshift_4_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_rshift_6_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_rshift_6_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_rshift_6_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_clear_0fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x8 }) -ENTRY(ff_sws_clear_0fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xb }) -ENTRY(ff_sws_clear_0fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x8 }) -ENTRY(ff_sws_clear_0fff_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xd }) -ENTRY(ff_sws_clear_0fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x8 }) -ENTRY(ff_sws_clear_0fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x8 }) -ENTRY(ff_sws_clear_1fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x8 }) -ENTRY(ff_sws_clear_1fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xb }) -ENTRY(ff_sws_clear_1fff_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xd }) -ENTRY(ff_sws_clear_1fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x8 }) -ENTRY(ff_sws_clear_1fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x8 }) -ENTRY(ff_sws_clear_1fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x8, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x8 }) -ENTRY(ff_sws_clear_ff1f_8_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x2, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_clear_ff1f_8_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x2, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2 }) -ENTRY(ff_sws_clear_ff1f_16_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x2, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_clear_ff1f_16_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x2, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x2 }) -ENTRY(ff_sws_clear_fff0_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x1 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_clear_fff0_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x1 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_clear_fff1_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_clear_fff1_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xd }) -ENTRY(ff_sws_clear_fff1_8_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_clear_fff1_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xd }) -ENTRY(ff_sws_clear_fff1_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_clear_fff1_16_u8_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_clear_fff1_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_clear_fff1_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_clear_ffff_8_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_clear_ffff_8_u8_0101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x5 }) -ENTRY(ff_sws_clear_ffff_8_u8_1100_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xc }) -ENTRY(ff_sws_clear_ffff_8_u16_1100_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xc }) -ENTRY(ff_sws_clear_ffff_8_u32_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1 }) -ENTRY(ff_sws_clear_ffff_8_u32_0010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x2 }) -ENTRY(ff_sws_clear_ffff_8_u32_0101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x5 }) -ENTRY(ff_sws_clear_ffff_8_u32_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x8 }) -ENTRY(ff_sws_clear_ffff_8_u32_1010_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xa }) -ENTRY(ff_sws_clear_ffff_8_u32_1011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xb }) -ENTRY(ff_sws_clear_ffff_8_u32_1101_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xd }) -ENTRY(ff_sws_clear_ffff_16_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_clear_ffff_16_u8_0110_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x6 }) -ENTRY(ff_sws_clear_ffff_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_clear_ffff_16_u16_0011_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3 }) -ENTRY(ff_sws_clear_ffff_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_clear_ffff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x8 }) -ENTRY(ff_sws_linear_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_linear_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xffff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_linear_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfffe8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_linear_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfffbf }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2 }) -ENTRY(ff_sws_linear_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x421, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfadae }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfa118 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xfa108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbffff }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8 }) -ENTRY(ff_sws_linear_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_linear_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbfff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_linear_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_linear_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xbefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_linear_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .linear = { .one = 0x0, .zero = 0xba108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_linear_fma_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_linear_fma_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xffff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_linear_fma_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfffe8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_linear_fma_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfffbf }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2 }) -ENTRY(ff_sws_linear_fma_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x421, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_fma_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_fma_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_fma_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfadae }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_fma_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfa118 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_fma_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xfa108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_fma_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbffff }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8 }) -ENTRY(ff_sws_linear_fma_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_linear_fma_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbfff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_linear_fma_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_linear_fma_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xbefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_linear_fma_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .linear = { .one = 0x0, .zero = 0xba108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_dither_0325_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {5, 2, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_dither_032f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 2, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) -ENTRY(ff_sws_dither_2305_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {5, 0, 3, 2}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_dither_230f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 3, 2}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) -ENTRY(ff_sws_dither_3000_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_dither_302f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 2, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) -ENTRY(ff_sws_dither_3ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_dither_5023_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {3, 2, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_dither_5032_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {2, 3, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_dither_5230_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 3, 2, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_dither_5ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_dither_5fff_4_8_f32_1000_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8 }) -ENTRY(ff_sws_dither_f023_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {3, 2, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_dither_f032_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {2, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_dither_f203_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {3, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_dither_f230_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 3, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_dither_f2f0_4_8_f32_0101_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x5 }) -ENTRY(ff_sws_dither_f2ff_4_8_f32_0100_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x4 }) -ENTRY(ff_sws_dither_f302_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {2, 0, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_dither_ff30_4_8_f32_0011_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) -ENTRY(ff_sws_dither_ff3f_4_8_f32_0010_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2 }) -ENTRY(ff_sws_dither_fff0_4_8_f32_0001_neon, { .uop = SWS_UOP_DITHER, .dither = { .y_offset = {0, 0, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_unpack_0121_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {1, 2, 1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0121_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {1, 2, 1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0233_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {3, 3, 2, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0233_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {3, 3, 2, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0332_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {2, 3, 3, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0332_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {2, 3, 3, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0444_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {4, 4, 4, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0444_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {4, 4, 4, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0555_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {5, 5, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0555_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {5, 5, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0565_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {5, 6, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_unpack_0565_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {5, 6, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_unpack_2aaa_8_u32_0010_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x2 }) +ENTRY(ff_sws_unpack_2aaa_8_u32_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_unpack_aaa2_8_u32_0100_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x4 }) +ENTRY(ff_sws_unpack_aaa2_8_u32_1110_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xe }) +ENTRY(ff_sws_pack_0121_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {1, 2, 1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_pack_0121_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {1, 2, 1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_pack_0233_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {3, 3, 2, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_pack_0233_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {3, 3, 2, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_pack_0332_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {2, 3, 3, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_pack_0332_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {2, 3, 3, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_pack_0444_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {4, 4, 4, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_pack_0444_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {4, 4, 4, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_pack_0555_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {5, 5, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_pack_0555_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {5, 5, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_pack_0565_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {5, 6, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_pack_0565_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {5, 6, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_pack_2aaa_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) +ENTRY(ff_sws_pack_aaa2_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) +ENTRY(ff_sws_lshift_1_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 1 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_1_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 1 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_1_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 1 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_lshift_2_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_2_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_lshift_2_8_u32_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_lshift_2_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 2 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_2_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 2 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_lshift_3_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 3 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_4_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_lshift_4_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_4_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_lshift_4_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_lshift_4_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_4_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_lshift_5_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 5 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_6_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_lshift_6_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_6_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_lshift_6_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_lshift_6_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_6_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_lshift_7_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 7 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_8_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_lshift_8_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_rshift_4_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .par.shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_rshift_4_8_u16_0010_neon, { .uop = SWS_UOP_RSHIFT, .par.shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2 }) +ENTRY(ff_sws_rshift_4_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .par.shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_rshift_4_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .par.shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_rshift_6_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .par.shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_rshift_6_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .par.shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_rshift_6_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .par.shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_clear_0fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x8 }) +ENTRY(ff_sws_clear_0fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xb }) +ENTRY(ff_sws_clear_0fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x8 }) +ENTRY(ff_sws_clear_0fff_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xd }) +ENTRY(ff_sws_clear_0fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x8 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x8 }) +ENTRY(ff_sws_clear_0fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x8 }) +ENTRY(ff_sws_clear_1fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x8 }) +ENTRY(ff_sws_clear_1fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xb }) +ENTRY(ff_sws_clear_1fff_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xd }) +ENTRY(ff_sws_clear_1fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x8 }) +ENTRY(ff_sws_clear_1fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x8, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x8 }) +ENTRY(ff_sws_clear_1fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x8, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x8 }) +ENTRY(ff_sws_clear_ff1f_8_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x2, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_clear_ff1f_8_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x2, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2 }) +ENTRY(ff_sws_clear_ff1f_16_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x2, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_clear_ff1f_16_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x2, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x2 }) +ENTRY(ff_sws_clear_fff0_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x1 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_clear_fff0_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x1 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_clear_fff1_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_clear_fff1_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xd }) +ENTRY(ff_sws_clear_fff1_8_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_clear_fff1_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xd }) +ENTRY(ff_sws_clear_fff1_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_clear_fff1_16_u8_0111_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_clear_fff1_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_clear_fff1_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_clear_ffff_8_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_clear_ffff_8_u8_0101_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x5 }) +ENTRY(ff_sws_clear_ffff_8_u8_1100_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xc }) +ENTRY(ff_sws_clear_ffff_8_u16_1100_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xc }) +ENTRY(ff_sws_clear_ffff_8_u32_0001_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1 }) +ENTRY(ff_sws_clear_ffff_8_u32_0010_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x2 }) +ENTRY(ff_sws_clear_ffff_8_u32_0101_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x5 }) +ENTRY(ff_sws_clear_ffff_8_u32_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x8 }) +ENTRY(ff_sws_clear_ffff_8_u32_1010_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xa }) +ENTRY(ff_sws_clear_ffff_8_u32_1011_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xb }) +ENTRY(ff_sws_clear_ffff_8_u32_1101_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xd }) +ENTRY(ff_sws_clear_ffff_16_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_clear_ffff_16_u8_0110_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x6 }) +ENTRY(ff_sws_clear_ffff_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_clear_ffff_16_u16_0011_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_clear_ffff_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_clear_ffff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x8 }) +ENTRY(ff_sws_linear_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xfffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_linear_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xffff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_linear_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xfffe8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_linear_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xfffbf }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2 }) +ENTRY(ff_sws_linear_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x421, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xfefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xfadae }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xfa118 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xfa108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xbffff }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8 }) +ENTRY(ff_sws_linear_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xbffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_linear_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xbfff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_linear_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xbb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_linear_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xbefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_linear_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xba108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_linear_fma_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xfffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_linear_fma_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xffff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_linear_fma_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xfffe8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_linear_fma_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xfffbf }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2 }) +ENTRY(ff_sws_linear_fma_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x421, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_fma_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_fma_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xfefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_fma_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xfadae }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_fma_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xfa118 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_fma_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xfa108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_linear_fma_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xbffff }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8 }) +ENTRY(ff_sws_linear_fma_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xbffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_linear_fma_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xbfff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_linear_fma_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xbb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_linear_fma_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xbefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_linear_fma_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xba108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_dither_0325_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {5, 2, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_dither_032f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 2, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) +ENTRY(ff_sws_dither_2305_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {5, 0, 3, 2}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_dither_230f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 0, 3, 2}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) +ENTRY(ff_sws_dither_3000_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 0, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_dither_302f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 2, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) +ENTRY(ff_sws_dither_3ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 0, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_dither_5023_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {3, 2, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_dither_5032_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {2, 3, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_dither_5230_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 3, 2, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_dither_5ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 0, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_dither_5fff_4_8_f32_1000_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 0, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8 }) +ENTRY(ff_sws_dither_f023_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {3, 2, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_dither_f032_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {2, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_dither_f203_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {3, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_dither_f230_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 3, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_dither_f2f0_4_8_f32_0101_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x5 }) +ENTRY(ff_sws_dither_f2ff_4_8_f32_0100_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x4 }) +ENTRY(ff_sws_dither_f302_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {2, 0, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_dither_ff30_4_8_f32_0011_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) +ENTRY(ff_sws_dither_ff3f_4_8_f32_0010_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2 }) +ENTRY(ff_sws_dither_fff0_4_8_f32_0001_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 0, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) diff --git a/libswscale/aarch64/ops_impl.h b/libswscale/aarch64/ops_impl.h index 94198835d0..304b68e44c 100644 --- a/libswscale/aarch64/ops_impl.h +++ b/libswscale/aarch64/ops_impl.h @@ -49,14 +49,7 @@ typedef struct SwsAArch64OpImplParams { SwsCompMask mask; SwsPixelType type; uint8_t block_size; - union { - SwsShiftUOp shift; - SwsClearUOp clear; - SwsMoveUOp move; - SwsPackUOp pack; - SwsLinearUOp linear; - SwsDitherUOp dither; - }; + SwsUOpParams par; } SwsAArch64OpImplParams; /* SwsCompMask-related helpers. */ @@ -75,7 +68,7 @@ static inline int linear_num_vregs(const SwsAArch64OpImplParams *params) { int count = 0; for (int i = 0; i < 4 * 5; i++) - if (!(params->linear.zero & (1ULL << i))) + if (!(params->par.lin.zero & (1ULL << i))) count++; return (count + 3) / 4; } diff --git a/libswscale/aarch64/ops_impl_conv.c b/libswscale/aarch64/ops_impl_conv.c index 4972822c89..b66de8fc8c 100644 --- a/libswscale/aarch64/ops_impl_conv.c +++ b/libswscale/aarch64/ops_impl_conv.c @@ -31,9 +31,9 @@ static void swizzle_emit(SwsAArch64OpImplParams *out, uint8_t dst, uint8_t src) { - int idx = out->move.num_moves++; - out->move.dst[idx] = dst; - out->move.src[idx] = src; + int idx = out->par.move.num_moves++; + out->par.move.dst[idx] = dst; + out->par.move.src[idx] = src; } static void convert_swizzle_to_moves(const SwsOp *op, SwsAArch64OpImplParams *out) @@ -235,18 +235,18 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, break; case SWS_UOP_UNPACK: for (int i = 0; i < 4; i++) - out->pack.pattern[i] = op->pack.pattern[i]; + out->par.pack.pattern[i] = op->pack.pattern[i]; break; case SWS_UOP_PACK: out->mask = 0; for (int i = 0; i < 4 && op->pack.pattern[i]; i++) out->mask |= SWS_COMP(i); for (int i = 0; i < 4; i++) - out->pack.pattern[i] = op->pack.pattern[i]; + out->par.pack.pattern[i] = op->pack.pattern[i]; break; case SWS_UOP_LSHIFT: case SWS_UOP_RSHIFT: - out->shift.amount = op->shift.amount; + out->par.shift.amount = op->shift.amount; break; case SWS_UOP_CLEAR: out->mask = 0; @@ -254,13 +254,13 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, if (SWS_COMP_TEST(op->clear.mask, i)) { out->mask |= SWS_COMP(i); if (op->clear.value[i].num == 0) { - out->clear.zero |= SWS_COMP(i); + out->par.clear.zero |= SWS_COMP(i); } else { uint32_t val = op->clear.value[i].num / op->clear.value[i].den; if ((op->type == SWS_PIXEL_U8 && val == UINT8_MAX) || (op->type == SWS_PIXEL_U16 && val == UINT16_MAX) || (op->type == SWS_PIXEL_U32 && val == UINT32_MAX)) - out->clear.one |= SWS_COMP(i); + out->par.clear.one |= SWS_COMP(i); } } } @@ -271,16 +271,16 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, for (int i = 0; i < 4; i++) { if (!SWS_OP_NEEDED(op, i) || !(op->lin.mask & SWS_MASK_ROW(i))) { for (int j = 0; j < 5; j++) - out->linear.zero |= SWS_MASK(i, j); + out->par.lin.zero |= SWS_MASK(i, j); continue; } out->mask |= SWS_COMP(i); for (int j = 0; j < 5; j++) { const AVRational64 k = op->lin.m[i][j]; if (j < 4 && k.num == k.den) - out->linear.one |= SWS_MASK(i, j); + out->par.lin.one |= SWS_MASK(i, j); else if (k.num == 0) - out->linear.zero |= SWS_MASK(i, j); + out->par.lin.zero |= SWS_MASK(i, j); } } break; @@ -290,11 +290,11 @@ static int convert_to_aarch64_impl(SwsContext *ctx, const SwsOpList *ops, int n, op->dither.y_offset[2] >= 0, op->dither.y_offset[3] >= 0); LOOP(out->mask, i) { - out->dither.y_offset[i] = op->dither.y_offset[i]; + out->par.dither.y_offset[i] = op->dither.y_offset[i]; } else { - out->dither.y_offset[i] = 0xf; + out->par.dither.y_offset[i] = 0xf; } - out->dither.size_log2 = op->dither.size_log2; + out->par.dither.size_log2 = op->dither.size_log2; break; } diff --git a/libswscale/tests/sws_ops_aarch64.c b/libswscale/tests/sws_ops_aarch64.c index e3880cba81..0cc0c4f0af 100644 --- a/libswscale/tests/sws_ops_aarch64.c +++ b/libswscale/tests/sws_ops_aarch64.c @@ -100,6 +100,8 @@ static int aarch64_op_impl_cmp(const void *a, const void *b) { const SwsAArch64OpImplParams *pa = (const SwsAArch64OpImplParams *) a; const SwsAArch64OpImplParams *pb = (const SwsAArch64OpImplParams *) b; + const SwsUOpParams *para = &pa->par; + const SwsUOpParams *parb = &pb->par; if (pa->uop != pb->uop) return (int) pa->uop - pb->uop; @@ -107,47 +109,47 @@ static int aarch64_op_impl_cmp(const void *a, const void *b) switch (pa->uop) { case SWS_UOP_PERMUTE: case SWS_UOP_COPY: { - uint64_t ia = move_to_mask(&pa->move); - uint64_t ib = move_to_mask(&pb->move); + uint64_t ia = move_to_mask(¶->move); + uint64_t ib = move_to_mask(&parb->move); if (ia != ib) return (int64_t) (ia - ib) < 0 ? -1 : 1; break; } case SWS_UOP_UNPACK: case SWS_UOP_PACK: { - uint16_t ia = pack_to_mask(&pa->pack); - uint16_t ib = pack_to_mask(&pb->pack); + uint16_t ia = pack_to_mask(¶->pack); + uint16_t ib = pack_to_mask(&parb->pack); if (ia != ib) return (int) ia - ib; break; } case SWS_UOP_LSHIFT: case SWS_UOP_RSHIFT: - if (pa->shift.amount != pb->shift.amount) - return (int) pa->shift.amount - pb->shift.amount; + if (para->shift.amount != parb->shift.amount) + return (int) para->shift.amount - parb->shift.amount; break; case SWS_UOP_CLEAR: { - uint16_t ia = clear_to_mask(&pa->clear); - uint16_t ib = clear_to_mask(&pb->clear); + uint16_t ia = clear_to_mask(¶->clear); + uint16_t ib = clear_to_mask(&parb->clear); if (ia != ib) return (int) ia - ib; break; } case SWS_UOP_LINEAR: case SWS_UOP_LINEAR_FMA: { - uint64_t ia = linear_to_mask(&pa->linear); - uint64_t ib = linear_to_mask(&pb->linear); + uint64_t ia = linear_to_mask(¶->lin); + uint64_t ib = linear_to_mask(&parb->lin); if (ia != ib) return (int64_t) (ia - ib) < 0 ? -1 : 1; break; } case SWS_UOP_DITHER: { - uint16_t ia = dither_to_mask(&pa->dither); - uint16_t ib = dither_to_mask(&pb->dither); + uint16_t ia = dither_to_mask(¶->dither); + uint16_t ib = dither_to_mask(&parb->dither); if (ia != ib) return (int) ia - ib; - if (pa->dither.size_log2 != pb->dither.size_log2) - return (int) pa->dither.size_log2 - pb->dither.size_log2; + if (para->dither.size_log2 != parb->dither.size_log2) + return (int) para->dither.size_log2 - parb->dither.size_log2; break; } } @@ -296,29 +298,30 @@ static const char pixel_type_names[SWS_PIXEL_TYPE_NB][4] = { static void impl_func_name(AVBPrint *bp, const SwsAArch64OpImplParams *params) { + const SwsUOpParams *par = ¶ms->par; av_bprintf(bp, "ff_sws_%s", op_type_names[params->uop]); switch (params->uop) { case SWS_UOP_PERMUTE: case SWS_UOP_COPY: - av_bprintf(bp, "_%012" PRIx64, move_to_mask(¶ms->move)); + av_bprintf(bp, "_%012" PRIx64, move_to_mask(&par->move)); break; case SWS_UOP_UNPACK: case SWS_UOP_PACK: - av_bprintf(bp, "_%04x", pack_to_mask(¶ms->pack)); + av_bprintf(bp, "_%04x", pack_to_mask(&par->pack)); break; case SWS_UOP_LSHIFT: case SWS_UOP_RSHIFT: - av_bprintf(bp, "_%u", params->shift.amount); + av_bprintf(bp, "_%u", par->shift.amount); break; case SWS_UOP_CLEAR: - av_bprintf(bp, "_%04x", clear_to_mask(¶ms->clear)); + av_bprintf(bp, "_%04x", clear_to_mask(&par->clear)); break; case SWS_UOP_LINEAR: case SWS_UOP_LINEAR_FMA: - av_bprintf(bp, "_%010" PRIx64, linear_to_mask(¶ms->linear)); + av_bprintf(bp, "_%010" PRIx64, linear_to_mask(&par->lin)); break; case SWS_UOP_DITHER: - av_bprintf(bp, "_%04x_%u", dither_to_mask(¶ms->dither), params->dither.size_log2); + av_bprintf(bp, "_%04x_%u", dither_to_mask(&par->dither), par->dither.size_log2); break; } av_bprintf(bp, "_%u_%s_%04x_neon", params->block_size, pixel_type_names[params->type], nibble_mask(params->mask)); @@ -364,43 +367,44 @@ static const char pixel_types[SWS_PIXEL_TYPE_NB][32] = { static void serialize_op(AVBPrint *bp, const SwsAArch64OpImplParams *params) { + const SwsUOpParams *par = ¶ms->par; av_bprintf(bp, "ENTRY("); impl_func_name(bp, params); av_bprintf(bp, ", { .uop = %s", op_types[params->uop]); switch (params->uop) { case SWS_UOP_PERMUTE: case SWS_UOP_COPY: - av_bprintf(bp, ", .move = { .num_moves = %d, .dst = {%d, %d, %d, %d, %d, %d}, .src = {%d, %d, %d, %d, %d, %d} }", - params->move.num_moves, - params->move.dst[0], params->move.dst[1], params->move.dst[2], - params->move.dst[3], params->move.dst[4], params->move.dst[5], - params->move.src[0], params->move.src[1], params->move.src[2], - params->move.src[3], params->move.src[4], params->move.src[5]); + av_bprintf(bp, ", .par.move = { .num_moves = %d, .dst = {%d, %d, %d, %d, %d, %d}, .src = {%d, %d, %d, %d, %d, %d} }", + par->move.num_moves, + par->move.dst[0], par->move.dst[1], par->move.dst[2], + par->move.dst[3], par->move.dst[4], par->move.dst[5], + par->move.src[0], par->move.src[1], par->move.src[2], + par->move.src[3], par->move.src[4], par->move.src[5]); break; case SWS_UOP_UNPACK: case SWS_UOP_PACK: - av_bprintf(bp, ", .pack = { .pattern = {%d, %d, %d, %d} }", - params->pack.pattern[0], params->pack.pattern[1], - params->pack.pattern[2], params->pack.pattern[3]); + av_bprintf(bp, ", .par.pack = { .pattern = {%d, %d, %d, %d} }", + par->pack.pattern[0], par->pack.pattern[1], + par->pack.pattern[2], par->pack.pattern[3]); break; case SWS_UOP_LSHIFT: case SWS_UOP_RSHIFT: - av_bprintf(bp, ", .shift = { .amount = %u }", params->shift.amount); + av_bprintf(bp, ", .par.shift = { .amount = %u }", par->shift.amount); break; case SWS_UOP_CLEAR: - av_bprintf(bp, ", .clear = { .one = 0x%0x, .zero = 0x%0x }", params->clear.one, params->clear.zero); + av_bprintf(bp, ", .par.clear = { .one = 0x%0x, .zero = 0x%0x }", par->clear.one, par->clear.zero); break; case SWS_UOP_LINEAR: case SWS_UOP_LINEAR_FMA: - av_bprintf(bp, ", .linear = { .one = 0x%x, .zero = 0x%x }", params->linear.one, params->linear.zero); + av_bprintf(bp, ", .par.lin = { .one = 0x%x, .zero = 0x%x }", par->lin.one, par->lin.zero); break; case SWS_UOP_DITHER: - av_bprintf(bp, ", .dither = { .y_offset = {%u, %u, %u, %u}, .size_log2 = %u }", - (params->dither.y_offset[0] == 0xf) ? 0 : params->dither.y_offset[0], - (params->dither.y_offset[1] == 0xf) ? 0 : params->dither.y_offset[1], - (params->dither.y_offset[2] == 0xf) ? 0 : params->dither.y_offset[2], - (params->dither.y_offset[3] == 0xf) ? 0 : params->dither.y_offset[3], - params->dither.size_log2); + av_bprintf(bp, ", .par.dither = { .y_offset = {%u, %u, %u, %u}, .size_log2 = %u }", + (par->dither.y_offset[0] == 0xf) ? 0 : par->dither.y_offset[0], + (par->dither.y_offset[1] == 0xf) ? 0 : par->dither.y_offset[1], + (par->dither.y_offset[2] == 0xf) ? 0 : par->dither.y_offset[2], + (par->dither.y_offset[3] == 0xf) ? 0 : par->dither.y_offset[3], + par->dither.size_log2); break; } av_bprintf(bp, ", .block_size = %u, .type = %s, .mask = 0x%x })", params->block_size, pixel_types[params->type], params->mask); -- 2.52.0 >From 9779dbfccdb83e8016dd8b0c3493042ea965650c Mon Sep 17 00:00:00 2001 From: Ramiro Polla <[email protected]> Date: Wed, 24 Jun 2026 17:30:14 +0200 Subject: [PATCH 17/17] swscale/tests/sws_ops_aarch64: pretty-print entries in ops_entries.c This makes them all neatly aligned. Sponsored-by: Sovereign Tech Fund Signed-off-by: Ramiro Polla <[email protected]> --- libswscale/aarch64/ops_entries.c | 818 ++++++++++++++--------------- libswscale/tests/sws_ops_aarch64.c | 81 +-- 2 files changed, 454 insertions(+), 445 deletions(-) diff --git a/libswscale/aarch64/ops_entries.c b/libswscale/aarch64/ops_entries.c index 2c226edf0e..1718b0de11 100644 --- a/libswscale/aarch64/ops_entries.c +++ b/libswscale/aarch64/ops_entries.c @@ -3,412 +3,412 @@ * To regenerate, run: make fate-sws-ops-entries-aarch64 GEN=1 */ -ENTRY(ff_sws_read_planar_8_u8_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_read_planar_8_u8_0011_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_read_planar_8_u8_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_read_planar_8_u8_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_read_planar_8_u16_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_read_planar_8_u16_0011_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) -ENTRY(ff_sws_read_planar_8_u16_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_read_planar_8_u16_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) -ENTRY(ff_sws_read_planar_8_u32_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1 }) -ENTRY(ff_sws_read_planar_8_u32_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) -ENTRY(ff_sws_read_planar_8_u32_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) -ENTRY(ff_sws_read_planar_16_u8_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_read_planar_16_u8_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_read_planar_16_u8_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_read_planar_16_u16_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_read_planar_16_u16_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_read_planar_16_u16_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xf }) -ENTRY(ff_sws_read_packed_8_u8_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_read_packed_8_u8_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_read_packed_8_u8_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_read_packed_8_u16_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) -ENTRY(ff_sws_read_packed_8_u16_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_read_packed_8_u16_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) -ENTRY(ff_sws_read_packed_8_u32_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x3 }) -ENTRY(ff_sws_read_packed_8_u32_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) -ENTRY(ff_sws_read_packed_8_u32_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) -ENTRY(ff_sws_read_packed_16_u8_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_read_packed_16_u8_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_read_packed_16_u8_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_read_packed_16_u16_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3 }) -ENTRY(ff_sws_read_packed_16_u16_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_read_packed_16_u16_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xf }) -ENTRY(ff_sws_read_nibble_8_u8_0001_neon, { .uop = SWS_UOP_READ_NIBBLE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_read_nibble_16_u8_0001_neon, { .uop = SWS_UOP_READ_NIBBLE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_read_bit_8_u8_0001_neon, { .uop = SWS_UOP_READ_BIT, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_read_bit_16_u8_0001_neon, { .uop = SWS_UOP_READ_BIT, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_write_planar_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_write_planar_8_u8_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_write_planar_8_u8_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_write_planar_8_u8_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_write_planar_8_u16_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_write_planar_8_u16_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) -ENTRY(ff_sws_write_planar_8_u16_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_write_planar_8_u16_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) -ENTRY(ff_sws_write_planar_8_u32_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1 }) -ENTRY(ff_sws_write_planar_8_u32_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) -ENTRY(ff_sws_write_planar_8_u32_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) -ENTRY(ff_sws_write_planar_16_u8_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_write_planar_16_u8_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_write_planar_16_u8_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_write_planar_16_u8_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_write_planar_16_u16_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_write_planar_16_u16_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3 }) -ENTRY(ff_sws_write_planar_16_u16_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_write_planar_16_u16_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xf }) -ENTRY(ff_sws_write_packed_8_u8_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_write_packed_8_u8_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_write_packed_8_u8_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_write_packed_8_u16_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) -ENTRY(ff_sws_write_packed_8_u16_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_write_packed_8_u16_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) -ENTRY(ff_sws_write_packed_8_u32_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x3 }) -ENTRY(ff_sws_write_packed_8_u32_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) -ENTRY(ff_sws_write_packed_8_u32_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) -ENTRY(ff_sws_write_packed_16_u8_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_write_packed_16_u8_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_write_packed_16_u8_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_write_packed_16_u16_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3 }) -ENTRY(ff_sws_write_packed_16_u16_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_write_packed_16_u16_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xf }) -ENTRY(ff_sws_write_nibble_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_NIBBLE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_write_nibble_16_u8_0001_neon, { .uop = SWS_UOP_WRITE_NIBBLE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_write_bit_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_BIT, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_permute_000000000001_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_permute_000000000002_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_permute_000000000003_8_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_permute_000000000003_16_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_permute_000000000003_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_permute_000000000010_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_permute_000000000010_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_permute_000000000010_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_permute_000000000013_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_permute_000000000013_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_permute_000000000013_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_permute_000000000020_8_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x4 }) -ENTRY(ff_sws_permute_000000000020_32_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x4 }) -ENTRY(ff_sws_permute_000000000030_8_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x8 }) -ENTRY(ff_sws_permute_000000000030_16_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x8 }) -ENTRY(ff_sws_permute_000000000030_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x8 }) -ENTRY(ff_sws_permute_000000000031_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x8 }) -ENTRY(ff_sws_permute_000000000130_32_u8_1001_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x9 }) -ENTRY(ff_sws_permute_000000000310_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_permute_000000000310_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_permute_000000000320_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x5 }) -ENTRY(ff_sws_permute_000000001031_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {3, 1, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xa }) -ENTRY(ff_sws_permute_000000001301_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {0, 1, 0, 0, 0, 0}, .src = {1, 3, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_permute_000000002032_8_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {3, 2, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xc }) -ENTRY(ff_sws_permute_000000002032_32_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {3, 2, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xc }) -ENTRY(ff_sws_permute_000000002302_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {0, 2, 0, 0, 0, 0}, .src = {2, 3, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x5 }) -ENTRY(ff_sws_permute_000000002302_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 2, .dst = {0, 2, 0, 0, 0, 0}, .src = {2, 3, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x5 }) -ENTRY(ff_sws_permute_000000102132_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_000000102132_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_000000102132_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_000000132102_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {0, 2, 1, 0, 0, 0}, .src = {2, 1, 3, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_0000001f01f0_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_permute_0000001f01f0_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_permute_0000001f01f0_32_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_permute_000000201231_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {3, 1, 2, 0, 0, 0}, .src = {1, 2, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_000000201231_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {3, 1, 2, 0, 0, 0}, .src = {1, 2, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_000000231201_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_000000231201_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_000000231201_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_0000002f02f0_8_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x5 }) -ENTRY(ff_sws_permute_0000002f02f0_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x5 }) -ENTRY(ff_sws_permute_0000002f02f0_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x5 }) -ENTRY(ff_sws_permute_0000002f12f1_8_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x6 }) -ENTRY(ff_sws_permute_0000002f12f1_16_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x6 }) -ENTRY(ff_sws_permute_0000002f12f1_32_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x6 }) -ENTRY(ff_sws_permute_0000003f13f1_8_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xa }) -ENTRY(ff_sws_permute_0000003f13f1_16_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xa }) -ENTRY(ff_sws_permute_0000003f13f1_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xa }) -ENTRY(ff_sws_permute_00001f2102f0_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_00001f2102f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_00001f2102f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_00002f1201f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 0, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_00002f1201f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 0, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_00002f12f103_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_00002f12f103_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_00002f12f103_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_permute_00002f12f130_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_00002f12f130_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_00002f12f130_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_00002f3203f0_8_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 0, 3, 2, 0, 0}, .src = {0, 3, 2, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xd }) -ENTRY(ff_sws_permute_00002f3203f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 0, 3, 2, 0, 0}, .src = {0, 3, 2, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xd }) -ENTRY(ff_sws_permute_00003f2302f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 0, 2, 3, 0, 0}, .src = {0, 2, 3, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xd }) -ENTRY(ff_sws_permute_00003f2312f1_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 1, 2, 3, 0, 0}, .src = {1, 2, 3, -1, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_00003f2312f1_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 4, .dst = {-1, 1, 2, 3, 0, 0}, .src = {1, 2, 3, -1, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_permute_001f213203f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_001f213203f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_001f213203f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_002f123103f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 5, .dst = {-1, 0, 3, 1, 2, 0}, .src = {0, 3, 1, 2, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_002f123103f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 5, .dst = {-1, 0, 3, 1, 2, 0}, .src = {0, 3, 1, 2, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_003f231201f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 5, .dst = {-1, 0, 1, 2, 3, 0}, .src = {0, 1, 2, 3, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_003f231201f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 5, .dst = {-1, 0, 1, 2, 3, 0}, .src = {0, 1, 2, 3, -1, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_2f12f13f03f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_2f12f13f03f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_permute_2f12f13f03f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .par.move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_copy_000000002010_8_u8_0110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x6 }) -ENTRY(ff_sws_copy_000000002010_16_u8_0110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x6 }) -ENTRY(ff_sws_copy_000000002010_32_u8_0110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x6 }) -ENTRY(ff_sws_copy_000000103120_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_copy_000000103120_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_copy_000000103120_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_copy_000000302010_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_copy_000000302010_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_copy_000000302010_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} }, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_copy_001f01f03020_8_u8_1111_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 5, .dst = {2, 3, -1, 0, 1, 0}, .src = {0, 0, 0, 1, -1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_copy_001f01f03020_16_u8_1111_neon, { .uop = SWS_UOP_COPY, .par.move = { .num_moves = 5, .dst = {2, 3, -1, 0, 1, 0}, .src = {0, 0, 0, 1, -1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_swap_bytes_8_u16_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_swap_bytes_8_u16_0010_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2 }) -ENTRY(ff_sws_swap_bytes_8_u16_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) -ENTRY(ff_sws_swap_bytes_8_u16_0111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_swap_bytes_8_u16_1001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x9 }) -ENTRY(ff_sws_swap_bytes_8_u16_1110_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_swap_bytes_8_u16_1111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) -ENTRY(ff_sws_swap_bytes_8_u32_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1 }) -ENTRY(ff_sws_swap_bytes_8_u32_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x3 }) -ENTRY(ff_sws_swap_bytes_8_u32_0111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) -ENTRY(ff_sws_swap_bytes_8_u32_1001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x9 }) -ENTRY(ff_sws_swap_bytes_8_u32_1110_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xe }) -ENTRY(ff_sws_swap_bytes_8_u32_1111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) -ENTRY(ff_sws_swap_bytes_16_u16_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_swap_bytes_16_u16_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3 }) -ENTRY(ff_sws_swap_bytes_16_u16_0111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_swap_bytes_16_u16_1110_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_swap_bytes_16_u16_1111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xf }) -ENTRY(ff_sws_expand_pair_16_u8_0001_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_expand_pair_16_u8_0011_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_expand_pair_16_u8_0111_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_expand_pair_16_u8_1110_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_expand_pair_16_u8_1111_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_to_u8_8_f32_0001_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_to_u8_8_f32_0011_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) -ENTRY(ff_sws_to_u8_8_f32_0111_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_to_u8_8_f32_1001_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_to_u8_8_f32_1110_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) -ENTRY(ff_sws_to_u8_8_f32_1111_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_to_u8_16_u16_0111_neon, { .uop = SWS_UOP_TO_U8, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_to_u16_8_u8_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_to_u16_8_u32_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) -ENTRY(ff_sws_to_u16_8_u32_1110_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xe }) -ENTRY(ff_sws_to_u16_8_f32_0001_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_to_u16_8_f32_0011_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) -ENTRY(ff_sws_to_u16_8_f32_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_to_u16_8_f32_1001_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_to_u16_8_f32_1110_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) -ENTRY(ff_sws_to_u16_8_f32_1111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_to_u16_16_u8_0001_neon, { .uop = SWS_UOP_TO_U16, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_to_u16_16_u8_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_to_u16_16_u8_1110_neon, { .uop = SWS_UOP_TO_U16, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_to_u32_8_u8_0001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_to_u32_8_u8_0111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_to_u32_8_u16_0001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_to_u32_8_u16_0111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_to_u32_8_f32_0001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_to_u32_8_f32_0111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_to_u32_8_f32_1001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_to_u32_8_f32_1110_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) -ENTRY(ff_sws_to_u32_8_f32_1111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_to_f32_8_u8_0001_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_to_f32_8_u8_0010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_to_f32_8_u8_0011_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_to_f32_8_u8_0100_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x4 }) -ENTRY(ff_sws_to_f32_8_u8_0111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_to_f32_8_u8_1010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xa }) -ENTRY(ff_sws_to_f32_8_u8_1100_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xc }) -ENTRY(ff_sws_to_f32_8_u8_1110_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) -ENTRY(ff_sws_to_f32_8_u8_1111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) -ENTRY(ff_sws_to_f32_8_u16_0001_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_to_f32_8_u16_0010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2 }) -ENTRY(ff_sws_to_f32_8_u16_0011_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) -ENTRY(ff_sws_to_f32_8_u16_0111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_to_f32_8_u16_1110_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_to_f32_8_u16_1111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) -ENTRY(ff_sws_to_f32_8_u32_0010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x2 }) -ENTRY(ff_sws_to_f32_8_u32_0100_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x4 }) -ENTRY(ff_sws_to_f32_8_u32_0111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) -ENTRY(ff_sws_to_f32_8_u32_1110_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xe }) -ENTRY(ff_sws_scale_8_u32_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1 }) -ENTRY(ff_sws_scale_8_u32_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) -ENTRY(ff_sws_scale_8_f32_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_scale_8_f32_0011_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) -ENTRY(ff_sws_scale_8_f32_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_scale_8_f32_1110_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) -ENTRY(ff_sws_scale_8_f32_1111_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_scale_16_u8_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_scale_16_u8_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_scale_16_u16_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_scale_16_u16_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_min_8_f32_0001_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_min_8_f32_0011_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) -ENTRY(ff_sws_min_8_f32_0111_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_min_8_f32_1001_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_min_8_f32_1110_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) -ENTRY(ff_sws_min_8_f32_1111_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_max_8_f32_0001_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_max_8_f32_0011_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) -ENTRY(ff_sws_max_8_f32_0111_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_max_8_f32_1001_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_max_8_f32_1111_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_unpack_0121_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {1, 2, 1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0121_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {1, 2, 1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0233_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {3, 3, 2, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0233_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {3, 3, 2, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0332_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {2, 3, 3, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0332_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {2, 3, 3, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0444_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {4, 4, 4, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0444_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {4, 4, 4, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0555_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {5, 5, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0555_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {5, 5, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0565_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {5, 6, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_unpack_0565_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {5, 6, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_unpack_2aaa_8_u32_0010_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x2 }) -ENTRY(ff_sws_unpack_2aaa_8_u32_0111_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) -ENTRY(ff_sws_unpack_aaa2_8_u32_0100_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x4 }) -ENTRY(ff_sws_unpack_aaa2_8_u32_1110_neon, { .uop = SWS_UOP_UNPACK, .par.pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xe }) -ENTRY(ff_sws_pack_0121_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {1, 2, 1, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_pack_0121_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {1, 2, 1, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_pack_0233_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {3, 3, 2, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_pack_0233_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {3, 3, 2, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_pack_0332_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {2, 3, 3, 0} }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_pack_0332_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {2, 3, 3, 0} }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_pack_0444_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {4, 4, 4, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_pack_0444_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {4, 4, 4, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_pack_0555_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {5, 5, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_pack_0555_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {5, 5, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_pack_0565_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {5, 6, 5, 0} }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_pack_0565_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {5, 6, 5, 0} }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_pack_2aaa_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {10, 10, 10, 2} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) -ENTRY(ff_sws_pack_aaa2_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .par.pack = { .pattern = {2, 10, 10, 10} }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) -ENTRY(ff_sws_lshift_1_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 1 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_1_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 1 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_1_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 1 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_lshift_2_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_2_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_lshift_2_8_u32_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 2 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) -ENTRY(ff_sws_lshift_2_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 2 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_2_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 2 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_lshift_3_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 3 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_4_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_lshift_4_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_4_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_lshift_4_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_lshift_4_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_4_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_lshift_5_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 5 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_6_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_lshift_6_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_6_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_lshift_6_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_lshift_6_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_6_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_lshift_7_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 7 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_8_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_lshift_8_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .par.shift = { .amount = 8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) -ENTRY(ff_sws_rshift_4_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .par.shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_rshift_4_8_u16_0010_neon, { .uop = SWS_UOP_RSHIFT, .par.shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2 }) -ENTRY(ff_sws_rshift_4_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .par.shift = { .amount = 4 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_rshift_4_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .par.shift = { .amount = 4 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_rshift_6_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .par.shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_rshift_6_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .par.shift = { .amount = 6 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_rshift_6_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .par.shift = { .amount = 6 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_clear_0fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x8 }) -ENTRY(ff_sws_clear_0fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xb }) -ENTRY(ff_sws_clear_0fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x8 }) -ENTRY(ff_sws_clear_0fff_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x8 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xd }) -ENTRY(ff_sws_clear_0fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x8 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x8 }) -ENTRY(ff_sws_clear_0fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x8 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x8 }) -ENTRY(ff_sws_clear_1fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x8 }) -ENTRY(ff_sws_clear_1fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xb }) -ENTRY(ff_sws_clear_1fff_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xd }) -ENTRY(ff_sws_clear_1fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x8, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x8 }) -ENTRY(ff_sws_clear_1fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x8, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x8 }) -ENTRY(ff_sws_clear_1fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x8, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x8 }) -ENTRY(ff_sws_clear_ff1f_8_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x2, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_clear_ff1f_8_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x2, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2 }) -ENTRY(ff_sws_clear_ff1f_16_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x2, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x2 }) -ENTRY(ff_sws_clear_ff1f_16_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x2, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x2 }) -ENTRY(ff_sws_clear_fff0_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x1 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_clear_fff0_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x1 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_clear_fff1_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_clear_fff1_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xd }) -ENTRY(ff_sws_clear_fff1_8_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_clear_fff1_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x1, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xd }) -ENTRY(ff_sws_clear_fff1_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) -ENTRY(ff_sws_clear_fff1_16_u8_0111_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) -ENTRY(ff_sws_clear_fff1_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_clear_fff1_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x1, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_clear_ffff_8_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_clear_ffff_8_u8_0101_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x5 }) -ENTRY(ff_sws_clear_ffff_8_u8_1100_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xc }) -ENTRY(ff_sws_clear_ffff_8_u16_1100_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xc }) -ENTRY(ff_sws_clear_ffff_8_u32_0001_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1 }) -ENTRY(ff_sws_clear_ffff_8_u32_0010_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x2 }) -ENTRY(ff_sws_clear_ffff_8_u32_0101_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x5 }) -ENTRY(ff_sws_clear_ffff_8_u32_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x8 }) -ENTRY(ff_sws_clear_ffff_8_u32_1010_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xa }) -ENTRY(ff_sws_clear_ffff_8_u32_1011_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xb }) -ENTRY(ff_sws_clear_ffff_8_u32_1101_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xd }) -ENTRY(ff_sws_clear_ffff_16_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) -ENTRY(ff_sws_clear_ffff_16_u8_0110_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x6 }) -ENTRY(ff_sws_clear_ffff_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) -ENTRY(ff_sws_clear_ffff_16_u16_0011_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3 }) -ENTRY(ff_sws_clear_ffff_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) -ENTRY(ff_sws_clear_ffff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .par.clear = { .one = 0x0, .zero = 0x0 }, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x8 }) -ENTRY(ff_sws_linear_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xfffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_linear_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xffff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_linear_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xfffe8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_linear_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xfffbf }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2 }) -ENTRY(ff_sws_linear_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x421, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xfefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xfadae }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xfa118 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xfa108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xbffff }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8 }) -ENTRY(ff_sws_linear_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xbffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_linear_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xbfff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_linear_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xbb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_linear_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xbefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_linear_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .par.lin = { .one = 0x0, .zero = 0xba108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_linear_fma_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xfffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_linear_fma_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xffff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_linear_fma_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xfffe8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) -ENTRY(ff_sws_linear_fma_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xfffbf }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2 }) -ENTRY(ff_sws_linear_fma_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x421, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_fma_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xfb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_fma_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xfefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_fma_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xfadae }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_fma_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xfa118 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_fma_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xfa108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_linear_fma_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xbffff }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8 }) -ENTRY(ff_sws_linear_fma_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xbffee }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_linear_fma_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xbfff8 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_linear_fma_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xbb10a }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_linear_fma_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xbefbe }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_linear_fma_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .par.lin = { .one = 0x0, .zero = 0xba108 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_dither_0325_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {5, 2, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_dither_032f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 2, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) -ENTRY(ff_sws_dither_2305_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {5, 0, 3, 2}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_dither_230f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 0, 3, 2}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) -ENTRY(ff_sws_dither_3000_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 0, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_dither_302f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 2, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) -ENTRY(ff_sws_dither_3ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 0, 0, 3}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_dither_5023_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {3, 2, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_dither_5032_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {2, 3, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_dither_5230_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 3, 2, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) -ENTRY(ff_sws_dither_5ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 0, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) -ENTRY(ff_sws_dither_5fff_4_8_f32_1000_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 0, 0, 5}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8 }) -ENTRY(ff_sws_dither_f023_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {3, 2, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_dither_f032_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {2, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_dither_f203_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {3, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_dither_f230_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 3, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_dither_f2f0_4_8_f32_0101_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x5 }) -ENTRY(ff_sws_dither_f2ff_4_8_f32_0100_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 0, 2, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x4 }) -ENTRY(ff_sws_dither_f302_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {2, 0, 3, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) -ENTRY(ff_sws_dither_ff30_4_8_f32_0011_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) -ENTRY(ff_sws_dither_ff3f_4_8_f32_0010_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 3, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2 }) -ENTRY(ff_sws_dither_fff0_4_8_f32_0001_neon, { .uop = SWS_UOP_DITHER, .par.dither = { .y_offset = {0, 0, 0, 0}, .size_log2 = 4 }, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_read_planar_8_u8_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_read_planar_8_u8_0011_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_read_planar_8_u8_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_read_planar_8_u8_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_read_planar_8_u16_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_read_planar_8_u16_0011_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_read_planar_8_u16_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_read_planar_8_u16_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_read_planar_8_u32_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1 }) +ENTRY(ff_sws_read_planar_8_u32_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_read_planar_8_u32_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) +ENTRY(ff_sws_read_planar_16_u8_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_read_planar_16_u8_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_read_planar_16_u8_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_read_planar_16_u16_0001_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_read_planar_16_u16_0111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_read_planar_16_u16_1111_neon, { .uop = SWS_UOP_READ_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_read_packed_8_u8_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_read_packed_8_u8_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_read_packed_8_u8_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_read_packed_8_u16_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_read_packed_8_u16_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_read_packed_8_u16_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_read_packed_8_u32_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x3 }) +ENTRY(ff_sws_read_packed_8_u32_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_read_packed_8_u32_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) +ENTRY(ff_sws_read_packed_16_u8_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_read_packed_16_u8_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_read_packed_16_u8_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_read_packed_16_u16_0011_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_read_packed_16_u16_0111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_read_packed_16_u16_1111_neon, { .uop = SWS_UOP_READ_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_read_nibble_8_u8_0001_neon, { .uop = SWS_UOP_READ_NIBBLE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_read_nibble_16_u8_0001_neon, { .uop = SWS_UOP_READ_NIBBLE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_read_bit_8_u8_0001_neon, { .uop = SWS_UOP_READ_BIT, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_read_bit_16_u8_0001_neon, { .uop = SWS_UOP_READ_BIT, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_write_planar_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_write_planar_8_u8_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_write_planar_8_u8_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_write_planar_8_u8_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_write_planar_8_u16_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_write_planar_8_u16_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_write_planar_8_u16_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_write_planar_8_u16_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_write_planar_8_u32_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1 }) +ENTRY(ff_sws_write_planar_8_u32_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_write_planar_8_u32_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) +ENTRY(ff_sws_write_planar_16_u8_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_write_planar_16_u8_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_write_planar_16_u8_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_write_planar_16_u8_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_write_planar_16_u16_0001_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_write_planar_16_u16_0011_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_write_planar_16_u16_0111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_write_planar_16_u16_1111_neon, { .uop = SWS_UOP_WRITE_PLANAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_write_packed_8_u8_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_write_packed_8_u8_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_write_packed_8_u8_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_write_packed_8_u16_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_write_packed_8_u16_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_write_packed_8_u16_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_write_packed_8_u32_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x3 }) +ENTRY(ff_sws_write_packed_8_u32_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_write_packed_8_u32_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) +ENTRY(ff_sws_write_packed_16_u8_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_write_packed_16_u8_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_write_packed_16_u8_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_write_packed_16_u16_0011_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_write_packed_16_u16_0111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_write_packed_16_u16_1111_neon, { .uop = SWS_UOP_WRITE_PACKED, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_write_nibble_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_NIBBLE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_write_nibble_16_u8_0001_neon, { .uop = SWS_UOP_WRITE_NIBBLE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_write_bit_8_u8_0001_neon, { .uop = SWS_UOP_WRITE_BIT, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_permute_000000000001_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1, .par.move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000002_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1, .par.move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000003_8_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1, .par.move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000003_16_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1, .par.move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000003_32_u8_0001_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x1, .par.move = { .num_moves = 1, .dst = {0, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000010_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000010_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x2, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000010_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x2, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000013_8_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000013_16_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x2, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000013_32_u8_0010_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x2, .par.move = { .num_moves = 1, .dst = {1, 0, 0, 0, 0, 0}, .src = {3, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000020_8_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x4, .par.move = { .num_moves = 1, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000020_32_u8_0100_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x4, .par.move = { .num_moves = 1, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000030_8_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x8, .par.move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000030_16_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x8, .par.move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000030_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x8, .par.move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000031_32_u8_1000_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x8, .par.move = { .num_moves = 1, .dst = {3, 0, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000130_32_u8_1001_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x9, .par.move = { .num_moves = 2, .dst = {3, 0, 0, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000310_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3, .par.move = { .num_moves = 2, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000310_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3, .par.move = { .num_moves = 2, .dst = {1, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000000320_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x5, .par.move = { .num_moves = 2, .dst = {2, 0, 0, 0, 0, 0}, .src = {0, 3, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000001031_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xa, .par.move = { .num_moves = 2, .dst = {3, 1, 0, 0, 0, 0}, .src = {1, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000001301_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3, .par.move = { .num_moves = 2, .dst = {0, 1, 0, 0, 0, 0}, .src = {1, 3, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000002032_8_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xc, .par.move = { .num_moves = 2, .dst = {3, 2, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000002032_32_u8_1100_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xc, .par.move = { .num_moves = 2, .dst = {3, 2, 0, 0, 0, 0}, .src = {2, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000002302_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x5, .par.move = { .num_moves = 2, .dst = {0, 2, 0, 0, 0, 0}, .src = {2, 3, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000002302_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x5, .par.move = { .num_moves = 2, .dst = {0, 2, 0, 0, 0, 0}, .src = {2, 3, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000102132_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe, .par.move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000102132_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe, .par.move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000102132_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe, .par.move = { .num_moves = 3, .dst = {3, 2, 1, 0, 0, 0}, .src = {2, 1, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000132102_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7, .par.move = { .num_moves = 3, .dst = {0, 2, 1, 0, 0, 0}, .src = {2, 1, 3, 0, 0, 0} } }) +ENTRY(ff_sws_permute_0000001f01f0_8_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3, .par.move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} } }) +ENTRY(ff_sws_permute_0000001f01f0_16_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3, .par.move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} } }) +ENTRY(ff_sws_permute_0000001f01f0_32_u8_0011_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x3, .par.move = { .num_moves = 3, .dst = {-1, 0, 1, 0, 0, 0}, .src = {0, 1, -1, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000201231_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe, .par.move = { .num_moves = 3, .dst = {3, 1, 2, 0, 0, 0}, .src = {1, 2, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000201231_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe, .par.move = { .num_moves = 3, .dst = {3, 1, 2, 0, 0, 0}, .src = {1, 2, 0, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000231201_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7, .par.move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000231201_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7, .par.move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} } }) +ENTRY(ff_sws_permute_000000231201_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7, .par.move = { .num_moves = 3, .dst = {0, 1, 2, 0, 0, 0}, .src = {1, 2, 3, 0, 0, 0} } }) +ENTRY(ff_sws_permute_0000002f02f0_8_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x5, .par.move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} } }) +ENTRY(ff_sws_permute_0000002f02f0_16_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x5, .par.move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} } }) +ENTRY(ff_sws_permute_0000002f02f0_32_u8_0101_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x5, .par.move = { .num_moves = 3, .dst = {-1, 0, 2, 0, 0, 0}, .src = {0, 2, -1, 0, 0, 0} } }) +ENTRY(ff_sws_permute_0000002f12f1_8_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x6, .par.move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} } }) +ENTRY(ff_sws_permute_0000002f12f1_16_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x6, .par.move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} } }) +ENTRY(ff_sws_permute_0000002f12f1_32_u8_0110_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x6, .par.move = { .num_moves = 3, .dst = {-1, 1, 2, 0, 0, 0}, .src = {1, 2, -1, 0, 0, 0} } }) +ENTRY(ff_sws_permute_0000003f13f1_8_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xa, .par.move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} } }) +ENTRY(ff_sws_permute_0000003f13f1_16_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xa, .par.move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} } }) +ENTRY(ff_sws_permute_0000003f13f1_32_u8_1010_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xa, .par.move = { .num_moves = 3, .dst = {-1, 1, 3, 0, 0, 0}, .src = {1, 3, -1, 0, 0, 0} } }) +ENTRY(ff_sws_permute_00001f2102f0_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7, .par.move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} } }) +ENTRY(ff_sws_permute_00001f2102f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7, .par.move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} } }) +ENTRY(ff_sws_permute_00001f2102f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7, .par.move = { .num_moves = 4, .dst = {-1, 0, 2, 1, 0, 0}, .src = {0, 2, 1, -1, 0, 0} } }) +ENTRY(ff_sws_permute_00002f1201f0_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7, .par.move = { .num_moves = 4, .dst = {-1, 0, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} } }) +ENTRY(ff_sws_permute_00002f1201f0_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7, .par.move = { .num_moves = 4, .dst = {-1, 0, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} } }) +ENTRY(ff_sws_permute_00002f12f103_8_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7, .par.move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} } }) +ENTRY(ff_sws_permute_00002f12f103_16_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7, .par.move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} } }) +ENTRY(ff_sws_permute_00002f12f103_32_u8_0111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x7, .par.move = { .num_moves = 4, .dst = {0, -1, 1, 2, 0, 0}, .src = {3, 1, 2, -1, 0, 0} } }) +ENTRY(ff_sws_permute_00002f12f130_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe, .par.move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} } }) +ENTRY(ff_sws_permute_00002f12f130_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe, .par.move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} } }) +ENTRY(ff_sws_permute_00002f12f130_32_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe, .par.move = { .num_moves = 4, .dst = {3, -1, 1, 2, 0, 0}, .src = {0, 1, 2, -1, 0, 0} } }) +ENTRY(ff_sws_permute_00002f3203f0_8_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xd, .par.move = { .num_moves = 4, .dst = {-1, 0, 3, 2, 0, 0}, .src = {0, 3, 2, -1, 0, 0} } }) +ENTRY(ff_sws_permute_00002f3203f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xd, .par.move = { .num_moves = 4, .dst = {-1, 0, 3, 2, 0, 0}, .src = {0, 3, 2, -1, 0, 0} } }) +ENTRY(ff_sws_permute_00003f2302f0_16_u8_1101_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xd, .par.move = { .num_moves = 4, .dst = {-1, 0, 2, 3, 0, 0}, .src = {0, 2, 3, -1, 0, 0} } }) +ENTRY(ff_sws_permute_00003f2312f1_8_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe, .par.move = { .num_moves = 4, .dst = {-1, 1, 2, 3, 0, 0}, .src = {1, 2, 3, -1, 0, 0} } }) +ENTRY(ff_sws_permute_00003f2312f1_16_u8_1110_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe, .par.move = { .num_moves = 4, .dst = {-1, 1, 2, 3, 0, 0}, .src = {1, 2, 3, -1, 0, 0} } }) +ENTRY(ff_sws_permute_001f213203f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf, .par.move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} } }) +ENTRY(ff_sws_permute_001f213203f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf, .par.move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} } }) +ENTRY(ff_sws_permute_001f213203f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf, .par.move = { .num_moves = 5, .dst = {-1, 0, 3, 2, 1, 0}, .src = {0, 3, 2, 1, -1, 0} } }) +ENTRY(ff_sws_permute_002f123103f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf, .par.move = { .num_moves = 5, .dst = {-1, 0, 3, 1, 2, 0}, .src = {0, 3, 1, 2, -1, 0} } }) +ENTRY(ff_sws_permute_002f123103f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf, .par.move = { .num_moves = 5, .dst = {-1, 0, 3, 1, 2, 0}, .src = {0, 3, 1, 2, -1, 0} } }) +ENTRY(ff_sws_permute_003f231201f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf, .par.move = { .num_moves = 5, .dst = {-1, 0, 1, 2, 3, 0}, .src = {0, 1, 2, 3, -1, 0} } }) +ENTRY(ff_sws_permute_003f231201f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf, .par.move = { .num_moves = 5, .dst = {-1, 0, 1, 2, 3, 0}, .src = {0, 1, 2, 3, -1, 0} } }) +ENTRY(ff_sws_permute_2f12f13f03f0_8_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf, .par.move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} } }) +ENTRY(ff_sws_permute_2f12f13f03f0_16_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf, .par.move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} } }) +ENTRY(ff_sws_permute_2f12f13f03f0_32_u8_1111_neon, { .uop = SWS_UOP_PERMUTE, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xf, .par.move = { .num_moves = 6, .dst = {-1, 0, 3, -1, 1, 2}, .src = {0, 3, -1, 1, 2, -1} } }) +ENTRY(ff_sws_copy_000000002010_8_u8_0110_neon, { .uop = SWS_UOP_COPY, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x6, .par.move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_copy_000000002010_16_u8_0110_neon, { .uop = SWS_UOP_COPY, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x6, .par.move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_copy_000000002010_32_u8_0110_neon, { .uop = SWS_UOP_COPY, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0x6, .par.move = { .num_moves = 2, .dst = {1, 2, 0, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_copy_000000103120_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe, .par.move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} } }) +ENTRY(ff_sws_copy_000000103120_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe, .par.move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} } }) +ENTRY(ff_sws_copy_000000103120_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe, .par.move = { .num_moves = 3, .dst = {2, 3, 1, 0, 0, 0}, .src = {0, 1, 0, 0, 0, 0} } }) +ENTRY(ff_sws_copy_000000302010_8_u8_1110_neon, { .uop = SWS_UOP_COPY, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe, .par.move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_copy_000000302010_16_u8_1110_neon, { .uop = SWS_UOP_COPY, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe, .par.move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_copy_000000302010_32_u8_1110_neon, { .uop = SWS_UOP_COPY, .block_size = 32, .type = SWS_PIXEL_U8, .mask = 0xe, .par.move = { .num_moves = 3, .dst = {1, 2, 3, 0, 0, 0}, .src = {0, 0, 0, 0, 0, 0} } }) +ENTRY(ff_sws_copy_001f01f03020_8_u8_1111_neon, { .uop = SWS_UOP_COPY, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf, .par.move = { .num_moves = 5, .dst = {2, 3, -1, 0, 1, 0}, .src = {0, 0, 0, 1, -1, 0} } }) +ENTRY(ff_sws_copy_001f01f03020_16_u8_1111_neon, { .uop = SWS_UOP_COPY, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf, .par.move = { .num_moves = 5, .dst = {2, 3, -1, 0, 1, 0}, .src = {0, 0, 0, 1, -1, 0} } }) +ENTRY(ff_sws_swap_bytes_8_u16_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_swap_bytes_8_u16_0010_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2 }) +ENTRY(ff_sws_swap_bytes_8_u16_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_swap_bytes_8_u16_0111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_swap_bytes_8_u16_1001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x9 }) +ENTRY(ff_sws_swap_bytes_8_u16_1110_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_swap_bytes_8_u16_1111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_swap_bytes_8_u32_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1 }) +ENTRY(ff_sws_swap_bytes_8_u32_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x3 }) +ENTRY(ff_sws_swap_bytes_8_u32_0111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_swap_bytes_8_u32_1001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x9 }) +ENTRY(ff_sws_swap_bytes_8_u32_1110_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xe }) +ENTRY(ff_sws_swap_bytes_8_u32_1111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf }) +ENTRY(ff_sws_swap_bytes_16_u16_0001_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_swap_bytes_16_u16_0011_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_swap_bytes_16_u16_0111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_swap_bytes_16_u16_1110_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_swap_bytes_16_u16_1111_neon, { .uop = SWS_UOP_SWAP_BYTES, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_expand_pair_16_u8_0001_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_expand_pair_16_u8_0011_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_expand_pair_16_u8_0111_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_expand_pair_16_u8_1110_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_expand_pair_16_u8_1111_neon, { .uop = SWS_UOP_EXPAND_PAIR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_to_u8_8_f32_0001_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_to_u8_8_f32_0011_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) +ENTRY(ff_sws_to_u8_8_f32_0111_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_to_u8_8_f32_1001_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_to_u8_8_f32_1110_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) +ENTRY(ff_sws_to_u8_8_f32_1111_neon, { .uop = SWS_UOP_TO_U8, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_to_u8_16_u16_0111_neon, { .uop = SWS_UOP_TO_U8, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_to_u16_8_u8_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_to_u16_8_u32_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_to_u16_8_u32_1110_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xe }) +ENTRY(ff_sws_to_u16_8_f32_0001_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_to_u16_8_f32_0011_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) +ENTRY(ff_sws_to_u16_8_f32_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_to_u16_8_f32_1001_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_to_u16_8_f32_1110_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) +ENTRY(ff_sws_to_u16_8_f32_1111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_to_u16_16_u8_0001_neon, { .uop = SWS_UOP_TO_U16, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_to_u16_16_u8_0111_neon, { .uop = SWS_UOP_TO_U16, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_to_u16_16_u8_1110_neon, { .uop = SWS_UOP_TO_U16, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_to_u32_8_u8_0001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_to_u32_8_u8_0111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_to_u32_8_u16_0001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_to_u32_8_u16_0111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_to_u32_8_f32_0001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_to_u32_8_f32_0111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_to_u32_8_f32_1001_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_to_u32_8_f32_1110_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) +ENTRY(ff_sws_to_u32_8_f32_1111_neon, { .uop = SWS_UOP_TO_U32, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_to_f32_8_u8_0001_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_to_f32_8_u8_0010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2 }) +ENTRY(ff_sws_to_f32_8_u8_0011_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3 }) +ENTRY(ff_sws_to_f32_8_u8_0100_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x4 }) +ENTRY(ff_sws_to_f32_8_u8_0111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_to_f32_8_u8_1010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xa }) +ENTRY(ff_sws_to_f32_8_u8_1100_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xc }) +ENTRY(ff_sws_to_f32_8_u8_1110_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xe }) +ENTRY(ff_sws_to_f32_8_u8_1111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xf }) +ENTRY(ff_sws_to_f32_8_u16_0001_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_to_f32_8_u16_0010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2 }) +ENTRY(ff_sws_to_f32_8_u16_0011_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x3 }) +ENTRY(ff_sws_to_f32_8_u16_0111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_to_f32_8_u16_1110_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe }) +ENTRY(ff_sws_to_f32_8_u16_1111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xf }) +ENTRY(ff_sws_to_f32_8_u32_0010_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x2 }) +ENTRY(ff_sws_to_f32_8_u32_0100_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x4 }) +ENTRY(ff_sws_to_f32_8_u32_0111_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_to_f32_8_u32_1110_neon, { .uop = SWS_UOP_TO_F32, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xe }) +ENTRY(ff_sws_scale_8_u32_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1 }) +ENTRY(ff_sws_scale_8_u32_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7 }) +ENTRY(ff_sws_scale_8_f32_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_scale_8_f32_0011_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) +ENTRY(ff_sws_scale_8_f32_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_scale_8_f32_1110_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) +ENTRY(ff_sws_scale_8_f32_1111_neon, { .uop = SWS_UOP_SCALE, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_scale_16_u8_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1 }) +ENTRY(ff_sws_scale_16_u8_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7 }) +ENTRY(ff_sws_scale_16_u16_0001_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1 }) +ENTRY(ff_sws_scale_16_u16_0111_neon, { .uop = SWS_UOP_SCALE, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7 }) +ENTRY(ff_sws_min_8_f32_0001_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_min_8_f32_0011_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) +ENTRY(ff_sws_min_8_f32_0111_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_min_8_f32_1001_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_min_8_f32_1110_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe }) +ENTRY(ff_sws_min_8_f32_1111_neon, { .uop = SWS_UOP_MIN, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_max_8_f32_0001_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1 }) +ENTRY(ff_sws_max_8_f32_0011_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3 }) +ENTRY(ff_sws_max_8_f32_0111_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7 }) +ENTRY(ff_sws_max_8_f32_1001_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9 }) +ENTRY(ff_sws_max_8_f32_1111_neon, { .uop = SWS_UOP_MAX, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf }) +ENTRY(ff_sws_unpack_0121_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7, .par.pack = { .pattern = {1, 2, 1, 0} } }) +ENTRY(ff_sws_unpack_0121_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7, .par.pack = { .pattern = {1, 2, 1, 0} } }) +ENTRY(ff_sws_unpack_0233_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7, .par.pack = { .pattern = {3, 3, 2, 0} } }) +ENTRY(ff_sws_unpack_0233_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7, .par.pack = { .pattern = {3, 3, 2, 0} } }) +ENTRY(ff_sws_unpack_0332_8_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7, .par.pack = { .pattern = {2, 3, 3, 0} } }) +ENTRY(ff_sws_unpack_0332_16_u8_0111_neon, { .uop = SWS_UOP_UNPACK, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7, .par.pack = { .pattern = {2, 3, 3, 0} } }) +ENTRY(ff_sws_unpack_0444_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7, .par.pack = { .pattern = {4, 4, 4, 0} } }) +ENTRY(ff_sws_unpack_0444_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.pack = { .pattern = {4, 4, 4, 0} } }) +ENTRY(ff_sws_unpack_0555_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7, .par.pack = { .pattern = {5, 5, 5, 0} } }) +ENTRY(ff_sws_unpack_0555_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.pack = { .pattern = {5, 5, 5, 0} } }) +ENTRY(ff_sws_unpack_0565_8_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7, .par.pack = { .pattern = {5, 6, 5, 0} } }) +ENTRY(ff_sws_unpack_0565_16_u16_0111_neon, { .uop = SWS_UOP_UNPACK, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.pack = { .pattern = {5, 6, 5, 0} } }) +ENTRY(ff_sws_unpack_2aaa_8_u32_0010_neon, { .uop = SWS_UOP_UNPACK, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x2, .par.pack = { .pattern = {10, 10, 10, 2} } }) +ENTRY(ff_sws_unpack_2aaa_8_u32_0111_neon, { .uop = SWS_UOP_UNPACK, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7, .par.pack = { .pattern = {10, 10, 10, 2} } }) +ENTRY(ff_sws_unpack_aaa2_8_u32_0100_neon, { .uop = SWS_UOP_UNPACK, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x4, .par.pack = { .pattern = {2, 10, 10, 10} } }) +ENTRY(ff_sws_unpack_aaa2_8_u32_1110_neon, { .uop = SWS_UOP_UNPACK, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xe, .par.pack = { .pattern = {2, 10, 10, 10} } }) +ENTRY(ff_sws_pack_0121_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7, .par.pack = { .pattern = {1, 2, 1, 0} } }) +ENTRY(ff_sws_pack_0121_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7, .par.pack = { .pattern = {1, 2, 1, 0} } }) +ENTRY(ff_sws_pack_0233_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7, .par.pack = { .pattern = {3, 3, 2, 0} } }) +ENTRY(ff_sws_pack_0233_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7, .par.pack = { .pattern = {3, 3, 2, 0} } }) +ENTRY(ff_sws_pack_0332_8_u8_0111_neon, { .uop = SWS_UOP_PACK, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x7, .par.pack = { .pattern = {2, 3, 3, 0} } }) +ENTRY(ff_sws_pack_0332_16_u8_0111_neon, { .uop = SWS_UOP_PACK, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7, .par.pack = { .pattern = {2, 3, 3, 0} } }) +ENTRY(ff_sws_pack_0444_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7, .par.pack = { .pattern = {4, 4, 4, 0} } }) +ENTRY(ff_sws_pack_0444_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.pack = { .pattern = {4, 4, 4, 0} } }) +ENTRY(ff_sws_pack_0555_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7, .par.pack = { .pattern = {5, 5, 5, 0} } }) +ENTRY(ff_sws_pack_0555_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.pack = { .pattern = {5, 5, 5, 0} } }) +ENTRY(ff_sws_pack_0565_8_u16_0111_neon, { .uop = SWS_UOP_PACK, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7, .par.pack = { .pattern = {5, 6, 5, 0} } }) +ENTRY(ff_sws_pack_0565_16_u16_0111_neon, { .uop = SWS_UOP_PACK, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.pack = { .pattern = {5, 6, 5, 0} } }) +ENTRY(ff_sws_pack_2aaa_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf, .par.pack = { .pattern = {10, 10, 10, 2} } }) +ENTRY(ff_sws_pack_aaa2_8_u32_1111_neon, { .uop = SWS_UOP_PACK, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xf, .par.pack = { .pattern = {2, 10, 10, 10} } }) +ENTRY(ff_sws_lshift_1_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7, .par.shift = { .amount = 1 } }) +ENTRY(ff_sws_lshift_1_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.shift = { .amount = 1 } }) +ENTRY(ff_sws_lshift_1_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe, .par.shift = { .amount = 1 } }) +ENTRY(ff_sws_lshift_2_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7, .par.shift = { .amount = 2 } }) +ENTRY(ff_sws_lshift_2_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe, .par.shift = { .amount = 2 } }) +ENTRY(ff_sws_lshift_2_8_u32_0111_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x7, .par.shift = { .amount = 2 } }) +ENTRY(ff_sws_lshift_2_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.shift = { .amount = 2 } }) +ENTRY(ff_sws_lshift_2_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe, .par.shift = { .amount = 2 } }) +ENTRY(ff_sws_lshift_3_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.shift = { .amount = 3 } }) +ENTRY(ff_sws_lshift_4_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1, .par.shift = { .amount = 4 } }) +ENTRY(ff_sws_lshift_4_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7, .par.shift = { .amount = 4 } }) +ENTRY(ff_sws_lshift_4_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe, .par.shift = { .amount = 4 } }) +ENTRY(ff_sws_lshift_4_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1, .par.shift = { .amount = 4 } }) +ENTRY(ff_sws_lshift_4_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.shift = { .amount = 4 } }) +ENTRY(ff_sws_lshift_4_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe, .par.shift = { .amount = 4 } }) +ENTRY(ff_sws_lshift_5_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.shift = { .amount = 5 } }) +ENTRY(ff_sws_lshift_6_8_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1, .par.shift = { .amount = 6 } }) +ENTRY(ff_sws_lshift_6_8_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7, .par.shift = { .amount = 6 } }) +ENTRY(ff_sws_lshift_6_8_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xe, .par.shift = { .amount = 6 } }) +ENTRY(ff_sws_lshift_6_16_u16_0001_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1, .par.shift = { .amount = 6 } }) +ENTRY(ff_sws_lshift_6_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.shift = { .amount = 6 } }) +ENTRY(ff_sws_lshift_6_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe, .par.shift = { .amount = 6 } }) +ENTRY(ff_sws_lshift_7_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.shift = { .amount = 7 } }) +ENTRY(ff_sws_lshift_8_16_u16_0111_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.shift = { .amount = 8 } }) +ENTRY(ff_sws_lshift_8_16_u16_1110_neon, { .uop = SWS_UOP_LSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0xe, .par.shift = { .amount = 8 } }) +ENTRY(ff_sws_rshift_4_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1, .par.shift = { .amount = 4 } }) +ENTRY(ff_sws_rshift_4_8_u16_0010_neon, { .uop = SWS_UOP_RSHIFT, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2, .par.shift = { .amount = 4 } }) +ENTRY(ff_sws_rshift_4_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7, .par.shift = { .amount = 4 } }) +ENTRY(ff_sws_rshift_4_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.shift = { .amount = 4 } }) +ENTRY(ff_sws_rshift_6_8_u16_0001_neon, { .uop = SWS_UOP_RSHIFT, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1, .par.shift = { .amount = 6 } }) +ENTRY(ff_sws_rshift_6_8_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x7, .par.shift = { .amount = 6 } }) +ENTRY(ff_sws_rshift_6_16_u16_0111_neon, { .uop = SWS_UOP_RSHIFT, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.shift = { .amount = 6 } }) +ENTRY(ff_sws_clear_0fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x8, .par.clear = { .one = 0x0, .zero = 0x8 } }) +ENTRY(ff_sws_clear_0fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xb, .par.clear = { .one = 0x0, .zero = 0x8 } }) +ENTRY(ff_sws_clear_0fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x8, .par.clear = { .one = 0x0, .zero = 0x8 } }) +ENTRY(ff_sws_clear_0fff_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xd, .par.clear = { .one = 0x0, .zero = 0x8 } }) +ENTRY(ff_sws_clear_0fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x8, .par.clear = { .one = 0x0, .zero = 0x8 } }) +ENTRY(ff_sws_clear_0fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x8, .par.clear = { .one = 0x0, .zero = 0x8 } }) +ENTRY(ff_sws_clear_1fff_8_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x8, .par.clear = { .one = 0x8, .zero = 0x0 } }) +ENTRY(ff_sws_clear_1fff_8_u8_1011_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xb, .par.clear = { .one = 0x8, .zero = 0x0 } }) +ENTRY(ff_sws_clear_1fff_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xd, .par.clear = { .one = 0x8, .zero = 0x0 } }) +ENTRY(ff_sws_clear_1fff_8_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x8, .par.clear = { .one = 0x8, .zero = 0x0 } }) +ENTRY(ff_sws_clear_1fff_16_u8_1000_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x8, .par.clear = { .one = 0x8, .zero = 0x0 } }) +ENTRY(ff_sws_clear_1fff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x8, .par.clear = { .one = 0x8, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ff1f_8_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x2, .par.clear = { .one = 0x2, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ff1f_8_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x2, .par.clear = { .one = 0x2, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ff1f_16_u8_0010_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x2, .par.clear = { .one = 0x2, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ff1f_16_u16_0010_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x2, .par.clear = { .one = 0x2, .zero = 0x0 } }) +ENTRY(ff_sws_clear_fff0_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1, .par.clear = { .one = 0x0, .zero = 0x1 } }) +ENTRY(ff_sws_clear_fff0_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1, .par.clear = { .one = 0x0, .zero = 0x1 } }) +ENTRY(ff_sws_clear_fff1_8_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x1, .par.clear = { .one = 0x1, .zero = 0x0 } }) +ENTRY(ff_sws_clear_fff1_8_u8_1101_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xd, .par.clear = { .one = 0x1, .zero = 0x0 } }) +ENTRY(ff_sws_clear_fff1_8_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0x1, .par.clear = { .one = 0x1, .zero = 0x0 } }) +ENTRY(ff_sws_clear_fff1_8_u16_1101_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xd, .par.clear = { .one = 0x1, .zero = 0x0 } }) +ENTRY(ff_sws_clear_fff1_16_u8_0001_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x1, .par.clear = { .one = 0x1, .zero = 0x0 } }) +ENTRY(ff_sws_clear_fff1_16_u8_0111_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x7, .par.clear = { .one = 0x1, .zero = 0x0 } }) +ENTRY(ff_sws_clear_fff1_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1, .par.clear = { .one = 0x1, .zero = 0x0 } }) +ENTRY(ff_sws_clear_fff1_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.clear = { .one = 0x1, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_8_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x3, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_8_u8_0101_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0x5, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_8_u8_1100_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U8, .mask = 0xc, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_8_u16_1100_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U16, .mask = 0xc, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_8_u32_0001_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x1, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_8_u32_0010_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x2, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_8_u32_0101_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x5, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_8_u32_1000_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0x8, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_8_u32_1010_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xa, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_8_u32_1011_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xb, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_8_u32_1101_neon, { .uop = SWS_UOP_CLEAR, .block_size = 8, .type = SWS_PIXEL_U32, .mask = 0xd, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_16_u8_0011_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x3, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_16_u8_0110_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U8, .mask = 0x6, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_16_u16_0001_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x1, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_16_u16_0011_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x3, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_16_u16_0111_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x7, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_clear_ffff_16_u16_1000_neon, { .uop = SWS_UOP_CLEAR, .block_size = 16, .type = SWS_PIXEL_U16, .mask = 0x8, .par.clear = { .one = 0x0, .zero = 0x0 } }) +ENTRY(ff_sws_linear_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1, .par.lin = { .one = 0x0, .zero = 0xfffee } }) +ENTRY(ff_sws_linear_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1, .par.lin = { .one = 0x0, .zero = 0xffff8 } }) +ENTRY(ff_sws_linear_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1, .par.lin = { .one = 0x0, .zero = 0xfffe8 } }) +ENTRY(ff_sws_linear_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2, .par.lin = { .one = 0x0, .zero = 0xfffbf } }) +ENTRY(ff_sws_linear_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.lin = { .one = 0x421, .zero = 0xfb10a } }) +ENTRY(ff_sws_linear_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.lin = { .one = 0x0, .zero = 0xfb10a } }) +ENTRY(ff_sws_linear_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.lin = { .one = 0x0, .zero = 0xfefbe } }) +ENTRY(ff_sws_linear_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.lin = { .one = 0x0, .zero = 0xfadae } }) +ENTRY(ff_sws_linear_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.lin = { .one = 0x0, .zero = 0xfa118 } }) +ENTRY(ff_sws_linear_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.lin = { .one = 0x0, .zero = 0xfa108 } }) +ENTRY(ff_sws_linear_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8, .par.lin = { .one = 0x0, .zero = 0xbffff } }) +ENTRY(ff_sws_linear_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9, .par.lin = { .one = 0x0, .zero = 0xbffee } }) +ENTRY(ff_sws_linear_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9, .par.lin = { .one = 0x0, .zero = 0xbfff8 } }) +ENTRY(ff_sws_linear_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf, .par.lin = { .one = 0x0, .zero = 0xbb10a } }) +ENTRY(ff_sws_linear_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf, .par.lin = { .one = 0x0, .zero = 0xbefbe } }) +ENTRY(ff_sws_linear_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf, .par.lin = { .one = 0x0, .zero = 0xba108 } }) +ENTRY(ff_sws_linear_fma_000000000f_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1, .par.lin = { .one = 0x0, .zero = 0xfffee } }) +ENTRY(ff_sws_linear_fma_00000000fc_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1, .par.lin = { .one = 0x0, .zero = 0xffff8 } }) +ENTRY(ff_sws_linear_fma_00000000ff_8_f32_0001_neon, { .uop = SWS_UOP_LINEAR_FMA, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1, .par.lin = { .one = 0x0, .zero = 0xfffe8 } }) +ENTRY(ff_sws_linear_fma_000000c000_8_f32_0010_neon, { .uop = SWS_UOP_LINEAR_FMA, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2, .par.lin = { .one = 0x0, .zero = 0xfffbf } }) +ENTRY(ff_sws_linear_fma_000373dcc7_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.lin = { .one = 0x421, .zero = 0xfb10a } }) +ENTRY(ff_sws_linear_fma_0003f3fccf_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.lin = { .one = 0x0, .zero = 0xfb10a } }) +ENTRY(ff_sws_linear_fma_000c00c00c_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.lin = { .one = 0x0, .zero = 0xfefbe } }) +ENTRY(ff_sws_linear_fma_000c30cc0f_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.lin = { .one = 0x0, .zero = 0xfadae } }) +ENTRY(ff_sws_linear_fma_000ff3fcfc_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.lin = { .one = 0x0, .zero = 0xfa118 } }) +ENTRY(ff_sws_linear_fma_000ff3fcff_8_f32_0111_neon, { .uop = SWS_UOP_LINEAR_FMA, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.lin = { .one = 0x0, .zero = 0xfa108 } }) +ENTRY(ff_sws_linear_fma_c000000000_8_f32_1000_neon, { .uop = SWS_UOP_LINEAR_FMA, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8, .par.lin = { .one = 0x0, .zero = 0xbffff } }) +ENTRY(ff_sws_linear_fma_c00000000f_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9, .par.lin = { .one = 0x0, .zero = 0xbffee } }) +ENTRY(ff_sws_linear_fma_c0000000fc_8_f32_1001_neon, { .uop = SWS_UOP_LINEAR_FMA, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9, .par.lin = { .one = 0x0, .zero = 0xbfff8 } }) +ENTRY(ff_sws_linear_fma_c003f3fccf_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf, .par.lin = { .one = 0x0, .zero = 0xbb10a } }) +ENTRY(ff_sws_linear_fma_c00c00c00c_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf, .par.lin = { .one = 0x0, .zero = 0xbefbe } }) +ENTRY(ff_sws_linear_fma_c00ff3fcff_8_f32_1111_neon, { .uop = SWS_UOP_LINEAR_FMA, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf, .par.lin = { .one = 0x0, .zero = 0xba108 } }) +ENTRY(ff_sws_dither_0325_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf, .par.dither = { .y_offset = {5, 2, 3, 0}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_032f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe, .par.dither = { .y_offset = {0, 2, 3, 0}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_2305_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf, .par.dither = { .y_offset = {5, 0, 3, 2}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_230f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe, .par.dither = { .y_offset = {0, 0, 3, 2}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_3000_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf, .par.dither = { .y_offset = {0, 0, 0, 3}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_302f_4_8_f32_1110_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xe, .par.dither = { .y_offset = {0, 2, 0, 3}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_3ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9, .par.dither = { .y_offset = {0, 0, 0, 3}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_5023_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf, .par.dither = { .y_offset = {3, 2, 0, 5}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_5032_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf, .par.dither = { .y_offset = {2, 3, 0, 5}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_5230_4_8_f32_1111_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0xf, .par.dither = { .y_offset = {0, 3, 2, 5}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_5ff0_4_8_f32_1001_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x9, .par.dither = { .y_offset = {0, 0, 0, 5}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_5fff_4_8_f32_1000_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x8, .par.dither = { .y_offset = {0, 0, 0, 5}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_f023_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.dither = { .y_offset = {3, 2, 0, 0}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_f032_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.dither = { .y_offset = {2, 3, 0, 0}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_f203_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.dither = { .y_offset = {3, 0, 2, 0}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_f230_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.dither = { .y_offset = {0, 3, 2, 0}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_f2f0_4_8_f32_0101_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x5, .par.dither = { .y_offset = {0, 0, 2, 0}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_f2ff_4_8_f32_0100_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x4, .par.dither = { .y_offset = {0, 0, 2, 0}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_f302_4_8_f32_0111_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x7, .par.dither = { .y_offset = {2, 0, 3, 0}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_ff30_4_8_f32_0011_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x3, .par.dither = { .y_offset = {0, 3, 0, 0}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_ff3f_4_8_f32_0010_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x2, .par.dither = { .y_offset = {0, 3, 0, 0}, .size_log2 = 4 } }) +ENTRY(ff_sws_dither_fff0_4_8_f32_0001_neon, { .uop = SWS_UOP_DITHER, .block_size = 8, .type = SWS_PIXEL_F32, .mask = 0x1, .par.dither = { .y_offset = {0, 0, 0, 0}, .size_log2 = 4 } }) diff --git a/libswscale/tests/sws_ops_aarch64.c b/libswscale/tests/sws_ops_aarch64.c index 0cc0c4f0af..d09c74fc07 100644 --- a/libswscale/tests/sws_ops_aarch64.c +++ b/libswscale/tests/sws_ops_aarch64.c @@ -296,38 +296,7 @@ static const char pixel_type_names[SWS_PIXEL_TYPE_NB][4] = { [SWS_PIXEL_F32] = "f32", }; -static void impl_func_name(AVBPrint *bp, const SwsAArch64OpImplParams *params) -{ - const SwsUOpParams *par = ¶ms->par; - av_bprintf(bp, "ff_sws_%s", op_type_names[params->uop]); - switch (params->uop) { - case SWS_UOP_PERMUTE: - case SWS_UOP_COPY: - av_bprintf(bp, "_%012" PRIx64, move_to_mask(&par->move)); - break; - case SWS_UOP_UNPACK: - case SWS_UOP_PACK: - av_bprintf(bp, "_%04x", pack_to_mask(&par->pack)); - break; - case SWS_UOP_LSHIFT: - case SWS_UOP_RSHIFT: - av_bprintf(bp, "_%u", par->shift.amount); - break; - case SWS_UOP_CLEAR: - av_bprintf(bp, "_%04x", clear_to_mask(&par->clear)); - break; - case SWS_UOP_LINEAR: - case SWS_UOP_LINEAR_FMA: - av_bprintf(bp, "_%010" PRIx64, linear_to_mask(&par->lin)); - break; - case SWS_UOP_DITHER: - av_bprintf(bp, "_%04x_%u", dither_to_mask(&par->dither), par->dither.size_log2); - break; - } - av_bprintf(bp, "_%u_%s_%04x_neon", params->block_size, pixel_type_names[params->type], nibble_mask(params->mask)); -} - -static const char op_types[SWS_UOP_TYPE_NB][32] = { +static const char uop_types[SWS_UOP_TYPE_NB][32] = { [SWS_UOP_READ_BIT ] = "SWS_UOP_READ_BIT", [SWS_UOP_READ_NIBBLE ] = "SWS_UOP_READ_NIBBLE", [SWS_UOP_READ_PACKED ] = "SWS_UOP_READ_PACKED", @@ -367,10 +336,50 @@ static const char pixel_types[SWS_PIXEL_TYPE_NB][32] = { static void serialize_op(AVBPrint *bp, const SwsAArch64OpImplParams *params) { +#define FUNC_NAME_WIDTH 45 +#define UOP_NAME_WIDTH 21 +#define TYPE_NAME_WIDTH 14 + const SwsUOpParams *par = ¶ms->par; - av_bprintf(bp, "ENTRY("); - impl_func_name(bp, params); - av_bprintf(bp, ", { .uop = %s", op_types[params->uop]); + + char func_name[FUNC_NAME_WIDTH + 2]; + snprintf(func_name, sizeof(func_name), "ff_sws_%s", op_type_names[params->uop]); + switch (params->uop) { + case SWS_UOP_PERMUTE: + case SWS_UOP_COPY: + av_strlcatf(func_name, sizeof(func_name), "_%012" PRIx64, move_to_mask(&par->move)); + break; + case SWS_UOP_UNPACK: + case SWS_UOP_PACK: + av_strlcatf(func_name, sizeof(func_name), "_%04x", pack_to_mask(&par->pack)); + break; + case SWS_UOP_LSHIFT: + case SWS_UOP_RSHIFT: + av_strlcatf(func_name, sizeof(func_name), "_%u", par->shift.amount); + break; + case SWS_UOP_CLEAR: + av_strlcatf(func_name, sizeof(func_name), "_%04x", clear_to_mask(&par->clear)); + break; + case SWS_UOP_LINEAR: + case SWS_UOP_LINEAR_FMA: + av_strlcatf(func_name, sizeof(func_name), "_%010" PRIx64, linear_to_mask(&par->lin)); + break; + case SWS_UOP_DITHER: + av_strlcatf(func_name, sizeof(func_name), "_%04x_%u", dither_to_mask(&par->dither), par->dither.size_log2); + break; + } + av_strlcatf(func_name, sizeof(func_name), "_%u_%s_%04x_neon,", + params->block_size, pixel_type_names[params->type], nibble_mask(params->mask)); + + char uop_name[UOP_NAME_WIDTH + 2]; + snprintf(uop_name, sizeof(uop_name), "%s,", uop_types[params->uop]); + + char type_name[TYPE_NAME_WIDTH + 2]; + snprintf(type_name, sizeof(type_name), "%s,", pixel_types[params->type]); + + av_bprintf(bp, "ENTRY(%-*s { .uop = %-*s .block_size = %2u, .type = %-*s .mask = 0x%x", + FUNC_NAME_WIDTH, func_name, UOP_NAME_WIDTH, uop_name, + params->block_size, TYPE_NAME_WIDTH, type_name, params->mask); switch (params->uop) { case SWS_UOP_PERMUTE: case SWS_UOP_COPY: @@ -407,7 +416,7 @@ static void serialize_op(AVBPrint *bp, const SwsAArch64OpImplParams *params) par->dither.size_log2); break; } - av_bprintf(bp, ", .block_size = %u, .type = %s, .mask = 0x%x })", params->block_size, pixel_types[params->type], params->mask); + av_bprintf(bp, " })"); } /* Serialize SwsAArch64OpImplParams for one function. */ -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]