src/share/vm/shark/sharkIntrinsics.cpp

Print this page




  48   case vmIntrinsics::_datan2:
  49   case vmIntrinsics::_dsqrt:
  50   case vmIntrinsics::_dlog:
  51   case vmIntrinsics::_dlog10:
  52   case vmIntrinsics::_dpow:
  53   case vmIntrinsics::_dexp:
  54     return true;
  55 
  56     // java.lang.Object
  57   case vmIntrinsics::_getClass:
  58     return true;
  59 
  60     // java.lang.System
  61   case vmIntrinsics::_currentTimeMillis:
  62     return true;
  63 
  64     // java.lang.Thread
  65   case vmIntrinsics::_currentThread:
  66     return true;
  67 
  68     // sun.misc.Unsafe
  69   case vmIntrinsics::_compareAndSwapInt:
  70     return true;
  71 
  72   default:
  73     if (SharkPerformanceWarnings) {
  74       warning(
  75         "unhandled intrinsic vmIntrinsic::%s",
  76         vmIntrinsics::name_at(target->intrinsic_id()));
  77     }
  78   }
  79   return false;
  80 }
  81 
  82 void SharkIntrinsics::inline_intrinsic(ciMethod *target, SharkState *state) {
  83   SharkIntrinsics intrinsic(state, target);
  84   intrinsic.do_intrinsic();
  85 }
  86 
  87 void SharkIntrinsics::do_intrinsic() {
  88   switch (target()->intrinsic_id()) {


 122     break;
 123   case vmIntrinsics::_dexp:
 124     do_Math_1to1(builder()->exp());
 125     break;
 126 
 127     // java.lang.Object
 128   case vmIntrinsics::_getClass:
 129     do_Object_getClass();
 130     break;
 131 
 132     // java.lang.System
 133   case vmIntrinsics::_currentTimeMillis:
 134     do_System_currentTimeMillis();
 135     break;
 136 
 137     // java.lang.Thread
 138   case vmIntrinsics::_currentThread:
 139     do_Thread_currentThread();
 140     break;
 141 
 142     // sun.misc.Unsafe
 143   case vmIntrinsics::_compareAndSwapInt:
 144     do_Unsafe_compareAndSwapInt();
 145     break;
 146 
 147   default:
 148     ShouldNotReachHere();
 149   }
 150 }
 151 
 152 void SharkIntrinsics::do_Math_minmax(ICmpInst::Predicate p) {
 153   // Pop the arguments
 154   SharkValue *sb = state()->pop();
 155   SharkValue *sa = state()->pop();
 156   Value *a = sa->jint_value();
 157   Value *b = sb->jint_value();
 158 
 159   // Perform the test
 160   BasicBlock *ip       = builder()->GetBlockInsertionPoint();
 161   BasicBlock *return_a = builder()->CreateBlock(ip, "return_a");
 162   BasicBlock *return_b = builder()->CreateBlock(ip, "return_b");




  48   case vmIntrinsics::_datan2:
  49   case vmIntrinsics::_dsqrt:
  50   case vmIntrinsics::_dlog:
  51   case vmIntrinsics::_dlog10:
  52   case vmIntrinsics::_dpow:
  53   case vmIntrinsics::_dexp:
  54     return true;
  55 
  56     // java.lang.Object
  57   case vmIntrinsics::_getClass:
  58     return true;
  59 
  60     // java.lang.System
  61   case vmIntrinsics::_currentTimeMillis:
  62     return true;
  63 
  64     // java.lang.Thread
  65   case vmIntrinsics::_currentThread:
  66     return true;
  67 
  68     // [sun|jdk.internal].misc.Unsafe
  69   case vmIntrinsics::_compareAndSwapInt:
  70     return true;
  71 
  72   default:
  73     if (SharkPerformanceWarnings) {
  74       warning(
  75         "unhandled intrinsic vmIntrinsic::%s",
  76         vmIntrinsics::name_at(target->intrinsic_id()));
  77     }
  78   }
  79   return false;
  80 }
  81 
  82 void SharkIntrinsics::inline_intrinsic(ciMethod *target, SharkState *state) {
  83   SharkIntrinsics intrinsic(state, target);
  84   intrinsic.do_intrinsic();
  85 }
  86 
  87 void SharkIntrinsics::do_intrinsic() {
  88   switch (target()->intrinsic_id()) {


 122     break;
 123   case vmIntrinsics::_dexp:
 124     do_Math_1to1(builder()->exp());
 125     break;
 126 
 127     // java.lang.Object
 128   case vmIntrinsics::_getClass:
 129     do_Object_getClass();
 130     break;
 131 
 132     // java.lang.System
 133   case vmIntrinsics::_currentTimeMillis:
 134     do_System_currentTimeMillis();
 135     break;
 136 
 137     // java.lang.Thread
 138   case vmIntrinsics::_currentThread:
 139     do_Thread_currentThread();
 140     break;
 141 
 142     // [sun|jdk.internal].misc.Unsafe
 143   case vmIntrinsics::_compareAndSwapInt:
 144     do_Unsafe_compareAndSwapInt();
 145     break;
 146 
 147   default:
 148     ShouldNotReachHere();
 149   }
 150 }
 151 
 152 void SharkIntrinsics::do_Math_minmax(ICmpInst::Predicate p) {
 153   // Pop the arguments
 154   SharkValue *sb = state()->pop();
 155   SharkValue *sa = state()->pop();
 156   Value *a = sa->jint_value();
 157   Value *b = sb->jint_value();
 158 
 159   // Perform the test
 160   BasicBlock *ip       = builder()->GetBlockInsertionPoint();
 161   BasicBlock *return_a = builder()->CreateBlock(ip, "return_a");
 162   BasicBlock *return_b = builder()->CreateBlock(ip, "return_b");