diff --git a/src/backend/x64/emit_x64_vector_floating_point.cpp b/src/backend/x64/emit_x64_vector_floating_point.cpp
index ba3f75e3..ba41b658 100644
--- a/src/backend/x64/emit_x64_vector_floating_point.cpp
+++ b/src/backend/x64/emit_x64_vector_floating_point.cpp
@@ -35,18 +35,8 @@ using namespace Xbyak::util;
 
 namespace {
 
-template<size_t fsize, typename T>
-T ChooseOnFsize([[maybe_unused]] T f32, [[maybe_unused]] T f64) {
-    static_assert(fsize == 32 || fsize == 64, "fsize must be either 32 or 64");
-
-    if constexpr (fsize == 32) {
-        return f32;
-    } else {
-        return f64;
-    }
-}
-
-#define FCODE(NAME) (code.*ChooseOnFsize<fsize>(&Xbyak::CodeGenerator::NAME##s, &Xbyak::CodeGenerator::NAME##d))
+#define FCODE(NAME) [&]{ if constexpr (fsize == 32) return [&](auto... args){ code.NAME##s(args...); }; else return [&](auto... args){ code.NAME##d(args...); }; }()
+#define ICODE(NAME) [&]{ if constexpr (fsize == 32) return [&](auto... args){ code.NAME##d(args...); }; else return [&](auto... args){ code.NAME##q(args...); }; }()
 
 template<typename Lambda>
 void MaybeStandardFPSCRValue(BlockOfCode& code, EmitContext& ctx, bool fpcr_controlled, Lambda lambda) {
@@ -1370,11 +1360,7 @@ static void EmitRSqrtStepFused(BlockOfCode& code, EmitContext& ctx, IR::Inst* in
                 // An explanation for this is given in EmitFPRSqrtStepFused.
                 code.vmovaps(mask, GetVectorOf<fsize, fsize == 32 ? 0x7f000000 : 0x7fe0000000000000>(code));
                 FCODE(vandp)(tmp, result, mask);
-                if constexpr (fsize == 32) {
-                    code.vpcmpeqd(tmp, tmp, mask);
-                } else {
-                    code.vpcmpeqq(tmp, tmp, mask);
-                }
+                ICODE(vpcmpeq)(tmp, tmp, mask);
                 code.ptest(tmp, tmp);
                 code.jnz(fallback, code.T_NEAR);
 
@@ -1517,11 +1503,7 @@ void EmitFPVectorToFixed(BlockOfCode& code, EmitContext& ctx, IR::Inst* inst) {
                     FCODE(andp)(tmp, xmm0);
                     FCODE(subp)(src, tmp);
                     perform_conversion(src);
-                    if constexpr (fsize == 32) {
-                        code.pslld(xmm0, 31);
-                    } else {
-                        code.psllq(xmm0, 63);
-                    }
+                    ICODE(psll)(xmm0, static_cast<u8>(fsize - 1));
                     FCODE(orp)(src, xmm0);
 
                     // Saturate to max