equal
deleted
inserted
replaced
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 } |