comparison src/cpu/sparc/vm/assembler_sparc.inline.hpp @ 622:56aae7be60d4

6812678: macro assembler needs delayed binding of a few constants (for 6655638) Summary: minor assembler enhancements preparing for method handles Reviewed-by: kvn
author jrose
date Wed, 04 Mar 2009 09:58:39 -0800
parents a61af66fc99e
children 9adddb8c0fc8
comparison
equal deleted inserted replaced
621:19f25e603e7b 622:56aae7be60d4
141 #else 141 #else
142 inline void Assembler::ld( Register s1, Register s2, Register d) { lduw( s1, s2, d); } 142 inline void Assembler::ld( Register s1, Register s2, Register d) { lduw( s1, s2, d); }
143 inline void Assembler::ld( Register s1, int simm13a, Register d) { lduw( s1, simm13a, d); } 143 inline void Assembler::ld( Register s1, int simm13a, Register d) { lduw( s1, simm13a, d); }
144 #endif 144 #endif
145 145
146 inline void Assembler::ldub( Register s1, RegisterConstant s2, Register d) {
147 if (s2.is_register()) ldsb(s1, s2.as_register(), d);
148 else ldsb(s1, s2.as_constant(), d);
149 }
150 inline void Assembler::ldsb( Register s1, RegisterConstant s2, Register d) {
151 if (s2.is_register()) ldsb(s1, s2.as_register(), d);
152 else ldsb(s1, s2.as_constant(), d);
153 }
154 inline void Assembler::lduh( Register s1, RegisterConstant s2, Register d) {
155 if (s2.is_register()) ldsh(s1, s2.as_register(), d);
156 else ldsh(s1, s2.as_constant(), d);
157 }
158 inline void Assembler::ldsh( Register s1, RegisterConstant s2, Register d) {
159 if (s2.is_register()) ldsh(s1, s2.as_register(), d);
160 else ldsh(s1, s2.as_constant(), d);
161 }
162 inline void Assembler::lduw( Register s1, RegisterConstant s2, Register d) {
163 if (s2.is_register()) ldsw(s1, s2.as_register(), d);
164 else ldsw(s1, s2.as_constant(), d);
165 }
166 inline void Assembler::ldsw( Register s1, RegisterConstant s2, Register d) {
167 if (s2.is_register()) ldsw(s1, s2.as_register(), d);
168 else ldsw(s1, s2.as_constant(), d);
169 }
170 inline void Assembler::ldx( Register s1, RegisterConstant s2, Register d) {
171 if (s2.is_register()) ldx(s1, s2.as_register(), d);
172 else ldx(s1, s2.as_constant(), d);
173 }
174 inline void Assembler::ld( Register s1, RegisterConstant s2, Register d) {
175 if (s2.is_register()) ld(s1, s2.as_register(), d);
176 else ld(s1, s2.as_constant(), d);
177 }
178 inline void Assembler::ldd( Register s1, RegisterConstant s2, Register d) {
179 if (s2.is_register()) ldd(s1, s2.as_register(), d);
180 else ldd(s1, s2.as_constant(), d);
181 }
182
183 // form effective addresses this way:
184 inline void Assembler::add( Register s1, RegisterConstant s2, Register d, int offset) {
185 if (s2.is_register()) add(s1, s2.as_register(), d);
186 else { add(s1, s2.as_constant() + offset, d); offset = 0; }
187 if (offset != 0) add(d, offset, d);
188 }
146 189
147 inline void Assembler::ld( const Address& a, Register d, int offset ) { relocate(a.rspec(offset)); ld( a.base(), a.disp() + offset, d ); } 190 inline void Assembler::ld( const Address& a, Register d, int offset ) { relocate(a.rspec(offset)); ld( a.base(), a.disp() + offset, d ); }
148 inline void Assembler::ldsb( const Address& a, Register d, int offset ) { relocate(a.rspec(offset)); ldsb( a.base(), a.disp() + offset, d ); } 191 inline void Assembler::ldsb( const Address& a, Register d, int offset ) { relocate(a.rspec(offset)); ldsb( a.base(), a.disp() + offset, d ); }
149 inline void Assembler::ldsh( const Address& a, Register d, int offset ) { relocate(a.rspec(offset)); ldsh( a.base(), a.disp() + offset, d ); } 192 inline void Assembler::ldsh( const Address& a, Register d, int offset ) { relocate(a.rspec(offset)); ldsh( a.base(), a.disp() + offset, d ); }
150 inline void Assembler::ldsw( const Address& a, Register d, int offset ) { relocate(a.rspec(offset)); ldsw( a.base(), a.disp() + offset, d ); } 193 inline void Assembler::ldsw( const Address& a, Register d, int offset ) { relocate(a.rspec(offset)); ldsw( a.base(), a.disp() + offset, d ); }
198 inline void Assembler::std( Register d, Register s1, int simm13a) { v9_dep(); assert(d->is_even(), "not even"); emit_data( op(ldst_op) | rd(d) | op3(std_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); } 241 inline void Assembler::std( Register d, Register s1, int simm13a) { v9_dep(); assert(d->is_even(), "not even"); emit_data( op(ldst_op) | rd(d) | op3(std_op3) | rs1(s1) | immed(true) | simm(simm13a, 13)); }
199 242
200 inline void Assembler::st( Register d, Register s1, Register s2) { stw(d, s1, s2); } 243 inline void Assembler::st( Register d, Register s1, Register s2) { stw(d, s1, s2); }
201 inline void Assembler::st( Register d, Register s1, int simm13a) { stw(d, s1, simm13a); } 244 inline void Assembler::st( Register d, Register s1, int simm13a) { stw(d, s1, simm13a); }
202 245
246 inline void Assembler::stb( Register d, Register s1, RegisterConstant s2) {
247 if (s2.is_register()) stb(d, s1, s2.as_register());
248 else stb(d, s1, s2.as_constant());
249 }
250 inline void Assembler::sth( Register d, Register s1, RegisterConstant s2) {
251 if (s2.is_register()) sth(d, s1, s2.as_register());
252 else sth(d, s1, s2.as_constant());
253 }
254 inline void Assembler::stx( Register d, Register s1, RegisterConstant s2) {
255 if (s2.is_register()) stx(d, s1, s2.as_register());
256 else stx(d, s1, s2.as_constant());
257 }
258 inline void Assembler::std( Register d, Register s1, RegisterConstant s2) {
259 if (s2.is_register()) std(d, s1, s2.as_register());
260 else std(d, s1, s2.as_constant());
261 }
262 inline void Assembler::st( Register d, Register s1, RegisterConstant s2) {
263 if (s2.is_register()) st(d, s1, s2.as_register());
264 else st(d, s1, s2.as_constant());
265 }
266
203 inline void Assembler::stb( Register d, const Address& a, int offset) { relocate(a.rspec(offset)); stb( d, a.base(), a.disp() + offset); } 267 inline void Assembler::stb( Register d, const Address& a, int offset) { relocate(a.rspec(offset)); stb( d, a.base(), a.disp() + offset); }
204 inline void Assembler::sth( Register d, const Address& a, int offset) { relocate(a.rspec(offset)); sth( d, a.base(), a.disp() + offset); } 268 inline void Assembler::sth( Register d, const Address& a, int offset) { relocate(a.rspec(offset)); sth( d, a.base(), a.disp() + offset); }
205 inline void Assembler::stw( Register d, const Address& a, int offset) { relocate(a.rspec(offset)); stw( d, a.base(), a.disp() + offset); } 269 inline void Assembler::stw( Register d, const Address& a, int offset) { relocate(a.rspec(offset)); stw( d, a.base(), a.disp() + offset); }
206 inline void Assembler::st( Register d, const Address& a, int offset) { relocate(a.rspec(offset)); st( d, a.base(), a.disp() + offset); } 270 inline void Assembler::st( Register d, const Address& a, int offset) { relocate(a.rspec(offset)); st( d, a.base(), a.disp() + offset); }
207 inline void Assembler::std( Register d, const Address& a, int offset) { relocate(a.rspec(offset)); std( d, a.base(), a.disp() + offset); } 271 inline void Assembler::std( Register d, const Address& a, int offset) { relocate(a.rspec(offset)); std( d, a.base(), a.disp() + offset); }
242 #else 306 #else
243 Assembler::ld( s1, simm13a, d); 307 Assembler::ld( s1, simm13a, d);
244 #endif 308 #endif
245 } 309 }
246 310
311 inline void MacroAssembler::ld_ptr( Register s1, RegisterConstant s2, Register d ) {
312 #ifdef _LP64
313 Assembler::ldx( s1, s2, d);
314 #else
315 Assembler::ld( s1, s2, d);
316 #endif
317 }
318
247 inline void MacroAssembler::ld_ptr( const Address& a, Register d, int offset ) { 319 inline void MacroAssembler::ld_ptr( const Address& a, Register d, int offset ) {
248 #ifdef _LP64 320 #ifdef _LP64
249 Assembler::ldx( a, d, offset ); 321 Assembler::ldx( a, d, offset );
250 #else 322 #else
251 Assembler::ld( a, d, offset ); 323 Assembler::ld( a, d, offset );
263 inline void MacroAssembler::st_ptr( Register d, Register s1, int simm13a ) { 335 inline void MacroAssembler::st_ptr( Register d, Register s1, int simm13a ) {
264 #ifdef _LP64 336 #ifdef _LP64
265 Assembler::stx( d, s1, simm13a); 337 Assembler::stx( d, s1, simm13a);
266 #else 338 #else
267 Assembler::st( d, s1, simm13a); 339 Assembler::st( d, s1, simm13a);
340 #endif
341 }
342
343 inline void MacroAssembler::st_ptr( Register d, Register s1, RegisterConstant s2 ) {
344 #ifdef _LP64
345 Assembler::stx( d, s1, s2);
346 #else
347 Assembler::st( d, s1, s2);
268 #endif 348 #endif
269 } 349 }
270 350
271 inline void MacroAssembler::st_ptr( Register d, const Address& a, int offset) { 351 inline void MacroAssembler::st_ptr( Register d, const Address& a, int offset) {
272 #ifdef _LP64 352 #ifdef _LP64
291 #else 371 #else
292 Assembler::ldd(s1, simm13a, d); 372 Assembler::ldd(s1, simm13a, d);
293 #endif 373 #endif
294 } 374 }
295 375
376 inline void MacroAssembler::ld_long( Register s1, RegisterConstant s2, Register d ) {
377 #ifdef _LP64
378 Assembler::ldx(s1, s2, d);
379 #else
380 Assembler::ldd(s1, s2, d);
381 #endif
382 }
383
296 inline void MacroAssembler::ld_long( const Address& a, Register d, int offset ) { 384 inline void MacroAssembler::ld_long( const Address& a, Register d, int offset ) {
297 #ifdef _LP64 385 #ifdef _LP64
298 Assembler::ldx(a, d, offset ); 386 Assembler::ldx(a, d, offset );
299 #else 387 #else
300 Assembler::ldd(a, d, offset ); 388 Assembler::ldd(a, d, offset );
312 inline void MacroAssembler::st_long( Register d, Register s1, int simm13a ) { 400 inline void MacroAssembler::st_long( Register d, Register s1, int simm13a ) {
313 #ifdef _LP64 401 #ifdef _LP64
314 Assembler::stx(d, s1, simm13a); 402 Assembler::stx(d, s1, simm13a);
315 #else 403 #else
316 Assembler::std(d, s1, simm13a); 404 Assembler::std(d, s1, simm13a);
405 #endif
406 }
407
408 inline void MacroAssembler::st_long( Register d, Register s1, RegisterConstant s2 ) {
409 #ifdef _LP64
410 Assembler::stx(d, s1, s2);
411 #else
412 Assembler::std(d, s1, s2);
317 #endif 413 #endif
318 } 414 }
319 415
320 inline void MacroAssembler::st_long( Register d, const Address& a, int offset ) { 416 inline void MacroAssembler::st_long( Register d, const Address& a, int offset ) {
321 #ifdef _LP64 417 #ifdef _LP64