OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. | 2 * Copyright (c) 2012 The Native Client Authors. All rights reserved. |
3 * Use of this source code is governed by a BSD-style license that can be | 3 * Use of this source code is governed by a BSD-style license that can be |
4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
5 */ | 5 */ |
6 | 6 |
7 /* | 7 /* |
8 * vcpuid.c | 8 * vcpuid.c |
9 * | 9 * |
10 * Verify correctness of CPUID implementation. | 10 * Verify correctness of CPUID implementation. |
11 * | 11 * |
12 * This uses shell status code to indicate its result; non-zero return | 12 * This uses shell status code to indicate its result; non-zero return |
13 * code indicates the CPUID instruction is not implemented or not | 13 * code indicates the CPUID instruction is not implemented or not |
14 * implemented correctly. | 14 * implemented correctly. |
15 * | 15 * |
16 * The asm_ tests use inline assembler, which is not supported on | 16 * The asm_ tests use inline assembler, which is not supported on |
17 * 64-bit Windows. We use #if to prevent these routines from being | 17 * 64-bit Windows. We use #if to prevent these routines from being |
18 * provided on 64-bit Windows. | 18 * provided on 64-bit Windows. |
19 * | 19 * |
20 * TODO(bradchen): test on a machine with SSE4. | 20 * TODO(bradchen): test on a machine with SSE4. |
21 */ | 21 */ |
22 #include "native_client/src/include/portability.h" | 22 #include "native_client/src/include/portability.h" |
23 #include <stdio.h> | 23 #include <stdio.h> |
24 #include <string.h> | 24 #include <string.h> |
25 #include <assert.h> | 25 #include <assert.h> |
26 #include <stdlib.h> | 26 #include <stdlib.h> |
27 #include <setjmp.h> | 27 #include <setjmp.h> |
28 #include <signal.h> | 28 #include <signal.h> |
29 #include "native_client/src/trusted/validator/x86/nacl_cpuid.h" | 29 #include "native_client/src/trusted/cpu_features/arch/x86/cpu_x86.h" |
30 #include "native_client/src/trusted/platform_qualify/nacl_cpuwhitelist.h" | 30 #include "native_client/src/trusted/platform_qualify/nacl_cpuwhitelist.h" |
31 | 31 |
32 /* MAGIC_CONST is a 32 bit constant, somewhat arbitrarily choosen. */ | 32 /* MAGIC_CONST is a 32 bit constant, somewhat arbitrarily choosen. */ |
33 /* The value should be a valid (i.e. not denormal single-precision */ | 33 /* The value should be a valid (i.e. not denormal single-precision */ |
34 /* float; otherwise unexpected FP exceptions are possible. */ | 34 /* float; otherwise unexpected FP exceptions are possible. */ |
35 const int kMagicConst = 0xc01df00d; | 35 const int kMagicConst = 0xc01df00d; |
36 const int kMagicConst_ROUNDSS = 0xc0000000; | 36 const int kMagicConst_ROUNDSS = 0xc0000000; |
37 const int kMagicConst_POPCNT = 13; | 37 const int kMagicConst_POPCNT = 13; |
38 const int kMagicConst_CRC32 = 0xb906c3ea; | 38 const int kMagicConst_CRC32 = 0xb906c3ea; |
39 | 39 |
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
553 * DoTest(asm_HasE3DNow, "E3DNow"); | 553 * DoTest(asm_HasE3DNow, "E3DNow"); |
554 * what about LZCNT? | 554 * what about LZCNT? |
555 */ | 555 */ |
556 if (rcode != 0) { | 556 if (rcode != 0) { |
557 PrintFail("CPUID not implemented correctly."); | 557 PrintFail("CPUID not implemented correctly."); |
558 return 0; | 558 return 0; |
559 } | 559 } |
560 printf("[CPUID implementation looks okay]\n"); | 560 printf("[CPUID implementation looks okay]\n"); |
561 return 1; | 561 return 1; |
562 } | 562 } |
OLD | NEW |