sign_extend64(__val, id##_##fld##_WIDTH - 1);           \
        })
 
-#define expand_field_sign(id, fld, val)                                        \
-       (id##_##fld##_SIGNED ?                                          \
-        __expand_field_sign_signed(id, fld, val) :                     \
-        __expand_field_sign_unsigned(id, fld, val))
-
 #define get_idreg_field_unsigned(kvm, id, fld)                         \
        ({                                                              \
                u64 __val = kvm_read_vm_id_reg((kvm), SYS_##id);        \
 #define get_idreg_field_enum(kvm, id, fld)                             \
        get_idreg_field_unsigned(kvm, id, fld)
 
-#define get_idreg_field(kvm, id, fld)                                  \
+#define kvm_cmp_feat_signed(kvm, id, fld, op, limit)                   \
+       (get_idreg_field_signed((kvm), id, fld) op __expand_field_sign_signed(id, fld, limit))
+
+#define kvm_cmp_feat_unsigned(kvm, id, fld, op, limit)                 \
+       (get_idreg_field_unsigned((kvm), id, fld) op __expand_field_sign_unsigned(id, fld, limit))
+
+#define kvm_cmp_feat(kvm, id, fld, op, limit)                          \
        (id##_##fld##_SIGNED ?                                          \
-        get_idreg_field_signed(kvm, id, fld) :                         \
-        get_idreg_field_unsigned(kvm, id, fld))
+        kvm_cmp_feat_signed(kvm, id, fld, op, limit) :                 \
+        kvm_cmp_feat_unsigned(kvm, id, fld, op, limit))
 
 #define kvm_has_feat(kvm, id, fld, limit)                              \
-       (get_idreg_field((kvm), id, fld) >= expand_field_sign(id, fld, limit))
+       kvm_cmp_feat(kvm, id, fld, >=, limit)
 
 #define kvm_has_feat_enum(kvm, id, fld, val)                           \
-       (get_idreg_field_unsigned((kvm), id, fld) == __expand_field_sign_unsigned(id, fld, val))
+       kvm_cmp_feat_unsigned(kvm, id, fld, ==, val)
 
 #define kvm_has_feat_range(kvm, id, fld, min, max)                     \
-       (get_idreg_field((kvm), id, fld) >= expand_field_sign(id, fld, min) && \
-        get_idreg_field((kvm), id, fld) <= expand_field_sign(id, fld, max))
+       (kvm_cmp_feat(kvm, id, fld, >=, min) &&                         \
+       kvm_cmp_feat(kvm, id, fld, <=, max))
 
 /* Check for a given level of PAuth support */
 #define kvm_has_pauth(k, l)                                            \