BLD: workaround msvc being stupid

Apparently it tries to respect calling conventions for static inline
functions so the 4th variable can't be passed over the stack as it needs
16 byte alignment.
Work around this by passing the variable as a pointer.
Closes gh-4795
Merge pull request #4796 from juliantaylor/msvc-fix

BLD: workaround msvc being stupid