+///--------------------------------------------------------------------------
+/// Checking extended control registers.
+
+FUNC(dispatch_x86ish_xgetbv)
+ // Call with two arguments: a pointer Z_OUT to 8 bytes of output space, and
+ // a 32-bit integer C. Read the 64-bit value of XCR(C), and store it
+ // at Z_OUT.
+
+#if CPUFAM_X86
+# define Z_OUT edi
+ mov edi, [esp + 4]
+ mov ecx, [esp + 8]
+#endif
+#if CPUFAM_AMD64 && ABI_SYSV
+# define Z_OUT rdi
+ mov ecx, esi
+#endif
+#if CPUFAM_AMD64 && ABI_WIN
+# define Z_OUT r8
+ mov r8, rcx
+ mov ecx, edx
+#endif
+ endprologue
+
+ xgetbv
+ mov [Z_OUT + 0], eax
+ mov [Z_OUT + 4], edx
+
+ ret
+
+#undef Z_OUT
+ENDFUNC
+