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