< prev index next >

src/hotspot/share/runtime/stubRoutines.hpp

Print this page
rev 50307 : [mq]: cont


 104   static address _atomic_xchg_long_entry;
 105   static address _atomic_store_entry;
 106   static address _atomic_cmpxchg_entry;
 107   static address _atomic_cmpxchg_byte_entry;
 108   static address _atomic_cmpxchg_long_entry;
 109   static address _atomic_add_entry;
 110   static address _atomic_add_long_entry;
 111   static address _fence_entry;
 112   static address _d2i_wrapper;
 113   static address _d2l_wrapper;
 114 
 115   static jint    _fpu_cntrl_wrd_std;
 116   static jint    _fpu_cntrl_wrd_24;
 117   static jint    _fpu_cntrl_wrd_64;
 118   static jint    _fpu_cntrl_wrd_trunc;
 119   static jint    _mxcsr_std;
 120   static jint    _fpu_subnormal_bias1[3];
 121   static jint    _fpu_subnormal_bias2[3];
 122 
 123   static BufferBlob* _code1;                               // code buffer for initial routines
 124   static BufferBlob* _code2;                               // code buffer for all other routines

 125 
 126   // Leaf routines which implement arraycopy and their addresses
 127   // arraycopy operands aligned on element type boundary
 128   static address _jbyte_arraycopy;
 129   static address _jshort_arraycopy;
 130   static address _jint_arraycopy;
 131   static address _jlong_arraycopy;
 132   static address _oop_arraycopy, _oop_arraycopy_uninit;
 133   static address _jbyte_disjoint_arraycopy;
 134   static address _jshort_disjoint_arraycopy;
 135   static address _jint_disjoint_arraycopy;
 136   static address _jlong_disjoint_arraycopy;
 137   static address _oop_disjoint_arraycopy, _oop_disjoint_arraycopy_uninit;
 138 
 139   // arraycopy operands aligned on zero'th element boundary
 140   // These are identical to the ones aligned aligned on an
 141   // element type boundary, except that they assume that both
 142   // source and destination are HeapWord aligned.
 143   static address _arrayof_jbyte_arraycopy;
 144   static address _arrayof_jshort_arraycopy;


 189 
 190   static address _multiplyToLen;
 191   static address _squareToLen;
 192   static address _mulAdd;
 193   static address _montgomeryMultiply;
 194   static address _montgomerySquare;
 195 
 196   static address _vectorizedMismatch;
 197 
 198   static address _dexp;
 199   static address _dlog;
 200   static address _dlog10;
 201   static address _dpow;
 202   static address _dsin;
 203   static address _dcos;
 204   static address _dlibm_sin_cos_huge;
 205   static address _dlibm_reduce_pi04l;
 206   static address _dlibm_tan_cot_huge;
 207   static address _dtan;
 208 






 209   // These are versions of the java.lang.Math methods which perform
 210   // the same operations as the intrinsic version.  They are used for
 211   // constant folding in the compiler to ensure equivalence.  If the
 212   // intrinsic version returns the same result as the strict version
 213   // then they can be set to the appropriate function from
 214   // SharedRuntime.
 215   static double (*_intrinsic_log10)(double);
 216   static double (*_intrinsic_pow)(double, double);
 217   static double (*_intrinsic_sin)(double);
 218   static double (*_intrinsic_cos)(double);
 219   static double (*_intrinsic_tan)(double);
 220 
 221   // Safefetch stubs.
 222   static address _safefetch32_entry;
 223   static address _safefetch32_fault_pc;
 224   static address _safefetch32_continuation_pc;
 225   static address _safefetchN_entry;
 226   static address _safefetchN_fault_pc;
 227   static address _safefetchN_continuation_pc;
 228 
 229  public:
 230   // Initialization/Testing
 231   static void    initialize1();                            // must happen before universe::genesis
 232   static void    initialize2();                            // must happen after  universe::genesis

 233 
 234   static bool is_stub_code(address addr)                   { return contains(addr); }
 235 
 236   static bool contains(address addr) {
 237     return
 238       (_code1 != NULL && _code1->blob_contains(addr)) ||
 239       (_code2 != NULL && _code2->blob_contains(addr)) ;
 240   }
 241 
 242   static RuntimeBlob* code1() { return _code1; }
 243   static RuntimeBlob* code2() { return _code2; }

 244 
 245   // Debugging
 246   static jint    verify_oop_count()                        { return _verify_oop_count; }
 247   static jint*   verify_oop_count_addr()                   { return &_verify_oop_count; }
 248   // a subroutine for debugging the GC
 249   static address verify_oop_subroutine_entry_address()     { return (address)&_verify_oop_subroutine_entry; }
 250 
 251   static address catch_exception_entry()                   { return _catch_exception_entry; }
 252 
 253   // Calls to Java
 254   typedef void (*CallStub)(
 255     address   link,
 256     intptr_t* result,
 257     BasicType result_type,
 258     Method* method,
 259     address   entry_point,
 260     intptr_t* parameters,
 261     int       size_of_parameters,
 262     TRAPS
 263   );


 364 
 365   static address multiplyToLen()       { return _multiplyToLen; }
 366   static address squareToLen()         { return _squareToLen; }
 367   static address mulAdd()              { return _mulAdd; }
 368   static address montgomeryMultiply()  { return _montgomeryMultiply; }
 369   static address montgomerySquare()    { return _montgomerySquare; }
 370 
 371   static address vectorizedMismatch()  { return _vectorizedMismatch; }
 372 
 373   static address dexp()                { return _dexp; }
 374   static address dlog()                { return _dlog; }
 375   static address dlog10()              { return _dlog10; }
 376   static address dpow()                { return _dpow; }
 377   static address dsin()                { return _dsin; }
 378   static address dcos()                { return _dcos; }
 379   static address dlibm_reduce_pi04l()  { return _dlibm_reduce_pi04l; }
 380   static address dlibm_sin_cos_huge()  { return _dlibm_sin_cos_huge; }
 381   static address dlibm_tan_cot_huge()  { return _dlibm_tan_cot_huge; }
 382   static address dtan()                { return _dtan; }
 383 







 384   static address select_fill_function(BasicType t, bool aligned, const char* &name);
 385 
 386   static address zero_aligned_words()  { return _zero_aligned_words; }
 387 
 388   static double  intrinsic_log10(double d) {
 389     assert(_intrinsic_log10 != NULL, "must be defined");
 390     return _intrinsic_log10(d);
 391   }
 392   static double  intrinsic_pow(double d, double d2) {
 393     assert(_intrinsic_pow != NULL, "must be defined");
 394     return _intrinsic_pow(d, d2);
 395   }
 396   static double  intrinsic_sin(double d) {
 397     assert(_intrinsic_sin != NULL, "must be defined");
 398     return _intrinsic_sin(d);
 399   }
 400   static double  intrinsic_cos(double d) {
 401     assert(_intrinsic_cos != NULL, "must be defined");
 402     return _intrinsic_cos(d);
 403   }




 104   static address _atomic_xchg_long_entry;
 105   static address _atomic_store_entry;
 106   static address _atomic_cmpxchg_entry;
 107   static address _atomic_cmpxchg_byte_entry;
 108   static address _atomic_cmpxchg_long_entry;
 109   static address _atomic_add_entry;
 110   static address _atomic_add_long_entry;
 111   static address _fence_entry;
 112   static address _d2i_wrapper;
 113   static address _d2l_wrapper;
 114 
 115   static jint    _fpu_cntrl_wrd_std;
 116   static jint    _fpu_cntrl_wrd_24;
 117   static jint    _fpu_cntrl_wrd_64;
 118   static jint    _fpu_cntrl_wrd_trunc;
 119   static jint    _mxcsr_std;
 120   static jint    _fpu_subnormal_bias1[3];
 121   static jint    _fpu_subnormal_bias2[3];
 122 
 123   static BufferBlob* _code1;                               // code buffer for initial routines
 124   static BufferBlob* _code2;                               
 125   static BufferBlob* _code3;                               // code buffer for all other routines
 126 
 127   // Leaf routines which implement arraycopy and their addresses
 128   // arraycopy operands aligned on element type boundary
 129   static address _jbyte_arraycopy;
 130   static address _jshort_arraycopy;
 131   static address _jint_arraycopy;
 132   static address _jlong_arraycopy;
 133   static address _oop_arraycopy, _oop_arraycopy_uninit;
 134   static address _jbyte_disjoint_arraycopy;
 135   static address _jshort_disjoint_arraycopy;
 136   static address _jint_disjoint_arraycopy;
 137   static address _jlong_disjoint_arraycopy;
 138   static address _oop_disjoint_arraycopy, _oop_disjoint_arraycopy_uninit;
 139 
 140   // arraycopy operands aligned on zero'th element boundary
 141   // These are identical to the ones aligned aligned on an
 142   // element type boundary, except that they assume that both
 143   // source and destination are HeapWord aligned.
 144   static address _arrayof_jbyte_arraycopy;
 145   static address _arrayof_jshort_arraycopy;


 190 
 191   static address _multiplyToLen;
 192   static address _squareToLen;
 193   static address _mulAdd;
 194   static address _montgomeryMultiply;
 195   static address _montgomerySquare;
 196 
 197   static address _vectorizedMismatch;
 198 
 199   static address _dexp;
 200   static address _dlog;
 201   static address _dlog10;
 202   static address _dpow;
 203   static address _dsin;
 204   static address _dcos;
 205   static address _dlibm_sin_cos_huge;
 206   static address _dlibm_reduce_pi04l;
 207   static address _dlibm_tan_cot_huge;
 208   static address _dtan;
 209 
 210   static address _cont_doYield;
 211   static address _cont_thaw;
 212   static address _cont_returnBarrier;
 213   static address _cont_getSP;
 214   static address _cont_getPC;
 215 
 216   // These are versions of the java.lang.Math methods which perform
 217   // the same operations as the intrinsic version.  They are used for
 218   // constant folding in the compiler to ensure equivalence.  If the
 219   // intrinsic version returns the same result as the strict version
 220   // then they can be set to the appropriate function from
 221   // SharedRuntime.
 222   static double (*_intrinsic_log10)(double);
 223   static double (*_intrinsic_pow)(double, double);
 224   static double (*_intrinsic_sin)(double);
 225   static double (*_intrinsic_cos)(double);
 226   static double (*_intrinsic_tan)(double);
 227 
 228   // Safefetch stubs.
 229   static address _safefetch32_entry;
 230   static address _safefetch32_fault_pc;
 231   static address _safefetch32_continuation_pc;
 232   static address _safefetchN_entry;
 233   static address _safefetchN_fault_pc;
 234   static address _safefetchN_continuation_pc;
 235 
 236  public:
 237   // Initialization/Testing
 238   static void    initialize1();                            // must happen before universe::genesis
 239   static void    initialize2();                            // must happen after  universe::genesis
 240   static void    initializeContinuationStubs();            // must happen after  universe::genesis
 241 
 242   static bool is_stub_code(address addr)                   { return contains(addr); }
 243 
 244   static bool contains(address addr) {
 245     return
 246       (_code1 != NULL && _code1->blob_contains(addr)) ||
 247       (_code2 != NULL && _code2->blob_contains(addr)) ;
 248   }
 249 
 250   static RuntimeBlob* code1() { return _code1; }
 251   static RuntimeBlob* code2() { return _code2; }
 252   static RuntimeBlob* code3() { return _code3; }
 253 
 254   // Debugging
 255   static jint    verify_oop_count()                        { return _verify_oop_count; }
 256   static jint*   verify_oop_count_addr()                   { return &_verify_oop_count; }
 257   // a subroutine for debugging the GC
 258   static address verify_oop_subroutine_entry_address()     { return (address)&_verify_oop_subroutine_entry; }
 259 
 260   static address catch_exception_entry()                   { return _catch_exception_entry; }
 261 
 262   // Calls to Java
 263   typedef void (*CallStub)(
 264     address   link,
 265     intptr_t* result,
 266     BasicType result_type,
 267     Method* method,
 268     address   entry_point,
 269     intptr_t* parameters,
 270     int       size_of_parameters,
 271     TRAPS
 272   );


 373 
 374   static address multiplyToLen()       { return _multiplyToLen; }
 375   static address squareToLen()         { return _squareToLen; }
 376   static address mulAdd()              { return _mulAdd; }
 377   static address montgomeryMultiply()  { return _montgomeryMultiply; }
 378   static address montgomerySquare()    { return _montgomerySquare; }
 379 
 380   static address vectorizedMismatch()  { return _vectorizedMismatch; }
 381 
 382   static address dexp()                { return _dexp; }
 383   static address dlog()                { return _dlog; }
 384   static address dlog10()              { return _dlog10; }
 385   static address dpow()                { return _dpow; }
 386   static address dsin()                { return _dsin; }
 387   static address dcos()                { return _dcos; }
 388   static address dlibm_reduce_pi04l()  { return _dlibm_reduce_pi04l; }
 389   static address dlibm_sin_cos_huge()  { return _dlibm_sin_cos_huge; }
 390   static address dlibm_tan_cot_huge()  { return _dlibm_tan_cot_huge; }
 391   static address dtan()                { return _dtan; }
 392 
 393   static address cont_doYield()        { return _cont_doYield; }
 394   static address cont_thaw()           { return _cont_thaw; }
 395   static address cont_returnBarrier()  { return _cont_returnBarrier; }
 396   static address cont_getSP()          { return _cont_getSP; }
 397   static address cont_getPC()          { return _cont_getPC; }
 398 
 399 
 400   static address select_fill_function(BasicType t, bool aligned, const char* &name);
 401 
 402   static address zero_aligned_words()  { return _zero_aligned_words; }
 403 
 404   static double  intrinsic_log10(double d) {
 405     assert(_intrinsic_log10 != NULL, "must be defined");
 406     return _intrinsic_log10(d);
 407   }
 408   static double  intrinsic_pow(double d, double d2) {
 409     assert(_intrinsic_pow != NULL, "must be defined");
 410     return _intrinsic_pow(d, d2);
 411   }
 412   static double  intrinsic_sin(double d) {
 413     assert(_intrinsic_sin != NULL, "must be defined");
 414     return _intrinsic_sin(d);
 415   }
 416   static double  intrinsic_cos(double d) {
 417     assert(_intrinsic_cos != NULL, "must be defined");
 418     return _intrinsic_cos(d);
 419   }


< prev index next >