There are a few macros in this file.
APFX
There are 139 usages across 8 files.
f is the generated function's name. Could use a c++ using to preserve the name.
Tz,Tx,Ty are all types.
pfx is a dyadic macro leading to a 2 or more argument function? (x,y) many macros provide their own 3rd arguments.
I was thinking that the pfx macro could be replaced with lambdas.
pref is a code fragment to be at start.
suff is a return argument, aka code fragment to be at end.
pref and suff could add complications for template code. You could have an encapsulating function for the pref and suff?
// suff must return the correct result
#define APFX(f, Tz, Tx, Ty, pfx, pref, suff) \
I f(I n, I m, Tx* RESTRICTI x, Ty* RESTRICTI y, Tz* RESTRICTI z, J jt) { \
Tx u; \
Ty v; \
pref if (n - 1 == 0) DQ(m, *z++ = pfx(*x, *y); x++; y++;) else if (n - 1 < 0) \
DQ(m, u = *x++; DQC(n, *z++ = pfx(u, *y); y++;)) else DQ(m, v = *y++; DQ(n, *z++ = pfx(*x, v); x++;)); \
suff \
}
//example
APFX(bw0000II, UI,UI,UI, BW0000,, return EVOK;)
For refactoring just focusing on the loop inside? Working from inside out?
Probably would need to port DQ and DQC first those are basically for loops. These are in j.h
#define DQ(n,stm) {I i=(I)(n)-1; for(;i>=0;--i){stm}} // i runs from n-1 downto 0 (fastest when you don't need i)
#define DQC(n,stm) {I i=-2-(I)(n); for(;i>=0;--i){stm}} // i runs from n-1 downto 0 (fastest when you don't need i)
Here's how we could recode DQ and DQC: https://godbolt.org/z/jc3Yzd
Possible APFX_impl code: https://godbolt.org/z/jj7srd
There are a few macros in this file.
APFX
There are 139 usages across 8 files.
fis the generated function's name. Could use a c++usingto preserve the name.Tz,Tx,Tyare all types.pfxis a dyadic macro leading to a 2 or more argument function? (x,y) many macros provide their own 3rd arguments.I was thinking that the
pfxmacro could be replaced with lambdas.prefis a code fragment to be at start.suffis a return argument, aka code fragment to be at end.prefandsuffcould add complications for template code. You could have an encapsulating function for theprefandsuff?For refactoring just focusing on the loop inside? Working from inside out?
Probably would need to port DQ and DQC first those are basically for loops. These are in
j.hHere's how we could recode DQ and DQC: https://godbolt.org/z/jc3Yzd
Possible APFX_impl code: https://godbolt.org/z/jj7srd