< prev index next >

src/cpu/x86/vm/macroAssembler_x86.cpp

Print this page




  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
< prev index next >