189 } |
189 } |
190 #endif |
190 #endif |
191 return ((jdouble)fmod((double)x,(double)y)); |
191 return ((jdouble)fmod((double)x,(double)y)); |
192 JRT_END |
192 JRT_END |
193 |
193 |
|
194 #ifdef __SOFTFP__ |
|
195 JRT_LEAF(jfloat, SharedRuntime::fadd(jfloat x, jfloat y)) |
|
196 return x + y; |
|
197 JRT_END |
|
198 |
|
199 JRT_LEAF(jfloat, SharedRuntime::fsub(jfloat x, jfloat y)) |
|
200 return x - y; |
|
201 JRT_END |
|
202 |
|
203 JRT_LEAF(jfloat, SharedRuntime::fmul(jfloat x, jfloat y)) |
|
204 return x * y; |
|
205 JRT_END |
|
206 |
|
207 JRT_LEAF(jfloat, SharedRuntime::fdiv(jfloat x, jfloat y)) |
|
208 return x / y; |
|
209 JRT_END |
|
210 |
|
211 JRT_LEAF(jdouble, SharedRuntime::dadd(jdouble x, jdouble y)) |
|
212 return x + y; |
|
213 JRT_END |
|
214 |
|
215 JRT_LEAF(jdouble, SharedRuntime::dsub(jdouble x, jdouble y)) |
|
216 return x - y; |
|
217 JRT_END |
|
218 |
|
219 JRT_LEAF(jdouble, SharedRuntime::dmul(jdouble x, jdouble y)) |
|
220 return x * y; |
|
221 JRT_END |
|
222 |
|
223 JRT_LEAF(jdouble, SharedRuntime::ddiv(jdouble x, jdouble y)) |
|
224 return x / y; |
|
225 JRT_END |
|
226 |
|
227 JRT_LEAF(jfloat, SharedRuntime::i2f(jint x)) |
|
228 return (jfloat)x; |
|
229 JRT_END |
|
230 |
|
231 JRT_LEAF(jdouble, SharedRuntime::i2d(jint x)) |
|
232 return (jdouble)x; |
|
233 JRT_END |
|
234 |
|
235 JRT_LEAF(jdouble, SharedRuntime::f2d(jfloat x)) |
|
236 return (jdouble)x; |
|
237 JRT_END |
|
238 |
|
239 JRT_LEAF(int, SharedRuntime::fcmpl(float x, float y)) |
|
240 return x>y ? 1 : (x==y ? 0 : -1); /* x<y or is_nan*/ |
|
241 JRT_END |
|
242 |
|
243 JRT_LEAF(int, SharedRuntime::fcmpg(float x, float y)) |
|
244 return x<y ? -1 : (x==y ? 0 : 1); /* x>y or is_nan */ |
|
245 JRT_END |
|
246 |
|
247 JRT_LEAF(int, SharedRuntime::dcmpl(double x, double y)) |
|
248 return x>y ? 1 : (x==y ? 0 : -1); /* x<y or is_nan */ |
|
249 JRT_END |
|
250 |
|
251 JRT_LEAF(int, SharedRuntime::dcmpg(double x, double y)) |
|
252 return x<y ? -1 : (x==y ? 0 : 1); /* x>y or is_nan */ |
|
253 JRT_END |
|
254 |
|
255 // Functions to return the opposite of the aeabi functions for nan. |
|
256 JRT_LEAF(int, SharedRuntime::unordered_fcmplt(float x, float y)) |
|
257 return (x < y) ? 1 : ((g_isnan(x) || g_isnan(y)) ? 1 : 0); |
|
258 JRT_END |
|
259 |
|
260 JRT_LEAF(int, SharedRuntime::unordered_dcmplt(double x, double y)) |
|
261 return (x < y) ? 1 : ((g_isnan(x) || g_isnan(y)) ? 1 : 0); |
|
262 JRT_END |
|
263 |
|
264 JRT_LEAF(int, SharedRuntime::unordered_fcmple(float x, float y)) |
|
265 return (x <= y) ? 1 : ((g_isnan(x) || g_isnan(y)) ? 1 : 0); |
|
266 JRT_END |
|
267 |
|
268 JRT_LEAF(int, SharedRuntime::unordered_dcmple(double x, double y)) |
|
269 return (x <= y) ? 1 : ((g_isnan(x) || g_isnan(y)) ? 1 : 0); |
|
270 JRT_END |
|
271 |
|
272 JRT_LEAF(int, SharedRuntime::unordered_fcmpge(float x, float y)) |
|
273 return (x >= y) ? 1 : ((g_isnan(x) || g_isnan(y)) ? 1 : 0); |
|
274 JRT_END |
|
275 |
|
276 JRT_LEAF(int, SharedRuntime::unordered_dcmpge(double x, double y)) |
|
277 return (x >= y) ? 1 : ((g_isnan(x) || g_isnan(y)) ? 1 : 0); |
|
278 JRT_END |
|
279 |
|
280 JRT_LEAF(int, SharedRuntime::unordered_fcmpgt(float x, float y)) |
|
281 return (x > y) ? 1 : ((g_isnan(x) || g_isnan(y)) ? 1 : 0); |
|
282 JRT_END |
|
283 |
|
284 JRT_LEAF(int, SharedRuntime::unordered_dcmpgt(double x, double y)) |
|
285 return (x > y) ? 1 : ((g_isnan(x) || g_isnan(y)) ? 1 : 0); |
|
286 JRT_END |
|
287 |
|
288 // Intrinsics make gcc generate code for these. |
|
289 float SharedRuntime::fneg(float f) { |
|
290 return -f; |
|
291 } |
|
292 |
|
293 double SharedRuntime::dneg(double f) { |
|
294 return -f; |
|
295 } |
|
296 |
|
297 #endif // __SOFTFP__ |
|
298 |
|
299 #if defined(__SOFTFP__) || defined(E500V2) |
|
300 // Intrinsics make gcc generate code for these. |
|
301 double SharedRuntime::dabs(double f) { |
|
302 return (f <= (double)0.0) ? (double)0.0 - f : f; |
|
303 } |
|
304 |
|
305 double SharedRuntime::dsqrt(double f) { |
|
306 return sqrt(f); |
|
307 } |
|
308 #endif |
194 |
309 |
195 JRT_LEAF(jint, SharedRuntime::f2i(jfloat x)) |
310 JRT_LEAF(jint, SharedRuntime::f2i(jfloat x)) |
196 if (g_isnan(x)) |
311 if (g_isnan(x)) |
197 return 0; |
312 return 0; |
198 if (x >= (jfloat) max_jint) |
313 if (x >= (jfloat) max_jint) |
2617 |
2733 |
2618 JRT_LEAF(void, SharedRuntime::OSR_migration_end( intptr_t* buf) ) |
2734 JRT_LEAF(void, SharedRuntime::OSR_migration_end( intptr_t* buf) ) |
2619 FREE_C_HEAP_ARRAY(intptr_t,buf); |
2735 FREE_C_HEAP_ARRAY(intptr_t,buf); |
2620 JRT_END |
2736 JRT_END |
2621 |
2737 |
2622 #ifndef PRODUCT |
|
2623 bool AdapterHandlerLibrary::contains(CodeBlob* b) { |
2738 bool AdapterHandlerLibrary::contains(CodeBlob* b) { |
2624 AdapterHandlerTableIterator iter(_adapters); |
2739 AdapterHandlerTableIterator iter(_adapters); |
2625 while (iter.has_next()) { |
2740 while (iter.has_next()) { |
2626 AdapterHandlerEntry* a = iter.next(); |
2741 AdapterHandlerEntry* a = iter.next(); |
2627 if ( b == CodeCache::find_blob(a->get_i2c_entry()) ) return true; |
2742 if ( b == CodeCache::find_blob(a->get_i2c_entry()) ) return true; |
2628 } |
2743 } |
2629 return false; |
2744 return false; |
2630 } |
2745 } |
2631 |
2746 |
2632 void AdapterHandlerLibrary::print_handler(CodeBlob* b) { |
2747 void AdapterHandlerLibrary::print_handler_on(outputStream* st, CodeBlob* b) { |
2633 AdapterHandlerTableIterator iter(_adapters); |
2748 AdapterHandlerTableIterator iter(_adapters); |
2634 while (iter.has_next()) { |
2749 while (iter.has_next()) { |
2635 AdapterHandlerEntry* a = iter.next(); |
2750 AdapterHandlerEntry* a = iter.next(); |
2636 if ( b == CodeCache::find_blob(a->get_i2c_entry()) ) { |
2751 if ( b == CodeCache::find_blob(a->get_i2c_entry()) ) { |
2637 tty->print("Adapter for signature: "); |
2752 st->print("Adapter for signature: "); |
2638 tty->print_cr("%s i2c: " INTPTR_FORMAT " c2i: " INTPTR_FORMAT " c2iUV: " INTPTR_FORMAT, |
2753 st->print_cr("%s i2c: " INTPTR_FORMAT " c2i: " INTPTR_FORMAT " c2iUV: " INTPTR_FORMAT, |
2639 a->fingerprint()->as_string(), |
2754 a->fingerprint()->as_string(), |
2640 a->get_i2c_entry(), a->get_c2i_entry(), a->get_c2i_unverified_entry()); |
2755 a->get_i2c_entry(), a->get_c2i_entry(), a->get_c2i_unverified_entry()); |
|
2756 |
2641 return; |
2757 return; |
2642 } |
2758 } |
2643 } |
2759 } |
2644 assert(false, "Should have found handler"); |
2760 assert(false, "Should have found handler"); |
2645 } |
2761 } |
|
2762 |
|
2763 #ifndef PRODUCT |
2646 |
2764 |
2647 void AdapterHandlerLibrary::print_statistics() { |
2765 void AdapterHandlerLibrary::print_statistics() { |
2648 _adapters->print_statistics(); |
2766 _adapters->print_statistics(); |
2649 } |
2767 } |
2650 |
2768 |