/** @file AsmCpuidEx function. Copyright (c) 2006, Intel Corporation
All rights reserved. This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ #if _MSC_EXTENSIONS UINT32 EFIAPI AsmCpuidEx ( IN UINT32 Index, IN UINT32 SubIndex, OUT UINT32 *RegisterEax, OPTIONAL OUT UINT32 *RegisterEbx, OPTIONAL OUT UINT32 *RegisterEcx, OPTIONAL OUT UINT32 *RegisterEdx OPTIONAL ) { _asm { mov eax, Index mov ecx, SubIndex cpuid push ecx mov ecx, RegisterEax jecxz SkipEax mov [ecx], eax SkipEax: mov ecx, RegisterEbx jecxz SkipEbx mov [ecx], ebx SkipEbx: pop eax mov ecx, RegisterEcx jecxz SkipEcx mov [ecx], eax SkipEcx: mov ecx, RegisterEdx jecxz SkipEdx mov [ecx], edx SkipEdx: mov eax, Index } } #endif