try to fix MSVC compilation problem by simplifying macro usage
reduce excessive inlining in calling code a bit by moving some fallback code into a non-inline function