src/cpu/sparc/vm/assembler_sparc.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6703890 Sdiff src/cpu/sparc/vm

src/cpu/sparc/vm/assembler_sparc.hpp

Print this page




1960   void leave();
1961 
1962   // V8/V9 integer multiply
1963   void mult(Register s1, Register s2, Register d);
1964   void mult(Register s1, int simm13a, Register d);
1965 
1966   // V8/V9 read and write of condition codes.
1967   void read_ccr(Register d);
1968   void write_ccr(Register s);
1969 
1970   // Manipulation of C++ bools
1971   // These are idioms to flag the need for care with accessing bools but on
1972   // this platform we assume byte size
1973 
1974   inline void stbool( Register d, const Address& a, int offset = 0 ) { stb(d, a, offset); }
1975   inline void ldbool( const Address& a, Register d, int offset = 0 ) { ldsb( a, d, offset ); }
1976   inline void tstbool( Register s ) { tst(s); }
1977   inline void movbool( bool boolconst, Register d) { mov( (int) boolconst, d); }
1978 
1979   // klass oop manipulations if compressed
1980   void load_klass(Register  src_oop, Register dst);
1981   void store_klass(Register dst_oop, Register s1);
1982 
1983    // oop manipulations
1984   void load_heap_oop(const Address& s, Register d, int offset = 0);
1985   void load_heap_oop(Register s1, Register s2, Register d);
1986   void load_heap_oop(Register s1, int simm13a, Register d);
1987   void store_heap_oop(Register d, Register s1, Register s2);
1988   void store_heap_oop(Register d, Register s1, int simm13a);
1989   void store_heap_oop(Register d, const Address& a, int offset = 0);
1990 
1991   void encode_heap_oop(Register src, Register dst);
1992   void encode_heap_oop(Register r) {
1993     encode_heap_oop(r, r);
1994   }
1995   void decode_heap_oop(Register src, Register dst);
1996   void decode_heap_oop(Register r) {
1997     decode_heap_oop(r, r);
1998   }
1999   void encode_heap_oop_not_null(Register r);
2000   void decode_heap_oop_not_null(Register r);
2001   void encode_heap_oop_not_null(Register src, Register dst);


2086 #define verify_oop(reg) _verify_oop(reg, "broken oop " #reg, __FILE__, __LINE__)
2087 #define verify_oop_addr(addr) _verify_oop_addr(addr, "broken oop addr ", __FILE__, __LINE__)
2088 
2089         // only if +VerifyOops
2090   void verify_FPU(int stack_depth, const char* s = "illegal FPU state");
2091         // only if +VerifyFPU
2092   void stop(const char* msg);                          // prints msg, dumps registers and stops execution
2093   void warn(const char* msg);                          // prints msg, but don't stop
2094   void untested(const char* what = "");
2095   void unimplemented(const char* what = "")              { char* b = new char[1024];  sprintf(b, "unimplemented: %s", what);  stop(b); }
2096   void should_not_reach_here()                   { stop("should not reach here"); }
2097   void print_CPU_state();
2098 
2099   // oops in code
2100   Address allocate_oop_address( jobject obj, Register d ); // allocate_index
2101   Address constant_oop_address( jobject obj, Register d ); // find_index
2102   inline void set_oop         ( jobject obj, Register d ); // uses allocate_oop_address
2103   inline void set_oop_constant( jobject obj, Register d ); // uses constant_oop_address
2104   inline void set_oop         ( Address obj_addr );        // same as load_address
2105 


2106   // nop padding
2107   void align(int modulus);
2108 
2109   // declare a safepoint
2110   void safepoint();
2111 
2112   // factor out part of stop into subroutine to save space
2113   void stop_subroutine();
2114   // factor out part of verify_oop into subroutine to save space
2115   void verify_oop_subroutine();
2116 
2117   // side-door communication with signalHandler in os_solaris.cpp
2118   static address _verify_oop_implicit_branch[3];
2119 
2120 #ifndef PRODUCT
2121   static void test();
2122 #endif
2123 
2124   // convert an incoming arglist to varargs format; put the pointer in d
2125   void set_varargs( Argument a, Register d );




