_bittestandreset64((__int64 *)var, index);
#endif
}
+
+static INLINE Bool
+TestBit32(uint32 *var, uint32 index)
+{
+#ifdef __GNUC__
+ Bool bit;
+ __asm__ (
+ "bt %[index], %[var] \n"
+ "setc %[bit]"
+ : [bit] "=rm" (bit)
+ : [index] "rI" (index), [var] "r" (*var)
+ : "cc"
+ );
+ return bit;
+#elif defined _MSC_VER
+ return _bittest((long *)var, index);
+#endif
+}
+
+static INLINE Bool
+TestBit64(uint64 *var, uint64 index)
+{
+#ifdef __GNUC__
+ Bool bit;
+ __asm__ (
+ "bt %[index], %[var] \n"
+ "setc %[bit]"
+ : [bit] "=rm" (bit)
+ : [index] "rJ" (index), [var] "r" (*var)
+ : "cc"
+ );
+ return bit;
+#elif defined _MSC_VER
+ return _bittest64((__int64 *)var, index);
+#endif
+}
#endif /* VM_X86_64 */
/*
FLAG( 1, 0, ECX, INTEL, 18, 1, DCA, NO, FALSE) \
FLAG( 1, 0, ECX, COMMON, 19, 1, SSE41, YES, TRUE) \
FLAG( 1, 0, ECX, COMMON, 20, 1, SSE42, YES, TRUE) \
-FLAG( 1, 0, ECX, INTEL, 21, 1, x2APIC, NO, FALSE) \
+FLAG( 1, 0, ECX, INTEL, 21, 1, x2APIC, ANY, FALSE) \
FLAG( 1, 0, ECX, INTEL, 22, 1, MOVBE, YES, TRUE) \
FLAG( 1, 0, ECX, COMMON, 23, 1, POPCNT, YES, TRUE) \
FLAG( 1, 0, ECX, COMMON, 24, 1, TSC_DEADLINE, NO, FALSE) \