22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "asm/assembler.hpp"
27 #include "asm/assembler.inline.hpp"
28 #include "compiler/disassembler.hpp"
29 #include "gc/shared/cardTableModRefBS.hpp"
30 #include "gc/shared/collectedHeap.inline.hpp"
31 #include "interpreter/interpreter.hpp"
32 #include "memory/resourceArea.hpp"
33 #include "memory/universe.hpp"
34 #include "oops/klass.inline.hpp"
35 #include "prims/methodHandles.hpp"
36 #include "runtime/biasedLocking.hpp"
37 #include "runtime/interfaceSupport.hpp"
38 #include "runtime/objectMonitor.hpp"
39 #include "runtime/os.hpp"
40 #include "runtime/sharedRuntime.hpp"
41 #include "runtime/stubRoutines.hpp"
42 #include "utilities/macros.hpp"
43 #if INCLUDE_ALL_GCS
44 #include "gc/g1/g1CollectedHeap.inline.hpp"
45 #include "gc/g1/g1SATBCardTableModRefBS.hpp"
46 #include "gc/g1/heapRegion.hpp"
47 #endif // INCLUDE_ALL_GCS
48 #include "crc32c.h"
49
50 #ifdef PRODUCT
51 #define BLOCK_COMMENT(str) /* nothing */
52 #define STOP(error) stop(error)
53 #else
54 #define BLOCK_COMMENT(str) block_comment(str)
55 #define STOP(error) block_comment(error); stop(error)
56 #endif
57
58 #define BIND(label) bind(label); BLOCK_COMMENT(#label ":")
59
60 #ifdef ASSERT
61 bool AbstractAssembler::pd_check_instruction_mark() { return true; }
9101 case Assembler::overflow: return Assembler::noOverflow;
9102 case Assembler::noOverflow: return Assembler::overflow;
9103 case Assembler::negative: return Assembler::positive;
9104 case Assembler::positive: return Assembler::negative;
9105 case Assembler::parity: return Assembler::noParity;
9106 case Assembler::noParity: return Assembler::parity;
9107 }
9108 ShouldNotReachHere(); return Assembler::overflow;
9109 }
9110
9111 SkipIfEqual::SkipIfEqual(
9112 MacroAssembler* masm, const bool* flag_addr, bool value) {
9113 _masm = masm;
9114 _masm->cmp8(ExternalAddress((address)flag_addr), value);
9115 _masm->jcc(Assembler::equal, _label);
9116 }
9117
9118 SkipIfEqual::~SkipIfEqual() {
9119 _masm->bind(_label);
9120 }
|
22 *
23 */
24
25 #include "precompiled.hpp"
26 #include "asm/assembler.hpp"
27 #include "asm/assembler.inline.hpp"
28 #include "compiler/disassembler.hpp"
29 #include "gc/shared/cardTableModRefBS.hpp"
30 #include "gc/shared/collectedHeap.inline.hpp"
31 #include "interpreter/interpreter.hpp"
32 #include "memory/resourceArea.hpp"
33 #include "memory/universe.hpp"
34 #include "oops/klass.inline.hpp"
35 #include "prims/methodHandles.hpp"
36 #include "runtime/biasedLocking.hpp"
37 #include "runtime/interfaceSupport.hpp"
38 #include "runtime/objectMonitor.hpp"
39 #include "runtime/os.hpp"
40 #include "runtime/sharedRuntime.hpp"
41 #include "runtime/stubRoutines.hpp"
42 #include "runtime/thread.hpp"
43 #include "utilities/macros.hpp"
44 #if INCLUDE_ALL_GCS
45 #include "gc/g1/g1CollectedHeap.inline.hpp"
46 #include "gc/g1/g1SATBCardTableModRefBS.hpp"
47 #include "gc/g1/heapRegion.hpp"
48 #endif // INCLUDE_ALL_GCS
49 #include "crc32c.h"
50
51 #ifdef PRODUCT
52 #define BLOCK_COMMENT(str) /* nothing */
53 #define STOP(error) stop(error)
54 #else
55 #define BLOCK_COMMENT(str) block_comment(str)
56 #define STOP(error) block_comment(error); stop(error)
57 #endif
58
59 #define BIND(label) bind(label); BLOCK_COMMENT(#label ":")
60
61 #ifdef ASSERT
62 bool AbstractAssembler::pd_check_instruction_mark() { return true; }
9102 case Assembler::overflow: return Assembler::noOverflow;
9103 case Assembler::noOverflow: return Assembler::overflow;
9104 case Assembler::negative: return Assembler::positive;
9105 case Assembler::positive: return Assembler::negative;
9106 case Assembler::parity: return Assembler::noParity;
9107 case Assembler::noParity: return Assembler::parity;
9108 }
9109 ShouldNotReachHere(); return Assembler::overflow;
9110 }
9111
9112 SkipIfEqual::SkipIfEqual(
9113 MacroAssembler* masm, const bool* flag_addr, bool value) {
9114 _masm = masm;
9115 _masm->cmp8(ExternalAddress((address)flag_addr), value);
9116 _masm->jcc(Assembler::equal, _label);
9117 }
9118
9119 SkipIfEqual::~SkipIfEqual() {
9120 _masm->bind(_label);
9121 }
9122
9123 // 32-bit Windows has its own fast-path implementation
9124 // of get_thread
9125 #if !defined(WIN32) || defined(_LP64)
9126
9127 // This is simply a call to Thread::current()
9128 void MacroAssembler::get_thread(Register thread) {
9129 if (thread != rax) {
9130 push(rax);
9131 }
9132 LP64_ONLY(push(rdi);)
9133 LP64_ONLY(push(rsi);)
9134 push(rdx);
9135 push(rcx);
9136 LP64_ONLY(push(r8);)
9137 LP64_ONLY(push(r9);)
9138 LP64_ONLY(push(r10);)
9139 LP64_ONLY(push(r11);)
9140
9141 call(RuntimeAddress(CAST_FROM_FN_PTR(address, Thread::current)));
9142
9143 LP64_ONLY(pop(r11);)
9144 LP64_ONLY(pop(r10);)
9145 LP64_ONLY(pop(r9);)
9146 LP64_ONLY(pop(r8);)
9147 pop(rcx);
9148 pop(rdx);
9149 LP64_ONLY(pop(rsi);)
9150 LP64_ONLY(pop(rdi);)
9151 if (thread != rax) {
9152 mov(thread, rax);
9153 pop(rax);
9154 }
9155 }
9156
9157 #endif
|