comparison src/cpu/x86/vm/jniFastGetField_x86_64.cpp @ 304:dc7f315e41f7

5108146: Merge i486 and amd64 cpu directories 6459804: Want client (c1) compiler for x86_64 (amd64) for faster start-up Reviewed-by: kvn
author never
date Wed, 27 Aug 2008 00:21:55 -0700
parents a61af66fc99e
children 9ee9cf798b59
comparison
equal deleted inserted replaced
303:fa4d1d240383 304:dc7f315e41f7
65 65
66 Label slow; 66 Label slow;
67 67
68 ExternalAddress counter(SafepointSynchronize::safepoint_counter_addr()); 68 ExternalAddress counter(SafepointSynchronize::safepoint_counter_addr());
69 __ mov32 (rcounter, counter); 69 __ mov32 (rcounter, counter);
70 __ movq (robj, c_rarg1); 70 __ mov (robj, c_rarg1);
71 __ testb (rcounter, 1); 71 __ testb (rcounter, 1);
72 __ jcc (Assembler::notZero, slow); 72 __ jcc (Assembler::notZero, slow);
73 if (os::is_MP()) { 73 if (os::is_MP()) {
74 __ xorq (robj, rcounter); 74 __ xorptr(robj, rcounter);
75 __ xorq (robj, rcounter); // obj, since 75 __ xorptr(robj, rcounter); // obj, since
76 // robj ^ rcounter ^ rcounter == robj 76 // robj ^ rcounter ^ rcounter == robj
77 // robj is data dependent on rcounter. 77 // robj is data dependent on rcounter.
78 } 78 }
79 __ movq (robj, Address(robj, 0)); // *obj 79 __ movptr(robj, Address(robj, 0)); // *obj
80 __ movq (roffset, c_rarg2); 80 __ mov (roffset, c_rarg2);
81 __ shrq (roffset, 2); // offset 81 __ shrptr(roffset, 2); // offset
82 82
83 assert(count < LIST_CAPACITY, "LIST_CAPACITY too small"); 83 assert(count < LIST_CAPACITY, "LIST_CAPACITY too small");
84 speculative_load_pclist[count] = __ pc(); 84 speculative_load_pclist[count] = __ pc();
85 switch (type) { 85 switch (type) {
86 case T_BOOLEAN: __ movzbl (rax, Address(robj, roffset, Address::times_1)); break; 86 case T_BOOLEAN: __ movzbl (rax, Address(robj, roffset, Address::times_1)); break;
93 } 93 }
94 94
95 if (os::is_MP()) { 95 if (os::is_MP()) {
96 __ lea(rcounter_addr, counter); 96 __ lea(rcounter_addr, counter);
97 // ca is data dependent on rax. 97 // ca is data dependent on rax.
98 __ xorq (rcounter_addr, rax); 98 __ xorptr(rcounter_addr, rax);
99 __ xorq (rcounter_addr, rax); 99 __ xorptr(rcounter_addr, rax);
100 __ cmpl (rcounter, Address(rcounter_addr, 0)); 100 __ cmpl (rcounter, Address(rcounter_addr, 0));
101 } else { 101 } else {
102 __ cmp32 (rcounter, counter); 102 __ cmp32 (rcounter, counter);
103 } 103 }
104 __ jcc (Assembler::notEqual, slow); 104 __ jcc (Assembler::notEqual, slow);
163 163
164 Label slow; 164 Label slow;
165 165
166 ExternalAddress counter(SafepointSynchronize::safepoint_counter_addr()); 166 ExternalAddress counter(SafepointSynchronize::safepoint_counter_addr());
167 __ mov32 (rcounter, counter); 167 __ mov32 (rcounter, counter);
168 __ movq (robj, c_rarg1); 168 __ mov (robj, c_rarg1);
169 __ testb (rcounter, 1); 169 __ testb (rcounter, 1);
170 __ jcc (Assembler::notZero, slow); 170 __ jcc (Assembler::notZero, slow);
171 if (os::is_MP()) { 171 if (os::is_MP()) {
172 __ xorq (robj, rcounter); 172 __ xorptr(robj, rcounter);
173 __ xorq (robj, rcounter); // obj, since 173 __ xorptr(robj, rcounter); // obj, since
174 // robj ^ rcounter ^ rcounter == robj 174 // robj ^ rcounter ^ rcounter == robj
175 // robj is data dependent on rcounter. 175 // robj is data dependent on rcounter.
176 } 176 }
177 __ movq (robj, Address(robj, 0)); // *obj 177 __ movptr(robj, Address(robj, 0)); // *obj
178 __ movq (roffset, c_rarg2); 178 __ mov (roffset, c_rarg2);
179 __ shrq (roffset, 2); // offset 179 __ shrptr(roffset, 2); // offset
180 180
181 assert(count < LIST_CAPACITY, "LIST_CAPACITY too small"); 181 assert(count < LIST_CAPACITY, "LIST_CAPACITY too small");
182 speculative_load_pclist[count] = __ pc(); 182 speculative_load_pclist[count] = __ pc();
183 switch (type) { 183 switch (type) {
184 case T_FLOAT: __ movflt (xmm0, Address(robj, roffset, Address::times_1)); break; 184 case T_FLOAT: __ movflt (xmm0, Address(robj, roffset, Address::times_1)); break;
188 188
189 if (os::is_MP()) { 189 if (os::is_MP()) {
190 __ lea(rcounter_addr, counter); 190 __ lea(rcounter_addr, counter);
191 __ movdq (rax, xmm0); 191 __ movdq (rax, xmm0);
192 // counter address is data dependent on xmm0. 192 // counter address is data dependent on xmm0.
193 __ xorq (rcounter_addr, rax); 193 __ xorptr(rcounter_addr, rax);
194 __ xorq (rcounter_addr, rax); 194 __ xorptr(rcounter_addr, rax);
195 __ cmpl (rcounter, Address(rcounter_addr, 0)); 195 __ cmpl (rcounter, Address(rcounter_addr, 0));
196 } else { 196 } else {
197 __ cmp32 (rcounter, counter); 197 __ cmp32 (rcounter, counter);
198 } 198 }
199 __ jcc (Assembler::notEqual, slow); 199 __ jcc (Assembler::notEqual, slow);