Mercurial > hg > truffle
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 |