< prev index next >

src/cpu/x86/vm/jniFastGetField_x86_64.cpp

Print this page




 104     // ca is data dependent on rax.
 105     __ xorptr(rcounter_addr, rax);
 106     __ xorptr(rcounter_addr, rax);
 107     __ cmpl (rcounter, Address(rcounter_addr, 0));
 108   } else {
 109     __ cmp32 (rcounter, counter);
 110   }
 111   __ jcc (Assembler::notEqual, slow);
 112 
 113   __ ret (0);
 114 
 115   slowcase_entry_pclist[count++] = __ pc();
 116   __ bind (slow);
 117   address slow_case_addr = NULL;
 118   switch (type) {
 119     case T_BOOLEAN: slow_case_addr = jni_GetBooleanField_addr(); break;
 120     case T_BYTE:    slow_case_addr = jni_GetByteField_addr();    break;
 121     case T_CHAR:    slow_case_addr = jni_GetCharField_addr();    break;
 122     case T_SHORT:   slow_case_addr = jni_GetShortField_addr();   break;
 123     case T_INT:     slow_case_addr = jni_GetIntField_addr();     break;
 124     case T_LONG:    slow_case_addr = jni_GetLongField_addr();

 125   }
 126   // tail call
 127   __ jump (ExternalAddress(slow_case_addr));
 128 
 129   __ flush ();
 130 
 131   return fast_entry;
 132 }
 133 
 134 address JNI_FastGetField::generate_fast_get_boolean_field() {
 135   return generate_fast_get_int_field0(T_BOOLEAN);
 136 }
 137 
 138 address JNI_FastGetField::generate_fast_get_byte_field() {
 139   return generate_fast_get_int_field0(T_BYTE);
 140 }
 141 
 142 address JNI_FastGetField::generate_fast_get_char_field() {
 143   return generate_fast_get_int_field0(T_CHAR);
 144 }


 198 
 199   if (os::is_MP()) {
 200     __ lea(rcounter_addr, counter);
 201     __ movdq (rax, xmm0);
 202     // counter address is data dependent on xmm0.
 203     __ xorptr(rcounter_addr, rax);
 204     __ xorptr(rcounter_addr, rax);
 205     __ cmpl (rcounter, Address(rcounter_addr, 0));
 206   } else {
 207     __ cmp32 (rcounter, counter);
 208   }
 209   __ jcc (Assembler::notEqual, slow);
 210 
 211   __ ret (0);
 212 
 213   slowcase_entry_pclist[count++] = __ pc();
 214   __ bind (slow);
 215   address slow_case_addr = NULL;
 216   switch (type) {
 217     case T_FLOAT:     slow_case_addr = jni_GetFloatField_addr();  break;
 218     case T_DOUBLE:    slow_case_addr = jni_GetDoubleField_addr();

 219   }
 220   // tail call
 221   __ jump (ExternalAddress(slow_case_addr));
 222 
 223   __ flush ();
 224 
 225   return fast_entry;
 226 }
 227 
 228 address JNI_FastGetField::generate_fast_get_float_field() {
 229   return generate_fast_get_float_field0(T_FLOAT);
 230 }
 231 
 232 address JNI_FastGetField::generate_fast_get_double_field() {
 233   return generate_fast_get_float_field0(T_DOUBLE);
 234 }


 104     // ca is data dependent on rax.
 105     __ xorptr(rcounter_addr, rax);
 106     __ xorptr(rcounter_addr, rax);
 107     __ cmpl (rcounter, Address(rcounter_addr, 0));
 108   } else {
 109     __ cmp32 (rcounter, counter);
 110   }
 111   __ jcc (Assembler::notEqual, slow);
 112 
 113   __ ret (0);
 114 
 115   slowcase_entry_pclist[count++] = __ pc();
 116   __ bind (slow);
 117   address slow_case_addr = NULL;
 118   switch (type) {
 119     case T_BOOLEAN: slow_case_addr = jni_GetBooleanField_addr(); break;
 120     case T_BYTE:    slow_case_addr = jni_GetByteField_addr();    break;
 121     case T_CHAR:    slow_case_addr = jni_GetCharField_addr();    break;
 122     case T_SHORT:   slow_case_addr = jni_GetShortField_addr();   break;
 123     case T_INT:     slow_case_addr = jni_GetIntField_addr();     break;
 124     case T_LONG:    slow_case_addr = jni_GetLongField_addr();    break;
 125     default:                                                     break;
 126   }
 127   // tail call
 128   __ jump (ExternalAddress(slow_case_addr));
 129 
 130   __ flush ();
 131 
 132   return fast_entry;
 133 }
 134 
 135 address JNI_FastGetField::generate_fast_get_boolean_field() {
 136   return generate_fast_get_int_field0(T_BOOLEAN);
 137 }
 138 
 139 address JNI_FastGetField::generate_fast_get_byte_field() {
 140   return generate_fast_get_int_field0(T_BYTE);
 141 }
 142 
 143 address JNI_FastGetField::generate_fast_get_char_field() {
 144   return generate_fast_get_int_field0(T_CHAR);
 145 }


 199 
 200   if (os::is_MP()) {
 201     __ lea(rcounter_addr, counter);
 202     __ movdq (rax, xmm0);
 203     // counter address is data dependent on xmm0.
 204     __ xorptr(rcounter_addr, rax);
 205     __ xorptr(rcounter_addr, rax);
 206     __ cmpl (rcounter, Address(rcounter_addr, 0));
 207   } else {
 208     __ cmp32 (rcounter, counter);
 209   }
 210   __ jcc (Assembler::notEqual, slow);
 211 
 212   __ ret (0);
 213 
 214   slowcase_entry_pclist[count++] = __ pc();
 215   __ bind (slow);
 216   address slow_case_addr = NULL;
 217   switch (type) {
 218     case T_FLOAT:     slow_case_addr = jni_GetFloatField_addr();  break;
 219     case T_DOUBLE:    slow_case_addr = jni_GetDoubleField_addr(); break;
 220     default:                                                      break;
 221   }
 222   // tail call
 223   __ jump (ExternalAddress(slow_case_addr));
 224 
 225   __ flush ();
 226 
 227   return fast_entry;
 228 }
 229 
 230 address JNI_FastGetField::generate_fast_get_float_field() {
 231   return generate_fast_get_float_field0(T_FLOAT);
 232 }
 233 
 234 address JNI_FastGetField::generate_fast_get_double_field() {
 235   return generate_fast_get_float_field0(T_DOUBLE);
 236 }
< prev index next >