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 #ifdef COMPILER2
50 #include "opto/intrinsicnode.hpp"
51 #endif
52
53 #ifdef PRODUCT
54 #define BLOCK_COMMENT(str) /* nothing */
55 #define STOP(error) stop(error)
56 #else
57 #define BLOCK_COMMENT(str) block_comment(str)
58 #define STOP(error) block_comment(error); stop(error)
59 #endif
60
61 #define BIND(label) bind(label); BLOCK_COMMENT(#label ":")
9738 case Assembler::overflow: return Assembler::noOverflow;
9739 case Assembler::noOverflow: return Assembler::overflow;
9740 case Assembler::negative: return Assembler::positive;
9741 case Assembler::positive: return Assembler::negative;
9742 case Assembler::parity: return Assembler::noParity;
9743 case Assembler::noParity: return Assembler::parity;
9744 }
9745 ShouldNotReachHere(); return Assembler::overflow;
9746 }
9747
9748 SkipIfEqual::SkipIfEqual(
9749 MacroAssembler* masm, const bool* flag_addr, bool value) {
9750 _masm = masm;
9751 _masm->cmp8(ExternalAddress((address)flag_addr), value);
9752 _masm->jcc(Assembler::equal, _label);
9753 }
9754
9755 SkipIfEqual::~SkipIfEqual() {
9756 _masm->bind(_label);
9757 }
|
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 #ifdef COMPILER2
51 #include "opto/intrinsicnode.hpp"
52 #endif
53
54 #ifdef PRODUCT
55 #define BLOCK_COMMENT(str) /* nothing */
56 #define STOP(error) stop(error)
57 #else
58 #define BLOCK_COMMENT(str) block_comment(str)
59 #define STOP(error) block_comment(error); stop(error)
60 #endif
61
62 #define BIND(label) bind(label); BLOCK_COMMENT(#label ":")
9739 case Assembler::overflow: return Assembler::noOverflow;
9740 case Assembler::noOverflow: return Assembler::overflow;
9741 case Assembler::negative: return Assembler::positive;
9742 case Assembler::positive: return Assembler::negative;
9743 case Assembler::parity: return Assembler::noParity;
9744 case Assembler::noParity: return Assembler::parity;
9745 }
9746 ShouldNotReachHere(); return Assembler::overflow;
9747 }
9748
9749 SkipIfEqual::SkipIfEqual(
9750 MacroAssembler* masm, const bool* flag_addr, bool value) {
9751 _masm = masm;
9752 _masm->cmp8(ExternalAddress((address)flag_addr), value);
9753 _masm->jcc(Assembler::equal, _label);
9754 }
9755
9756 SkipIfEqual::~SkipIfEqual() {
9757 _masm->bind(_label);
9758 }
9759
9760 // 32-bit Windows has its own fast-path implementation
9761 // of get_thread
9762 #if !defined(WIN32) || defined(_LP64)
9763
9764 // This is simply a call to Thread::current()
9765 void MacroAssembler::get_thread(Register thread) {
9766 if (thread != rax) {
9767 push(rax);
9768 }
9769 LP64_ONLY(push(rdi);)
9770 LP64_ONLY(push(rsi);)
9771 push(rdx);
9772 push(rcx);
9773 LP64_ONLY(push(r8);)
9774 LP64_ONLY(push(r9);)
9775 LP64_ONLY(push(r10);)
9776 LP64_ONLY(push(r11);)
9777
9778 call(RuntimeAddress(CAST_FROM_FN_PTR(address, Thread::current)));
9779
9780 LP64_ONLY(pop(r11);)
9781 LP64_ONLY(pop(r10);)
9782 LP64_ONLY(pop(r9);)
9783 LP64_ONLY(pop(r8);)
9784 pop(rcx);
9785 pop(rdx);
9786 LP64_ONLY(pop(rsi);)
9787 LP64_ONLY(pop(rdi);)
9788 if (thread != rax) {
9789 mov(thread, rax);
9790 pop(rax);
9791 }
9792 }
9793
9794 #endif
|