src/cpu/x86/vm/templateTable_x86_32.cpp

Print this page




 120 #ifndef SERIALGC
 121     case BarrierSet::G1SATBCT:
 122     case BarrierSet::G1SATBCTLogging:
 123       {
 124         // flatten object address if needed
 125         // We do it regardless of precise because we need the registers
 126         if (obj.index() == noreg && obj.disp() == 0) {
 127           if (obj.base() != rdx) {
 128             __ movl(rdx, obj.base());
 129           }
 130         } else {
 131           __ leal(rdx, obj);
 132         }
 133         __ get_thread(rcx);
 134         __ save_bcp();
 135         __ g1_write_barrier_pre(rdx, rcx, rsi, rbx, val != noreg);
 136 
 137         // Do the actual store
 138         // noreg means NULL
 139         if (val == noreg) {
 140           __ movl(Address(rdx, 0), NULL_WORD);
 141           // No post barrier for NULL
 142         } else {
 143           __ movl(Address(rdx, 0), val);
 144           __ g1_write_barrier_post(rdx, rax, rcx, rbx, rsi);
 145         }
 146         __ restore_bcp();
 147 
 148       }
 149       break;
 150 #endif // SERIALGC
 151     case BarrierSet::CardTableModRef:
 152     case BarrierSet::CardTableExtension:
 153       {
 154         if (val == noreg) {
 155           __ movl(obj, NULL_WORD);
 156         } else {
 157           __ movl(obj, val);
 158           // flatten object address if needed
 159           if (!precise || (obj.index() == noreg && obj.disp() == 0)) {
 160             __ store_check(obj.base());




 120 #ifndef SERIALGC
 121     case BarrierSet::G1SATBCT:
 122     case BarrierSet::G1SATBCTLogging:
 123       {
 124         // flatten object address if needed
 125         // We do it regardless of precise because we need the registers
 126         if (obj.index() == noreg && obj.disp() == 0) {
 127           if (obj.base() != rdx) {
 128             __ movl(rdx, obj.base());
 129           }
 130         } else {
 131           __ leal(rdx, obj);
 132         }
 133         __ get_thread(rcx);
 134         __ save_bcp();
 135         __ g1_write_barrier_pre(rdx, rcx, rsi, rbx, val != noreg);
 136 
 137         // Do the actual store
 138         // noreg means NULL
 139         if (val == noreg) {
 140           __ movl(Address(rdx, 0), (int32_t)NULL_WORD);
 141           // No post barrier for NULL
 142         } else {
 143           __ movl(Address(rdx, 0), val);
 144           __ g1_write_barrier_post(rdx, rax, rcx, rbx, rsi);
 145         }
 146         __ restore_bcp();
 147 
 148       }
 149       break;
 150 #endif // SERIALGC
 151     case BarrierSet::CardTableModRef:
 152     case BarrierSet::CardTableExtension:
 153       {
 154         if (val == noreg) {
 155           __ movl(obj, NULL_WORD);
 156         } else {
 157           __ movl(obj, val);
 158           // flatten object address if needed
 159           if (!precise || (obj.index() == noreg && obj.disp() == 0)) {
 160             __ store_check(obj.base());