1960   void leave();
1961 
1962   // V8/V9 integer multiply
1963   void mult(Register s1, Register s2, Register d);
1964   void mult(Register s1, int simm13a, Register d);
1965 
1966   // V8/V9 read and write of condition codes.
1967   void read_ccr(Register d);
1968   void write_ccr(Register s);
1969 
1970   // Manipulation of C++ bools
1971   // These are idioms to flag the need for care with accessing bools but on
1972   // this platform we assume byte size
1973 
1974   inline void stbool( Register d, const Address& a, int offset = 0 ) { stb(d, a, offset); }
1975   inline void ldbool( const Address& a, Register d, int offset = 0 ) { ldsb( a, d, offset ); }
1976   inline void tstbool( Register s ) { tst(s); }
1977   inline void movbool( bool boolconst, Register d) { mov( (int) boolconst, d); }
1978 
1979   // klass oop manipulations if compressed
1980   void load_klass(Register src_oop, Register klass);
1981   void store_klass(Register klass, Register dst_oop);
1982 
1983    // oop manipulations
1984   void load_heap_oop(const Address& s, Register d, int offset = 0);
1985   void load_heap_oop(Register s1, Register s2, Register d);
1986   void load_heap_oop(Register s1, int simm13a, Register d);
1987   void store_heap_oop(Register d, Register s1, Register s2);
1988   void store_heap_oop(Register d, Register s1, int simm13a);
1989   void store_heap_oop(Register d, const Address& a, int offset = 0);
1990 
1991   void encode_heap_oop(Register src, Register dst);
1992   void encode_heap_oop(Register r) {
1993     encode_heap_oop(r, r);
1994   }
1995   void decode_heap_oop(Register src, Register dst);
1996   void decode_heap_oop(Register r) {
1997     decode_heap_oop(r, r);
1998   }
1999   void encode_heap_oop_not_null(Register r);
2000   void decode_heap_oop_not_null(Register r);
2001   void encode_heap_oop_not_null(Register src, Register dst);


2086 #define verify_oop(reg) _verify_oop(reg, "broken oop " #reg, __FILE__, __LINE__)
2087 #define verify_oop_addr(addr) _verify_oop_addr(addr, "broken oop addr ", __FILE__, __LINE__)
2088 
2089         // only if +VerifyOops
2090   void verify_FPU(int stack_depth, const char* s = "illegal FPU state");
2091         // only if +VerifyFPU
2092   void stop(const char* msg);                          // prints msg, dumps registers and stops execution
2093   void warn(const char* msg);                          // prints msg, but don't stop
2094   void untested(const char* what = "");
2095   void unimplemented(const char* what = "")              { char* b = new char[1024];  sprintf(b, "unimplemented: %s", what);  stop(b); }
2096   void should_not_reach_here()                   { stop("should not reach here"); }
2097   void print_CPU_state();
2098 
2099   // oops in code
2100   Address allocate_oop_address( jobject obj, Register d ); // allocate_index
2101   Address constant_oop_address( jobject obj, Register d ); // find_index
2102   inline void set_oop         ( jobject obj, Register d ); // uses allocate_oop_address
2103   inline void set_oop_constant( jobject obj, Register d ); // uses constant_oop_address
2104   inline void set_oop         ( Address obj_addr );        // same as load_address
2105 
2106   void set_narrow_oop( jobject obj, Register d );
2107 
2108   // nop padding
2109   void align(int modulus);
2110 
2111   // declare a safepoint
2112   void safepoint();
2113 
2114   // factor out part of stop into subroutine to save space
2115   void stop_subroutine();
2116   // factor out part of verify_oop into subroutine to save space
2117   void verify_oop_subroutine();
2118 
2119   // side-door communication with signalHandler in os_solaris.cpp
2120   static address _verify_oop_implicit_branch[3];
2121 
2122 #ifndef PRODUCT
2123   static void test();
2124 #endif
2125 
2126   // convert an incoming arglist to varargs format; put the pointer in d
2127   void set_varargs( Argument a, Register d );


src/cpu/sparc/vm/assembler_sparc.hpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File