Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(319)

Side by Side Diff: source/cpu_id.cc

Issue 1850053002: add if defined(_MSC_FULL_VER) for NaCL (Closed) Base URL: https://chromium.googlesource.com/libyuv/libyuv@master
Patch Set: merge with head Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 The LibYuv Project Authors. All rights reserved. 2 * Copyright 2011 The LibYuv Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #include "libyuv/cpu_id.h" 11 #include "libyuv/cpu_id.h"
12 12
13 #if defined(_MSC_VER) 13 #if defined(_MSC_VER)
14 #include <intrin.h> // For __cpuidex() 14 #include <intrin.h> // For __cpuidex()
15 #endif 15 #endif
16 #if !defined(__pnacl__) && !defined(__CLR_VER) && \ 16 #if !defined(__pnacl__) && !defined(__CLR_VER) && \
17 !defined(__native_client__) && (defined(_M_IX86) || defined(_M_X64)) && \ 17 !defined(__native_client__) && (defined(_M_IX86) || defined(_M_X64)) && \
18 defined(_MSC_VER) && (_MSC_FULL_VER >= 160040219) 18 defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 160040219)
19 #include <immintrin.h> // For _xgetbv() 19 #include <immintrin.h> // For _xgetbv()
20 #endif 20 #endif
21 21
22 #if !defined(__native_client__) 22 #if !defined(__native_client__)
23 #include <stdlib.h> // For getenv() 23 #include <stdlib.h> // For getenv()
24 #endif 24 #endif
25 25
26 // For ArmCpuCaps() but unittested on all platforms 26 // For ArmCpuCaps() but unittested on all platforms
27 #include <stdio.h> 27 #include <stdio.h>
28 #include <string.h> 28 #include <string.h>
29 29
30 #include "libyuv/basic_types.h" // For CPU_X86 30 #include "libyuv/basic_types.h" // For CPU_X86
31 31
32 #ifdef __cplusplus 32 #ifdef __cplusplus
33 namespace libyuv { 33 namespace libyuv {
34 extern "C" { 34 extern "C" {
35 #endif 35 #endif
36 36
37 // For functions that use the stack and have runtime checks for overflow, 37 // For functions that use the stack and have runtime checks for overflow,
38 // use SAFEBUFFERS to avoid additional check. 38 // use SAFEBUFFERS to avoid additional check.
39 #if (defined(_MSC_VER) && !defined(__clang__)) && (_MSC_FULL_VER >= 160040219) 39 #if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 160040219) && \
40 !defined(__clang__)
40 #define SAFEBUFFERS __declspec(safebuffers) 41 #define SAFEBUFFERS __declspec(safebuffers)
41 #else 42 #else
42 #define SAFEBUFFERS 43 #define SAFEBUFFERS
43 #endif 44 #endif
44 45
45 // Low level cpuid for X86. 46 // Low level cpuid for X86.
46 #if (defined(_M_IX86) || defined(_M_X64) || \ 47 #if (defined(_M_IX86) || defined(_M_X64) || \
47 defined(__i386__) || defined(__x86_64__)) && \ 48 defined(__i386__) || defined(__x86_64__)) && \
48 !defined(__pnacl__) && !defined(__CLR_VER) 49 !defined(__pnacl__) && !defined(__CLR_VER)
49 LIBYUV_API 50 LIBYUV_API
50 void CpuId(uint32 info_eax, uint32 info_ecx, uint32* cpu_info) { 51 void CpuId(uint32 info_eax, uint32 info_ecx, uint32* cpu_info) {
51 #if defined(_MSC_VER) 52 #if defined(_MSC_VER)
52 // Visual C version uses intrinsic or inline x86 assembly. 53 // Visual C version uses intrinsic or inline x86 assembly.
53 #if (_MSC_FULL_VER >= 160040219) 54 #if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 160040219)
54 __cpuidex((int*)(cpu_info), info_eax, info_ecx); 55 __cpuidex((int*)(cpu_info), info_eax, info_ecx);
55 #elif defined(_M_IX86) 56 #elif defined(_M_IX86)
56 __asm { 57 __asm {
57 mov eax, info_eax 58 mov eax, info_eax
58 mov ecx, info_ecx 59 mov ecx, info_ecx
59 mov edi, cpu_info 60 mov edi, cpu_info
60 cpuid 61 cpuid
61 mov [edi], eax 62 mov [edi], eax
62 mov [edi + 4], ebx 63 mov [edi + 4], ebx
63 mov [edi + 8], ecx 64 mov [edi + 8], ecx
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 #if defined(_M_IX86) && (_MSC_VER < 1900) 111 #if defined(_M_IX86) && (_MSC_VER < 1900)
111 #pragma optimize("g", off) 112 #pragma optimize("g", off)
112 #endif 113 #endif
113 #if (defined(_M_IX86) || defined(_M_X64) || \ 114 #if (defined(_M_IX86) || defined(_M_X64) || \
114 defined(__i386__) || defined(__x86_64__)) && \ 115 defined(__i386__) || defined(__x86_64__)) && \
115 !defined(__pnacl__) && !defined(__CLR_VER) && !defined(__native_client__) 116 !defined(__pnacl__) && !defined(__CLR_VER) && !defined(__native_client__)
116 #define HAS_XGETBV 117 #define HAS_XGETBV
117 // X86 CPUs have xgetbv to detect OS saves high parts of ymm registers. 118 // X86 CPUs have xgetbv to detect OS saves high parts of ymm registers.
118 int GetXCR0() { 119 int GetXCR0() {
119 uint32 xcr0 = 0u; 120 uint32 xcr0 = 0u;
120 #if (_MSC_FULL_VER >= 160040219) 121 #if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 160040219)
121 xcr0 = (uint32)(_xgetbv(0)); // VS2010 SP1 required. 122 xcr0 = (uint32)(_xgetbv(0)); // VS2010 SP1 required.
122 #elif defined(__i386__) || defined(__x86_64__) 123 #elif defined(__i386__) || defined(__x86_64__)
123 asm(".byte 0x0f, 0x01, 0xd0" : "=a" (xcr0) : "c" (0) : "%edx"); 124 asm(".byte 0x0f, 0x01, 0xd0" : "=a" (xcr0) : "c" (0) : "%edx");
124 #endif // defined(__i386__) || defined(__x86_64__) 125 #endif // defined(__i386__) || defined(__x86_64__)
125 return xcr0; 126 return xcr0;
126 } 127 }
127 #endif // defined(_M_IX86) || defined(_M_X64) .. 128 #endif // defined(_M_IX86) || defined(_M_X64) ..
128 // Return optimization to previous setting. 129 // Return optimization to previous setting.
129 #if defined(_M_IX86) && (_MSC_VER < 1900) 130 #if defined(_M_IX86) && (_MSC_VER < 1900)
130 #pragma optimize("g", on) 131 #pragma optimize("g", on)
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 // Note that use of this function is not thread safe. 291 // Note that use of this function is not thread safe.
291 LIBYUV_API 292 LIBYUV_API
292 void MaskCpuFlags(int enable_flags) { 293 void MaskCpuFlags(int enable_flags) {
293 cpu_info_ = InitCpuFlags() & enable_flags; 294 cpu_info_ = InitCpuFlags() & enable_flags;
294 } 295 }
295 296
296 #ifdef __cplusplus 297 #ifdef __cplusplus
297 } // extern "C" 298 } // extern "C"
298 } // namespace libyuv 299 } // namespace libyuv
299 #endif 300 #endif
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698