Commit a352c4a410 for ffmpeg
commit a352c4a41097cd5cfd426460fe9276729dd1d939
Author: Niklas Haas <git@haasn.dev>
Date: Thu Jun 11 16:25:20 2026 +0200
swscale/uops_tmpl: use intermediate variable for linear results
Instead of directly writing to the output buffer. This might result in
slightly better codegen in principle, though GCC does not seem to care.
Sponsored-by: Sovereign Tech Fund
Signed-off-by: Niklas Haas <git@haasn.dev>
diff --git a/libswscale/uops_tmpl.c b/libswscale/uops_tmpl.c
index cca1dbf718..c13ef8669d 100644
--- a/libswscale/uops_tmpl.c
+++ b/libswscale/uops_tmpl.c
@@ -837,11 +837,12 @@ DECL_FUNC(linear, const SwsCompMask mask, const uint32_t one, const uint32_t zer
((one & SWS_MASK(I, J)) ? (val) : c.m[I][J] * (val))
#define LIN_ROW(I, var) do { \
- var[i] = (zero & SWS_MASK(I, 4)) ? 0 : c.k[I]; \
- if (!(zero & SWS_MASK(I, 0))) var[i] += LIN_VAL(I, 0, xx); \
- if (!(zero & SWS_MASK(I, 1))) var[i] += LIN_VAL(I, 1, yy); \
- if (!(zero & SWS_MASK(I, 2))) var[i] += LIN_VAL(I, 2, zz); \
- if (!(zero & SWS_MASK(I, 3))) var[i] += LIN_VAL(I, 3, ww); \
+ pixel_t tmp = (zero & SWS_MASK(I, 4)) ? 0 : c.k[I]; \
+ if (!(zero & SWS_MASK(I, 0))) tmp += LIN_VAL(I, 0, xx); \
+ if (!(zero & SWS_MASK(I, 1))) tmp += LIN_VAL(I, 1, yy); \
+ if (!(zero & SWS_MASK(I, 2))) tmp += LIN_VAL(I, 2, zz); \
+ if (!(zero & SWS_MASK(I, 3))) tmp += LIN_VAL(I, 3, ww); \
+ var[i] = tmp; \
} while (0)
if (X) LIN_ROW(0, x);