--- a/hotspot/src/cpu/sparc/vm/assembler_sparc.inline.hpp Tue Mar 03 18:25:57 2009 -0800
+++ b/hotspot/src/cpu/sparc/vm/assembler_sparc.inline.hpp Wed Mar 04 09:58:39 2009 -0800
@@ -143,6 +143,49 @@
inline void Assembler::ld( Register s1, int simm13a, Register d) { lduw( s1, simm13a, d); }
#endif
+inline void Assembler::ldub( Register s1, RegisterConstant s2, Register d) {
+ if (s2.is_register()) ldsb(s1, s2.as_register(), d);
+ else ldsb(s1, s2.as_constant(), d);
+}
+inline void Assembler::ldsb( Register s1, RegisterConstant s2, Register d) {
+ if (s2.is_register()) ldsb(s1, s2.as_register(), d);
+ else ldsb(s1, s2.as_constant(), d);
+}
+inline void Assembler::lduh( Register s1, RegisterConstant s2, Register d) {
+ if (s2.is_register()) ldsh(s1, s2.as_register(), d);
+ else ldsh(s1, s2.as_constant(), d);
+}
+inline void Assembler::ldsh( Register s1, RegisterConstant s2, Register d) {
+ if (s2.is_register()) ldsh(s1, s2.as_register(), d);
+ else ldsh(s1, s2.as_constant(), d);
+}
+inline void Assembler::lduw( Register s1, RegisterConstant s2, Register d) {
+ if (s2.is_register()) ldsw(s1, s2.as_register(), d);
+ else ldsw(s1, s2.as_constant(), d);
+}
+inline void Assembler::ldsw( Register s1, RegisterConstant s2, Register d) {
+ if (s2.is_register()) ldsw(s1, s2.as_register(), d);
+ else ldsw(s1, s2.as_constant(), d);
+}
+inline void Assembler::ldx( Register s1, RegisterConstant s2, Register d) {
+ if (s2.is_register()) ldx(s1, s2.as_register(), d);
+ else ldx(s1, s2.as_constant(), d);
+}
+inline void Assembler::ld( Register s1, RegisterConstant s2, Register d) {
+ if (s2.is_register()) ld(s1, s2.as_register(), d);
+ else ld(s1, s2.as_constant(), d);
+}
+inline void Assembler::ldd( Register s1, RegisterConstant s2, Register d) {
+ if (s2.is_register()) ldd(s1, s2.as_register(), d);
+ else ldd(s1, s2.as_constant(), d);
+}
+
+// form effective addresses this way:
+inline void Assembler::add( Register s1, RegisterConstant s2, Register d, int offset) {
+ if (s2.is_register()) add(s1, s2.as_register(), d);
+ else { add(s1, s2.as_constant() + offset, d); offset = 0; }
+ if (offset != 0) add(d, offset, d);
+}
inline void Assembler::ld( const Address& a, Register d, int offset ) { relocate(a.rspec(offset)); ld( a.base(), a.disp() + offset, d ); }
inline void Assembler::ldsb( const Address& a, Register d, int offset ) { relocate(a.rspec(offset)); ldsb( a.base(), a.disp() + offset, d ); }
@@ -200,6 +243,27 @@
inline void Assembler::st( Register d, Register s1, Register s2) { stw(d, s1, s2); }
inline void Assembler::st( Register d, Register s1, int simm13a) { stw(d, s1, simm13a); }
+inline void Assembler::stb( Register d, Register s1, RegisterConstant s2) {
+ if (s2.is_register()) stb(d, s1, s2.as_register());
+ else stb(d, s1, s2.as_constant());
+}
+inline void Assembler::sth( Register d, Register s1, RegisterConstant s2) {
+ if (s2.is_register()) sth(d, s1, s2.as_register());
+ else sth(d, s1, s2.as_constant());
+}
+inline void Assembler::stx( Register d, Register s1, RegisterConstant s2) {
+ if (s2.is_register()) stx(d, s1, s2.as_register());
+ else stx(d, s1, s2.as_constant());
+}
+inline void Assembler::std( Register d, Register s1, RegisterConstant s2) {
+ if (s2.is_register()) std(d, s1, s2.as_register());
+ else std(d, s1, s2.as_constant());
+}
+inline void Assembler::st( Register d, Register s1, RegisterConstant s2) {
+ if (s2.is_register()) st(d, s1, s2.as_register());
+ else st(d, s1, s2.as_constant());
+}
+
inline void Assembler::stb( Register d, const Address& a, int offset) { relocate(a.rspec(offset)); stb( d, a.base(), a.disp() + offset); }
inline void Assembler::sth( Register d, const Address& a, int offset) { relocate(a.rspec(offset)); sth( d, a.base(), a.disp() + offset); }
inline void Assembler::stw( Register d, const Address& a, int offset) { relocate(a.rspec(offset)); stw( d, a.base(), a.disp() + offset); }
@@ -244,6 +308,14 @@
#endif
}
+inline void MacroAssembler::ld_ptr( Register s1, RegisterConstant s2, Register d ) {
+#ifdef _LP64
+ Assembler::ldx( s1, s2, d);
+#else
+ Assembler::ld( s1, s2, d);
+#endif
+}
+
inline void MacroAssembler::ld_ptr( const Address& a, Register d, int offset ) {
#ifdef _LP64
Assembler::ldx( a, d, offset );
@@ -268,6 +340,14 @@
#endif
}
+inline void MacroAssembler::st_ptr( Register d, Register s1, RegisterConstant s2 ) {
+#ifdef _LP64
+ Assembler::stx( d, s1, s2);
+#else
+ Assembler::st( d, s1, s2);
+#endif
+}
+
inline void MacroAssembler::st_ptr( Register d, const Address& a, int offset) {
#ifdef _LP64
Assembler::stx( d, a, offset);
@@ -293,6 +373,14 @@
#endif
}
+inline void MacroAssembler::ld_long( Register s1, RegisterConstant s2, Register d ) {
+#ifdef _LP64
+ Assembler::ldx(s1, s2, d);
+#else
+ Assembler::ldd(s1, s2, d);
+#endif
+}
+
inline void MacroAssembler::ld_long( const Address& a, Register d, int offset ) {
#ifdef _LP64
Assembler::ldx(a, d, offset );
@@ -317,6 +405,14 @@
#endif
}
+inline void MacroAssembler::st_long( Register d, Register s1, RegisterConstant s2 ) {
+#ifdef _LP64
+ Assembler::stx(d, s1, s2);
+#else
+ Assembler::std(d, s1, s2);
+#endif
+}
+
inline void MacroAssembler::st_long( Register d, const Address& a, int offset ) {
#ifdef _LP64
Assembler::stx(d, a, offset);