[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(&params, 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(&params, 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, &params);
         if (ret < 0)
             goto error;
-        SwsFuncPtr func = ff_sws_aarch64_lookup(&params);
+        SwsFuncPtr func = aarch64_lookup(&params);
         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(&params, 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(&params, 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(&params->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(&params->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(&params->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(&params->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(&params->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(&params->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(&params->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(&para->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(&para->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(&para->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(&para->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(&para->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 = &params->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(&params->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(&params->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(&params->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(&params->linear));
+        av_bprintf(bp, "_%010" PRIx64, linear_to_mask(&par->lin));
         break;
     case SWS_UOP_DITHER:
-        av_bprintf(bp, "_%04x_%u", dither_to_mask(&params->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 = &params->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 = &params->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 = &params->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]