1241 __ move(AT, diffbit); |
1241 __ move(AT, diffbit); |
1242 |
1242 |
1243 Label L_skip; |
1243 Label L_skip; |
1244 __ andr(AT, T9, AT); |
1244 __ andr(AT, T9, AT); |
1245 __ beq(AT, R0, L_skip); |
1245 __ beq(AT, R0, L_skip); |
1246 __ nop(); |
1246 __ delayed()->nop(); |
1247 __ andi(FSR, FSR, 0x1); |
1247 __ andi(FSR, FSR, 0x1); |
1248 __ bind(L_skip); |
1248 __ bind(L_skip); |
1249 |
1249 |
1250 if (UseLoongsonISA && Assembler::is_simm(arrayOopDesc::base_offset_in_bytes(T_BYTE), 8)) { |
1250 if (UseLoongsonISA && Assembler::is_simm(arrayOopDesc::base_offset_in_bytes(T_BYTE), 8)) { |
1251 __ gssbx(FSR, T2, SSR, arrayOopDesc::base_offset_in_bytes(T_BYTE)); |
1251 __ gssbx(FSR, T2, SSR, arrayOopDesc::base_offset_in_bytes(T_BYTE)); |
2007 |
2007 |
2008 // check if MethodCounters exists |
2008 // check if MethodCounters exists |
2009 Label has_counters; |
2009 Label has_counters; |
2010 __ ld(AT, T3, in_bytes(Method::method_counters_offset())); // use AT as MDO, TEMP |
2010 __ ld(AT, T3, in_bytes(Method::method_counters_offset())); // use AT as MDO, TEMP |
2011 __ bne(AT, R0, has_counters); |
2011 __ bne(AT, R0, has_counters); |
2012 __ nop(); |
2012 __ delayed()->nop(); |
2013 __ push(T3); |
2013 __ push(T3); |
2014 //__ push(A7); |
2014 //__ push(A7); |
2015 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::build_method_counters), |
2015 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::build_method_counters), |
2016 T3); |
2016 T3); |
2017 //__ pop(A7); |
2017 //__ pop(A7); |
2018 __ pop(T3); |
2018 __ pop(T3); |
2019 __ ld(AT, T3, in_bytes(Method::method_counters_offset())); // use AT as MDO, TEMP |
2019 __ ld(AT, T3, in_bytes(Method::method_counters_offset())); // use AT as MDO, TEMP |
2020 __ beq(AT, R0, dispatch); |
2020 __ beq(AT, R0, dispatch); |
2021 __ nop(); |
2021 __ delayed()->nop(); |
2022 __ bind(has_counters); |
2022 __ bind(has_counters); |
2023 |
2023 |
2024 // increment back edge counter |
2024 // increment back edge counter |
2025 __ ld(T1, T3, in_bytes(Method::method_counters_offset())); |
2025 __ ld(T1, T3, in_bytes(Method::method_counters_offset())); |
2026 __ lw(T0, T1, in_bytes(be_offset)); |
2026 __ lw(T0, T1, in_bytes(be_offset)); |
2841 __ move(scratch, 1 << ConstantPoolCacheEntry::is_volatile_shift); |
2841 __ move(scratch, 1 << ConstantPoolCacheEntry::is_volatile_shift); |
2842 __ andr(scratch, scratch, flags); |
2842 __ andr(scratch, scratch, flags); |
2843 |
2843 |
2844 Label notVolatile; |
2844 Label notVolatile; |
2845 __ beq(scratch, R0, notVolatile); |
2845 __ beq(scratch, R0, notVolatile); |
2846 __ nop(); |
2846 __ delayed()->nop(); |
2847 volatile_barrier(); |
2847 volatile_barrier(); |
2848 __ bind(notVolatile); |
2848 __ bind(notVolatile); |
2849 } |
2849 } |
2850 |
2850 |
2851 if (!is_static) pop_and_check_object(obj); |
2851 if (!is_static) pop_and_check_object(obj); |
3134 __ move(scratch, 1 << ConstantPoolCacheEntry::is_volatile_shift); |
3134 __ move(scratch, 1 << ConstantPoolCacheEntry::is_volatile_shift); |
3135 __ andr(scratch, scratch, flags); |
3135 __ andr(scratch, scratch, flags); |
3136 |
3136 |
3137 Label notVolatile; |
3137 Label notVolatile; |
3138 __ beq(scratch, R0, notVolatile); |
3138 __ beq(scratch, R0, notVolatile); |
3139 __ nop(); |
3139 __ delayed()->nop(); |
3140 volatile_barrier(); |
3140 volatile_barrier(); |
3141 __ bind(notVolatile); |
3141 __ bind(notVolatile); |
3142 } |
3142 } |
3143 |
3143 |
3144 |
3144 |
3430 __ move(scratch, 1 << ConstantPoolCacheEntry::is_volatile_shift); |
3430 __ move(scratch, 1 << ConstantPoolCacheEntry::is_volatile_shift); |
3431 __ andr(scratch, scratch, T1); |
3431 __ andr(scratch, scratch, T1); |
3432 |
3432 |
3433 Label notVolatile; |
3433 Label notVolatile; |
3434 __ beq(scratch, R0, notVolatile); |
3434 __ beq(scratch, R0, notVolatile); |
3435 __ nop(); |
3435 __ delayed()->nop(); |
3436 volatile_barrier(); |
3436 volatile_barrier(); |
3437 __ bind(notVolatile); |
3437 __ bind(notVolatile); |
3438 } |
3438 } |
3439 |
3439 |
3440 // Get object from stack |
3440 // Get object from stack |
3527 __ move(scratch, 1 << ConstantPoolCacheEntry::is_volatile_shift); |
3527 __ move(scratch, 1 << ConstantPoolCacheEntry::is_volatile_shift); |
3528 __ andr(scratch, scratch, AT); |
3528 __ andr(scratch, scratch, AT); |
3529 |
3529 |
3530 Label notVolatile; |
3530 Label notVolatile; |
3531 __ beq(scratch, R0, notVolatile); |
3531 __ beq(scratch, R0, notVolatile); |
3532 __ nop(); |
3532 __ delayed()->nop(); |
3533 volatile_barrier(); |
3533 volatile_barrier(); |
3534 __ bind(notVolatile); |
3534 __ bind(notVolatile); |
3535 } |
3535 } |
3536 |
3536 |
3537 // eax: object |
3537 // eax: object |
3605 __ move(scratch, 1 << ConstantPoolCacheEntry::is_volatile_shift); |
3605 __ move(scratch, 1 << ConstantPoolCacheEntry::is_volatile_shift); |
3606 __ andr(scratch, scratch, AT); |
3606 __ andr(scratch, scratch, AT); |
3607 |
3607 |
3608 Label notVolatile; |
3608 Label notVolatile; |
3609 __ beq(scratch, R0, notVolatile); |
3609 __ beq(scratch, R0, notVolatile); |
3610 __ nop(); |
3610 __ delayed()->nop(); |
3611 volatile_barrier(); |
3611 volatile_barrier(); |
3612 __ bind(notVolatile); |
3612 __ bind(notVolatile); |
3613 } |
3613 } |
3614 |
3614 |
3615 // make sure exception is reported in correct bcp range (getfield is |
3615 // make sure exception is reported in correct bcp range (getfield is |
4372 __ move(FSR, 1); |
4372 __ move(FSR, 1); |
4373 |
4373 |
4374 // Collect counts on whether this test sees NULLs a lot or not. |
4374 // Collect counts on whether this test sees NULLs a lot or not. |
4375 if (ProfileInterpreter) { |
4375 if (ProfileInterpreter) { |
4376 __ beq(R0, R0, done); |
4376 __ beq(R0, R0, done); |
4377 __ nop(); |
4377 __ delayed()->nop(); |
4378 __ bind(is_null); |
4378 __ bind(is_null); |
4379 __ profile_null_seen(T3); |
4379 __ profile_null_seen(T3); |
4380 } else { |
4380 } else { |
4381 __ bind(is_null); // same as 'done' |
4381 __ bind(is_null); // same as 'done' |
4382 } |
4382 } |