src/share/vm/runtime/stubRoutines.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File g1-bulk-zeroing-reduction Sdiff src/share/vm/runtime

src/share/vm/runtime/stubRoutines.cpp

Print this page


   1 /*
   2  * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *


  63 address StubRoutines::_atomic_store_entry                       = NULL;
  64 address StubRoutines::_atomic_store_ptr_entry                   = NULL;
  65 address StubRoutines::_atomic_cmpxchg_entry                     = NULL;
  66 address StubRoutines::_atomic_cmpxchg_ptr_entry                 = NULL;
  67 address StubRoutines::_atomic_cmpxchg_long_entry                = NULL;
  68 address StubRoutines::_atomic_add_entry                         = NULL;
  69 address StubRoutines::_atomic_add_ptr_entry                     = NULL;
  70 address StubRoutines::_fence_entry                              = NULL;
  71 address StubRoutines::_d2i_wrapper                              = NULL;
  72 address StubRoutines::_d2l_wrapper                              = NULL;
  73 
  74 jint    StubRoutines::_fpu_cntrl_wrd_std                        = 0;
  75 jint    StubRoutines::_fpu_cntrl_wrd_24                         = 0;
  76 jint    StubRoutines::_fpu_cntrl_wrd_64                         = 0;
  77 jint    StubRoutines::_fpu_cntrl_wrd_trunc                      = 0;
  78 jint    StubRoutines::_mxcsr_std                                = 0;
  79 jint    StubRoutines::_fpu_subnormal_bias1[3]                   = { 0, 0, 0 };
  80 jint    StubRoutines::_fpu_subnormal_bias2[3]                   = { 0, 0, 0 };
  81 
  82 // Compiled code entry points default values
  83 // The dafault functions don't have separate disjoint versions.
  84 address StubRoutines::_jbyte_arraycopy          = CAST_FROM_FN_PTR(address, StubRoutines::jbyte_copy);
  85 address StubRoutines::_jshort_arraycopy         = CAST_FROM_FN_PTR(address, StubRoutines::jshort_copy);
  86 address StubRoutines::_jint_arraycopy           = CAST_FROM_FN_PTR(address, StubRoutines::jint_copy);
  87 address StubRoutines::_jlong_arraycopy          = CAST_FROM_FN_PTR(address, StubRoutines::jlong_copy);
  88 address StubRoutines::_oop_arraycopy            = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy);

  89 address StubRoutines::_jbyte_disjoint_arraycopy          = CAST_FROM_FN_PTR(address, StubRoutines::jbyte_copy);
  90 address StubRoutines::_jshort_disjoint_arraycopy         = CAST_FROM_FN_PTR(address, StubRoutines::jshort_copy);
  91 address StubRoutines::_jint_disjoint_arraycopy           = CAST_FROM_FN_PTR(address, StubRoutines::jint_copy);
  92 address StubRoutines::_jlong_disjoint_arraycopy          = CAST_FROM_FN_PTR(address, StubRoutines::jlong_copy);
  93 address StubRoutines::_oop_disjoint_arraycopy            = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy);

  94 
  95 address StubRoutines::_arrayof_jbyte_arraycopy  = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jbyte_copy);
  96 address StubRoutines::_arrayof_jshort_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jshort_copy);
  97 address StubRoutines::_arrayof_jint_arraycopy   = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jint_copy);
  98 address StubRoutines::_arrayof_jlong_arraycopy  = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jlong_copy);
  99 address StubRoutines::_arrayof_oop_arraycopy    = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy);

 100 address StubRoutines::_arrayof_jbyte_disjoint_arraycopy  = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jbyte_copy);
 101 address StubRoutines::_arrayof_jshort_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jshort_copy);
 102 address StubRoutines::_arrayof_jint_disjoint_arraycopy   = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jint_copy);
 103 address StubRoutines::_arrayof_jlong_disjoint_arraycopy  = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jlong_copy);
 104 address StubRoutines::_arrayof_oop_disjoint_arraycopy  = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy);


 105 
 106 address StubRoutines::_checkcast_arraycopy               = NULL;

 107 address StubRoutines::_unsafe_arraycopy                  = NULL;
 108 address StubRoutines::_generic_arraycopy                 = NULL;
 109 
 110 
 111 address StubRoutines::_jbyte_fill;
 112 address StubRoutines::_jshort_fill;
 113 address StubRoutines::_jint_fill;
 114 address StubRoutines::_arrayof_jbyte_fill;
 115 address StubRoutines::_arrayof_jshort_fill;
 116 address StubRoutines::_arrayof_jint_fill;
 117 
 118 
 119 double (* StubRoutines::_intrinsic_log   )(double) = NULL;
 120 double (* StubRoutines::_intrinsic_log10 )(double) = NULL;
 121 double (* StubRoutines::_intrinsic_exp   )(double) = NULL;
 122 double (* StubRoutines::_intrinsic_pow   )(double, double) = NULL;
 123 double (* StubRoutines::_intrinsic_sin   )(double) = NULL;
 124 double (* StubRoutines::_intrinsic_cos   )(double) = NULL;
 125 double (* StubRoutines::_intrinsic_tan   )(double) = NULL;
 126 


 318   Copy::conjoint_jints_atomic(src, dest, count);
 319 JRT_END
 320 
 321 JRT_LEAF(void, StubRoutines::jlong_copy(jlong* src, jlong* dest, size_t count))
 322 #ifndef PRODUCT
 323   SharedRuntime::_jlong_array_copy_ctr++;      // Slow-path long/double array copy
 324 #endif // !PRODUCT
 325   Copy::conjoint_jlongs_atomic(src, dest, count);
 326 JRT_END
 327 
 328 JRT_LEAF(void, StubRoutines::oop_copy(oop* src, oop* dest, size_t count))
 329 #ifndef PRODUCT
 330   SharedRuntime::_oop_array_copy_ctr++;        // Slow-path oop array copy
 331 #endif // !PRODUCT
 332   assert(count != 0, "count should be non-zero");
 333   gen_arraycopy_barrier_pre(dest, count);
 334   Copy::conjoint_oops_atomic(src, dest, count);
 335   gen_arraycopy_barrier(dest, count);
 336 JRT_END
 337 









 338 JRT_LEAF(void, StubRoutines::arrayof_jbyte_copy(HeapWord* src, HeapWord* dest, size_t count))
 339 #ifndef PRODUCT
 340   SharedRuntime::_jbyte_array_copy_ctr++;      // Slow-path byte array copy
 341 #endif // !PRODUCT
 342   Copy::arrayof_conjoint_jbytes(src, dest, count);
 343 JRT_END
 344 
 345 JRT_LEAF(void, StubRoutines::arrayof_jshort_copy(HeapWord* src, HeapWord* dest, size_t count))
 346 #ifndef PRODUCT
 347   SharedRuntime::_jshort_array_copy_ctr++;     // Slow-path short/char array copy
 348 #endif // !PRODUCT
 349   Copy::arrayof_conjoint_jshorts(src, dest, count);
 350 JRT_END
 351 
 352 JRT_LEAF(void, StubRoutines::arrayof_jint_copy(HeapWord* src, HeapWord* dest, size_t count))
 353 #ifndef PRODUCT
 354   SharedRuntime::_jint_array_copy_ctr++;       // Slow-path int/float array copy
 355 #endif // !PRODUCT
 356   Copy::arrayof_conjoint_jints(src, dest, count);
 357 JRT_END
 358 
 359 JRT_LEAF(void, StubRoutines::arrayof_jlong_copy(HeapWord* src, HeapWord* dest, size_t count))
 360 #ifndef PRODUCT
 361   SharedRuntime::_jlong_array_copy_ctr++;       // Slow-path int/float array copy
 362 #endif // !PRODUCT
 363   Copy::arrayof_conjoint_jlongs(src, dest, count);
 364 JRT_END
 365 
 366 JRT_LEAF(void, StubRoutines::arrayof_oop_copy(HeapWord* src, HeapWord* dest, size_t count))
 367 #ifndef PRODUCT
 368   SharedRuntime::_oop_array_copy_ctr++;        // Slow-path oop array copy
 369 #endif // !PRODUCT
 370   assert(count != 0, "count should be non-zero");
 371   gen_arraycopy_barrier_pre((oop *) dest, count);
 372   Copy::arrayof_conjoint_oops(src, dest, count);
 373   gen_arraycopy_barrier((oop *) dest, count);
 374 JRT_END
 375 








 376 
 377 address StubRoutines::select_fill_function(BasicType t, bool aligned, const char* &name) {
 378 #define RETURN_STUB(xxx_fill) { \
 379   name = #xxx_fill; \
 380   return StubRoutines::xxx_fill(); }
 381 
 382   switch (t) {
 383   case T_BYTE:
 384   case T_BOOLEAN:
 385     if (!aligned) RETURN_STUB(jbyte_fill);
 386     RETURN_STUB(arrayof_jbyte_fill);
 387   case T_CHAR:
 388   case T_SHORT:
 389     if (!aligned) RETURN_STUB(jshort_fill);
 390     RETURN_STUB(arrayof_jshort_fill);
 391   case T_INT:
 392   case T_FLOAT:
 393     if (!aligned) RETURN_STUB(jint_fill);
 394     RETURN_STUB(arrayof_jint_fill);
 395   case T_DOUBLE:
   1 /*
   2  * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *


  63 address StubRoutines::_atomic_store_entry                       = NULL;
  64 address StubRoutines::_atomic_store_ptr_entry                   = NULL;
  65 address StubRoutines::_atomic_cmpxchg_entry                     = NULL;
  66 address StubRoutines::_atomic_cmpxchg_ptr_entry                 = NULL;
  67 address StubRoutines::_atomic_cmpxchg_long_entry                = NULL;
  68 address StubRoutines::_atomic_add_entry                         = NULL;
  69 address StubRoutines::_atomic_add_ptr_entry                     = NULL;
  70 address StubRoutines::_fence_entry                              = NULL;
  71 address StubRoutines::_d2i_wrapper                              = NULL;
  72 address StubRoutines::_d2l_wrapper                              = NULL;
  73 
  74 jint    StubRoutines::_fpu_cntrl_wrd_std                        = 0;
  75 jint    StubRoutines::_fpu_cntrl_wrd_24                         = 0;
  76 jint    StubRoutines::_fpu_cntrl_wrd_64                         = 0;
  77 jint    StubRoutines::_fpu_cntrl_wrd_trunc                      = 0;
  78 jint    StubRoutines::_mxcsr_std                                = 0;
  79 jint    StubRoutines::_fpu_subnormal_bias1[3]                   = { 0, 0, 0 };
  80 jint    StubRoutines::_fpu_subnormal_bias2[3]                   = { 0, 0, 0 };
  81 
  82 // Compiled code entry points default values
  83 // The default functions don't have separate disjoint versions.
  84 address StubRoutines::_jbyte_arraycopy          = CAST_FROM_FN_PTR(address, StubRoutines::jbyte_copy);
  85 address StubRoutines::_jshort_arraycopy         = CAST_FROM_FN_PTR(address, StubRoutines::jshort_copy);
  86 address StubRoutines::_jint_arraycopy           = CAST_FROM_FN_PTR(address, StubRoutines::jint_copy);
  87 address StubRoutines::_jlong_arraycopy          = CAST_FROM_FN_PTR(address, StubRoutines::jlong_copy);
  88 address StubRoutines::_oop_arraycopy            = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy);
  89 address StubRoutines::_oop_arraycopy_no_pre     = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy_no_pre);
  90 address StubRoutines::_jbyte_disjoint_arraycopy          = CAST_FROM_FN_PTR(address, StubRoutines::jbyte_copy);
  91 address StubRoutines::_jshort_disjoint_arraycopy         = CAST_FROM_FN_PTR(address, StubRoutines::jshort_copy);
  92 address StubRoutines::_jint_disjoint_arraycopy           = CAST_FROM_FN_PTR(address, StubRoutines::jint_copy);
  93 address StubRoutines::_jlong_disjoint_arraycopy          = CAST_FROM_FN_PTR(address, StubRoutines::jlong_copy);
  94 address StubRoutines::_oop_disjoint_arraycopy            = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy);
  95 address StubRoutines::_oop_disjoint_arraycopy_no_pre     = CAST_FROM_FN_PTR(address, StubRoutines::oop_copy_no_pre);
  96 
  97 address StubRoutines::_arrayof_jbyte_arraycopy  = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jbyte_copy);
  98 address StubRoutines::_arrayof_jshort_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jshort_copy);
  99 address StubRoutines::_arrayof_jint_arraycopy   = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jint_copy);
 100 address StubRoutines::_arrayof_jlong_arraycopy  = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jlong_copy);
 101 address StubRoutines::_arrayof_oop_arraycopy    = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy);
 102 address StubRoutines::_arrayof_oop_arraycopy_no_pre      = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy_no_pre);
 103 address StubRoutines::_arrayof_jbyte_disjoint_arraycopy  = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jbyte_copy);
 104 address StubRoutines::_arrayof_jshort_disjoint_arraycopy = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jshort_copy);
 105 address StubRoutines::_arrayof_jint_disjoint_arraycopy   = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jint_copy);
 106 address StubRoutines::_arrayof_jlong_disjoint_arraycopy  = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_jlong_copy);
 107 address StubRoutines::_arrayof_oop_disjoint_arraycopy    = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy);
 108 address StubRoutines::_arrayof_oop_disjoint_arraycopy_no_pre  = CAST_FROM_FN_PTR(address, StubRoutines::arrayof_oop_copy_no_pre);
 109 
 110 
 111 address StubRoutines::_checkcast_arraycopy               = NULL;
 112 address StubRoutines::_checkcast_arraycopy_no_pre        = NULL;
 113 address StubRoutines::_unsafe_arraycopy                  = NULL;
 114 address StubRoutines::_generic_arraycopy                 = NULL;
 115 
 116 
 117 address StubRoutines::_jbyte_fill;
 118 address StubRoutines::_jshort_fill;
 119 address StubRoutines::_jint_fill;
 120 address StubRoutines::_arrayof_jbyte_fill;
 121 address StubRoutines::_arrayof_jshort_fill;
 122 address StubRoutines::_arrayof_jint_fill;
 123 
 124 
 125 double (* StubRoutines::_intrinsic_log   )(double) = NULL;
 126 double (* StubRoutines::_intrinsic_log10 )(double) = NULL;
 127 double (* StubRoutines::_intrinsic_exp   )(double) = NULL;
 128 double (* StubRoutines::_intrinsic_pow   )(double, double) = NULL;
 129 double (* StubRoutines::_intrinsic_sin   )(double) = NULL;
 130 double (* StubRoutines::_intrinsic_cos   )(double) = NULL;
 131 double (* StubRoutines::_intrinsic_tan   )(double) = NULL;
 132 


 324   Copy::conjoint_jints_atomic(src, dest, count);
 325 JRT_END
 326 
 327 JRT_LEAF(void, StubRoutines::jlong_copy(jlong* src, jlong* dest, size_t count))
 328 #ifndef PRODUCT
 329   SharedRuntime::_jlong_array_copy_ctr++;      // Slow-path long/double array copy
 330 #endif // !PRODUCT
 331   Copy::conjoint_jlongs_atomic(src, dest, count);
 332 JRT_END
 333 
 334 JRT_LEAF(void, StubRoutines::oop_copy(oop* src, oop* dest, size_t count))
 335 #ifndef PRODUCT
 336   SharedRuntime::_oop_array_copy_ctr++;        // Slow-path oop array copy
 337 #endif // !PRODUCT
 338   assert(count != 0, "count should be non-zero");
 339   gen_arraycopy_barrier_pre(dest, count);
 340   Copy::conjoint_oops_atomic(src, dest, count);
 341   gen_arraycopy_barrier(dest, count);
 342 JRT_END
 343 
 344 JRT_LEAF(void, StubRoutines::oop_copy_no_pre(oop* src, oop* dest, size_t count))
 345 #ifndef PRODUCT
 346   SharedRuntime::_oop_array_copy_ctr++;        // Slow-path oop array copy
 347 #endif // !PRODUCT
 348   assert(count != 0, "count should be non-zero");
 349   Copy::conjoint_oops_atomic(src, dest, count);
 350   gen_arraycopy_barrier(dest, count);
 351 JRT_END
 352 
 353 JRT_LEAF(void, StubRoutines::arrayof_jbyte_copy(HeapWord* src, HeapWord* dest, size_t count))
 354 #ifndef PRODUCT
 355   SharedRuntime::_jbyte_array_copy_ctr++;      // Slow-path byte array copy
 356 #endif // !PRODUCT
 357   Copy::arrayof_conjoint_jbytes(src, dest, count);
 358 JRT_END
 359 
 360 JRT_LEAF(void, StubRoutines::arrayof_jshort_copy(HeapWord* src, HeapWord* dest, size_t count))
 361 #ifndef PRODUCT
 362   SharedRuntime::_jshort_array_copy_ctr++;     // Slow-path short/char array copy
 363 #endif // !PRODUCT
 364   Copy::arrayof_conjoint_jshorts(src, dest, count);
 365 JRT_END
 366 
 367 JRT_LEAF(void, StubRoutines::arrayof_jint_copy(HeapWord* src, HeapWord* dest, size_t count))
 368 #ifndef PRODUCT
 369   SharedRuntime::_jint_array_copy_ctr++;       // Slow-path int/float array copy
 370 #endif // !PRODUCT
 371   Copy::arrayof_conjoint_jints(src, dest, count);
 372 JRT_END
 373 
 374 JRT_LEAF(void, StubRoutines::arrayof_jlong_copy(HeapWord* src, HeapWord* dest, size_t count))
 375 #ifndef PRODUCT
 376   SharedRuntime::_jlong_array_copy_ctr++;       // Slow-path int/float array copy
 377 #endif // !PRODUCT
 378   Copy::arrayof_conjoint_jlongs(src, dest, count);
 379 JRT_END
 380 
 381 JRT_LEAF(void, StubRoutines::arrayof_oop_copy(HeapWord* src, HeapWord* dest, size_t count))
 382 #ifndef PRODUCT
 383   SharedRuntime::_oop_array_copy_ctr++;        // Slow-path oop array copy
 384 #endif // !PRODUCT
 385   assert(count != 0, "count should be non-zero");
 386   gen_arraycopy_barrier_pre((oop *) dest, count);
 387   Copy::arrayof_conjoint_oops(src, dest, count);
 388   gen_arraycopy_barrier((oop *) dest, count);
 389 JRT_END
 390 
 391 JRT_LEAF(void, StubRoutines::arrayof_oop_copy_no_pre(HeapWord* src, HeapWord* dest, size_t count))
 392 #ifndef PRODUCT
 393   SharedRuntime::_oop_array_copy_ctr++;        // Slow-path oop array copy
 394 #endif // !PRODUCT
 395   assert(count != 0, "count should be non-zero");
 396   Copy::arrayof_conjoint_oops(src, dest, count);
 397   gen_arraycopy_barrier((oop *) dest, count);
 398 JRT_END
 399 
 400 address StubRoutines::select_fill_function(BasicType t, bool aligned, const char* &name) {
 401 #define RETURN_STUB(xxx_fill) { \
 402   name = #xxx_fill; \
 403   return StubRoutines::xxx_fill(); }
 404 
 405   switch (t) {
 406   case T_BYTE:
 407   case T_BOOLEAN:
 408     if (!aligned) RETURN_STUB(jbyte_fill);
 409     RETURN_STUB(arrayof_jbyte_fill);
 410   case T_CHAR:
 411   case T_SHORT:
 412     if (!aligned) RETURN_STUB(jshort_fill);
 413     RETURN_STUB(arrayof_jshort_fill);
 414   case T_INT:
 415   case T_FLOAT:
 416     if (!aligned) RETURN_STUB(jint_fill);
 417     RETURN_STUB(arrayof_jint_fill);
 418   case T_DOUBLE:
src/share/vm/runtime/stubRoutines.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File