proc cpuidX86(eaxi, ecxi :int32) :tuple[eax, ebx, ecx, edx :int32] = var (eaxr, ebxr, ecxr, edxr) = (0'i32, 0'i32, 0'i32, 0'i32) asm """ cpuid :"=a"(`eaxr`), "=b"(`ebxr`), "=c"(`ecxr`), "=d"(`edxr`) :"a"(`eaxi`), "c"(`ecxi`)""" (eaxr, ebxr, ecxr, edxr) var leaves {.global.} = cast[array[48, char]]([ cpuidX86(eaxi = 0x80000002'i32, ecxi = 0), cpuidX86(eaxi = 0x80000003'i32, ecxi = 0), cpuidX86(eaxi = 0x80000004'i32, ecxi = 0)]) echo "\n\n\n\n\t\t", $cast[cstring](addr leaves[0]), "\n\n\n\n"