comparison src/os/solaris/vm/thread_solaris.inline.hpp @ 23660:b5f3a471e646

Merge.
author Doug Simon <doug.simon@oracle.com>
date Wed, 01 Jun 2016 00:11:44 +0200
parents ca3c6538bcec 3ad3f93fe3d2
children
comparison
equal deleted inserted replaced
23411:d7cf78885a3a 23660:b5f3a471e646
1 /* 1 /*
2 * Copyright (c) 2002, 2011, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 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 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
38 // ThreadLocalStorage::thread is warm -- it's called > 16K times in the same 38 // ThreadLocalStorage::thread is warm -- it's called > 16K times in the same
39 // period. Thread::current() now calls ThreadLocalStorage::thread() directly. 39 // period. Thread::current() now calls ThreadLocalStorage::thread() directly.
40 // For SPARC, to avoid excessive register window spill-fill faults, 40 // For SPARC, to avoid excessive register window spill-fill faults,
41 // we aggressively inline these routines. 41 // we aggressively inline these routines.
42 42
43 inline void ThreadLocalStorage::set_thread(Thread* thread) {
44 _thr_current = thread;
45 }
46
43 inline Thread* ThreadLocalStorage::thread() { 47 inline Thread* ThreadLocalStorage::thread() {
44 // don't use specialized code if +UseMallocOnly -- may confuse Purify et al. 48 return _thr_current;
45 debug_only(if (UseMallocOnly) return get_thread_slow(););
46
47 uintptr_t raw = pd_raw_thread_id();
48 int ix = pd_cache_index(raw);
49 Thread* candidate = ThreadLocalStorage::_get_thread_cache[ix];
50 if (candidate != NULL && candidate->self_raw_id() == raw) {
51 // hit
52 return candidate;
53 } else {
54 return ThreadLocalStorage::get_thread_via_cache_slowly(raw, ix);
55 }
56 } 49 }
57 50
58 #endif // OS_SOLARIS_VM_THREAD_SOLARIS_INLINE_HPP 51 #endif // OS_SOLARIS_VM_THREAD_SOLARIS_INLINE_HPP