+ HANDLE hThread;
+ DWORD_PTR mask, r; // 64-bit win is required to handle more than 32 procs
+ nat nproc, i;
+
+ hThread = GetCurrentThread();
+
+ nproc = getNumberOfProcessors();
+
+ mask = 0;
+ for (i = n; i < nproc; i+=m) {
+ mask |= 1 << i;
+ }
+
+ r = SetThreadAffinityMask(hThread, mask);
+ if (r == 0) {
+ sysErrorBelch("SetThreadAffinity");
+ stg_exit(EXIT_FAILURE);
+ }