< prev index next >
src/cpu/sparc/vm/macroAssembler_sparc.inline.hpp
Print this page
*** 1,7 ****
/*
! * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 43,192 ****
stub_inst = patched_branch(target - branch, stub_inst, 0);
}
// Use the right loads/stores for the platform
inline void MacroAssembler::ld_ptr( Register s1, Register s2, Register d ) {
- #ifdef _LP64
Assembler::ldx(s1, s2, d);
- #else
- ld( s1, s2, d);
- #endif
}
inline void MacroAssembler::ld_ptr( Register s1, int simm13a, Register d ) {
- #ifdef _LP64
Assembler::ldx(s1, simm13a, d);
- #else
- ld( s1, simm13a, d);
- #endif
}
#ifdef ASSERT
// ByteSize is only a class when ASSERT is defined, otherwise it's an int.
inline void MacroAssembler::ld_ptr( Register s1, ByteSize simm13a, Register d ) {
ld_ptr(s1, in_bytes(simm13a), d);
}
#endif
inline void MacroAssembler::ld_ptr( Register s1, RegisterOrConstant s2, Register d ) {
- #ifdef _LP64
ldx(s1, s2, d);
- #else
- ld( s1, s2, d);
- #endif
}
inline void MacroAssembler::ld_ptr(const Address& a, Register d, int offset) {
- #ifdef _LP64
ldx(a, d, offset);
- #else
- ld( a, d, offset);
- #endif
}
inline void MacroAssembler::st_ptr( Register d, Register s1, Register s2 ) {
- #ifdef _LP64
Assembler::stx(d, s1, s2);
- #else
- st( d, s1, s2);
- #endif
}
inline void MacroAssembler::st_ptr( Register d, Register s1, int simm13a ) {
- #ifdef _LP64
Assembler::stx(d, s1, simm13a);
- #else
- st( d, s1, simm13a);
- #endif
}
#ifdef ASSERT
// ByteSize is only a class when ASSERT is defined, otherwise it's an int.
inline void MacroAssembler::st_ptr( Register d, Register s1, ByteSize simm13a ) {
st_ptr(d, s1, in_bytes(simm13a));
}
#endif
inline void MacroAssembler::st_ptr( Register d, Register s1, RegisterOrConstant s2 ) {
- #ifdef _LP64
stx(d, s1, s2);
- #else
- st( d, s1, s2);
- #endif
}
inline void MacroAssembler::st_ptr(Register d, const Address& a, int offset) {
- #ifdef _LP64
stx(d, a, offset);
- #else
- st( d, a, offset);
- #endif
}
// Use the right loads/stores for the platform
inline void MacroAssembler::ld_long( Register s1, Register s2, Register d ) {
- #ifdef _LP64
Assembler::ldx(s1, s2, d);
- #else
- Assembler::ldd(s1, s2, d);
- #endif
}
inline void MacroAssembler::ld_long( Register s1, int simm13a, Register d ) {
- #ifdef _LP64
Assembler::ldx(s1, simm13a, d);
- #else
- Assembler::ldd(s1, simm13a, d);
- #endif
}
inline void MacroAssembler::ld_long( Register s1, RegisterOrConstant s2, Register d ) {
- #ifdef _LP64
ldx(s1, s2, d);
- #else
- ldd(s1, s2, d);
- #endif
}
inline void MacroAssembler::ld_long(const Address& a, Register d, int offset) {
- #ifdef _LP64
ldx(a, d, offset);
- #else
- ldd(a, d, offset);
- #endif
}
inline void MacroAssembler::st_long( Register d, Register s1, Register s2 ) {
- #ifdef _LP64
Assembler::stx(d, s1, s2);
- #else
- Assembler::std(d, s1, s2);
- #endif
}
inline void MacroAssembler::st_long( Register d, Register s1, int simm13a ) {
- #ifdef _LP64
Assembler::stx(d, s1, simm13a);
- #else
- Assembler::std(d, s1, simm13a);
- #endif
}
inline void MacroAssembler::st_long( Register d, Register s1, RegisterOrConstant s2 ) {
- #ifdef _LP64
stx(d, s1, s2);
- #else
- std(d, s1, s2);
- #endif
}
inline void MacroAssembler::st_long( Register d, const Address& a, int offset ) {
- #ifdef _LP64
stx(d, a, offset);
- #else
- std(d, a, offset);
- #endif
}
inline void MacroAssembler::stbool(Register d, const Address& a) { stb(d, a); }
inline void MacroAssembler::ldbool(const Address& a, Register d) { ldub(a, d); }
inline void MacroAssembler::movbool( bool boolconst, Register d) { mov( (int) boolconst, d); }
--- 43,128 ----
*** 205,253 ****
inline void MacroAssembler::casx( Register s1, Register s2, Register d) { casxa(s1, s2, d, ASI_PRIMARY); }
// Functions for isolating 64 bit atomic swaps for LP64
// cas_ptr will perform cas for 32 bit VM's and casx for 64 bit VM's
inline void MacroAssembler::cas_ptr( Register s1, Register s2, Register d) {
- #ifdef _LP64
casx( s1, s2, d );
- #else
- cas( s1, s2, d );
- #endif
}
// Functions for isolating 64 bit shifts for LP64
inline void MacroAssembler::sll_ptr( Register s1, Register s2, Register d ) {
- #ifdef _LP64
Assembler::sllx(s1, s2, d);
- #else
- Assembler::sll( s1, s2, d);
- #endif
}
inline void MacroAssembler::sll_ptr( Register s1, int imm6a, Register d ) {
- #ifdef _LP64
Assembler::sllx(s1, imm6a, d);
- #else
- Assembler::sll( s1, imm6a, d);
- #endif
}
inline void MacroAssembler::srl_ptr( Register s1, Register s2, Register d ) {
- #ifdef _LP64
Assembler::srlx(s1, s2, d);
- #else
- Assembler::srl( s1, s2, d);
- #endif
}
inline void MacroAssembler::srl_ptr( Register s1, int imm6a, Register d ) {
- #ifdef _LP64
Assembler::srlx(s1, imm6a, d);
- #else
- Assembler::srl( s1, imm6a, d);
- #endif
}
inline void MacroAssembler::sll_ptr( Register s1, RegisterOrConstant s2, Register d ) {
if (s2.is_register()) sll_ptr(s1, s2.as_register(), d);
else sll_ptr(s1, s2.as_constant(), d);
--- 141,169 ----
*** 275,289 ****
// Branch that tests either xcc or icc depending on the
// architecture compiled (LP64 or not)
inline void MacroAssembler::brx( Condition c, bool a, Predict p, address d, relocInfo::relocType rt ) {
- #ifdef _LP64
Assembler::bp(c, a, xcc, p, d, rt);
- #else
- MacroAssembler::br(c, a, p, d, rt);
- #endif
}
inline void MacroAssembler::brx( Condition c, bool a, Predict p, Label& L ) {
insert_nop_after_cbcond();
brx(c, a, p, target(L));
--- 191,201 ----
*** 336,346 ****
inline void MacroAssembler::call( address d, relocInfo::relocType rt ) {
MacroAssembler::call(d, Relocation::spec_simple(rt));
}
inline void MacroAssembler::call( address d, RelocationHolder const& rspec ) {
- #ifdef _LP64
intptr_t disp;
// NULL is ok because it will be relocated later.
// Must change NULL to a reachable address in order to
// pass asserts here and in wdisp.
if ( d == NULL )
--- 248,257 ----
*** 353,365 ****
AddressLiteral dest(d);
jumpl_to(dest, O7, O7);
} else {
Assembler::call(d, rspec);
}
- #else
- Assembler::call( d, rspec );
- #endif
}
inline void MacroAssembler::call( Label& L, relocInfo::relocType rt ) {
insert_nop_after_cbcond();
MacroAssembler::call( target(L), rt);
--- 264,273 ----
*** 412,427 ****
// Loads the current PC of the following instruction as an immediate value in
// 2 instructions. All PCs in the CodeCache are within 2 Gig of each other.
inline intptr_t MacroAssembler::load_pc_address( Register reg, int bytes_to_skip ) {
intptr_t thepc = (intptr_t)pc() + 2*BytesPerInstWord + bytes_to_skip;
- #ifdef _LP64
Unimplemented();
- #else
- Assembler::sethi( thepc & ~0x3ff, reg, internal_word_Relocation::spec((address)thepc));
- add(reg, thepc & 0x3ff, reg, internal_word_Relocation::spec((address)thepc));
- #endif
return thepc;
}
inline void MacroAssembler::load_contents(const AddressLiteral& addrlit, Register d, int offset) {
--- 320,330 ----
*** 552,562 ****
else
st_ptr (s, a.as_address());
}
- #ifdef _LP64
inline void MacroAssembler::store_float_argument( FloatRegister s, Argument& a ) {
if (a.is_float_register())
// V9 ABI has F1, F3, F5 are used to pass instead of O0, O1, O2
fmov(FloatRegisterImpl::S, s, a.as_float_register() );
else
--- 455,464 ----
*** 577,587 ****
if (a.is_register())
mov(s, a.as_register());
else
stx(s, a.as_address());
}
- #endif
inline void MacroAssembler::round_to( Register r, int modulus ) {
assert_not_delayed();
inc( r, modulus - 1 );
and3( r, -modulus, r );
--- 479,488 ----
*** 638,663 ****
inline void MacroAssembler::clrx( Register s1, int simm13a) { stx( G0, s1, simm13a); }
inline void MacroAssembler::clruw( Register s, Register d ) { srl( s, G0, d); }
inline void MacroAssembler::clruwu( Register d ) { srl( d, G0, d); }
- #ifdef _LP64
// Make all 32 bit loads signed so 64 bit registers maintain proper sign
inline void MacroAssembler::ld( Register s1, Register s2, Register d) { ldsw( s1, s2, d); }
inline void MacroAssembler::ld( Register s1, int simm13a, Register d) { ldsw( s1, simm13a, d); }
- #else
- inline void MacroAssembler::ld( Register s1, Register s2, Register d) { lduw( s1, s2, d); }
- inline void MacroAssembler::ld( Register s1, int simm13a, Register d) { lduw( s1, simm13a, d); }
- #endif
#ifdef ASSERT
// ByteSize is only a class when ASSERT is defined, otherwise it's an int.
- # ifdef _LP64
inline void MacroAssembler::ld(Register s1, ByteSize simm13a, Register d) { ldsw( s1, in_bytes(simm13a), d); }
- # else
- inline void MacroAssembler::ld(Register s1, ByteSize simm13a, Register d) { lduw( s1, in_bytes(simm13a), d); }
- # endif
#endif
inline void MacroAssembler::ld( const Address& a, Register d, int offset) {
if (a.has_index()) { assert(offset == 0, ""); ld( a.base(), a.index(), d); }
else { ld( a.base(), a.disp() + offset, d); }
--- 539,555 ----
< prev index next >