os_windows_x86.hpp revision 9743:d6c6ee9d40b0
1/*
2 * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25#ifndef OS_CPU_WINDOWS_X86_VM_OS_WINDOWS_X86_HPP
26#define OS_CPU_WINDOWS_X86_VM_OS_WINDOWS_X86_HPP
27
28  //
29  // NOTE: we are back in class os here, not win32
30  //
31#ifdef AMD64
32  static jint      (*atomic_xchg_func)          (jint,      volatile jint*);
33  static intptr_t  (*atomic_xchg_ptr_func)      (intptr_t,  volatile intptr_t*);
34
35  static jint      (*atomic_cmpxchg_func)       (jint,      volatile jint*,  jint);
36  static jbyte     (*atomic_cmpxchg_byte_func)  (jbyte,     volatile jbyte*, jbyte);
37  static jlong     (*atomic_cmpxchg_long_func)  (jlong,     volatile jlong*, jlong);
38
39  static jint      (*atomic_add_func)           (jint,      volatile jint*);
40  static intptr_t  (*atomic_add_ptr_func)       (intptr_t,  volatile intptr_t*);
41
42  static jint      atomic_xchg_bootstrap        (jint,      volatile jint*);
43  static intptr_t  atomic_xchg_ptr_bootstrap    (intptr_t,  volatile intptr_t*);
44
45  static jint      atomic_cmpxchg_bootstrap     (jint,      volatile jint*,  jint);
46  static jbyte     atomic_cmpxchg_byte_bootstrap(jbyte,     volatile jbyte*, jbyte);
47#else
48
49  static jlong (*atomic_cmpxchg_long_func)  (jlong, volatile jlong*, jlong);
50
51#endif // AMD64
52
53  static jlong atomic_cmpxchg_long_bootstrap(jlong, volatile jlong*, jlong);
54
55#ifdef AMD64
56  static jint      atomic_add_bootstrap         (jint,      volatile jint*);
57  static intptr_t  atomic_add_ptr_bootstrap     (intptr_t,  volatile intptr_t*);
58#endif // AMD64
59
60  static void setup_fpu();
61  static bool supports_sse() { return true; }
62
63  static jlong rdtsc();
64
65  static bool      register_code_area(char *low, char *high);
66
67#ifdef AMD64
68#define PLATFORM_PRINT_NATIVE_STACK 1
69static bool platform_print_native_stack(outputStream* st, const void* context,
70                                        char *buf, int buf_size);
71#endif
72
73#endif // OS_CPU_WINDOWS_X86_VM_OS_WINDOWS_X86_HPP
74