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