Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / native_client / src / trusted / cpu_features / arch / x86 / cpu_xgetbv.S
1 /*
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
4  * found in the LICENSE file.
5  */
6
7 /*
8  * This exists only because Windows 64 doesn't support trivial inline assembly.
9  * Visual Studio 2010 SP1 has an intrinsic _xgetbv() for this.
10  * But earlier versions do not.
11  */
12
13 #include "native_client/src/trusted/service_runtime/nacl_config.h"
14
15         .text
16
17 DEFINE_GLOBAL_HIDDEN_FUNCTION(NaClXGETBV):
18 #if NACL_BUILD_SUBARCH == 32
19         movl 4(%esp), %ecx
20 #elif !NACL_WINDOWS
21         movl %edi, %ecx
22 #endif
23         /*
24          * This is "xgetbv" (no operands).  Some assemblers don't know it yet.
25          */
26         .byte 0x0f, 0x01, 0xd0
27 #if NACL_BUILD_SUBARCH == 64
28         shlq $32, %rdx
29         orq %rdx, %rax
30 #endif
31         ret