[PR] Problem with NASM 3.02 (PR #23817)
Jamaika1 via ffmpeg-devel <[email protected]> Wed, 15 Jul 2026 07:29:55 -0000
| Newsgroups | gmane.comp.video.ffmpeg.devel |
|---|---|
| Message-ID | <178410059606.59.2767549856331615605@29965ddac10e> |
PR #23817 opened by Jamaika1
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23817
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23817.patch
I don't know if I wrote down the definitions correctly: `%define SWS_GLUE3(x, y, z) x %% _ %% y %% _ %% z`
```%define DECL_OP_MACRO(...) {DECL_OP MACRO __VA_ARGS__},
%define DEF_MACRO(UOP, TYPE) \
%define DECL_ TYPE%% _ UOP%% (MACRO) \
MULTILINE SWS_FOR_ TYPE%% _ UOP%% (DECL_OP_MACRO) \
dummy```
Delele error: extra/ops_include1.asm:1167: error: `%define' expects a macro identifier
extra/ops_include1.asm:25: ... from macro `MULTILINE' defined here
;DEF_ALL_MACROS(U32)
;DEF_ALL_MACROS(F32)
# Summary of changes
Briefly describe what this PR does and why.
<!--
If this PR requires new FATE test samples, attach them to the PR and
list their target paths below (relative to the fate-suite root).
Attached filenames must match the sample's filename:
```fate-samples
# e.g. vorbis/new-sample.ogg
```
-->
>From 4e861911ec97c7e5744992f36c9b339fc43ea341 Mon Sep 17 00:00:00 2001
From: Jamaika1 <[email protected]>
Date: Wed, 15 Jul 2026 07:28:47 +0000
Subject: [PATCH] Problem with NASM 3.02
I don't know if I wrote down the definitions correctly: `%define SWS_GLUE3(x, y, z) x %% _ %% y %% _ %% z`
```%define DECL_OP_MACRO(...) {DECL_OP MACRO __VA_ARGS__},
%define DEF_MACRO(UOP, TYPE) \
%define DECL_ TYPE%% _ UOP%% (MACRO) \
MULTILINE SWS_FOR_ TYPE%% _ UOP%% (DECL_OP_MACRO) \
dummy```
Delele error: extra/ops_include1.asm:1167: error: `%define' expects a macro identifier
extra/ops_include1.asm:25: ... from macro `MULTILINE' defined here
;DEF_ALL_MACROS(U32)
;DEF_ALL_MACROS(F32)
---
libswscale/x86/ops_common.asm | 1501 ++++++++++++++++++++++++++++++++-
1 file changed, 1500 insertions(+), 1 deletion(-)
diff --git a/libswscale/x86/ops_common.asm b/libswscale/x86/ops_common.asm
index a5dd105da5..0a71d90e99 100644
--- a/libswscale/x86/ops_common.asm
+++ b/libswscale/x86/ops_common.asm
@@ -18,7 +18,1506 @@
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
;******************************************************************************
-%include "ops_include.asm"
+%include "x86util.asm"
+
+%macro MULTILINE 0-*
+ %rep %0
+ %1
+ %rotate 1
+ %endrep
+%endmacro
+
+%macro dummy 0
+%endmacro
+
+%define SWS_GLUE3(x, y, z) x %% _ %% y %% _ %% z
+%define SWS_FOR(TYPE, UOP, MACRO, ...) \
+ SWS_GLUE3(SWS_FOR, TYPE, UOP)(MACRO, __VA_ARGS__)
+%define SWS_FOR_STRUCT(TYPE, UOP, MACRO, ...) \
+ SWS_GLUE3(SWS_FOR_STRUCT, TYPE, UOP)(MACRO, __VA_ARGS__)
+
+%define SWS_FOR_U8_READ_PLANAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_read_planar_x , SWS_PIXEL_U8 , SWS_UOP_READ_PLANAR , 0x1) \
+ MACRO(__VA_ARGS__, u8_read_planar_xy , SWS_PIXEL_U8 , SWS_UOP_READ_PLANAR , 0x3) \
+ MACRO(__VA_ARGS__, u8_read_planar_xyz , SWS_PIXEL_U8 , SWS_UOP_READ_PLANAR , 0x7) \
+ MACRO(__VA_ARGS__, u8_read_planar_xyzw , SWS_PIXEL_U8 , SWS_UOP_READ_PLANAR , 0xf)
+%define SWS_FOR_STRUCT_U8_READ_PLANAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_read_planar_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PLANAR , .mask = 0x1) \
+ MACRO(__VA_ARGS__, u8_read_planar_xy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PLANAR , .mask = 0x3) \
+ MACRO(__VA_ARGS__, u8_read_planar_xyz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PLANAR , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u8_read_planar_xyzw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PLANAR , .mask = 0xf)
+%define SWS_FOR_U8_READ_PLANAR_FH(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_read_planar_fh_x_f32 , SWS_PIXEL_U8 , SWS_UOP_READ_PLANAR_FH , 0x1, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fh_xy_f32 , SWS_PIXEL_U8 , SWS_UOP_READ_PLANAR_FH , 0x3, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fh_xyz_f32 , SWS_PIXEL_U8 , SWS_UOP_READ_PLANAR_FH , 0x7, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fh_xyzw_f32 , SWS_PIXEL_U8 , SWS_UOP_READ_PLANAR_FH , 0xf, SWS_PIXEL_F32)
+%define SWS_FOR_STRUCT_U8_READ_PLANAR_FH(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_read_planar_fh_x_f32 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PLANAR_FH , .mask = 0x1, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fh_xy_f32 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PLANAR_FH , .mask = 0x3, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fh_xyz_f32 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PLANAR_FH , .mask = 0x7, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fh_xyzw_f32 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PLANAR_FH , .mask = 0xf, .par.filter.type = SWS_PIXEL_F32)
+%define SWS_FOR_U8_READ_PLANAR_FV(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_read_planar_fv_x_f32 , SWS_PIXEL_U8 , SWS_UOP_READ_PLANAR_FV , 0x1, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fv_xy_f32 , SWS_PIXEL_U8 , SWS_UOP_READ_PLANAR_FV , 0x3, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fv_xyz_f32 , SWS_PIXEL_U8 , SWS_UOP_READ_PLANAR_FV , 0x7, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fv_xyzw_f32 , SWS_PIXEL_U8 , SWS_UOP_READ_PLANAR_FV , 0xf, SWS_PIXEL_F32)
+%define SWS_FOR_STRUCT_U8_READ_PLANAR_FV(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_read_planar_fv_x_f32 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PLANAR_FV , .mask = 0x1, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fv_xy_f32 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PLANAR_FV , .mask = 0x3, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fv_xyz_f32 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PLANAR_FV , .mask = 0x7, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fv_xyzw_f32 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PLANAR_FV , .mask = 0xf, .par.filter.type = SWS_PIXEL_F32)
+%define SWS_FOR_U8_READ_PLANAR_FV_FMA(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_read_planar_fv_fma_x_f32 , SWS_PIXEL_U8 , SWS_UOP_READ_PLANAR_FV_FMA, 0x1, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fv_fma_xy_f32 , SWS_PIXEL_U8 , SWS_UOP_READ_PLANAR_FV_FMA, 0x3, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fv_fma_xyz_f32 , SWS_PIXEL_U8 , SWS_UOP_READ_PLANAR_FV_FMA, 0x7, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fv_fma_xyzw_f32 , SWS_PIXEL_U8 , SWS_UOP_READ_PLANAR_FV_FMA, 0xf, SWS_PIXEL_F32)
+%define SWS_FOR_STRUCT_U8_READ_PLANAR_FV_FMA(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_read_planar_fv_fma_x_f32 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PLANAR_FV_FMA, .mask = 0x1, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fv_fma_xy_f32 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PLANAR_FV_FMA, .mask = 0x3, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fv_fma_xyz_f32 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PLANAR_FV_FMA, .mask = 0x7, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u8_read_planar_fv_fma_xyzw_f32 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PLANAR_FV_FMA, .mask = 0xf, .par.filter.type = SWS_PIXEL_F32)
+%define SWS_FOR_U8_READ_PACKED(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_read_packed_xy , SWS_PIXEL_U8 , SWS_UOP_READ_PACKED , 0x3) \
+ MACRO(__VA_ARGS__, u8_read_packed_xyz , SWS_PIXEL_U8 , SWS_UOP_READ_PACKED , 0x7) \
+ MACRO(__VA_ARGS__, u8_read_packed_xyzw , SWS_PIXEL_U8 , SWS_UOP_READ_PACKED , 0xf)
+%define SWS_FOR_STRUCT_U8_READ_PACKED(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_read_packed_xy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PACKED , .mask = 0x3) \
+ MACRO(__VA_ARGS__, u8_read_packed_xyz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PACKED , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u8_read_packed_xyzw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PACKED , .mask = 0xf)
+%define SWS_FOR_U8_READ_NIBBLE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_read_nibble_x , SWS_PIXEL_U8 , SWS_UOP_READ_NIBBLE , 0x1)
+%define SWS_FOR_STRUCT_U8_READ_NIBBLE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_read_nibble_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_NIBBLE , .mask = 0x1)
+%define SWS_FOR_U8_READ_BIT(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_read_bit_x , SWS_PIXEL_U8 , SWS_UOP_READ_BIT , 0x1)
+%define SWS_FOR_STRUCT_U8_READ_BIT(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_read_bit_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_BIT , .mask = 0x1)
+%define SWS_FOR_U8_READ_PALETTE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_read_palette_xyzw , SWS_PIXEL_U8 , SWS_UOP_READ_PALETTE , 0xf)
+%define SWS_FOR_STRUCT_U8_READ_PALETTE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_read_palette_xyzw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_READ_PALETTE , .mask = 0xf)
+%define SWS_FOR_U8_WRITE_PLANAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_write_planar_x , SWS_PIXEL_U8 , SWS_UOP_WRITE_PLANAR , 0x1) \
+ MACRO(__VA_ARGS__, u8_write_planar_xy , SWS_PIXEL_U8 , SWS_UOP_WRITE_PLANAR , 0x3) \
+ MACRO(__VA_ARGS__, u8_write_planar_xyz , SWS_PIXEL_U8 , SWS_UOP_WRITE_PLANAR , 0x7) \
+ MACRO(__VA_ARGS__, u8_write_planar_xyzw , SWS_PIXEL_U8 , SWS_UOP_WRITE_PLANAR , 0xf)
+%define SWS_FOR_STRUCT_U8_WRITE_PLANAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_write_planar_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_WRITE_PLANAR , .mask = 0x1) \
+ MACRO(__VA_ARGS__, u8_write_planar_xy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_WRITE_PLANAR , .mask = 0x3) \
+ MACRO(__VA_ARGS__, u8_write_planar_xyz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_WRITE_PLANAR , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u8_write_planar_xyzw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_WRITE_PLANAR , .mask = 0xf)
+%define SWS_FOR_U8_WRITE_PACKED(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_write_packed_xy , SWS_PIXEL_U8 , SWS_UOP_WRITE_PACKED , 0x3) \
+ MACRO(__VA_ARGS__, u8_write_packed_xyz , SWS_PIXEL_U8 , SWS_UOP_WRITE_PACKED , 0x7) \
+ MACRO(__VA_ARGS__, u8_write_packed_xyzw , SWS_PIXEL_U8 , SWS_UOP_WRITE_PACKED , 0xf)
+%define SWS_FOR_STRUCT_U8_WRITE_PACKED(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_write_packed_xy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_WRITE_PACKED , .mask = 0x3) \
+ MACRO(__VA_ARGS__, u8_write_packed_xyz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_WRITE_PACKED , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u8_write_packed_xyzw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_WRITE_PACKED , .mask = 0xf)
+%define SWS_FOR_U8_WRITE_NIBBLE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_write_nibble_x , SWS_PIXEL_U8 , SWS_UOP_WRITE_NIBBLE , 0x1)
+%define SWS_FOR_STRUCT_U8_WRITE_NIBBLE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_write_nibble_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_WRITE_NIBBLE , .mask = 0x1)
+%define SWS_FOR_U8_WRITE_BIT(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_write_bit_x , SWS_PIXEL_U8 , SWS_UOP_WRITE_BIT , 0x1)
+%define SWS_FOR_STRUCT_U8_WRITE_BIT(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_write_bit_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_WRITE_BIT , .mask = 0x1)
+%define SWS_FOR_U8_PERMUTE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_permute_xy_xy_zw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x3, 2, 0, 1, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyz_x_w , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyz_y_w , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 1, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyz_xy_yw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 2, 0, 1, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyz_yx_xw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 2, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyz_xyz_yzw , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 3, 0, 1, 2, 0, 0, 0, 1, 2, 3, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyz_xtyz_wyzt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0x7, 4, 0, -1, 1, 2, 0, 0, 3, 1, 2, -1, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyw_x_z , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xb, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xzw_x_y , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xd, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_yzw_y_x , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_yzw_z_x , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_yzw_w_x , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_yzw_wz_zx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 2, 3, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_yzw_wyz_yzx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 3, 3, 1, 2, 0, 0, 0, 1, 2, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_yzw_wzy_zyx , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 3, 3, 2, 1, 0, 0, 0, 2, 1, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_yzw_wtyz_xyzt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xe, 4, 3, -1, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txy_xyt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 3, -1, 0, 1, 0, 0, 0, 0, 1, -1, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txz_xzt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 3, -1, 0, 2, 0, 0, 0, 0, 2, -1, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_tyz_yzt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 3, -1, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_tyw_ywt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 3, -1, 1, 3, 0, 0, 0, 1, 3, -1, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txyz_xyzt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 4, -1, 0, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txzy_xzyt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 4, -1, 0, 2, 1, 0, 0, 0, 2, 1, -1, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txzw_xzwt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 4, -1, 0, 2, 3, 0, 0, 0, 2, 3, -1, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txwz_xwzt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 4, -1, 0, 3, 2, 0, 0, 0, 3, 2, -1, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_tyzw_yzwt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 4, -1, 1, 2, 3, 0, 0, 1, 2, 3, -1, 0, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txyzw_xyzwt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 5, -1, 0, 1, 2, 3, 0, 0, 1, 2, 3, -1, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txwyz_xwyzt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 5, -1, 0, 3, 1, 2, 0, 0, 3, 1, 2, -1, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txwzy_xwzyt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 5, -1, 0, 3, 2, 1, 0, 0, 3, 2, 1, -1, 0) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txwtyz_xwtyzt , SWS_PIXEL_U8 , SWS_UOP_PERMUTE , 0xf, 6, -1, 0, 3, -1, 1, 2, 0, 3, -1, 1, 2, -1)
+%define SWS_FOR_STRUCT_U8_PERMUTE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_permute_xy_xy_zw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x3, .par.move.num_moves = 2, .par.move.dst = {0, 1, 0, 0, 0, 0}, .par.move.src = {2, 3, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyz_x_w , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyz_y_w , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyz_xy_yw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 2, .par.move.dst = {0, 1, 0, 0, 0, 0}, .par.move.src = {1, 3, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyz_yx_xw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 2, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {0, 3, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyz_xyz_yzw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 3, .par.move.dst = {0, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, 3, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyz_xtyz_wyzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 4, .par.move.dst = {0, -1, 1, 2, 0, 0}, .par.move.src = {3, 1, 2, -1, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyw_x_z , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xb, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xzw_x_y , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xd, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {1, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_yzw_y_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_yzw_z_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 1, .par.move.dst = {2, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_yzw_w_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 1, .par.move.dst = {3, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_yzw_wz_zx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 2, .par.move.dst = {3, 2, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_yzw_wyz_yzx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 3, .par.move.dst = {3, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_yzw_wzy_zyx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 3, .par.move.dst = {3, 2, 1, 0, 0, 0}, .par.move.src = {2, 1, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_yzw_wtyz_xyzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 4, .par.move.dst = {3, -1, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txy_xyt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 1, 0, 0, 0}, .par.move.src = {0, 1, -1, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txz_xzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 2, 0, 0, 0}, .par.move.src = {0, 2, -1, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_tyz_yzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, -1, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_tyw_ywt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 1, 3, 0, 0, 0}, .par.move.src = {1, 3, -1, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txyz_xyzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txzy_xzyt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 2, 1, 0, 0}, .par.move.src = {0, 2, 1, -1, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txzw_xzwt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 2, 3, 0, 0}, .par.move.src = {0, 2, 3, -1, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txwz_xwzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 3, 2, 0, 0}, .par.move.src = {0, 3, 2, -1, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_tyzw_yzwt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 1, 2, 3, 0, 0}, .par.move.src = {1, 2, 3, -1, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txyzw_xyzwt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 1, 2, 3, 0}, .par.move.src = {0, 1, 2, 3, -1, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txwyz_xwyzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 3, 1, 2, 0}, .par.move.src = {0, 3, 1, 2, -1, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txwzy_xwzyt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 3, 2, 1, 0}, .par.move.src = {0, 3, 2, 1, -1, 0}) \
+ MACRO(__VA_ARGS__, u8_permute_xyzw_txwtyz_xwtyzt , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 6, .par.move.dst = {-1, 0, 3, -1, 1, 2}, .par.move.src = {0, 3, -1, 1, 2, -1})
+%define SWS_FOR_U8_COPY(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_copy_yzw_yzw_xxx , SWS_PIXEL_U8 , SWS_UOP_COPY , 0xe, 3, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_copy_xyzw_yz_xx , SWS_PIXEL_U8 , SWS_UOP_COPY , 0xf, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_copy_xyzw_zwy_xyx , SWS_PIXEL_U8 , SWS_UOP_COPY , 0xf, 3, 2, 3, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u8_copy_xyzw_zxyw_xyzz , SWS_PIXEL_U8 , SWS_UOP_COPY , 0xf, 4, 2, 0, 1, 3, 0, 0, 0, 1, 2, 2, 0, 0)
+%define SWS_FOR_STRUCT_U8_COPY(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_copy_yzw_yzw_xxx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_COPY , .mask = 0xe, .par.move.num_moves = 3, .par.move.dst = {1, 2, 3, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_copy_xyzw_yz_xx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_COPY , .mask = 0xf, .par.move.num_moves = 2, .par.move.dst = {1, 2, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_copy_xyzw_zwy_xyx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_COPY , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {2, 3, 1, 0, 0, 0}, .par.move.src = {0, 1, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u8_copy_xyzw_zxyw_xyzz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_COPY , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {2, 0, 1, 3, 0, 0}, .par.move.src = {0, 1, 2, 2, 0, 0})
+%define SWS_FOR_U8_SWAP_BYTES(MACRO, ...)
+%define SWS_FOR_STRUCT_U8_SWAP_BYTES(MACRO, ...)
+%define SWS_FOR_U8_EXPAND_BIT(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_expand_bit_x , SWS_PIXEL_U8 , SWS_UOP_EXPAND_BIT , 0x1)
+%define SWS_FOR_STRUCT_U8_EXPAND_BIT(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_expand_bit_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_EXPAND_BIT , .mask = 0x1)
+%define SWS_FOR_U8_EXPAND_PAIR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_expand_pair_x , SWS_PIXEL_U8 , SWS_UOP_EXPAND_PAIR , 0x1) \
+ MACRO(__VA_ARGS__, u8_expand_pair_xy , SWS_PIXEL_U8 , SWS_UOP_EXPAND_PAIR , 0x3) \
+ MACRO(__VA_ARGS__, u8_expand_pair_xyz , SWS_PIXEL_U8 , SWS_UOP_EXPAND_PAIR , 0x7) \
+ MACRO(__VA_ARGS__, u8_expand_pair_yzw , SWS_PIXEL_U8 , SWS_UOP_EXPAND_PAIR , 0xe) \
+ MACRO(__VA_ARGS__, u8_expand_pair_xyzw , SWS_PIXEL_U8 , SWS_UOP_EXPAND_PAIR , 0xf)
+%define SWS_FOR_STRUCT_U8_EXPAND_PAIR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_expand_pair_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_EXPAND_PAIR , .mask = 0x1) \
+ MACRO(__VA_ARGS__, u8_expand_pair_xy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_EXPAND_PAIR , .mask = 0x3) \
+ MACRO(__VA_ARGS__, u8_expand_pair_xyz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_EXPAND_PAIR , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u8_expand_pair_yzw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_EXPAND_PAIR , .mask = 0xe) \
+ MACRO(__VA_ARGS__, u8_expand_pair_xyzw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_EXPAND_PAIR , .mask = 0xf)
+%define SWS_FOR_U8_EXPAND_QUAD(MACRO, ...)
+%define SWS_FOR_STRUCT_U8_EXPAND_QUAD(MACRO, ...)
+%define SWS_FOR_U8_TO_U8(MACRO, ...)
+%define SWS_FOR_STRUCT_U8_TO_U8(MACRO, ...)
+%define SWS_FOR_U8_TO_U16(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_to_u16_x , SWS_PIXEL_U8 , SWS_UOP_TO_U16 , 0x1) \
+ MACRO(__VA_ARGS__, u8_to_u16_xyz , SWS_PIXEL_U8 , SWS_UOP_TO_U16 , 0x7) \
+ MACRO(__VA_ARGS__, u8_to_u16_yzw , SWS_PIXEL_U8 , SWS_UOP_TO_U16 , 0xe)
+%define SWS_FOR_STRUCT_U8_TO_U16(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_to_u16_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_TO_U16 , .mask = 0x1) \
+ MACRO(__VA_ARGS__, u8_to_u16_xyz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_TO_U16 , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u8_to_u16_yzw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_TO_U16 , .mask = 0xe)
+%define SWS_FOR_U8_TO_U32(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_to_u32_x , SWS_PIXEL_U8 , SWS_UOP_TO_U32 , 0x1) \
+ MACRO(__VA_ARGS__, u8_to_u32_xyz , SWS_PIXEL_U8 , SWS_UOP_TO_U32 , 0x7)
+%define SWS_FOR_STRUCT_U8_TO_U32(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_to_u32_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_TO_U32 , .mask = 0x1) \
+ MACRO(__VA_ARGS__, u8_to_u32_xyz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_TO_U32 , .mask = 0x7)
+%define SWS_FOR_U8_TO_F32(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_to_f32_x , SWS_PIXEL_U8 , SWS_UOP_TO_F32 , 0x1) \
+ MACRO(__VA_ARGS__, u8_to_f32_y , SWS_PIXEL_U8 , SWS_UOP_TO_F32 , 0x2) \
+ MACRO(__VA_ARGS__, u8_to_f32_xy , SWS_PIXEL_U8 , SWS_UOP_TO_F32 , 0x3) \
+ MACRO(__VA_ARGS__, u8_to_f32_z , SWS_PIXEL_U8 , SWS_UOP_TO_F32 , 0x4) \
+ MACRO(__VA_ARGS__, u8_to_f32_xyz , SWS_PIXEL_U8 , SWS_UOP_TO_F32 , 0x7) \
+ MACRO(__VA_ARGS__, u8_to_f32_yw , SWS_PIXEL_U8 , SWS_UOP_TO_F32 , 0xa) \
+ MACRO(__VA_ARGS__, u8_to_f32_zw , SWS_PIXEL_U8 , SWS_UOP_TO_F32 , 0xc) \
+ MACRO(__VA_ARGS__, u8_to_f32_yzw , SWS_PIXEL_U8 , SWS_UOP_TO_F32 , 0xe) \
+ MACRO(__VA_ARGS__, u8_to_f32_xyzw , SWS_PIXEL_U8 , SWS_UOP_TO_F32 , 0xf)
+%define SWS_FOR_STRUCT_U8_TO_F32(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_to_f32_x , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_TO_F32 , .mask = 0x1) \
+ MACRO(__VA_ARGS__, u8_to_f32_y , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_TO_F32 , .mask = 0x2) \
+ MACRO(__VA_ARGS__, u8_to_f32_xy , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_TO_F32 , .mask = 0x3) \
+ MACRO(__VA_ARGS__, u8_to_f32_z , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_TO_F32 , .mask = 0x4) \
+ MACRO(__VA_ARGS__, u8_to_f32_xyz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_TO_F32 , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u8_to_f32_yw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_TO_F32 , .mask = 0xa) \
+ MACRO(__VA_ARGS__, u8_to_f32_zw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_TO_F32 , .mask = 0xc) \
+ MACRO(__VA_ARGS__, u8_to_f32_yzw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_TO_F32 , .mask = 0xe) \
+ MACRO(__VA_ARGS__, u8_to_f32_xyzw , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_TO_F32 , .mask = 0xf)
+%define SWS_FOR_U8_SCALE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_scale_xyz , SWS_PIXEL_U8 , SWS_UOP_SCALE , 0x7)
+%define SWS_FOR_STRUCT_U8_SCALE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_scale_xyz , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_SCALE , .mask = 0x7)
+%define SWS_FOR_U8_ADD(MACRO, ...)
+%define SWS_FOR_STRUCT_U8_ADD(MACRO, ...)
+%define SWS_FOR_U8_MIN(MACRO, ...)
+%define SWS_FOR_STRUCT_U8_MIN(MACRO, ...)
+%define SWS_FOR_U8_MAX(MACRO, ...)
+%define SWS_FOR_STRUCT_U8_MAX(MACRO, ...)
+%define SWS_FOR_U8_UNPACK(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_unpack_xyz_121 , SWS_PIXEL_U8 , SWS_UOP_UNPACK , 0x7, 1, 2, 1, 0) \
+ MACRO(__VA_ARGS__, u8_unpack_xyz_233 , SWS_PIXEL_U8 , SWS_UOP_UNPACK , 0x7, 2, 3, 3, 0) \
+ MACRO(__VA_ARGS__, u8_unpack_xyz_332 , SWS_PIXEL_U8 , SWS_UOP_UNPACK , 0x7, 3, 3, 2, 0)
+%define SWS_FOR_STRUCT_U8_UNPACK(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_unpack_xyz_121 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_UNPACK , .mask = 0x7, .par.pack.pattern = {1, 2, 1, 0}) \
+ MACRO(__VA_ARGS__, u8_unpack_xyz_233 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_UNPACK , .mask = 0x7, .par.pack.pattern = {2, 3, 3, 0}) \
+ MACRO(__VA_ARGS__, u8_unpack_xyz_332 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_UNPACK , .mask = 0x7, .par.pack.pattern = {3, 3, 2, 0})
+%define SWS_FOR_U8_PACK(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_pack_xyz_121 , SWS_PIXEL_U8 , SWS_UOP_PACK , 0x7, 1, 2, 1, 0) \
+ MACRO(__VA_ARGS__, u8_pack_xyz_233 , SWS_PIXEL_U8 , SWS_UOP_PACK , 0x7, 2, 3, 3, 0) \
+ MACRO(__VA_ARGS__, u8_pack_xyz_332 , SWS_PIXEL_U8 , SWS_UOP_PACK , 0x7, 3, 3, 2, 0)
+%define SWS_FOR_STRUCT_U8_PACK(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_pack_xyz_121 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PACK , .mask = 0x7, .par.pack.pattern = {1, 2, 1, 0}) \
+ MACRO(__VA_ARGS__, u8_pack_xyz_233 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PACK , .mask = 0x7, .par.pack.pattern = {2, 3, 3, 0}) \
+ MACRO(__VA_ARGS__, u8_pack_xyz_332 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_PACK , .mask = 0x7, .par.pack.pattern = {3, 3, 2, 0})
+%define SWS_FOR_U8_LSHIFT(MACRO, ...)
+%define SWS_FOR_STRUCT_U8_LSHIFT(MACRO, ...)
+%define SWS_FOR_U8_RSHIFT(MACRO, ...)
+%define SWS_FOR_STRUCT_U8_RSHIFT(MACRO, ...)
+%define SWS_FOR_U8_CLEAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_clear_x_0 , SWS_PIXEL_U8 , SWS_UOP_CLEAR , 0x1, 0x00000, 0x00001) \
+ MACRO(__VA_ARGS__, u8_clear_x_1 , SWS_PIXEL_U8 , SWS_UOP_CLEAR , 0x1, 0x00001, 0x00000) \
+ MACRO(__VA_ARGS__, u8_clear_y_1 , SWS_PIXEL_U8 , SWS_UOP_CLEAR , 0x2, 0x00002, 0x00000) \
+ MACRO(__VA_ARGS__, u8_clear_xy_xx , SWS_PIXEL_U8 , SWS_UOP_CLEAR , 0x3, 0x00000, 0x00000) \
+ MACRO(__VA_ARGS__, u8_clear_xz_xx , SWS_PIXEL_U8 , SWS_UOP_CLEAR , 0x5, 0x00000, 0x00000) \
+ MACRO(__VA_ARGS__, u8_clear_yz_xx , SWS_PIXEL_U8 , SWS_UOP_CLEAR , 0x6, 0x00000, 0x00000) \
+ MACRO(__VA_ARGS__, u8_clear_xyz_1xx , SWS_PIXEL_U8 , SWS_UOP_CLEAR , 0x7, 0x00001, 0x00000) \
+ MACRO(__VA_ARGS__, u8_clear_w_0 , SWS_PIXEL_U8 , SWS_UOP_CLEAR , 0x8, 0x00000, 0x00008) \
+ MACRO(__VA_ARGS__, u8_clear_w_1 , SWS_PIXEL_U8 , SWS_UOP_CLEAR , 0x8, 0x00008, 0x00000) \
+ MACRO(__VA_ARGS__, u8_clear_xyw_xx0 , SWS_PIXEL_U8 , SWS_UOP_CLEAR , 0xb, 0x00000, 0x00008) \
+ MACRO(__VA_ARGS__, u8_clear_xyw_xx1 , SWS_PIXEL_U8 , SWS_UOP_CLEAR , 0xb, 0x00008, 0x00000) \
+ MACRO(__VA_ARGS__, u8_clear_zw_xx , SWS_PIXEL_U8 , SWS_UOP_CLEAR , 0xc, 0x00000, 0x00000) \
+ MACRO(__VA_ARGS__, u8_clear_xzw_1xx , SWS_PIXEL_U8 , SWS_UOP_CLEAR , 0xd, 0x00001, 0x00000) \
+ MACRO(__VA_ARGS__, u8_clear_xzw_xx1 , SWS_PIXEL_U8 , SWS_UOP_CLEAR , 0xd, 0x00008, 0x00000)
+%define SWS_FOR_STRUCT_U8_CLEAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u8_clear_x_0 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_CLEAR , .mask = 0x1, .par.clear.one = 0x0, .par.clear.zero = 0x1) \
+ MACRO(__VA_ARGS__, u8_clear_x_1 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_CLEAR , .mask = 0x1, .par.clear.one = 0x1, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u8_clear_y_1 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_CLEAR , .mask = 0x2, .par.clear.one = 0x2, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u8_clear_xy_xx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_CLEAR , .mask = 0x3, .par.clear.one = 0x0, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u8_clear_xz_xx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_CLEAR , .mask = 0x5, .par.clear.one = 0x0, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u8_clear_yz_xx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_CLEAR , .mask = 0x6, .par.clear.one = 0x0, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u8_clear_xyz_1xx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_CLEAR , .mask = 0x7, .par.clear.one = 0x1, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u8_clear_w_0 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_CLEAR , .mask = 0x8, .par.clear.one = 0x0, .par.clear.zero = 0x8) \
+ MACRO(__VA_ARGS__, u8_clear_w_1 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_CLEAR , .mask = 0x8, .par.clear.one = 0x8, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u8_clear_xyw_xx0 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_CLEAR , .mask = 0xb, .par.clear.one = 0x0, .par.clear.zero = 0x8) \
+ MACRO(__VA_ARGS__, u8_clear_xyw_xx1 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_CLEAR , .mask = 0xb, .par.clear.one = 0x8, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u8_clear_zw_xx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_CLEAR , .mask = 0xc, .par.clear.one = 0x0, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u8_clear_xzw_1xx , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_CLEAR , .mask = 0xd, .par.clear.one = 0x1, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u8_clear_xzw_xx1 , .type = SWS_PIXEL_U8 , .uop = SWS_UOP_CLEAR , .mask = 0xd, .par.clear.one = 0x8, .par.clear.zero = 0x0)
+%define SWS_FOR_U8_LINEAR(MACRO, ...)
+%define SWS_FOR_STRUCT_U8_LINEAR(MACRO, ...)
+%define SWS_FOR_U8_LINEAR_FMA(MACRO, ...)
+%define SWS_FOR_STRUCT_U8_LINEAR_FMA(MACRO, ...)
+%define SWS_FOR_U8_DITHER(MACRO, ...)
+%define SWS_FOR_STRUCT_U8_DITHER(MACRO, ...)
+%define SWS_FOR_U16_READ_PLANAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_read_planar_x , SWS_PIXEL_U16, SWS_UOP_READ_PLANAR , 0x1) \
+ MACRO(__VA_ARGS__, u16_read_planar_xy , SWS_PIXEL_U16, SWS_UOP_READ_PLANAR , 0x3) \
+ MACRO(__VA_ARGS__, u16_read_planar_xyz , SWS_PIXEL_U16, SWS_UOP_READ_PLANAR , 0x7) \
+ MACRO(__VA_ARGS__, u16_read_planar_xyzw , SWS_PIXEL_U16, SWS_UOP_READ_PLANAR , 0xf)
+%define SWS_FOR_STRUCT_U16_READ_PLANAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_read_planar_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PLANAR , .mask = 0x1) \
+ MACRO(__VA_ARGS__, u16_read_planar_xy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PLANAR , .mask = 0x3) \
+ MACRO(__VA_ARGS__, u16_read_planar_xyz , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PLANAR , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u16_read_planar_xyzw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PLANAR , .mask = 0xf)
+%define SWS_FOR_U16_READ_PLANAR_FH(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_read_planar_fh_x_f32 , SWS_PIXEL_U16, SWS_UOP_READ_PLANAR_FH , 0x1, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fh_xy_f32 , SWS_PIXEL_U16, SWS_UOP_READ_PLANAR_FH , 0x3, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fh_xyz_f32 , SWS_PIXEL_U16, SWS_UOP_READ_PLANAR_FH , 0x7, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fh_xyzw_f32 , SWS_PIXEL_U16, SWS_UOP_READ_PLANAR_FH , 0xf, SWS_PIXEL_F32)
+%define SWS_FOR_STRUCT_U16_READ_PLANAR_FH(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_read_planar_fh_x_f32 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PLANAR_FH , .mask = 0x1, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fh_xy_f32 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PLANAR_FH , .mask = 0x3, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fh_xyz_f32 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PLANAR_FH , .mask = 0x7, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fh_xyzw_f32 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PLANAR_FH , .mask = 0xf, .par.filter.type = SWS_PIXEL_F32)
+%define SWS_FOR_U16_READ_PLANAR_FV(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_read_planar_fv_x_f32 , SWS_PIXEL_U16, SWS_UOP_READ_PLANAR_FV , 0x1, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fv_xy_f32 , SWS_PIXEL_U16, SWS_UOP_READ_PLANAR_FV , 0x3, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fv_xyz_f32 , SWS_PIXEL_U16, SWS_UOP_READ_PLANAR_FV , 0x7, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fv_xyzw_f32 , SWS_PIXEL_U16, SWS_UOP_READ_PLANAR_FV , 0xf, SWS_PIXEL_F32)
+%define SWS_FOR_STRUCT_U16_READ_PLANAR_FV(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_read_planar_fv_x_f32 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PLANAR_FV , .mask = 0x1, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fv_xy_f32 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PLANAR_FV , .mask = 0x3, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fv_xyz_f32 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PLANAR_FV , .mask = 0x7, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fv_xyzw_f32 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PLANAR_FV , .mask = 0xf, .par.filter.type = SWS_PIXEL_F32)
+%define SWS_FOR_U16_READ_PLANAR_FV_FMA(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_read_planar_fv_fma_x_f32 , SWS_PIXEL_U16, SWS_UOP_READ_PLANAR_FV_FMA, 0x1, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fv_fma_xy_f32 , SWS_PIXEL_U16, SWS_UOP_READ_PLANAR_FV_FMA, 0x3, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fv_fma_xyz_f32 , SWS_PIXEL_U16, SWS_UOP_READ_PLANAR_FV_FMA, 0x7, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fv_fma_xyzw_f32 , SWS_PIXEL_U16, SWS_UOP_READ_PLANAR_FV_FMA, 0xf, SWS_PIXEL_F32)
+%define SWS_FOR_STRUCT_U16_READ_PLANAR_FV_FMA(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_read_planar_fv_fma_x_f32 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PLANAR_FV_FMA, .mask = 0x1, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fv_fma_xy_f32 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PLANAR_FV_FMA, .mask = 0x3, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fv_fma_xyz_f32 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PLANAR_FV_FMA, .mask = 0x7, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, u16_read_planar_fv_fma_xyzw_f32 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PLANAR_FV_FMA, .mask = 0xf, .par.filter.type = SWS_PIXEL_F32)
+%define SWS_FOR_U16_READ_PACKED(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_read_packed_xy , SWS_PIXEL_U16, SWS_UOP_READ_PACKED , 0x3) \
+ MACRO(__VA_ARGS__, u16_read_packed_xyz , SWS_PIXEL_U16, SWS_UOP_READ_PACKED , 0x7) \
+ MACRO(__VA_ARGS__, u16_read_packed_xyzw , SWS_PIXEL_U16, SWS_UOP_READ_PACKED , 0xf)
+%define SWS_FOR_STRUCT_U16_READ_PACKED(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_read_packed_xy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PACKED , .mask = 0x3) \
+ MACRO(__VA_ARGS__, u16_read_packed_xyz , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PACKED , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u16_read_packed_xyzw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_READ_PACKED , .mask = 0xf)
+%define SWS_FOR_U16_READ_NIBBLE(MACRO, ...)
+%define SWS_FOR_STRUCT_U16_READ_NIBBLE(MACRO, ...)
+%define SWS_FOR_U16_READ_BIT(MACRO, ...)
+%define SWS_FOR_STRUCT_U16_READ_BIT(MACRO, ...)
+%define SWS_FOR_U16_READ_PALETTE(MACRO, ...)
+%define SWS_FOR_STRUCT_U16_READ_PALETTE(MACRO, ...)
+%define SWS_FOR_U16_WRITE_PLANAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_write_planar_x , SWS_PIXEL_U16, SWS_UOP_WRITE_PLANAR , 0x1) \
+ MACRO(__VA_ARGS__, u16_write_planar_xy , SWS_PIXEL_U16, SWS_UOP_WRITE_PLANAR , 0x3) \
+ MACRO(__VA_ARGS__, u16_write_planar_xyz , SWS_PIXEL_U16, SWS_UOP_WRITE_PLANAR , 0x7) \
+ MACRO(__VA_ARGS__, u16_write_planar_xyzw , SWS_PIXEL_U16, SWS_UOP_WRITE_PLANAR , 0xf)
+%define SWS_FOR_STRUCT_U16_WRITE_PLANAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_write_planar_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_WRITE_PLANAR , .mask = 0x1) \
+ MACRO(__VA_ARGS__, u16_write_planar_xy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_WRITE_PLANAR , .mask = 0x3) \
+ MACRO(__VA_ARGS__, u16_write_planar_xyz , .type = SWS_PIXEL_U16, .uop = SWS_UOP_WRITE_PLANAR , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u16_write_planar_xyzw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_WRITE_PLANAR , .mask = 0xf)
+%define SWS_FOR_U16_WRITE_PACKED(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_write_packed_xy , SWS_PIXEL_U16, SWS_UOP_WRITE_PACKED , 0x3) \
+ MACRO(__VA_ARGS__, u16_write_packed_xyz , SWS_PIXEL_U16, SWS_UOP_WRITE_PACKED , 0x7) \
+ MACRO(__VA_ARGS__, u16_write_packed_xyzw , SWS_PIXEL_U16, SWS_UOP_WRITE_PACKED , 0xf)
+%define SWS_FOR_STRUCT_U16_WRITE_PACKED(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_write_packed_xy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_WRITE_PACKED , .mask = 0x3) \
+ MACRO(__VA_ARGS__, u16_write_packed_xyz , .type = SWS_PIXEL_U16, .uop = SWS_UOP_WRITE_PACKED , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u16_write_packed_xyzw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_WRITE_PACKED , .mask = 0xf)
+%define SWS_FOR_U16_WRITE_NIBBLE(MACRO, ...)
+%define SWS_FOR_STRUCT_U16_WRITE_NIBBLE(MACRO, ...)
+%define SWS_FOR_U16_WRITE_BIT(MACRO, ...)
+%define SWS_FOR_STRUCT_U16_WRITE_BIT(MACRO, ...)
+%define SWS_FOR_U16_PERMUTE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_permute_xyz_x_w , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_xyz_y_w , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 1, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_xyz_xz_zw , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 2, 0, 2, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_xyz_yx_xw , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 2, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_xyz_xyz_yzw , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 3, 0, 1, 2, 0, 0, 0, 1, 2, 3, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_xyz_xtyz_wyzt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0x7, 4, 0, -1, 1, 2, 0, 0, 3, 1, 2, -1, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_xyw_x_z , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xb, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_xzw_x_y , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xd, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_yzw_y_x , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xe, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_yzw_w_x , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xe, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_yzw_wz_zx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xe, 2, 3, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_yzw_wzy_zyx , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xe, 3, 3, 2, 1, 0, 0, 0, 2, 1, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_yzw_wtyz_xyzt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xe, 4, 3, -1, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_xyzw_txy_xyt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 3, -1, 0, 1, 0, 0, 0, 0, 1, -1, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_xyzw_txz_xzt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 3, -1, 0, 2, 0, 0, 0, 0, 2, -1, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_xyzw_txyz_xyzt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 4, -1, 0, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_xyzw_txzy_xzyt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 4, -1, 0, 2, 1, 0, 0, 0, 2, 1, -1, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_xyzw_tyzw_yzwt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 4, -1, 1, 2, 3, 0, 0, 1, 2, 3, -1, 0, 0) \
+ MACRO(__VA_ARGS__, u16_permute_xyzw_txyzw_xyzwt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 5, -1, 0, 1, 2, 3, 0, 0, 1, 2, 3, -1, 0) \
+ MACRO(__VA_ARGS__, u16_permute_xyzw_txwzy_xwzyt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 5, -1, 0, 3, 2, 1, 0, 0, 3, 2, 1, -1, 0) \
+ MACRO(__VA_ARGS__, u16_permute_xyzw_txwtyz_xwtyzt , SWS_PIXEL_U16, SWS_UOP_PERMUTE , 0xf, 6, -1, 0, 3, -1, 1, 2, 0, 3, -1, 1, 2, -1)
+%define SWS_FOR_STRUCT_U16_PERMUTE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_permute_xyz_x_w , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_xyz_y_w , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_xyz_xz_zw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 2, .par.move.dst = {0, 2, 0, 0, 0, 0}, .par.move.src = {2, 3, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_xyz_yx_xw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 2, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {0, 3, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_xyz_xyz_yzw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 3, .par.move.dst = {0, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, 3, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_xyz_xtyz_wyzt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 4, .par.move.dst = {0, -1, 1, 2, 0, 0}, .par.move.src = {3, 1, 2, -1, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_xyw_x_z , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xb, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_xzw_x_y , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xd, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {1, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_yzw_y_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_yzw_w_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 1, .par.move.dst = {3, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_yzw_wz_zx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 2, .par.move.dst = {3, 2, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_yzw_wzy_zyx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 3, .par.move.dst = {3, 2, 1, 0, 0, 0}, .par.move.src = {2, 1, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_yzw_wtyz_xyzt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 4, .par.move.dst = {3, -1, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_xyzw_txy_xyt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 1, 0, 0, 0}, .par.move.src = {0, 1, -1, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_xyzw_txz_xzt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 2, 0, 0, 0}, .par.move.src = {0, 2, -1, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_xyzw_txyz_xyzt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_xyzw_txzy_xzyt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 2, 1, 0, 0}, .par.move.src = {0, 2, 1, -1, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_xyzw_tyzw_yzwt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 1, 2, 3, 0, 0}, .par.move.src = {1, 2, 3, -1, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_xyzw_txyzw_xyzwt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 1, 2, 3, 0}, .par.move.src = {0, 1, 2, 3, -1, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_xyzw_txwzy_xwzyt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 3, 2, 1, 0}, .par.move.src = {0, 3, 2, 1, -1, 0}) \
+ MACRO(__VA_ARGS__, u16_permute_xyzw_txwtyz_xwtyzt , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 6, .par.move.dst = {-1, 0, 3, -1, 1, 2}, .par.move.src = {0, 3, -1, 1, 2, -1})
+%define SWS_FOR_U16_COPY(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_copy_xyzw_yz_xx , SWS_PIXEL_U16, SWS_UOP_COPY , 0xf, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u16_copy_xyzw_zwy_xyx , SWS_PIXEL_U16, SWS_UOP_COPY , 0xf, 3, 2, 3, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0)
+%define SWS_FOR_STRUCT_U16_COPY(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_copy_xyzw_yz_xx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_COPY , .mask = 0xf, .par.move.num_moves = 2, .par.move.dst = {1, 2, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u16_copy_xyzw_zwy_xyx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_COPY , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {2, 3, 1, 0, 0, 0}, .par.move.src = {0, 1, 0, 0, 0, 0})
+%define SWS_FOR_U16_SWAP_BYTES(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_swap_bytes_x , SWS_PIXEL_U16, SWS_UOP_SWAP_BYTES , 0x1) \
+ MACRO(__VA_ARGS__, u16_swap_bytes_y , SWS_PIXEL_U16, SWS_UOP_SWAP_BYTES , 0x2) \
+ MACRO(__VA_ARGS__, u16_swap_bytes_xy , SWS_PIXEL_U16, SWS_UOP_SWAP_BYTES , 0x3) \
+ MACRO(__VA_ARGS__, u16_swap_bytes_xyz , SWS_PIXEL_U16, SWS_UOP_SWAP_BYTES , 0x7) \
+ MACRO(__VA_ARGS__, u16_swap_bytes_xw , SWS_PIXEL_U16, SWS_UOP_SWAP_BYTES , 0x9) \
+ MACRO(__VA_ARGS__, u16_swap_bytes_yzw , SWS_PIXEL_U16, SWS_UOP_SWAP_BYTES , 0xe) \
+ MACRO(__VA_ARGS__, u16_swap_bytes_xyzw , SWS_PIXEL_U16, SWS_UOP_SWAP_BYTES , 0xf)
+%define SWS_FOR_STRUCT_U16_SWAP_BYTES(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_swap_bytes_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_SWAP_BYTES , .mask = 0x1) \
+ MACRO(__VA_ARGS__, u16_swap_bytes_y , .type = SWS_PIXEL_U16, .uop = SWS_UOP_SWAP_BYTES , .mask = 0x2) \
+ MACRO(__VA_ARGS__, u16_swap_bytes_xy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_SWAP_BYTES , .mask = 0x3) \
+ MACRO(__VA_ARGS__, u16_swap_bytes_xyz , .type = SWS_PIXEL_U16, .uop = SWS_UOP_SWAP_BYTES , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u16_swap_bytes_xw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_SWAP_BYTES , .mask = 0x9) \
+ MACRO(__VA_ARGS__, u16_swap_bytes_yzw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_SWAP_BYTES , .mask = 0xe) \
+ MACRO(__VA_ARGS__, u16_swap_bytes_xyzw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_SWAP_BYTES , .mask = 0xf)
+%define SWS_FOR_U16_EXPAND_BIT(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_expand_bit_x , SWS_PIXEL_U16, SWS_UOP_EXPAND_BIT , 0x1)
+%define SWS_FOR_STRUCT_U16_EXPAND_BIT(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_expand_bit_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_EXPAND_BIT , .mask = 0x1)
+%define SWS_FOR_U16_EXPAND_PAIR(MACRO, ...)
+%define SWS_FOR_STRUCT_U16_EXPAND_PAIR(MACRO, ...)
+%define SWS_FOR_U16_EXPAND_QUAD(MACRO, ...)
+%define SWS_FOR_STRUCT_U16_EXPAND_QUAD(MACRO, ...)
+%define SWS_FOR_U16_TO_U8(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_to_u8_xyz , SWS_PIXEL_U16, SWS_UOP_TO_U8 , 0x7)
+%define SWS_FOR_STRUCT_U16_TO_U8(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_to_u8_xyz , .type = SWS_PIXEL_U16, .uop = SWS_UOP_TO_U8 , .mask = 0x7)
+%define SWS_FOR_U16_TO_U16(MACRO, ...)
+%define SWS_FOR_STRUCT_U16_TO_U16(MACRO, ...)
+%define SWS_FOR_U16_TO_U32(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_to_u32_x , SWS_PIXEL_U16, SWS_UOP_TO_U32 , 0x1) \
+ MACRO(__VA_ARGS__, u16_to_u32_xyz , SWS_PIXEL_U16, SWS_UOP_TO_U32 , 0x7)
+%define SWS_FOR_STRUCT_U16_TO_U32(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_to_u32_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_TO_U32 , .mask = 0x1) \
+ MACRO(__VA_ARGS__, u16_to_u32_xyz , .type = SWS_PIXEL_U16, .uop = SWS_UOP_TO_U32 , .mask = 0x7)
+%define SWS_FOR_U16_TO_F32(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_to_f32_x , SWS_PIXEL_U16, SWS_UOP_TO_F32 , 0x1) \
+ MACRO(__VA_ARGS__, u16_to_f32_y , SWS_PIXEL_U16, SWS_UOP_TO_F32 , 0x2) \
+ MACRO(__VA_ARGS__, u16_to_f32_xy , SWS_PIXEL_U16, SWS_UOP_TO_F32 , 0x3) \
+ MACRO(__VA_ARGS__, u16_to_f32_xyz , SWS_PIXEL_U16, SWS_UOP_TO_F32 , 0x7) \
+ MACRO(__VA_ARGS__, u16_to_f32_yzw , SWS_PIXEL_U16, SWS_UOP_TO_F32 , 0xe) \
+ MACRO(__VA_ARGS__, u16_to_f32_xyzw , SWS_PIXEL_U16, SWS_UOP_TO_F32 , 0xf)
+%define SWS_FOR_STRUCT_U16_TO_F32(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_to_f32_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_TO_F32 , .mask = 0x1) \
+ MACRO(__VA_ARGS__, u16_to_f32_y , .type = SWS_PIXEL_U16, .uop = SWS_UOP_TO_F32 , .mask = 0x2) \
+ MACRO(__VA_ARGS__, u16_to_f32_xy , .type = SWS_PIXEL_U16, .uop = SWS_UOP_TO_F32 , .mask = 0x3) \
+ MACRO(__VA_ARGS__, u16_to_f32_xyz , .type = SWS_PIXEL_U16, .uop = SWS_UOP_TO_F32 , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u16_to_f32_yzw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_TO_F32 , .mask = 0xe) \
+ MACRO(__VA_ARGS__, u16_to_f32_xyzw , .type = SWS_PIXEL_U16, .uop = SWS_UOP_TO_F32 , .mask = 0xf)
+%define SWS_FOR_U16_SCALE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_scale_x , SWS_PIXEL_U16, SWS_UOP_SCALE , 0x1) \
+ MACRO(__VA_ARGS__, u16_scale_xyz , SWS_PIXEL_U16, SWS_UOP_SCALE , 0x7)
+%define SWS_FOR_STRUCT_U16_SCALE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_scale_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_SCALE , .mask = 0x1) \
+ MACRO(__VA_ARGS__, u16_scale_xyz , .type = SWS_PIXEL_U16, .uop = SWS_UOP_SCALE , .mask = 0x7)
+%define SWS_FOR_U16_ADD(MACRO, ...)
+%define SWS_FOR_STRUCT_U16_ADD(MACRO, ...)
+%define SWS_FOR_U16_MIN(MACRO, ...)
+%define SWS_FOR_STRUCT_U16_MIN(MACRO, ...)
+%define SWS_FOR_U16_MAX(MACRO, ...)
+%define SWS_FOR_STRUCT_U16_MAX(MACRO, ...)
+%define SWS_FOR_U16_UNPACK(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_unpack_xyz_444 , SWS_PIXEL_U16, SWS_UOP_UNPACK , 0x7, 4, 4, 4, 0) \
+ MACRO(__VA_ARGS__, u16_unpack_xyz_555 , SWS_PIXEL_U16, SWS_UOP_UNPACK , 0x7, 5, 5, 5, 0) \
+ MACRO(__VA_ARGS__, u16_unpack_xyz_565 , SWS_PIXEL_U16, SWS_UOP_UNPACK , 0x7, 5, 6, 5, 0)
+%define SWS_FOR_STRUCT_U16_UNPACK(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_unpack_xyz_444 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_UNPACK , .mask = 0x7, .par.pack.pattern = {4, 4, 4, 0}) \
+ MACRO(__VA_ARGS__, u16_unpack_xyz_555 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_UNPACK , .mask = 0x7, .par.pack.pattern = {5, 5, 5, 0}) \
+ MACRO(__VA_ARGS__, u16_unpack_xyz_565 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_UNPACK , .mask = 0x7, .par.pack.pattern = {5, 6, 5, 0})
+%define SWS_FOR_U16_PACK(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_pack_xyz_444 , SWS_PIXEL_U16, SWS_UOP_PACK , 0x7, 4, 4, 4, 0) \
+ MACRO(__VA_ARGS__, u16_pack_xyz_555 , SWS_PIXEL_U16, SWS_UOP_PACK , 0x7, 5, 5, 5, 0) \
+ MACRO(__VA_ARGS__, u16_pack_xyz_565 , SWS_PIXEL_U16, SWS_UOP_PACK , 0x7, 5, 6, 5, 0)
+%define SWS_FOR_STRUCT_U16_PACK(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_pack_xyz_444 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PACK , .mask = 0x7, .par.pack.pattern = {4, 4, 4, 0}) \
+ MACRO(__VA_ARGS__, u16_pack_xyz_555 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PACK , .mask = 0x7, .par.pack.pattern = {5, 5, 5, 0}) \
+ MACRO(__VA_ARGS__, u16_pack_xyz_565 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_PACK , .mask = 0x7, .par.pack.pattern = {5, 6, 5, 0})
+%define SWS_FOR_U16_LSHIFT(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_lshift_x_4 , SWS_PIXEL_U16, SWS_UOP_LSHIFT , 0x1, 4) \
+ MACRO(__VA_ARGS__, u16_lshift_x_6 , SWS_PIXEL_U16, SWS_UOP_LSHIFT , 0x1, 6) \
+ MACRO(__VA_ARGS__, u16_lshift_xyz_1 , SWS_PIXEL_U16, SWS_UOP_LSHIFT , 0x7, 1) \
+ MACRO(__VA_ARGS__, u16_lshift_xyz_2 , SWS_PIXEL_U16, SWS_UOP_LSHIFT , 0x7, 2) \
+ MACRO(__VA_ARGS__, u16_lshift_xyz_3 , SWS_PIXEL_U16, SWS_UOP_LSHIFT , 0x7, 3) \
+ MACRO(__VA_ARGS__, u16_lshift_xyz_4 , SWS_PIXEL_U16, SWS_UOP_LSHIFT , 0x7, 4) \
+ MACRO(__VA_ARGS__, u16_lshift_xyz_5 , SWS_PIXEL_U16, SWS_UOP_LSHIFT , 0x7, 5) \
+ MACRO(__VA_ARGS__, u16_lshift_xyz_6 , SWS_PIXEL_U16, SWS_UOP_LSHIFT , 0x7, 6) \
+ MACRO(__VA_ARGS__, u16_lshift_xyz_7 , SWS_PIXEL_U16, SWS_UOP_LSHIFT , 0x7, 7) \
+ MACRO(__VA_ARGS__, u16_lshift_xyz_8 , SWS_PIXEL_U16, SWS_UOP_LSHIFT , 0x7, 8) \
+ MACRO(__VA_ARGS__, u16_lshift_yzw_1 , SWS_PIXEL_U16, SWS_UOP_LSHIFT , 0xe, 1) \
+ MACRO(__VA_ARGS__, u16_lshift_yzw_2 , SWS_PIXEL_U16, SWS_UOP_LSHIFT , 0xe, 2) \
+ MACRO(__VA_ARGS__, u16_lshift_yzw_4 , SWS_PIXEL_U16, SWS_UOP_LSHIFT , 0xe, 4) \
+ MACRO(__VA_ARGS__, u16_lshift_yzw_6 , SWS_PIXEL_U16, SWS_UOP_LSHIFT , 0xe, 6) \
+ MACRO(__VA_ARGS__, u16_lshift_yzw_8 , SWS_PIXEL_U16, SWS_UOP_LSHIFT , 0xe, 8)
+%define SWS_FOR_STRUCT_U16_LSHIFT(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_lshift_x_4 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_LSHIFT , .mask = 0x1, .par.shift.amount = 4) \
+ MACRO(__VA_ARGS__, u16_lshift_x_6 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_LSHIFT , .mask = 0x1, .par.shift.amount = 6) \
+ MACRO(__VA_ARGS__, u16_lshift_xyz_1 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_LSHIFT , .mask = 0x7, .par.shift.amount = 1) \
+ MACRO(__VA_ARGS__, u16_lshift_xyz_2 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_LSHIFT , .mask = 0x7, .par.shift.amount = 2) \
+ MACRO(__VA_ARGS__, u16_lshift_xyz_3 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_LSHIFT , .mask = 0x7, .par.shift.amount = 3) \
+ MACRO(__VA_ARGS__, u16_lshift_xyz_4 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_LSHIFT , .mask = 0x7, .par.shift.amount = 4) \
+ MACRO(__VA_ARGS__, u16_lshift_xyz_5 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_LSHIFT , .mask = 0x7, .par.shift.amount = 5) \
+ MACRO(__VA_ARGS__, u16_lshift_xyz_6 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_LSHIFT , .mask = 0x7, .par.shift.amount = 6) \
+ MACRO(__VA_ARGS__, u16_lshift_xyz_7 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_LSHIFT , .mask = 0x7, .par.shift.amount = 7) \
+ MACRO(__VA_ARGS__, u16_lshift_xyz_8 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_LSHIFT , .mask = 0x7, .par.shift.amount = 8) \
+ MACRO(__VA_ARGS__, u16_lshift_yzw_1 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_LSHIFT , .mask = 0xe, .par.shift.amount = 1) \
+ MACRO(__VA_ARGS__, u16_lshift_yzw_2 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_LSHIFT , .mask = 0xe, .par.shift.amount = 2) \
+ MACRO(__VA_ARGS__, u16_lshift_yzw_4 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_LSHIFT , .mask = 0xe, .par.shift.amount = 4) \
+ MACRO(__VA_ARGS__, u16_lshift_yzw_6 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_LSHIFT , .mask = 0xe, .par.shift.amount = 6) \
+ MACRO(__VA_ARGS__, u16_lshift_yzw_8 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_LSHIFT , .mask = 0xe, .par.shift.amount = 8)
+%define SWS_FOR_U16_RSHIFT(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_rshift_x_4 , SWS_PIXEL_U16, SWS_UOP_RSHIFT , 0x1, 4) \
+ MACRO(__VA_ARGS__, u16_rshift_x_6 , SWS_PIXEL_U16, SWS_UOP_RSHIFT , 0x1, 6) \
+ MACRO(__VA_ARGS__, u16_rshift_y_4 , SWS_PIXEL_U16, SWS_UOP_RSHIFT , 0x2, 4) \
+ MACRO(__VA_ARGS__, u16_rshift_xyz_4 , SWS_PIXEL_U16, SWS_UOP_RSHIFT , 0x7, 4) \
+ MACRO(__VA_ARGS__, u16_rshift_xyz_6 , SWS_PIXEL_U16, SWS_UOP_RSHIFT , 0x7, 6)
+%define SWS_FOR_STRUCT_U16_RSHIFT(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_rshift_x_4 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_RSHIFT , .mask = 0x1, .par.shift.amount = 4) \
+ MACRO(__VA_ARGS__, u16_rshift_x_6 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_RSHIFT , .mask = 0x1, .par.shift.amount = 6) \
+ MACRO(__VA_ARGS__, u16_rshift_y_4 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_RSHIFT , .mask = 0x2, .par.shift.amount = 4) \
+ MACRO(__VA_ARGS__, u16_rshift_xyz_4 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_RSHIFT , .mask = 0x7, .par.shift.amount = 4) \
+ MACRO(__VA_ARGS__, u16_rshift_xyz_6 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_RSHIFT , .mask = 0x7, .par.shift.amount = 6)
+%define SWS_FOR_U16_CLEAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_clear_x_x , SWS_PIXEL_U16, SWS_UOP_CLEAR , 0x1, 0x00000, 0x00000) \
+ MACRO(__VA_ARGS__, u16_clear_x_1 , SWS_PIXEL_U16, SWS_UOP_CLEAR , 0x1, 0x00001, 0x00000) \
+ MACRO(__VA_ARGS__, u16_clear_y_1 , SWS_PIXEL_U16, SWS_UOP_CLEAR , 0x2, 0x00002, 0x00000) \
+ MACRO(__VA_ARGS__, u16_clear_xy_xx , SWS_PIXEL_U16, SWS_UOP_CLEAR , 0x3, 0x00000, 0x00000) \
+ MACRO(__VA_ARGS__, u16_clear_xyz_xxx , SWS_PIXEL_U16, SWS_UOP_CLEAR , 0x7, 0x00000, 0x00000) \
+ MACRO(__VA_ARGS__, u16_clear_xyz_1xx , SWS_PIXEL_U16, SWS_UOP_CLEAR , 0x7, 0x00001, 0x00000) \
+ MACRO(__VA_ARGS__, u16_clear_w_x , SWS_PIXEL_U16, SWS_UOP_CLEAR , 0x8, 0x00000, 0x00000) \
+ MACRO(__VA_ARGS__, u16_clear_w_0 , SWS_PIXEL_U16, SWS_UOP_CLEAR , 0x8, 0x00000, 0x00008) \
+ MACRO(__VA_ARGS__, u16_clear_w_1 , SWS_PIXEL_U16, SWS_UOP_CLEAR , 0x8, 0x00008, 0x00000) \
+ MACRO(__VA_ARGS__, u16_clear_zw_xx , SWS_PIXEL_U16, SWS_UOP_CLEAR , 0xc, 0x00000, 0x00000) \
+ MACRO(__VA_ARGS__, u16_clear_xzw_xx0 , SWS_PIXEL_U16, SWS_UOP_CLEAR , 0xd, 0x00000, 0x00008) \
+ MACRO(__VA_ARGS__, u16_clear_xzw_1xx , SWS_PIXEL_U16, SWS_UOP_CLEAR , 0xd, 0x00001, 0x00000)
+%define SWS_FOR_STRUCT_U16_CLEAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u16_clear_x_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_CLEAR , .mask = 0x1, .par.clear.one = 0x0, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u16_clear_x_1 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_CLEAR , .mask = 0x1, .par.clear.one = 0x1, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u16_clear_y_1 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_CLEAR , .mask = 0x2, .par.clear.one = 0x2, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u16_clear_xy_xx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_CLEAR , .mask = 0x3, .par.clear.one = 0x0, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u16_clear_xyz_xxx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_CLEAR , .mask = 0x7, .par.clear.one = 0x0, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u16_clear_xyz_1xx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_CLEAR , .mask = 0x7, .par.clear.one = 0x1, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u16_clear_w_x , .type = SWS_PIXEL_U16, .uop = SWS_UOP_CLEAR , .mask = 0x8, .par.clear.one = 0x0, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u16_clear_w_0 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_CLEAR , .mask = 0x8, .par.clear.one = 0x0, .par.clear.zero = 0x8) \
+ MACRO(__VA_ARGS__, u16_clear_w_1 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_CLEAR , .mask = 0x8, .par.clear.one = 0x8, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u16_clear_zw_xx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_CLEAR , .mask = 0xc, .par.clear.one = 0x0, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u16_clear_xzw_xx0 , .type = SWS_PIXEL_U16, .uop = SWS_UOP_CLEAR , .mask = 0xd, .par.clear.one = 0x0, .par.clear.zero = 0x8) \
+ MACRO(__VA_ARGS__, u16_clear_xzw_1xx , .type = SWS_PIXEL_U16, .uop = SWS_UOP_CLEAR , .mask = 0xd, .par.clear.one = 0x1, .par.clear.zero = 0x0)
+%define SWS_FOR_U16_LINEAR(MACRO, ...)
+%define SWS_FOR_STRUCT_U16_LINEAR(MACRO, ...)
+%define SWS_FOR_U16_LINEAR_FMA(MACRO, ...)
+%define SWS_FOR_STRUCT_U16_LINEAR_FMA(MACRO, ...)
+%define SWS_FOR_U16_DITHER(MACRO, ...)
+%define SWS_FOR_STRUCT_U16_DITHER(MACRO, ...)
+%define SWS_FOR_U32_READ_PLANAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_read_planar_x , SWS_PIXEL_U32, SWS_UOP_READ_PLANAR , 0x1) \
+ MACRO(__VA_ARGS__, u32_read_planar_xyz , SWS_PIXEL_U32, SWS_UOP_READ_PLANAR , 0x7) \
+ MACRO(__VA_ARGS__, u32_read_planar_xyzw , SWS_PIXEL_U32, SWS_UOP_READ_PLANAR , 0xf)
+%define SWS_FOR_STRUCT_U32_READ_PLANAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_read_planar_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_READ_PLANAR , .mask = 0x1) \
+ MACRO(__VA_ARGS__, u32_read_planar_xyz , .type = SWS_PIXEL_U32, .uop = SWS_UOP_READ_PLANAR , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u32_read_planar_xyzw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_READ_PLANAR , .mask = 0xf)
+%define SWS_FOR_U32_READ_PLANAR_FH(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_READ_PLANAR_FH(MACRO, ...)
+%define SWS_FOR_U32_READ_PLANAR_FV(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_READ_PLANAR_FV(MACRO, ...)
+%define SWS_FOR_U32_READ_PLANAR_FV_FMA(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_READ_PLANAR_FV_FMA(MACRO, ...)
+%define SWS_FOR_U32_READ_PACKED(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_read_packed_xy , SWS_PIXEL_U32, SWS_UOP_READ_PACKED , 0x3) \
+ MACRO(__VA_ARGS__, u32_read_packed_xyz , SWS_PIXEL_U32, SWS_UOP_READ_PACKED , 0x7) \
+ MACRO(__VA_ARGS__, u32_read_packed_xyzw , SWS_PIXEL_U32, SWS_UOP_READ_PACKED , 0xf)
+%define SWS_FOR_STRUCT_U32_READ_PACKED(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_read_packed_xy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_READ_PACKED , .mask = 0x3) \
+ MACRO(__VA_ARGS__, u32_read_packed_xyz , .type = SWS_PIXEL_U32, .uop = SWS_UOP_READ_PACKED , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u32_read_packed_xyzw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_READ_PACKED , .mask = 0xf)
+%define SWS_FOR_U32_READ_NIBBLE(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_READ_NIBBLE(MACRO, ...)
+%define SWS_FOR_U32_READ_BIT(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_READ_BIT(MACRO, ...)
+%define SWS_FOR_U32_READ_PALETTE(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_READ_PALETTE(MACRO, ...)
+%define SWS_FOR_U32_WRITE_PLANAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_write_planar_x , SWS_PIXEL_U32, SWS_UOP_WRITE_PLANAR , 0x1) \
+ MACRO(__VA_ARGS__, u32_write_planar_xy , SWS_PIXEL_U32, SWS_UOP_WRITE_PLANAR , 0x3) \
+ MACRO(__VA_ARGS__, u32_write_planar_xyz , SWS_PIXEL_U32, SWS_UOP_WRITE_PLANAR , 0x7) \
+ MACRO(__VA_ARGS__, u32_write_planar_xyzw , SWS_PIXEL_U32, SWS_UOP_WRITE_PLANAR , 0xf)
+%define SWS_FOR_STRUCT_U32_WRITE_PLANAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_write_planar_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_WRITE_PLANAR , .mask = 0x1) \
+ MACRO(__VA_ARGS__, u32_write_planar_xy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_WRITE_PLANAR , .mask = 0x3) \
+ MACRO(__VA_ARGS__, u32_write_planar_xyz , .type = SWS_PIXEL_U32, .uop = SWS_UOP_WRITE_PLANAR , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u32_write_planar_xyzw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_WRITE_PLANAR , .mask = 0xf)
+%define SWS_FOR_U32_WRITE_PACKED(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_write_packed_xy , SWS_PIXEL_U32, SWS_UOP_WRITE_PACKED , 0x3) \
+ MACRO(__VA_ARGS__, u32_write_packed_xyz , SWS_PIXEL_U32, SWS_UOP_WRITE_PACKED , 0x7) \
+ MACRO(__VA_ARGS__, u32_write_packed_xyzw , SWS_PIXEL_U32, SWS_UOP_WRITE_PACKED , 0xf)
+%define SWS_FOR_STRUCT_U32_WRITE_PACKED(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_write_packed_xy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_WRITE_PACKED , .mask = 0x3) \
+ MACRO(__VA_ARGS__, u32_write_packed_xyz , .type = SWS_PIXEL_U32, .uop = SWS_UOP_WRITE_PACKED , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u32_write_packed_xyzw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_WRITE_PACKED , .mask = 0xf)
+%define SWS_FOR_U32_WRITE_NIBBLE(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_WRITE_NIBBLE(MACRO, ...)
+%define SWS_FOR_U32_WRITE_BIT(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_WRITE_BIT(MACRO, ...)
+%define SWS_FOR_U32_PERMUTE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_permute_xyz_x_w , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 1, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyz_y_w , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 1, 1, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyz_xz_zw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 2, 0, 2, 0, 0, 0, 0, 2, 3, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyz_zx_xw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 2, 2, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyz_xyz_yzw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 3, 0, 1, 2, 0, 0, 0, 1, 2, 3, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyz_xzy_zyw , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 3, 0, 2, 1, 0, 0, 0, 2, 1, 3, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyz_xtyz_wyzt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0x7, 4, 0, -1, 1, 2, 0, 0, 3, 1, 2, -1, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyw_x_z , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xb, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xzw_x_y , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xd, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xzw_w_y , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xd, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xzw_wx_xy , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xd, 2, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_yzw_y_x , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_yzw_z_x , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_yzw_w_x , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_yzw_wy_yx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 2, 3, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_yzw_wz_zx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 2, 3, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_yzw_wyz_yzx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 3, 3, 1, 2, 0, 0, 0, 1, 2, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_yzw_wzy_zyx , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 3, 3, 2, 1, 0, 0, 0, 2, 1, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_yzw_wtyz_xyzt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xe, 4, 3, -1, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_txy_xyt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 3, -1, 0, 1, 0, 0, 0, 0, 1, -1, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_txz_xzt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 3, -1, 0, 2, 0, 0, 0, 0, 2, -1, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_tyz_yzt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 3, -1, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_tyw_ywt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 3, -1, 1, 3, 0, 0, 0, 1, 3, -1, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_txyz_xyzt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 4, -1, 0, 1, 2, 0, 0, 0, 1, 2, -1, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_txzy_xzyt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 4, -1, 0, 2, 1, 0, 0, 0, 2, 1, -1, 0, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_txyzw_xyzwt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 5, -1, 0, 1, 2, 3, 0, 0, 1, 2, 3, -1, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_txwyz_xwyzt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 5, -1, 0, 3, 1, 2, 0, 0, 3, 1, 2, -1, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_txwzy_xwzyt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 5, -1, 0, 3, 2, 1, 0, 0, 3, 2, 1, -1, 0) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_txwtyz_xwtyzt , SWS_PIXEL_U32, SWS_UOP_PERMUTE , 0xf, 6, -1, 0, 3, -1, 1, 2, 0, 3, -1, 1, 2, -1)
+%define SWS_FOR_STRUCT_U32_PERMUTE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_permute_xyz_x_w , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyz_y_w , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {3, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyz_xz_zw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 2, .par.move.dst = {0, 2, 0, 0, 0, 0}, .par.move.src = {2, 3, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyz_zx_xw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 2, .par.move.dst = {2, 0, 0, 0, 0, 0}, .par.move.src = {0, 3, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyz_xyz_yzw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 3, .par.move.dst = {0, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, 3, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyz_xzy_zyw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 3, .par.move.dst = {0, 2, 1, 0, 0, 0}, .par.move.src = {2, 1, 3, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyz_xtyz_wyzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0x7, .par.move.num_moves = 4, .par.move.dst = {0, -1, 1, 2, 0, 0}, .par.move.src = {3, 1, 2, -1, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyw_x_z , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xb, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xzw_x_y , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xd, .par.move.num_moves = 1, .par.move.dst = {0, 0, 0, 0, 0, 0}, .par.move.src = {1, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xzw_w_y , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xd, .par.move.num_moves = 1, .par.move.dst = {3, 0, 0, 0, 0, 0}, .par.move.src = {1, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xzw_wx_xy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xd, .par.move.num_moves = 2, .par.move.dst = {3, 0, 0, 0, 0, 0}, .par.move.src = {0, 1, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_yzw_y_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 1, .par.move.dst = {1, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_yzw_z_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 1, .par.move.dst = {2, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_yzw_w_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 1, .par.move.dst = {3, 0, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_yzw_wy_yx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 2, .par.move.dst = {3, 1, 0, 0, 0, 0}, .par.move.src = {1, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_yzw_wz_zx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 2, .par.move.dst = {3, 2, 0, 0, 0, 0}, .par.move.src = {2, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_yzw_wyz_yzx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 3, .par.move.dst = {3, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_yzw_wzy_zyx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 3, .par.move.dst = {3, 2, 1, 0, 0, 0}, .par.move.src = {2, 1, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_yzw_wtyz_xyzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xe, .par.move.num_moves = 4, .par.move.dst = {3, -1, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_txy_xyt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 1, 0, 0, 0}, .par.move.src = {0, 1, -1, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_txz_xzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 0, 2, 0, 0, 0}, .par.move.src = {0, 2, -1, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_tyz_yzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 1, 2, 0, 0, 0}, .par.move.src = {1, 2, -1, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_tyw_ywt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {-1, 1, 3, 0, 0, 0}, .par.move.src = {1, 3, -1, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_txyz_xyzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 1, 2, 0, 0}, .par.move.src = {0, 1, 2, -1, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_txzy_xzyt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 4, .par.move.dst = {-1, 0, 2, 1, 0, 0}, .par.move.src = {0, 2, 1, -1, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_txyzw_xyzwt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 1, 2, 3, 0}, .par.move.src = {0, 1, 2, 3, -1, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_txwyz_xwyzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 3, 1, 2, 0}, .par.move.src = {0, 3, 1, 2, -1, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_txwzy_xwzyt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 5, .par.move.dst = {-1, 0, 3, 2, 1, 0}, .par.move.src = {0, 3, 2, 1, -1, 0}) \
+ MACRO(__VA_ARGS__, u32_permute_xyzw_txwtyz_xwtyzt , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PERMUTE , .mask = 0xf, .par.move.num_moves = 6, .par.move.dst = {-1, 0, 3, -1, 1, 2}, .par.move.src = {0, 3, -1, 1, 2, -1})
+%define SWS_FOR_U32_COPY(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_copy_yzw_yzw_xxx , SWS_PIXEL_U32, SWS_UOP_COPY , 0xe, 3, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_copy_xyzw_yz_xx , SWS_PIXEL_U32, SWS_UOP_COPY , 0xf, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) \
+ MACRO(__VA_ARGS__, u32_copy_xyzw_zwy_xyx , SWS_PIXEL_U32, SWS_UOP_COPY , 0xf, 3, 2, 3, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0)
+%define SWS_FOR_STRUCT_U32_COPY(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_copy_yzw_yzw_xxx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_COPY , .mask = 0xe, .par.move.num_moves = 3, .par.move.dst = {1, 2, 3, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_copy_xyzw_yz_xx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_COPY , .mask = 0xf, .par.move.num_moves = 2, .par.move.dst = {1, 2, 0, 0, 0, 0}, .par.move.src = {0, 0, 0, 0, 0, 0}) \
+ MACRO(__VA_ARGS__, u32_copy_xyzw_zwy_xyx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_COPY , .mask = 0xf, .par.move.num_moves = 3, .par.move.dst = {2, 3, 1, 0, 0, 0}, .par.move.src = {0, 1, 0, 0, 0, 0})
+%define SWS_FOR_U32_SWAP_BYTES(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_swap_bytes_x , SWS_PIXEL_U32, SWS_UOP_SWAP_BYTES , 0x1) \
+ MACRO(__VA_ARGS__, u32_swap_bytes_xy , SWS_PIXEL_U32, SWS_UOP_SWAP_BYTES , 0x3) \
+ MACRO(__VA_ARGS__, u32_swap_bytes_xyz , SWS_PIXEL_U32, SWS_UOP_SWAP_BYTES , 0x7) \
+ MACRO(__VA_ARGS__, u32_swap_bytes_xw , SWS_PIXEL_U32, SWS_UOP_SWAP_BYTES , 0x9) \
+ MACRO(__VA_ARGS__, u32_swap_bytes_yzw , SWS_PIXEL_U32, SWS_UOP_SWAP_BYTES , 0xe) \
+ MACRO(__VA_ARGS__, u32_swap_bytes_xyzw , SWS_PIXEL_U32, SWS_UOP_SWAP_BYTES , 0xf)
+%define SWS_FOR_STRUCT_U32_SWAP_BYTES(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_swap_bytes_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_SWAP_BYTES , .mask = 0x1) \
+ MACRO(__VA_ARGS__, u32_swap_bytes_xy , .type = SWS_PIXEL_U32, .uop = SWS_UOP_SWAP_BYTES , .mask = 0x3) \
+ MACRO(__VA_ARGS__, u32_swap_bytes_xyz , .type = SWS_PIXEL_U32, .uop = SWS_UOP_SWAP_BYTES , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u32_swap_bytes_xw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_SWAP_BYTES , .mask = 0x9) \
+ MACRO(__VA_ARGS__, u32_swap_bytes_yzw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_SWAP_BYTES , .mask = 0xe) \
+ MACRO(__VA_ARGS__, u32_swap_bytes_xyzw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_SWAP_BYTES , .mask = 0xf)
+%define SWS_FOR_U32_EXPAND_BIT(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_EXPAND_BIT(MACRO, ...)
+%define SWS_FOR_U32_EXPAND_PAIR(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_EXPAND_PAIR(MACRO, ...)
+%define SWS_FOR_U32_EXPAND_QUAD(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_EXPAND_QUAD(MACRO, ...)
+%define SWS_FOR_U32_TO_U8(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_TO_U8(MACRO, ...)
+%define SWS_FOR_U32_TO_U16(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_to_u16_y , SWS_PIXEL_U32, SWS_UOP_TO_U16 , 0x2) \
+ MACRO(__VA_ARGS__, u32_to_u16_z , SWS_PIXEL_U32, SWS_UOP_TO_U16 , 0x4) \
+ MACRO(__VA_ARGS__, u32_to_u16_xyz , SWS_PIXEL_U32, SWS_UOP_TO_U16 , 0x7) \
+ MACRO(__VA_ARGS__, u32_to_u16_yzw , SWS_PIXEL_U32, SWS_UOP_TO_U16 , 0xe)
+%define SWS_FOR_STRUCT_U32_TO_U16(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_to_u16_y , .type = SWS_PIXEL_U32, .uop = SWS_UOP_TO_U16 , .mask = 0x2) \
+ MACRO(__VA_ARGS__, u32_to_u16_z , .type = SWS_PIXEL_U32, .uop = SWS_UOP_TO_U16 , .mask = 0x4) \
+ MACRO(__VA_ARGS__, u32_to_u16_xyz , .type = SWS_PIXEL_U32, .uop = SWS_UOP_TO_U16 , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u32_to_u16_yzw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_TO_U16 , .mask = 0xe)
+%define SWS_FOR_U32_TO_U32(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_TO_U32(MACRO, ...)
+%define SWS_FOR_U32_TO_F32(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_to_f32_y , SWS_PIXEL_U32, SWS_UOP_TO_F32 , 0x2) \
+ MACRO(__VA_ARGS__, u32_to_f32_z , SWS_PIXEL_U32, SWS_UOP_TO_F32 , 0x4) \
+ MACRO(__VA_ARGS__, u32_to_f32_xyz , SWS_PIXEL_U32, SWS_UOP_TO_F32 , 0x7) \
+ MACRO(__VA_ARGS__, u32_to_f32_yzw , SWS_PIXEL_U32, SWS_UOP_TO_F32 , 0xe)
+%define SWS_FOR_STRUCT_U32_TO_F32(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_to_f32_y , .type = SWS_PIXEL_U32, .uop = SWS_UOP_TO_F32 , .mask = 0x2) \
+ MACRO(__VA_ARGS__, u32_to_f32_z , .type = SWS_PIXEL_U32, .uop = SWS_UOP_TO_F32 , .mask = 0x4) \
+ MACRO(__VA_ARGS__, u32_to_f32_xyz , .type = SWS_PIXEL_U32, .uop = SWS_UOP_TO_F32 , .mask = 0x7) \
+ MACRO(__VA_ARGS__, u32_to_f32_yzw , .type = SWS_PIXEL_U32, .uop = SWS_UOP_TO_F32 , .mask = 0xe)
+%define SWS_FOR_U32_SCALE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_scale_x , SWS_PIXEL_U32, SWS_UOP_SCALE , 0x1) \
+ MACRO(__VA_ARGS__, u32_scale_xyz , SWS_PIXEL_U32, SWS_UOP_SCALE , 0x7)
+%define SWS_FOR_STRUCT_U32_SCALE(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_scale_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_SCALE , .mask = 0x1) \
+ MACRO(__VA_ARGS__, u32_scale_xyz , .type = SWS_PIXEL_U32, .uop = SWS_UOP_SCALE , .mask = 0x7)
+%define SWS_FOR_U32_ADD(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_ADD(MACRO, ...)
+%define SWS_FOR_U32_MIN(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_MIN(MACRO, ...)
+%define SWS_FOR_U32_MAX(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_MAX(MACRO, ...)
+%define SWS_FOR_U32_UNPACK(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_unpack_xyzw_2aaa , SWS_PIXEL_U32, SWS_UOP_UNPACK , 0xf, 2, 10, 10, 10) \
+ MACRO(__VA_ARGS__, u32_unpack_xyzw_aaa2 , SWS_PIXEL_U32, SWS_UOP_UNPACK , 0xf, 10, 10, 10, 2)
+%define SWS_FOR_STRUCT_U32_UNPACK(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_unpack_xyzw_2aaa , .type = SWS_PIXEL_U32, .uop = SWS_UOP_UNPACK , .mask = 0xf, .par.pack.pattern = {2, 10, 10, 10}) \
+ MACRO(__VA_ARGS__, u32_unpack_xyzw_aaa2 , .type = SWS_PIXEL_U32, .uop = SWS_UOP_UNPACK , .mask = 0xf, .par.pack.pattern = {10, 10, 10, 2})
+%define SWS_FOR_U32_PACK(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_pack_xyzw_2aaa , SWS_PIXEL_U32, SWS_UOP_PACK , 0xf, 2, 10, 10, 10) \
+ MACRO(__VA_ARGS__, u32_pack_xyzw_aaa2 , SWS_PIXEL_U32, SWS_UOP_PACK , 0xf, 10, 10, 10, 2)
+%define SWS_FOR_STRUCT_U32_PACK(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_pack_xyzw_2aaa , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PACK , .mask = 0xf, .par.pack.pattern = {2, 10, 10, 10}) \
+ MACRO(__VA_ARGS__, u32_pack_xyzw_aaa2 , .type = SWS_PIXEL_U32, .uop = SWS_UOP_PACK , .mask = 0xf, .par.pack.pattern = {10, 10, 10, 2})
+%define SWS_FOR_U32_LSHIFT(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_lshift_xyz_2 , SWS_PIXEL_U32, SWS_UOP_LSHIFT , 0x7, 2)
+%define SWS_FOR_STRUCT_U32_LSHIFT(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_lshift_xyz_2 , .type = SWS_PIXEL_U32, .uop = SWS_UOP_LSHIFT , .mask = 0x7, .par.shift.amount = 2)
+%define SWS_FOR_U32_RSHIFT(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_RSHIFT(MACRO, ...)
+%define SWS_FOR_U32_CLEAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_clear_x_x , SWS_PIXEL_U32, SWS_UOP_CLEAR , 0x1, 0x00000, 0x00000) \
+ MACRO(__VA_ARGS__, u32_clear_y_x , SWS_PIXEL_U32, SWS_UOP_CLEAR , 0x2, 0x00000, 0x00000) \
+ MACRO(__VA_ARGS__, u32_clear_xz_xx , SWS_PIXEL_U32, SWS_UOP_CLEAR , 0x5, 0x00000, 0x00000) \
+ MACRO(__VA_ARGS__, u32_clear_w_x , SWS_PIXEL_U32, SWS_UOP_CLEAR , 0x8, 0x00000, 0x00000) \
+ MACRO(__VA_ARGS__, u32_clear_yw_xx , SWS_PIXEL_U32, SWS_UOP_CLEAR , 0xa, 0x00000, 0x00000) \
+ MACRO(__VA_ARGS__, u32_clear_xyw_xxx , SWS_PIXEL_U32, SWS_UOP_CLEAR , 0xb, 0x00000, 0x00000) \
+ MACRO(__VA_ARGS__, u32_clear_xzw_xxx , SWS_PIXEL_U32, SWS_UOP_CLEAR , 0xd, 0x00000, 0x00000)
+%define SWS_FOR_STRUCT_U32_CLEAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, u32_clear_x_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_CLEAR , .mask = 0x1, .par.clear.one = 0x0, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u32_clear_y_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_CLEAR , .mask = 0x2, .par.clear.one = 0x0, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u32_clear_xz_xx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_CLEAR , .mask = 0x5, .par.clear.one = 0x0, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u32_clear_w_x , .type = SWS_PIXEL_U32, .uop = SWS_UOP_CLEAR , .mask = 0x8, .par.clear.one = 0x0, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u32_clear_yw_xx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_CLEAR , .mask = 0xa, .par.clear.one = 0x0, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u32_clear_xyw_xxx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_CLEAR , .mask = 0xb, .par.clear.one = 0x0, .par.clear.zero = 0x0) \
+ MACRO(__VA_ARGS__, u32_clear_xzw_xxx , .type = SWS_PIXEL_U32, .uop = SWS_UOP_CLEAR , .mask = 0xd, .par.clear.one = 0x0, .par.clear.zero = 0x0)
+%define SWS_FOR_U32_LINEAR(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_LINEAR(MACRO, ...)
+%define SWS_FOR_U32_LINEAR_FMA(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_LINEAR_FMA(MACRO, ...)
+%define SWS_FOR_U32_DITHER(MACRO, ...)
+%define SWS_FOR_STRUCT_U32_DITHER(MACRO, ...)
+%define SWS_FOR_F32_READ_PLANAR(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_READ_PLANAR(MACRO, ...)
+%define SWS_FOR_F32_READ_PLANAR_FH(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_read_planar_fh_x_f32 , SWS_PIXEL_F32, SWS_UOP_READ_PLANAR_FH , 0x1, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fh_xy_f32 , SWS_PIXEL_F32, SWS_UOP_READ_PLANAR_FH , 0x3, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fh_xyz_f32 , SWS_PIXEL_F32, SWS_UOP_READ_PLANAR_FH , 0x7, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fh_xyzw_f32 , SWS_PIXEL_F32, SWS_UOP_READ_PLANAR_FH , 0xf, SWS_PIXEL_F32)
+%define SWS_FOR_STRUCT_F32_READ_PLANAR_FH(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_read_planar_fh_x_f32 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_READ_PLANAR_FH , .mask = 0x1, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fh_xy_f32 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_READ_PLANAR_FH , .mask = 0x3, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fh_xyz_f32 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_READ_PLANAR_FH , .mask = 0x7, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fh_xyzw_f32 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_READ_PLANAR_FH , .mask = 0xf, .par.filter.type = SWS_PIXEL_F32)
+%define SWS_FOR_F32_READ_PLANAR_FV(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_read_planar_fv_x_f32 , SWS_PIXEL_F32, SWS_UOP_READ_PLANAR_FV , 0x1, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fv_xy_f32 , SWS_PIXEL_F32, SWS_UOP_READ_PLANAR_FV , 0x3, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fv_xyz_f32 , SWS_PIXEL_F32, SWS_UOP_READ_PLANAR_FV , 0x7, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fv_xyzw_f32 , SWS_PIXEL_F32, SWS_UOP_READ_PLANAR_FV , 0xf, SWS_PIXEL_F32)
+%define SWS_FOR_STRUCT_F32_READ_PLANAR_FV(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_read_planar_fv_x_f32 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_READ_PLANAR_FV , .mask = 0x1, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fv_xy_f32 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_READ_PLANAR_FV , .mask = 0x3, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fv_xyz_f32 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_READ_PLANAR_FV , .mask = 0x7, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fv_xyzw_f32 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_READ_PLANAR_FV , .mask = 0xf, .par.filter.type = SWS_PIXEL_F32)
+%define SWS_FOR_F32_READ_PLANAR_FV_FMA(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_read_planar_fv_fma_x_f32 , SWS_PIXEL_F32, SWS_UOP_READ_PLANAR_FV_FMA, 0x1, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fv_fma_xy_f32 , SWS_PIXEL_F32, SWS_UOP_READ_PLANAR_FV_FMA, 0x3, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fv_fma_xyz_f32 , SWS_PIXEL_F32, SWS_UOP_READ_PLANAR_FV_FMA, 0x7, SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fv_fma_xyzw_f32 , SWS_PIXEL_F32, SWS_UOP_READ_PLANAR_FV_FMA, 0xf, SWS_PIXEL_F32)
+%define SWS_FOR_STRUCT_F32_READ_PLANAR_FV_FMA(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_read_planar_fv_fma_x_f32 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_READ_PLANAR_FV_FMA, .mask = 0x1, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fv_fma_xy_f32 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_READ_PLANAR_FV_FMA, .mask = 0x3, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fv_fma_xyz_f32 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_READ_PLANAR_FV_FMA, .mask = 0x7, .par.filter.type = SWS_PIXEL_F32) \
+ MACRO(__VA_ARGS__, f32_read_planar_fv_fma_xyzw_f32 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_READ_PLANAR_FV_FMA, .mask = 0xf, .par.filter.type = SWS_PIXEL_F32)
+%define SWS_FOR_F32_READ_PACKED(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_READ_PACKED(MACRO, ...)
+%define SWS_FOR_F32_READ_NIBBLE(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_READ_NIBBLE(MACRO, ...)
+%define SWS_FOR_F32_READ_BIT(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_READ_BIT(MACRO, ...)
+%define SWS_FOR_F32_READ_PALETTE(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_READ_PALETTE(MACRO, ...)
+%define SWS_FOR_F32_WRITE_PLANAR(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_WRITE_PLANAR(MACRO, ...)
+%define SWS_FOR_F32_WRITE_PACKED(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_WRITE_PACKED(MACRO, ...)
+%define SWS_FOR_F32_WRITE_NIBBLE(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_WRITE_NIBBLE(MACRO, ...)
+%define SWS_FOR_F32_WRITE_BIT(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_WRITE_BIT(MACRO, ...)
+%define SWS_FOR_F32_PERMUTE(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_PERMUTE(MACRO, ...)
+%define SWS_FOR_F32_COPY(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_COPY(MACRO, ...)
+%define SWS_FOR_F32_SWAP_BYTES(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_SWAP_BYTES(MACRO, ...)
+%define SWS_FOR_F32_EXPAND_BIT(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_EXPAND_BIT(MACRO, ...)
+%define SWS_FOR_F32_EXPAND_PAIR(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_EXPAND_PAIR(MACRO, ...)
+%define SWS_FOR_F32_EXPAND_QUAD(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_EXPAND_QUAD(MACRO, ...)
+%define SWS_FOR_F32_TO_U8(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_to_u8_x , SWS_PIXEL_F32, SWS_UOP_TO_U8 , 0x1) \
+ MACRO(__VA_ARGS__, f32_to_u8_xy , SWS_PIXEL_F32, SWS_UOP_TO_U8 , 0x3) \
+ MACRO(__VA_ARGS__, f32_to_u8_xyz , SWS_PIXEL_F32, SWS_UOP_TO_U8 , 0x7) \
+ MACRO(__VA_ARGS__, f32_to_u8_xw , SWS_PIXEL_F32, SWS_UOP_TO_U8 , 0x9) \
+ MACRO(__VA_ARGS__, f32_to_u8_yzw , SWS_PIXEL_F32, SWS_UOP_TO_U8 , 0xe) \
+ MACRO(__VA_ARGS__, f32_to_u8_xyzw , SWS_PIXEL_F32, SWS_UOP_TO_U8 , 0xf)
+%define SWS_FOR_STRUCT_F32_TO_U8(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_to_u8_x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U8 , .mask = 0x1) \
+ MACRO(__VA_ARGS__, f32_to_u8_xy , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U8 , .mask = 0x3) \
+ MACRO(__VA_ARGS__, f32_to_u8_xyz , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U8 , .mask = 0x7) \
+ MACRO(__VA_ARGS__, f32_to_u8_xw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U8 , .mask = 0x9) \
+ MACRO(__VA_ARGS__, f32_to_u8_yzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U8 , .mask = 0xe) \
+ MACRO(__VA_ARGS__, f32_to_u8_xyzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U8 , .mask = 0xf)
+%define SWS_FOR_F32_TO_U16(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_to_u16_x , SWS_PIXEL_F32, SWS_UOP_TO_U16 , 0x1) \
+ MACRO(__VA_ARGS__, f32_to_u16_xy , SWS_PIXEL_F32, SWS_UOP_TO_U16 , 0x3) \
+ MACRO(__VA_ARGS__, f32_to_u16_xyz , SWS_PIXEL_F32, SWS_UOP_TO_U16 , 0x7) \
+ MACRO(__VA_ARGS__, f32_to_u16_xw , SWS_PIXEL_F32, SWS_UOP_TO_U16 , 0x9) \
+ MACRO(__VA_ARGS__, f32_to_u16_yzw , SWS_PIXEL_F32, SWS_UOP_TO_U16 , 0xe) \
+ MACRO(__VA_ARGS__, f32_to_u16_xyzw , SWS_PIXEL_F32, SWS_UOP_TO_U16 , 0xf)
+%define SWS_FOR_STRUCT_F32_TO_U16(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_to_u16_x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U16 , .mask = 0x1) \
+ MACRO(__VA_ARGS__, f32_to_u16_xy , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U16 , .mask = 0x3) \
+ MACRO(__VA_ARGS__, f32_to_u16_xyz , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U16 , .mask = 0x7) \
+ MACRO(__VA_ARGS__, f32_to_u16_xw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U16 , .mask = 0x9) \
+ MACRO(__VA_ARGS__, f32_to_u16_yzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U16 , .mask = 0xe) \
+ MACRO(__VA_ARGS__, f32_to_u16_xyzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U16 , .mask = 0xf)
+%define SWS_FOR_F32_TO_U32(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_to_u32_x , SWS_PIXEL_F32, SWS_UOP_TO_U32 , 0x1) \
+ MACRO(__VA_ARGS__, f32_to_u32_xyz , SWS_PIXEL_F32, SWS_UOP_TO_U32 , 0x7) \
+ MACRO(__VA_ARGS__, f32_to_u32_xw , SWS_PIXEL_F32, SWS_UOP_TO_U32 , 0x9) \
+ MACRO(__VA_ARGS__, f32_to_u32_yzw , SWS_PIXEL_F32, SWS_UOP_TO_U32 , 0xe) \
+ MACRO(__VA_ARGS__, f32_to_u32_xyzw , SWS_PIXEL_F32, SWS_UOP_TO_U32 , 0xf)
+%define SWS_FOR_STRUCT_F32_TO_U32(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_to_u32_x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U32 , .mask = 0x1) \
+ MACRO(__VA_ARGS__, f32_to_u32_xyz , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U32 , .mask = 0x7) \
+ MACRO(__VA_ARGS__, f32_to_u32_xw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U32 , .mask = 0x9) \
+ MACRO(__VA_ARGS__, f32_to_u32_yzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U32 , .mask = 0xe) \
+ MACRO(__VA_ARGS__, f32_to_u32_xyzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_TO_U32 , .mask = 0xf)
+%define SWS_FOR_F32_TO_F32(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_TO_F32(MACRO, ...)
+%define SWS_FOR_F32_SCALE(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_scale_x , SWS_PIXEL_F32, SWS_UOP_SCALE , 0x1) \
+ MACRO(__VA_ARGS__, f32_scale_xy , SWS_PIXEL_F32, SWS_UOP_SCALE , 0x3) \
+ MACRO(__VA_ARGS__, f32_scale_xyz , SWS_PIXEL_F32, SWS_UOP_SCALE , 0x7) \
+ MACRO(__VA_ARGS__, f32_scale_yzw , SWS_PIXEL_F32, SWS_UOP_SCALE , 0xe) \
+ MACRO(__VA_ARGS__, f32_scale_xyzw , SWS_PIXEL_F32, SWS_UOP_SCALE , 0xf)
+%define SWS_FOR_STRUCT_F32_SCALE(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_scale_x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_SCALE , .mask = 0x1) \
+ MACRO(__VA_ARGS__, f32_scale_xy , .type = SWS_PIXEL_F32, .uop = SWS_UOP_SCALE , .mask = 0x3) \
+ MACRO(__VA_ARGS__, f32_scale_xyz , .type = SWS_PIXEL_F32, .uop = SWS_UOP_SCALE , .mask = 0x7) \
+ MACRO(__VA_ARGS__, f32_scale_yzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_SCALE , .mask = 0xe) \
+ MACRO(__VA_ARGS__, f32_scale_xyzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_SCALE , .mask = 0xf)
+%define SWS_FOR_F32_ADD(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_add_x , SWS_PIXEL_F32, SWS_UOP_ADD , 0x1) \
+ MACRO(__VA_ARGS__, f32_add_xy , SWS_PIXEL_F32, SWS_UOP_ADD , 0x3) \
+ MACRO(__VA_ARGS__, f32_add_xz , SWS_PIXEL_F32, SWS_UOP_ADD , 0x5) \
+ MACRO(__VA_ARGS__, f32_add_xyz , SWS_PIXEL_F32, SWS_UOP_ADD , 0x7) \
+ MACRO(__VA_ARGS__, f32_add_w , SWS_PIXEL_F32, SWS_UOP_ADD , 0x8) \
+ MACRO(__VA_ARGS__, f32_add_xw , SWS_PIXEL_F32, SWS_UOP_ADD , 0x9) \
+ MACRO(__VA_ARGS__, f32_add_yzw , SWS_PIXEL_F32, SWS_UOP_ADD , 0xe) \
+ MACRO(__VA_ARGS__, f32_add_xyzw , SWS_PIXEL_F32, SWS_UOP_ADD , 0xf)
+%define SWS_FOR_STRUCT_F32_ADD(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_add_x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_ADD , .mask = 0x1) \
+ MACRO(__VA_ARGS__, f32_add_xy , .type = SWS_PIXEL_F32, .uop = SWS_UOP_ADD , .mask = 0x3) \
+ MACRO(__VA_ARGS__, f32_add_xz , .type = SWS_PIXEL_F32, .uop = SWS_UOP_ADD , .mask = 0x5) \
+ MACRO(__VA_ARGS__, f32_add_xyz , .type = SWS_PIXEL_F32, .uop = SWS_UOP_ADD , .mask = 0x7) \
+ MACRO(__VA_ARGS__, f32_add_w , .type = SWS_PIXEL_F32, .uop = SWS_UOP_ADD , .mask = 0x8) \
+ MACRO(__VA_ARGS__, f32_add_xw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_ADD , .mask = 0x9) \
+ MACRO(__VA_ARGS__, f32_add_yzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_ADD , .mask = 0xe) \
+ MACRO(__VA_ARGS__, f32_add_xyzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_ADD , .mask = 0xf)
+%define SWS_FOR_F32_MIN(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_min_x , SWS_PIXEL_F32, SWS_UOP_MIN , 0x1) \
+ MACRO(__VA_ARGS__, f32_min_xy , SWS_PIXEL_F32, SWS_UOP_MIN , 0x3) \
+ MACRO(__VA_ARGS__, f32_min_xyz , SWS_PIXEL_F32, SWS_UOP_MIN , 0x7) \
+ MACRO(__VA_ARGS__, f32_min_xw , SWS_PIXEL_F32, SWS_UOP_MIN , 0x9) \
+ MACRO(__VA_ARGS__, f32_min_yzw , SWS_PIXEL_F32, SWS_UOP_MIN , 0xe) \
+ MACRO(__VA_ARGS__, f32_min_xyzw , SWS_PIXEL_F32, SWS_UOP_MIN , 0xf)
+%define SWS_FOR_STRUCT_F32_MIN(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_min_x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MIN , .mask = 0x1) \
+ MACRO(__VA_ARGS__, f32_min_xy , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MIN , .mask = 0x3) \
+ MACRO(__VA_ARGS__, f32_min_xyz , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MIN , .mask = 0x7) \
+ MACRO(__VA_ARGS__, f32_min_xw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MIN , .mask = 0x9) \
+ MACRO(__VA_ARGS__, f32_min_yzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MIN , .mask = 0xe) \
+ MACRO(__VA_ARGS__, f32_min_xyzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MIN , .mask = 0xf)
+%define SWS_FOR_F32_MAX(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_max_x , SWS_PIXEL_F32, SWS_UOP_MAX , 0x1) \
+ MACRO(__VA_ARGS__, f32_max_xy , SWS_PIXEL_F32, SWS_UOP_MAX , 0x3) \
+ MACRO(__VA_ARGS__, f32_max_xyz , SWS_PIXEL_F32, SWS_UOP_MAX , 0x7) \
+ MACRO(__VA_ARGS__, f32_max_xw , SWS_PIXEL_F32, SWS_UOP_MAX , 0x9) \
+ MACRO(__VA_ARGS__, f32_max_xyzw , SWS_PIXEL_F32, SWS_UOP_MAX , 0xf)
+%define SWS_FOR_STRUCT_F32_MAX(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_max_x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MAX , .mask = 0x1) \
+ MACRO(__VA_ARGS__, f32_max_xy , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MAX , .mask = 0x3) \
+ MACRO(__VA_ARGS__, f32_max_xyz , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MAX , .mask = 0x7) \
+ MACRO(__VA_ARGS__, f32_max_xw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MAX , .mask = 0x9) \
+ MACRO(__VA_ARGS__, f32_max_xyzw , .type = SWS_PIXEL_F32, .uop = SWS_UOP_MAX , .mask = 0xf)
+%define SWS_FOR_F32_UNPACK(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_UNPACK(MACRO, ...)
+%define SWS_FOR_F32_PACK(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_PACK(MACRO, ...)
+%define SWS_FOR_F32_LSHIFT(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_LSHIFT(MACRO, ...)
+%define SWS_FOR_F32_RSHIFT(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_RSHIFT(MACRO, ...)
+%define SWS_FOR_F32_CLEAR(MACRO, ...)
+%define SWS_FOR_STRUCT_F32_CLEAR(MACRO, ...)
+%define SWS_FOR_F32_LINEAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_linear_x_xxx0x , SWS_PIXEL_F32, SWS_UOP_LINEAR , 0x1, 0x41040, 0xbefa8) \
+ MACRO(__VA_ARGS__, f32_linear_x_x000x , SWS_PIXEL_F32, SWS_UOP_LINEAR , 0x1, 0x41040, 0xbefae) \
+ MACRO(__VA_ARGS__, f32_linear_x_xxx00 , SWS_PIXEL_F32, SWS_UOP_LINEAR , 0x1, 0x41040, 0xbefb8) \
+ MACRO(__VA_ARGS__, f32_linear_y_0x000 , SWS_PIXEL_F32, SWS_UOP_LINEAR , 0x2, 0x41001, 0xbefbe) \
+ MACRO(__VA_ARGS__, f32_linear_xyz_xxx0x_xxx0x_xxx0x , SWS_PIXEL_F32, SWS_UOP_LINEAR , 0x7, 0x40000, 0xba108) \
+ MACRO(__VA_ARGS__, f32_linear_xyz_x0x0x_xxx0x_xx00x , SWS_PIXEL_F32, SWS_UOP_LINEAR , 0x7, 0x40000, 0xbb10a) \
+ MACRO(__VA_ARGS__, f32_linear_xyz_xxx00_xxx0x_xxx0x , SWS_PIXEL_F32, SWS_UOP_LINEAR , 0x7, 0x40000, 0xba118) \
+ MACRO(__VA_ARGS__, f32_linear_xyz_x000x_0x00x_00x0x , SWS_PIXEL_F32, SWS_UOP_LINEAR , 0x7, 0x40000, 0xbadae) \
+ MACRO(__VA_ARGS__, f32_linear_xyz_x0000_0x000_00x00 , SWS_PIXEL_F32, SWS_UOP_LINEAR , 0x7, 0x40000, 0xbefbe) \
+ MACRO(__VA_ARGS__, f32_linear_xyz_10x0x_1xx0x_1x00x , SWS_PIXEL_F32, SWS_UOP_LINEAR , 0x7, 0x40421, 0xbb10a) \
+ MACRO(__VA_ARGS__, f32_linear_w_000x0 , SWS_PIXEL_F32, SWS_UOP_LINEAR , 0x8, 0x01041, 0xbefbe) \
+ MACRO(__VA_ARGS__, f32_linear_xw_x000x_000x0 , SWS_PIXEL_F32, SWS_UOP_LINEAR , 0x9, 0x01040, 0xbefae) \
+ MACRO(__VA_ARGS__, f32_linear_xw_xxx00_000x0 , SWS_PIXEL_F32, SWS_UOP_LINEAR , 0x9, 0x01040, 0xbefb8) \
+ MACRO(__VA_ARGS__, f32_linear_xyzw_xxx0x_xxx0x_xxx0x_000x0 , SWS_PIXEL_F32, SWS_UOP_LINEAR , 0xf, 0x00000, 0xba108) \
+ MACRO(__VA_ARGS__, f32_linear_xyzw_x0x0x_xxx0x_xx00x_000x0 , SWS_PIXEL_F32, SWS_UOP_LINEAR , 0xf, 0x00000, 0xbb10a) \
+ MACRO(__VA_ARGS__, f32_linear_xyzw_x0000_0x000_00x00_000x0 , SWS_PIXEL_F32, SWS_UOP_LINEAR , 0xf, 0x00000, 0xbefbe)
+%define SWS_FOR_STRUCT_F32_LINEAR(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_linear_x_xxx0x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR , .mask = 0x1, .par.lin.one = 0x41040, .par.lin.zero = 0xbefa8) \
+ MACRO(__VA_ARGS__, f32_linear_x_x000x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR , .mask = 0x1, .par.lin.one = 0x41040, .par.lin.zero = 0xbefae) \
+ MACRO(__VA_ARGS__, f32_linear_x_xxx00 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR , .mask = 0x1, .par.lin.one = 0x41040, .par.lin.zero = 0xbefb8) \
+ MACRO(__VA_ARGS__, f32_linear_y_0x000 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR , .mask = 0x2, .par.lin.one = 0x41001, .par.lin.zero = 0xbefbe) \
+ MACRO(__VA_ARGS__, f32_linear_xyz_xxx0x_xxx0x_xxx0x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR , .mask = 0x7, .par.lin.one = 0x40000, .par.lin.zero = 0xba108) \
+ MACRO(__VA_ARGS__, f32_linear_xyz_x0x0x_xxx0x_xx00x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR , .mask = 0x7, .par.lin.one = 0x40000, .par.lin.zero = 0xbb10a) \
+ MACRO(__VA_ARGS__, f32_linear_xyz_xxx00_xxx0x_xxx0x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR , .mask = 0x7, .par.lin.one = 0x40000, .par.lin.zero = 0xba118) \
+ MACRO(__VA_ARGS__, f32_linear_xyz_x000x_0x00x_00x0x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR , .mask = 0x7, .par.lin.one = 0x40000, .par.lin.zero = 0xbadae) \
+ MACRO(__VA_ARGS__, f32_linear_xyz_x0000_0x000_00x00 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR , .mask = 0x7, .par.lin.one = 0x40000, .par.lin.zero = 0xbefbe) \
+ MACRO(__VA_ARGS__, f32_linear_xyz_10x0x_1xx0x_1x00x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR , .mask = 0x7, .par.lin.one = 0x40421, .par.lin.zero = 0xbb10a) \
+ MACRO(__VA_ARGS__, f32_linear_w_000x0 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR , .mask = 0x8, .par.lin.one = 0x1041, .par.lin.zero = 0xbefbe) \
+ MACRO(__VA_ARGS__, f32_linear_xw_x000x_000x0 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR , .mask = 0x9, .par.lin.one = 0x1040, .par.lin.zero = 0xbefae) \
+ MACRO(__VA_ARGS__, f32_linear_xw_xxx00_000x0 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR , .mask = 0x9, .par.lin.one = 0x1040, .par.lin.zero = 0xbefb8) \
+ MACRO(__VA_ARGS__, f32_linear_xyzw_xxx0x_xxx0x_xxx0x_000x0 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR , .mask = 0xf, .par.lin.one = 0x0, .par.lin.zero = 0xba108) \
+ MACRO(__VA_ARGS__, f32_linear_xyzw_x0x0x_xxx0x_xx00x_000x0 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR , .mask = 0xf, .par.lin.one = 0x0, .par.lin.zero = 0xbb10a) \
+ MACRO(__VA_ARGS__, f32_linear_xyzw_x0000_0x000_00x00_000x0 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR , .mask = 0xf, .par.lin.one = 0x0, .par.lin.zero = 0xbefbe)
+%define SWS_FOR_F32_LINEAR_FMA(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_linear_fma_x_xxx0x , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x1, 0x41040, 0xbefa8, 0xfffe8) \
+ MACRO(__VA_ARGS__, f32_linear_fma_x_XXX0x , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x1, 0x41040, 0xbefa8, 0xfffef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_x_x000x , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x1, 0x41040, 0xbefae, 0xfffee) \
+ MACRO(__VA_ARGS__, f32_linear_fma_x_X000x , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x1, 0x41040, 0xbefae, 0xfffef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_x_xxx00 , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x1, 0x41040, 0xbefb8, 0xffff8) \
+ MACRO(__VA_ARGS__, f32_linear_fma_x_xXx00 , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x1, 0x41040, 0xbefb8, 0xffffa) \
+ MACRO(__VA_ARGS__, f32_linear_fma_x_xxX00 , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x1, 0x41040, 0xbefb8, 0xffffc) \
+ MACRO(__VA_ARGS__, f32_linear_fma_x_xXX00 , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x1, 0x41040, 0xbefb8, 0xffffe) \
+ MACRO(__VA_ARGS__, f32_linear_fma_y_0x000 , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x2, 0x41001, 0xbefbe, 0xfffbf) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_xxx0x_xxx0x_xxx0x , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x7, 0x40000, 0xba108, 0xfa108) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_XXX0x_XxX0x_XXX0x , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x7, 0x40000, 0xba108, 0xfbdaf) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_XXX0x_XXX0x_XXX0x , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x7, 0x40000, 0xba108, 0xfbdef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_X0X0x_XXX0x_XX00x , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x7, 0x40000, 0xbb10a, 0xfbdef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_xxx00_xxx0x_xxx0x , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x7, 0x40000, 0xba118, 0xfa118) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_xXX00_XxX0x_XXX0x , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x7, 0x40000, 0xba118, 0xfbdbe) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_xXX00_XXX0x_XXX0x , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x7, 0x40000, 0xba118, 0xfbdfe) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_X000x_0X00x_00X0x , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x7, 0x40000, 0xbadae, 0xfbdef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_x0000_0x000_00x00 , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x7, 0x40000, 0xbefbe, 0xfefbe) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_10X0x_1XX0x_1X00x , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x7, 0x40421, 0xbb10a, 0xfbdef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_w_000x0 , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x8, 0x01041, 0xbefbe, 0xbffff) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xw_x000x_000x0 , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x9, 0x01040, 0xbefae, 0xbffee) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xw_X000x_000x0 , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x9, 0x01040, 0xbefae, 0xbffef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xw_xxx00_000x0 , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x9, 0x01040, 0xbefb8, 0xbfff8) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xw_xXX00_000x0 , SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0x9, 0x01040, 0xbefb8, 0xbfffe) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyzw_xxx0x_xxx0x_xxx0x_000x0, SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0xf, 0x00000, 0xba108, 0xba108) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyzw_XXX0x_XXX0x_XXX0x_000x0, SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0xf, 0x00000, 0xba108, 0xbbdef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyzw_X0X0x_XXX0x_XX00x_000x0, SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0xf, 0x00000, 0xbb10a, 0xbbdef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyzw_x0000_0x000_00x00_000x0, SWS_PIXEL_F32, SWS_UOP_LINEAR_FMA , 0xf, 0x00000, 0xbefbe, 0xbefbe)
+%define SWS_FOR_STRUCT_F32_LINEAR_FMA(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_linear_fma_x_xxx0x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x1, .par.lin.one = 0x41040, .par.lin.zero = 0xbefa8, .par.lin.exact = 0xfffe8) \
+ MACRO(__VA_ARGS__, f32_linear_fma_x_XXX0x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x1, .par.lin.one = 0x41040, .par.lin.zero = 0xbefa8, .par.lin.exact = 0xfffef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_x_x000x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x1, .par.lin.one = 0x41040, .par.lin.zero = 0xbefae, .par.lin.exact = 0xfffee) \
+ MACRO(__VA_ARGS__, f32_linear_fma_x_X000x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x1, .par.lin.one = 0x41040, .par.lin.zero = 0xbefae, .par.lin.exact = 0xfffef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_x_xxx00 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x1, .par.lin.one = 0x41040, .par.lin.zero = 0xbefb8, .par.lin.exact = 0xffff8) \
+ MACRO(__VA_ARGS__, f32_linear_fma_x_xXx00 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x1, .par.lin.one = 0x41040, .par.lin.zero = 0xbefb8, .par.lin.exact = 0xffffa) \
+ MACRO(__VA_ARGS__, f32_linear_fma_x_xxX00 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x1, .par.lin.one = 0x41040, .par.lin.zero = 0xbefb8, .par.lin.exact = 0xffffc) \
+ MACRO(__VA_ARGS__, f32_linear_fma_x_xXX00 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x1, .par.lin.one = 0x41040, .par.lin.zero = 0xbefb8, .par.lin.exact = 0xffffe) \
+ MACRO(__VA_ARGS__, f32_linear_fma_y_0x000 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x2, .par.lin.one = 0x41001, .par.lin.zero = 0xbefbe, .par.lin.exact = 0xfffbf) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_xxx0x_xxx0x_xxx0x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x7, .par.lin.one = 0x40000, .par.lin.zero = 0xba108, .par.lin.exact = 0xfa108) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_XXX0x_XxX0x_XXX0x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x7, .par.lin.one = 0x40000, .par.lin.zero = 0xba108, .par.lin.exact = 0xfbdaf) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_XXX0x_XXX0x_XXX0x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x7, .par.lin.one = 0x40000, .par.lin.zero = 0xba108, .par.lin.exact = 0xfbdef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_X0X0x_XXX0x_XX00x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x7, .par.lin.one = 0x40000, .par.lin.zero = 0xbb10a, .par.lin.exact = 0xfbdef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_xxx00_xxx0x_xxx0x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x7, .par.lin.one = 0x40000, .par.lin.zero = 0xba118, .par.lin.exact = 0xfa118) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_xXX00_XxX0x_XXX0x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x7, .par.lin.one = 0x40000, .par.lin.zero = 0xba118, .par.lin.exact = 0xfbdbe) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_xXX00_XXX0x_XXX0x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x7, .par.lin.one = 0x40000, .par.lin.zero = 0xba118, .par.lin.exact = 0xfbdfe) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_X000x_0X00x_00X0x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x7, .par.lin.one = 0x40000, .par.lin.zero = 0xbadae, .par.lin.exact = 0xfbdef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_x0000_0x000_00x00 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x7, .par.lin.one = 0x40000, .par.lin.zero = 0xbefbe, .par.lin.exact = 0xfefbe) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyz_10X0x_1XX0x_1X00x , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x7, .par.lin.one = 0x40421, .par.lin.zero = 0xbb10a, .par.lin.exact = 0xfbdef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_w_000x0 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x8, .par.lin.one = 0x1041, .par.lin.zero = 0xbefbe, .par.lin.exact = 0xbffff) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xw_x000x_000x0 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x9, .par.lin.one = 0x1040, .par.lin.zero = 0xbefae, .par.lin.exact = 0xbffee) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xw_X000x_000x0 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x9, .par.lin.one = 0x1040, .par.lin.zero = 0xbefae, .par.lin.exact = 0xbffef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xw_xxx00_000x0 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x9, .par.lin.one = 0x1040, .par.lin.zero = 0xbefb8, .par.lin.exact = 0xbfff8) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xw_xXX00_000x0 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0x9, .par.lin.one = 0x1040, .par.lin.zero = 0xbefb8, .par.lin.exact = 0xbfffe) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyzw_xxx0x_xxx0x_xxx0x_000x0, .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0xf, .par.lin.one = 0x0, .par.lin.zero = 0xba108, .par.lin.exact = 0xba108) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyzw_XXX0x_XXX0x_XXX0x_000x0, .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0xf, .par.lin.one = 0x0, .par.lin.zero = 0xba108, .par.lin.exact = 0xbbdef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyzw_X0X0x_XXX0x_XX00x_000x0, .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0xf, .par.lin.one = 0x0, .par.lin.zero = 0xbb10a, .par.lin.exact = 0xbbdef) \
+ MACRO(__VA_ARGS__, f32_linear_fma_xyzw_x0000_0x000_00x00_000x0, .type = SWS_PIXEL_F32, .uop = SWS_UOP_LINEAR_FMA , .mask = 0xf, .par.lin.one = 0x0, .par.lin.zero = 0xbefbe, .par.lin.exact = 0xbefbe)
+%define SWS_FOR_F32_DITHER(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_dither_x_0_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0x1, 0, 0, 0, 0, 4) \
+ MACRO(__VA_ARGS__, f32_dither_y_3_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0x2, 0, 3, 0, 0, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xy_0_3_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0x3, 0, 3, 0, 0, 4) \
+ MACRO(__VA_ARGS__, f32_dither_z_2_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0x4, 0, 0, 2, 0, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xz_0_2_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0x5, 0, 0, 2, 0, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xyz_0_0_0_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0x7, 0, 0, 0, 0, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xyz_0_3_2_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0x7, 0, 3, 2, 0, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xyz_2_0_3_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0x7, 2, 0, 3, 0, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xyz_2_3_0_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0x7, 2, 3, 0, 0, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xyz_3_0_2_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0x7, 3, 0, 2, 0, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xyz_3_2_0_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0x7, 3, 2, 0, 0, 4) \
+ MACRO(__VA_ARGS__, f32_dither_w_5_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0x8, 0, 0, 0, 5, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xw_0_3_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0x9, 0, 0, 0, 3, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xw_0_5_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0x9, 0, 0, 0, 5, 4) \
+ MACRO(__VA_ARGS__, f32_dither_yzw_0_3_2_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0xe, 0, 0, 3, 2, 4) \
+ MACRO(__VA_ARGS__, f32_dither_yzw_2_0_3_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0xe, 0, 2, 0, 3, 4) \
+ MACRO(__VA_ARGS__, f32_dither_yzw_2_3_0_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0xe, 0, 2, 3, 0, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xyzw_0_0_0_3_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0xf, 0, 0, 0, 3, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xyzw_0_3_2_5_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0xf, 0, 3, 2, 5, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xyzw_2_3_0_5_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0xf, 2, 3, 0, 5, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xyzw_3_0_2_5_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0xf, 3, 0, 2, 5, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xyzw_3_2_0_5_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0xf, 3, 2, 0, 5, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xyzw_5_0_3_2_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0xf, 5, 0, 3, 2, 4) \
+ MACRO(__VA_ARGS__, f32_dither_xyzw_5_2_3_0_16x16 , SWS_PIXEL_F32, SWS_UOP_DITHER , 0xf, 5, 2, 3, 0, 4)
+%define SWS_FOR_STRUCT_F32_DITHER(MACRO, ...) \
+ MACRO(__VA_ARGS__, f32_dither_x_0_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0x1, .par.dither = { .y_offset = {0, 0, 0, 0}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_y_3_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0x2, .par.dither = { .y_offset = {0, 3, 0, 0}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xy_0_3_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0x3, .par.dither = { .y_offset = {0, 3, 0, 0}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_z_2_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0x4, .par.dither = { .y_offset = {0, 0, 2, 0}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xz_0_2_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0x5, .par.dither = { .y_offset = {0, 0, 2, 0}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xyz_0_0_0_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0x7, .par.dither = { .y_offset = {0, 0, 0, 0}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xyz_0_3_2_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0x7, .par.dither = { .y_offset = {0, 3, 2, 0}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xyz_2_0_3_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0x7, .par.dither = { .y_offset = {2, 0, 3, 0}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xyz_2_3_0_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0x7, .par.dither = { .y_offset = {2, 3, 0, 0}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xyz_3_0_2_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0x7, .par.dither = { .y_offset = {3, 0, 2, 0}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xyz_3_2_0_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0x7, .par.dither = { .y_offset = {3, 2, 0, 0}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_w_5_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0x8, .par.dither = { .y_offset = {0, 0, 0, 5}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xw_0_3_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0x9, .par.dither = { .y_offset = {0, 0, 0, 3}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xw_0_5_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0x9, .par.dither = { .y_offset = {0, 0, 0, 5}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_yzw_0_3_2_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0xe, .par.dither = { .y_offset = {0, 0, 3, 2}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_yzw_2_0_3_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0xe, .par.dither = { .y_offset = {0, 2, 0, 3}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_yzw_2_3_0_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0xe, .par.dither = { .y_offset = {0, 2, 3, 0}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xyzw_0_0_0_3_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0xf, .par.dither = { .y_offset = {0, 0, 0, 3}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xyzw_0_3_2_5_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0xf, .par.dither = { .y_offset = {0, 3, 2, 5}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xyzw_2_3_0_5_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0xf, .par.dither = { .y_offset = {2, 3, 0, 5}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xyzw_3_0_2_5_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0xf, .par.dither = { .y_offset = {3, 0, 2, 5}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xyzw_3_2_0_5_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0xf, .par.dither = { .y_offset = {3, 2, 0, 5}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xyzw_5_0_3_2_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0xf, .par.dither = { .y_offset = {5, 0, 3, 2}, .size_log2 = 4 }) \
+ MACRO(__VA_ARGS__, f32_dither_xyzw_5_2_3_0_16x16 , .type = SWS_PIXEL_F32, .uop = SWS_UOP_DITHER , .mask = 0xf, .par.dither = { .y_offset = {5, 2, 3, 0}, .size_log2 = 4 })
+
+%define DECL_OP_MACRO(...) {DECL_OP MACRO __VA_ARGS__},
+%define DEF_MACRO(UOP, TYPE) \
+ %define DECL_ TYPE%% _ UOP%% (MACRO) \
+ MULTILINE SWS_FOR_ TYPE%% _ UOP%% (DECL_OP_MACRO) \
+ dummy
+
+%define DEF_ALL_MACROS(TYPE) \
+ MULTILINE \
+ {DEF_MACRO(READ_BIT, TYPE)}, \
+ {DEF_MACRO(READ_NIBBLE, TYPE)}, \
+ {DEF_MACRO(READ_PACKED, TYPE)}, \
+ {DEF_MACRO(READ_PLANAR, TYPE)}, \
+ {DEF_MACRO(READ_PLANAR_FH, TYPE)}, \
+ {DEF_MACRO(READ_PLANAR_FV, TYPE)}, \
+ {DEF_MACRO(READ_PLANAR_FV_FMA, TYPE)}, \
+ {DEF_MACRO(READ_PALETTE, TYPE)}, \
+ {DEF_MACRO(WRITE_BIT, TYPE)}, \
+ {DEF_MACRO(WRITE_NIBBLE, TYPE)}, \
+ {DEF_MACRO(WRITE_PACKED, TYPE)}, \
+ {DEF_MACRO(WRITE_PLANAR, TYPE)}, \
+ {DEF_MACRO(PERMUTE, TYPE)}, \
+ {DEF_MACRO(COPY, TYPE)}, \
+ {DEF_MACRO(SWAP_BYTES, TYPE)}, \
+ {DEF_MACRO(EXPAND_BIT, TYPE)}, \
+ {DEF_MACRO(EXPAND_PAIR, TYPE)}, \
+ {DEF_MACRO(EXPAND_QUAD, TYPE)}, \
+ {DEF_MACRO(TO_U8, TYPE)}, \
+ {DEF_MACRO(TO_U16, TYPE)}, \
+ {DEF_MACRO(TO_U32, TYPE)}, \
+ {DEF_MACRO(TO_F32, TYPE)}, \
+ {DEF_MACRO(SCALE, TYPE)}, \
+ {DEF_MACRO(LINEAR, TYPE)}, \
+ {DEF_MACRO(LINEAR_FMA, TYPE)}, \
+ {DEF_MACRO(ADD, TYPE)}, \
+ {DEF_MACRO(MIN, TYPE)}, \
+ {DEF_MACRO(MAX, TYPE)}, \
+ {DEF_MACRO(UNPACK, TYPE)}, \
+ {DEF_MACRO(PACK, TYPE)}, \
+ {DEF_MACRO(LSHIFT, TYPE)}, \
+ {DEF_MACRO(RSHIFT, TYPE)}, \
+ {DEF_MACRO(CLEAR, TYPE)}, \
+ {DEF_MACRO(DITHER, TYPE)}
+
+DEF_ALL_MACROS(U8)
+DEF_ALL_MACROS(U16)
+;DEF_ALL_MACROS(U32)
+;DEF_ALL_MACROS(F32)
+
+; High-level explanation of how the x86 backend works:
+;
+; sws_processN is the shared entry point for all operation chains. This
+; function is responsible for the block loop, as well as initializing the
+; plane pointers. It will jump directly into the first operation kernel,
+; and each operation kernel will jump directly into the next one, with the
+; final kernel returning back into the entry point.
+;
+; Inside an operation chain, we use a custom calling convention to preserve
+; registers between kernels. The exact register allocation is found further
+; below in this file, but we basically reserve (and share) the following
+; registers:
+;
+; - const execq (read-only, shared execution data, see SwsOpExec); stores the
+; static metadata for this call and describes the image layouts
+;
+; - implq (read-only, operation chain, see SwsOpChain); stores the private data
+; for each operation as well as the pointer to the next kernel in the sequence.
+; This register is automatically incremented by the CONTINUE macro, and will
+; be reset back to the first operation kernel by sws_process.
+;
+; - bxd, yd: current line and block number, used as loop counters in sws_process.
+; Also used by e.g. the dithering code to do position-dependent dithering.
+;
+; - tmp0, tmp1, tmp2: temporary registers which are NOT preserved between kernels
+;
+; - inNq, outNq: plane pointers. These are incremented automatically after the
+; corresponding read/write operation, by the read/write kernels themselves.
+; sws_process will take care of resetting these to the next line after the
+; block loop is done.
+;
+; Additionally, we pass data between kernels by directly keeping them inside
+; vector registers. For this, we reserve the following registers:
+;
+; - mx, my, mz, mw: low half of the X, Y, Z and W components
+; - mx2, my2, mz2, mw2: high half of the X, Y, Z and W components
+; (As well as sized variants for xmx, ymx, etc.)
+;
+; The "high half" registers are only sometimes used; in order to enable
+; processing more pixels at the same time. See `decl_v2` below, which allows
+; assembling the same operation twice, once with only the lower half (V2=0),
+; and once with both halves (V2=1). The remaining vectors (m8-m15) are free for
+; use inside operation kernels.
+;
+; The basic rule is that we always use the full set of both vector registers
+; when processing the largest element size within a pixel chain. For example,
+; if we load 8-bit values and convert them to 32-bit floats internally, then
+; we would have an operation chain which combines an SSE4 V2=0 u8 kernel (128
+; bits = 16 pixels) with an AVX2 V2=1 f32 kernel (512 bits = 16 pixels). This
+; keeps the number of pixels being processed (BLOCK_WIDTH) constant. The V2
+; setting is suffixed to the operation name (_m1 or _m2), along with any other
+; custom NAME_SUFFIX (e.g. for operation variants).
+;
+; This design leaves us with the following set of possibilities:
+;
+; SSE4:
+; - max element is 32-bit: currently unsupported
+; - max element is 16-bit: currently unsupported
+; - max element is 8-bit: block size 32, u8_m2_sse4
+;
+; AVX2:
+; - max element is 32-bit: block size 16, u32_m2_avx2, u16_m1_avx2, u8_m1_sse4
+; - max element is 16-bit: block size 32, u16_m2_avx2, u8_m1_avx2
+; - max element is 8-bit: block size 64, u8_m2_avx2
+;
+; Meaning we need to cover the following code paths for each bit depth:
+;
+; - 8-bit kernels: m1_sse4, m2_sse4, m1_avx2, m2_avx2
+; - 16-bit kernels: m1_avx2, m2_avx2
+; - 32-bit kernels: m2_avx2
+;
+; See the bottom of ops_int.asm for an example.
+
+struc SwsOpExec
+ .in0 resq 1
+ .in1 resq 1
+ .in2 resq 1
+ .in3 resq 1
+ .out0 resq 1
+ .out1 resq 1
+ .out2 resq 1
+ .out3 resq 1
+ .in_stride0 resq 1
+ .in_stride1 resq 1
+ .in_stride2 resq 1
+ .in_stride3 resq 1
+ .out_stride0 resq 1
+ .out_stride1 resq 1
+ .out_stride2 resq 1
+ .out_stride3 resq 1
+ .in_bump0 resq 1
+ .in_bump1 resq 1
+ .in_bump2 resq 1
+ .in_bump3 resq 1
+ .out_bump0 resq 1
+ .out_bump1 resq 1
+ .out_bump2 resq 1
+ .out_bump3 resq 1
+ .width resd 1
+ .height resd 1
+ .slice_y resd 1
+ .slice_h resd 1
+ .block_size_in resd 4
+ .block_size_out resd 4
+ .in_sub_y4 resb 4
+ .out_sub_y4 resb 4
+ .in_sub_x4 resb 4
+ .out_sub_x4 resb 4
+ .in_bump_y resq 1
+ .in_offset_x resq 1
+endstruc
+
+struc SwsOpImpl
+ .cont resb 16
+ .priv resb 16
+ .next resb 0
+endstruc
+
+%define SWS_COMP_NONE 0
+%define SWS_COMP_ALL 0xF
+%define SWS_COMP(X) (1 << (X))
+%define SWS_COMP_TEST(mask, X) (((mask) >> X) & 1)
+%define SWS_COMP_INV(mask) ((mask) ^ SWS_COMP_ALL)
+%define SWS_COMP_ELEMS(N) ((1 << (N)) - 1)
+
+;---------------------------------------------------------
+; Common macros for declaring operations
+
+; Declare an operation kernel, calling a provided macro to generate the body.
+; Note: This is automatically called by the DECL_*() macros
+%macro DECL_OP 5-6+ ; macro, name, type, uop, mask
+ ; Declare named variables for common macro parameters
+ %ifdef NAME_SUFFIX
+ %xdefine NAME %2 %+ NAME_SUFFIX
+ %else
+ %xdefine NAME %2
+ %endif
+ %xdefine TYPE %3
+ %xdefine UOP %4
+ %xdefine MASK %5
+
+ ; Declare X/Y/Z/W based on the provided mask
+ %assign X SWS_COMP_TEST(MASK, 0)
+ %assign Y SWS_COMP_TEST(MASK, 1)
+ %assign Z SWS_COMP_TEST(MASK, 2)
+ %assign W SWS_COMP_TEST(MASK, 3)
+ %assign COMPS (X + Y + Z + W)
+
+ ; Declare BYTES and BITS based on the ops type
+ %ifidn TYPE, SWS_PIXEL_U8
+ %assign BYTES 1
+ %elifidn TYPE, SWS_PIXEL_U16
+ %assign BYTES 2
+ %else
+ %assign BYTES 4
+ %endif
+ %assign BITS (BYTES * 8)
+
+ ; Calculate block size helpers
+ %ifdef V2
+ %assign BLOCK_SIZE (mmsize * (1 + V2))
+ %else
+ %assign BLOCK_SIZE (mmsize)
+ %endif
+ %assign BLOCK_WIDTH (BLOCK_SIZE / BYTES)
+
+ ; Add the correct name mangling / suffix for decl_v2
+ %ifdef V2
+ %if V2
+ %define ADD_MUL(name) name %+ _m2
+ %else
+ %define ADD_MUL(name) name %+ _m1
+ %endif
+ %else
+ %define ADD_MUL(name) name
+ %endif
+
+ cglobal ADD_MUL(NAME), 0, 0, 0 ; already allocated by entry point
+ %1 %6 ; call the provided macro to generate the kernel body
+
+ %undef NAME
+ %undef UOP
+ %undef TYPE
+ %undef MASK
+ %undef X
+ %undef Y
+ %undef Z
+ %undef W
+ %undef COMPS
+ %undef BYTES
+ %undef BITS
+ %undef BLOCK_SIZE
+ %undef BLOCK_WIDTH
+ %undef ADD_MUL
+%endmacro
+
+; Declare a set of operations with a custom name suffix
+%macro decl_suffix 2+ ; suffix, func
+ %xdefine NAME_SUFFIX %1
+ ; %2
+ %undef NAME_SUFFIX
+%endmacro
+
+; Declare a set of operations with the high half enabled / disabled
+%macro decl_v2 2+ ; v2, func
+ %assign V2 %1
+ ; %2
+ %undef V2
+%endmacro
+
+;---------------------------------------------------------
+; Common names for the internal calling convention
+%define mx m0
+%define my m1
+%define mz m2
+%define mw m3
+
+%define xmx xm0
+%define xmy xm1
+%define xmz xm2
+%define xmw xm3
+
+%define ymx ym0
+%define ymy ym1
+%define ymz ym2
+%define ymw ym3
+
+%define mx2 m4
+%define my2 m5
+%define mz2 m6
+%define mw2 m7
+
+%define xmx2 xm4
+%define xmy2 xm5
+%define xmz2 xm6
+%define xmw2 xm7
+
+%define ymx2 ym4
+%define ymy2 ym5
+%define ymz2 ym6
+%define ymw2 ym7
+
+; Reserved in this order by the signature of SwsOpFunc
+%define execq r0q
+%define implq r1q
+%define bxd r2d
+%define bxq r2q
+%define yd r3d
+%define yq r3q
+
+; Extra registers for free use by kernels, not saved between ops
+%define tmp0q r4q
+%define tmp1q r5q
+%define tmp2q r6q
+
+%define tmp0d r4d
+%define tmp1d r5d
+%define tmp2d r6d
+
+%define tmp0w r4w
+%define tmp1w r5w
+%define tmp2w r6w
+
+; Registers for plane pointers; put at the end (and in ascending plane order)
+; so that we can avoid reserving them when not necessary
+%define out0q r7q
+%define in0q r8q
+%define out1q r9q
+%define in1q r10q
+%define out2q r11q
+%define in2q r12q
+%define out3q r13q
+%define in3q r14q
+
+;---------------------------------------------------------
+; Common macros for linking together different kernels
+
+; Load the next operation kernel's address to a register
+%macro LOAD_CONT 1 ; reg
+ mov %1, [implq + SwsOpImpl.cont]
+%endmacro
+
+; Tail call into the next operation kernel, given that kernel's address
+%macro CONTINUE 1 ; reg
+ add implq, SwsOpImpl.next
+ jmp %1
+ annotate_function_size
+%endmacro
+
+; Convenience macro to load and continue to the next kernel in one step
+%macro CONTINUE 0
+ LOAD_CONT tmp0q
+ CONTINUE tmp0q
+%endmacro
+
+;---------------------------------------------------------
+; Miscellaneous helpers
+
+; Helper for inline conditionals; used to conditionally include single lines
+%macro IF 2+ ; cond, body
+ %if %1
+ %2
+ %endif
+%endmacro
+
+; Alternate name; for nested usage (to work around NASM limitations)
+%macro IF1 2+
+ %if %1
+ %2
+ %endif
+%endmacro
+
+%macro shl_log2 2 ; dst, amount
+ %if %2 == 64
+ shl %1, 6
+ %elif %2 == 32
+ shl %1, 5
+ %elif %2 == 16
+ shl %1, 4
+ %elif %2 == 8
+ shl %1, 3
+ %elif %2 == 4
+ shl %1, 2
+ %elif %2 == 2
+ shl %1, 1
+ %elif %2 == 1
+ ; no-op
+ %else
+ %error "Unsupported value for shl_log2"
+ %endif
+%endmacro
+
+%macro assert 1-2 ; cond, message
+ %if !(%1)
+ %if %0 > 1
+ %error %2
+ %else
+ %error Assertion failed: %1
+ %endif
+ %endif
+%endmacro
+
+%macro assert_idn 2-3 ; expr1, expr2, message
+ %ifnidn %1, %2
+ %if %0 > 2
+ %error %3
+ %else
+ %error Assertion failed: %1 == %2
+ %endif
+ %endif
+%endmacro
SECTION .text
--
2.52.0
_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]