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");
|