hotspot/src/cpu/x86/vm/jniFastGetField_x86_32.cpp
changeset 33589 7cbd1b2c139b
parent 14626 0cf4eccf130f
child 44088 fb5421685295
equal deleted inserted replaced
33580:c2d95df2c54e 33589:7cbd1b2c139b
    46 
    46 
    47 // Instead of issuing lfence for LoadLoad barrier, we create data dependency
    47 // Instead of issuing lfence for LoadLoad barrier, we create data dependency
    48 // between loads, which is much more efficient than lfence.
    48 // between loads, which is much more efficient than lfence.
    49 
    49 
    50 address JNI_FastGetField::generate_fast_get_int_field0(BasicType type) {
    50 address JNI_FastGetField::generate_fast_get_int_field0(BasicType type) {
    51   const char *name;
    51   const char *name = NULL;
    52   switch (type) {
    52   switch (type) {
    53     case T_BOOLEAN: name = "jni_fast_GetBooleanField"; break;
    53     case T_BOOLEAN: name = "jni_fast_GetBooleanField"; break;
    54     case T_BYTE:    name = "jni_fast_GetByteField";    break;
    54     case T_BYTE:    name = "jni_fast_GetByteField";    break;
    55     case T_CHAR:    name = "jni_fast_GetCharField";    break;
    55     case T_CHAR:    name = "jni_fast_GetCharField";    break;
    56     case T_SHORT:   name = "jni_fast_GetShortField";   break;
    56     case T_SHORT:   name = "jni_fast_GetShortField";   break;
   120   __ ret (3*wordSize);
   120   __ ret (3*wordSize);
   121 #endif
   121 #endif
   122 
   122 
   123   slowcase_entry_pclist[count++] = __ pc();
   123   slowcase_entry_pclist[count++] = __ pc();
   124   __ bind (slow);
   124   __ bind (slow);
   125   address slow_case_addr;
   125   address slow_case_addr = NULL;
   126   switch (type) {
   126   switch (type) {
   127     case T_BOOLEAN: slow_case_addr = jni_GetBooleanField_addr(); break;
   127     case T_BOOLEAN: slow_case_addr = jni_GetBooleanField_addr(); break;
   128     case T_BYTE:    slow_case_addr = jni_GetByteField_addr();    break;
   128     case T_BYTE:    slow_case_addr = jni_GetByteField_addr();    break;
   129     case T_CHAR:    slow_case_addr = jni_GetCharField_addr();    break;
   129     case T_CHAR:    slow_case_addr = jni_GetCharField_addr();    break;
   130     case T_SHORT:   slow_case_addr = jni_GetShortField_addr();   break;
   130     case T_SHORT:   slow_case_addr = jni_GetShortField_addr();   break;
   254   return os::win32::fast_jni_accessor_wrapper(T_LONG);
   254   return os::win32::fast_jni_accessor_wrapper(T_LONG);
   255 #endif
   255 #endif
   256 }
   256 }
   257 
   257 
   258 address JNI_FastGetField::generate_fast_get_float_field0(BasicType type) {
   258 address JNI_FastGetField::generate_fast_get_float_field0(BasicType type) {
   259   const char *name;
   259   const char *name = NULL;
   260   switch (type) {
   260   switch (type) {
   261     case T_FLOAT:  name = "jni_fast_GetFloatField";  break;
   261     case T_FLOAT:  name = "jni_fast_GetFloatField";  break;
   262     case T_DOUBLE: name = "jni_fast_GetDoubleField"; break;
   262     case T_DOUBLE: name = "jni_fast_GetDoubleField"; break;
   263     default:       ShouldNotReachHere();
   263     default:       ShouldNotReachHere();
   264   }
   264   }
   335   // invalid load. pop FPU stack.
   335   // invalid load. pop FPU stack.
   336   __ fstp_d (0);
   336   __ fstp_d (0);
   337 
   337 
   338   slowcase_entry_pclist[count++] = __ pc();
   338   slowcase_entry_pclist[count++] = __ pc();
   339   __ bind (slow);
   339   __ bind (slow);
   340   address slow_case_addr;
   340   address slow_case_addr = NULL;
   341   switch (type) {
   341   switch (type) {
   342     case T_FLOAT:  slow_case_addr = jni_GetFloatField_addr();  break;
   342     case T_FLOAT:  slow_case_addr = jni_GetFloatField_addr();  break;
   343     case T_DOUBLE: slow_case_addr = jni_GetDoubleField_addr(); break;
   343     case T_DOUBLE: slow_case_addr = jni_GetDoubleField_addr(); break;
   344     default:       ShouldNotReachHere();
   344     default:       ShouldNotReachHere();
   345   }
   345   }