src/cpu/mips/vm/templateTable_mips_64.cpp

changeset 9144
cecfc245b19a
parent 9135
69fd39209afe
child 9205
cce12244eb8c
equal deleted inserted replaced
9143:239e32ede77d 9144:cecfc245b19a
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
3325 __ bind(Done); 3325 __ bind(Done);
3326 3326
3327 { 3327 {
3328 Label notVolatile; 3328 Label notVolatile;
3329 __ beq(scratch, R0, notVolatile); 3329 __ beq(scratch, R0, notVolatile);
3330 __ nop(); 3330 __ delayed()->nop();
3331 volatile_barrier(); 3331 volatile_barrier();
3332 __ bind(notVolatile); 3332 __ bind(notVolatile);
3333 } 3333 }
3334 } 3334 }
3335 3335
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
3477 } 3477 }
3478 3478
3479 { 3479 {
3480 Label notVolatile; 3480 Label notVolatile;
3481 __ beq(scratch, R0, notVolatile); 3481 __ beq(scratch, R0, notVolatile);
3482 __ nop(); 3482 __ delayed()->nop();
3483 volatile_barrier(); 3483 volatile_barrier();
3484 __ bind(notVolatile); 3484 __ bind(notVolatile);
3485 } 3485 }
3486 } 3486 }
3487 3487
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
3573 } 3573 }
3574 3574
3575 { 3575 {
3576 Label notVolatile; 3576 Label notVolatile;
3577 __ beq(scratch, R0, notVolatile); 3577 __ beq(scratch, R0, notVolatile);
3578 __ nop(); 3578 __ delayed()->nop();
3579 volatile_barrier(); 3579 volatile_barrier();
3580 __ bind(notVolatile); 3580 __ bind(notVolatile);
3581 } 3581 }
3582 } 3582 }
3583 3583
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
3631 __ daddi(BCP, BCP, -1); 3631 __ daddi(BCP, BCP, -1);
3632 3632
3633 { 3633 {
3634 Label notVolatile; 3634 Label notVolatile;
3635 __ beq(scratch, R0, notVolatile); 3635 __ beq(scratch, R0, notVolatile);
3636 __ nop(); 3636 __ delayed()->nop();
3637 volatile_barrier(); 3637 volatile_barrier();
3638 __ bind(notVolatile); 3638 __ bind(notVolatile);
3639 } 3639 }
3640 } 3640 }
3641 3641
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 }

mercurial