swscale/x86/uops: generate NASM macros using uops_macros.h

Rather than hard-coding a separate set of NASM macros, or generating them
with a separate function, we can just leverage the C preprocessor to generate
a NASM source file *from* the existing ops macros.

This is maybe a bit unorthodox, but it avoids unnecessary overhead from
re-generating the macros twice, avoids manual updating of the NASM macros,
and generally does not come with any real downside except being a bit ugly.

The main source of ugliness is the fact that the C preprocessor expands
everything into a single line, whereas NASM expects separate statements to
be on separate lines. Very fortunately, we can work around this by writing a
another NASM macro to take its arguments and dump them onto multiple lines.

It may seem premature, but I went ahead and defined all the macros, since
it was easy enough to do.

I added the %include in this commit to trigger build errors that occur only
as a result of introducing this file in the same commit that introduces it.

Signed-off-by: Niklas Haas <git@haasn.dev>
This commit is contained in:
Niklas Haas
2026-04-07 02:58:39 +02:00
parent 6057759ffc
commit 6deae052a2
6 changed files with 102 additions and 1 deletions
+9
View File
@@ -15,9 +15,18 @@ X86ASM-OBJS += x86/input.o \
x86/yuv_2_rgb.o \
x86/yuv2yuvX.o \
SKIPHEADERS += x86/uops_macros.asm.h
ifdef ARCH_X86_64
X86ASM-OBJS-$(CONFIG_UNSTABLE) += x86/ops_common.o \
x86/ops_int.o \
x86/ops_float.o \
x86/ops.o
$(SUBDIR)x86/ops_common.o: $(SUBDIR)x86/uops_macros.gen.asm
$(SUBDIR)x86/ops_int.o: $(SUBDIR)x86/uops_macros.gen.asm
$(SUBDIR)x86/ops_float.o: $(SUBDIR)x86/uops_macros.gen.asm
$(SUBDIR)x86/uops_macros.gen.asm: $(SRC_PATH)/libswscale/x86/uops_macros.asm.h \
$(SRC_PATH)/libswscale/uops_macros.h
$(HOSTCC) $(CC_E) $(CPPFLAGS) $<
endif