comparison src/cpu/sparc/vm/assembler_sparc.inline.hpp @ 665:c89f86385056

6814659: separable cleanups and subroutines for 6655638 Summary: preparatory but separable changes for method handles Reviewed-by: kvn, never
author jrose
date Fri, 20 Mar 2009 23:19:36 -0700
parents 9adddb8c0fc8
children e5b0439ef4ae
comparison
equal deleted inserted replaced
647:bd441136a5ce 665:c89f86385056
1 /* 1 /*
2 * Copyright 1997-2006 Sun Microsystems, Inc. All Rights Reserved. 2 * Copyright 1997-2009 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
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) { 146 inline void Assembler::ldub( Register s1, RegisterOrConstant s2, Register d) {
147 if (s2.is_register()) ldsb(s1, s2.as_register(), d); 147 if (s2.is_register()) ldsb(s1, s2.as_register(), d);
148 else ldsb(s1, s2.as_constant(), d); 148 else ldsb(s1, s2.as_constant(), d);
149 } 149 }
150 inline void Assembler::ldsb( Register s1, RegisterConstant s2, Register d) { 150 inline void Assembler::ldsb( Register s1, RegisterOrConstant s2, Register d) {
151 if (s2.is_register()) ldsb(s1, s2.as_register(), d); 151 if (s2.is_register()) ldsb(s1, s2.as_register(), d);
152 else ldsb(s1, s2.as_constant(), d); 152 else ldsb(s1, s2.as_constant(), d);
153 } 153 }
154 inline void Assembler::lduh( Register s1, RegisterConstant s2, Register d) { 154 inline void Assembler::lduh( Register s1, RegisterOrConstant s2, Register d) {
155 if (s2.is_register()) ldsh(s1, s2.as_register(), d); 155 if (s2.is_register()) ldsh(s1, s2.as_register(), d);
156 else ldsh(s1, s2.as_constant(), d); 156 else ldsh(s1, s2.as_constant(), d);
157 } 157 }
158 inline void Assembler::ldsh( Register s1, RegisterConstant s2, Register d) { 158 inline void Assembler::ldsh( Register s1, RegisterOrConstant s2, Register d) {
159 if (s2.is_register()) ldsh(s1, s2.as_register(), d); 159 if (s2.is_register()) ldsh(s1, s2.as_register(), d);
160 else ldsh(s1, s2.as_constant(), d); 160 else ldsh(s1, s2.as_constant(), d);
161 } 161 }
162 inline void Assembler::lduw( Register s1, RegisterConstant s2, Register d) { 162 inline void Assembler::lduw( Register s1, RegisterOrConstant s2, Register d) {
163 if (s2.is_register()) ldsw(s1, s2.as_register(), d); 163 if (s2.is_register()) ldsw(s1, s2.as_register(), d);
164 else ldsw(s1, s2.as_constant(), d); 164 else ldsw(s1, s2.as_constant(), d);
165 } 165 }
166 inline void Assembler::ldsw( Register s1, RegisterConstant s2, Register d) { 166 inline void Assembler::ldsw( Register s1, RegisterOrConstant s2, Register d) {
167 if (s2.is_register()) ldsw(s1, s2.as_register(), d); 167 if (s2.is_register()) ldsw(s1, s2.as_register(), d);
168 else ldsw(s1, s2.as_constant(), d); 168 else ldsw(s1, s2.as_constant(), d);
169 } 169 }
170 inline void Assembler::ldx( Register s1, RegisterConstant s2, Register d) { 170 inline void Assembler::ldx( Register s1, RegisterOrConstant s2, Register d) {
171 if (s2.is_register()) ldx(s1, s2.as_register(), d); 171 if (s2.is_register()) ldx(s1, s2.as_register(), d);
172 else ldx(s1, s2.as_constant(), d); 172 else ldx(s1, s2.as_constant(), d);
173 } 173 }
174 inline void Assembler::ld( Register s1, RegisterConstant s2, Register d) { 174 inline void Assembler::ld( Register s1, RegisterOrConstant s2, Register d) {
175 if (s2.is_register()) ld(s1, s2.as_register(), d); 175 if (s2.is_register()) ld(s1, s2.as_register(), d);
176 else ld(s1, s2.as_constant(), d); 176 else ld(s1, s2.as_constant(), d);
177 } 177 }
178 inline void Assembler::ldd( Register s1, RegisterConstant s2, Register d) { 178 inline void Assembler::ldd( Register s1, RegisterOrConstant s2, Register d) {
179 if (s2.is_register()) ldd(s1, s2.as_register(), d); 179 if (s2.is_register()) ldd(s1, s2.as_register(), d);
180 else ldd(s1, s2.as_constant(), d); 180 else ldd(s1, s2.as_constant(), d);
181 } 181 }
182 182
183 // form effective addresses this way: 183 // form effective addresses this way:
184 inline void Assembler::add( Register s1, RegisterConstant s2, Register d, int offset) { 184 inline void Assembler::add( Register s1, RegisterOrConstant s2, Register d, int offset) {
185 if (s2.is_register()) add(s1, s2.as_register(), d); 185 if (s2.is_register()) add(s1, s2.as_register(), d);
186 else { add(s1, s2.as_constant() + offset, d); offset = 0; } 186 else { add(s1, s2.as_constant() + offset, d); offset = 0; }
187 if (offset != 0) add(d, offset, d); 187 if (offset != 0) add(d, offset, d);
188 } 188 }
189 189
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)); } 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)); }
242 242
243 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); }
244 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); }
245 245
246 inline void Assembler::stb( Register d, Register s1, RegisterConstant s2) { 246 inline void Assembler::stb( Register d, Register s1, RegisterOrConstant s2) {
247 if (s2.is_register()) stb(d, s1, s2.as_register()); 247 if (s2.is_register()) stb(d, s1, s2.as_register());
248 else stb(d, s1, s2.as_constant()); 248 else stb(d, s1, s2.as_constant());
249 } 249 }
250 inline void Assembler::sth( Register d, Register s1, RegisterConstant s2) { 250 inline void Assembler::sth( Register d, Register s1, RegisterOrConstant s2) {
251 if (s2.is_register()) sth(d, s1, s2.as_register()); 251 if (s2.is_register()) sth(d, s1, s2.as_register());
252 else sth(d, s1, s2.as_constant()); 252 else sth(d, s1, s2.as_constant());
253 } 253 }
254 inline void Assembler::stx( Register d, Register s1, RegisterConstant s2) { 254 inline void Assembler::stx( Register d, Register s1, RegisterOrConstant s2) {
255 if (s2.is_register()) stx(d, s1, s2.as_register()); 255 if (s2.is_register()) stx(d, s1, s2.as_register());
256 else stx(d, s1, s2.as_constant()); 256 else stx(d, s1, s2.as_constant());
257 } 257 }
258 inline void Assembler::std( Register d, Register s1, RegisterConstant s2) { 258 inline void Assembler::std( Register d, Register s1, RegisterOrConstant s2) {
259 if (s2.is_register()) std(d, s1, s2.as_register()); 259 if (s2.is_register()) std(d, s1, s2.as_register());
260 else std(d, s1, s2.as_constant()); 260 else std(d, s1, s2.as_constant());
261 } 261 }
262 inline void Assembler::st( Register d, Register s1, RegisterConstant s2) { 262 inline void Assembler::st( Register d, Register s1, RegisterOrConstant s2) {
263 if (s2.is_register()) st(d, s1, s2.as_register()); 263 if (s2.is_register()) st(d, s1, s2.as_register());
264 else st(d, s1, s2.as_constant()); 264 else st(d, s1, s2.as_constant());
265 } 265 }
266 266
267 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); }
306 #else 306 #else
307 Assembler::ld( s1, simm13a, d); 307 Assembler::ld( s1, simm13a, d);
308 #endif 308 #endif
309 } 309 }
310 310
311 inline void MacroAssembler::ld_ptr( Register s1, RegisterConstant s2, Register d ) { 311 inline void MacroAssembler::ld_ptr( Register s1, RegisterOrConstant s2, Register d ) {
312 #ifdef _LP64 312 #ifdef _LP64
313 Assembler::ldx( s1, s2, d); 313 Assembler::ldx( s1, s2, d);
314 #else 314 #else
315 Assembler::ld( s1, s2, d); 315 Assembler::ld( s1, s2, d);
316 #endif 316 #endif
338 #else 338 #else
339 Assembler::st( d, s1, simm13a); 339 Assembler::st( d, s1, simm13a);
340 #endif 340 #endif
341 } 341 }
342 342
343 inline void MacroAssembler::st_ptr( Register d, Register s1, RegisterConstant s2 ) { 343 inline void MacroAssembler::st_ptr( Register d, Register s1, RegisterOrConstant s2 ) {
344 #ifdef _LP64 344 #ifdef _LP64
345 Assembler::stx( d, s1, s2); 345 Assembler::stx( d, s1, s2);
346 #else 346 #else
347 Assembler::st( d, s1, s2); 347 Assembler::st( d, s1, s2);
348 #endif 348 #endif
371 #else 371 #else
372 Assembler::ldd(s1, simm13a, d); 372 Assembler::ldd(s1, simm13a, d);
373 #endif 373 #endif
374 } 374 }
375 375
376 inline void MacroAssembler::ld_long( Register s1, RegisterConstant s2, Register d ) { 376 inline void MacroAssembler::ld_long( Register s1, RegisterOrConstant s2, Register d ) {
377 #ifdef _LP64 377 #ifdef _LP64
378 Assembler::ldx(s1, s2, d); 378 Assembler::ldx(s1, s2, d);
379 #else 379 #else
380 Assembler::ldd(s1, s2, d); 380 Assembler::ldd(s1, s2, d);
381 #endif 381 #endif
403 #else 403 #else
404 Assembler::std(d, s1, simm13a); 404 Assembler::std(d, s1, simm13a);
405 #endif 405 #endif
406 } 406 }
407 407
408 inline void MacroAssembler::st_long( Register d, Register s1, RegisterConstant s2 ) { 408 inline void MacroAssembler::st_long( Register d, Register s1, RegisterOrConstant s2 ) {
409 #ifdef _LP64 409 #ifdef _LP64
410 Assembler::stx(d, s1, s2); 410 Assembler::stx(d, s1, s2);
411 #else 411 #else
412 Assembler::std(d, s1, s2); 412 Assembler::std(d, s1, s2);
413 #endif 413 #endif
453 #else 453 #else
454 Assembler::srl(s1, imm6a, d); 454 Assembler::srl(s1, imm6a, d);
455 #endif 455 #endif
456 } 456 }
457 457
458 inline void MacroAssembler::sll_ptr( Register s1, RegisterConstant s2, Register d ) { 458 inline void MacroAssembler::sll_ptr( Register s1, RegisterOrConstant s2, Register d ) {
459 if (s2.is_register()) sll_ptr(s1, s2.as_register(), d); 459 if (s2.is_register()) sll_ptr(s1, s2.as_register(), d);
460 else sll_ptr(s1, s2.as_constant(), d); 460 else sll_ptr(s1, s2.as_constant(), d);
461 } 461 }
462 462
463 // Use the right branch for the platform 463 // Use the right branch for the platform