138 } else { |
138 } else { |
139 __ leal(rdx, obj); |
139 __ leal(rdx, obj); |
140 } |
140 } |
141 __ get_thread(rcx); |
141 __ get_thread(rcx); |
142 __ save_bcp(); |
142 __ save_bcp(); |
143 __ g1_write_barrier_pre(rdx, rcx, rsi, rbx, val != noreg); |
143 __ g1_write_barrier_pre(rdx /* obj */, |
|
144 rbx /* pre_val */, |
|
145 rcx /* thread */, |
|
146 rsi /* tmp */, |
|
147 val != noreg /* tosca_live */, |
|
148 false /* expand_call */); |
144 |
149 |
145 // Do the actual store |
150 // Do the actual store |
146 // noreg means NULL |
151 // noreg means NULL |
147 if (val == noreg) { |
152 if (val == noreg) { |
148 __ movptr(Address(rdx, 0), NULL_WORD); |
153 __ movptr(Address(rdx, 0), NULL_WORD); |
149 // No post barrier for NULL |
154 // No post barrier for NULL |
150 } else { |
155 } else { |
151 __ movl(Address(rdx, 0), val); |
156 __ movl(Address(rdx, 0), val); |
152 __ g1_write_barrier_post(rdx, rax, rcx, rbx, rsi); |
157 __ g1_write_barrier_post(rdx /* store_adr */, |
|
158 val /* new_val */, |
|
159 rcx /* thread */, |
|
160 rbx /* tmp */, |
|
161 rsi /* tmp2 */); |
153 } |
162 } |
154 __ restore_bcp(); |
163 __ restore_bcp(); |
155 |
164 |
156 } |
165 } |
157 break; |
166 break; |