1.1 --- a/src/cpu/ppc/vm/macroAssembler_ppc.hpp Tue Dec 10 14:29:43 2013 +0100 1.2 +++ b/src/cpu/ppc/vm/macroAssembler_ppc.hpp Wed Dec 11 00:06:11 2013 +0100 1.3 @@ -58,9 +58,24 @@ 1.4 1.5 // Move register if destination register and target register are different 1.6 inline void mr_if_needed(Register rd, Register rs); 1.7 + inline void fmr_if_needed(FloatRegister rd, FloatRegister rs); 1.8 + // This is dedicated for emitting scheduled mach nodes. For better 1.9 + // readability of the ad file I put it here. 1.10 + // Endgroups are not needed if 1.11 + // - the scheduler is off 1.12 + // - the scheduler found that there is a natural group end, in that 1.13 + // case it reduced the size of the instruction used in the test 1.14 + // yielding 'needed'. 1.15 + inline void endgroup_if_needed(bool needed); 1.16 + 1.17 + // Memory barriers. 1.18 + inline void membar(int bits); 1.19 + inline void release(); 1.20 + inline void acquire(); 1.21 + inline void fence(); 1.22 1.23 // nop padding 1.24 - void align(int modulus); 1.25 + void align(int modulus, int max = 252, int rem = 0); 1.26 1.27 // 1.28 // Constants, loading constants, TOC support 1.29 @@ -295,6 +310,8 @@ 1.30 // Call a C function via a function descriptor and use full C 1.31 // calling conventions. Updates and returns _last_calls_return_pc. 1.32 address call_c(Register function_descriptor); 1.33 + // For tail calls: only branch, don't link, so callee returns to caller of this function. 1.34 + address call_c_and_return_to_caller(Register function_descriptor); 1.35 address call_c(const FunctionDescriptor* function_descriptor, relocInfo::relocType rt); 1.36 address call_c_using_toc(const FunctionDescriptor* function_descriptor, relocInfo::relocType rt, 1.37 Register toc); 1.38 @@ -320,7 +337,7 @@ 1.39 // the entry point 1.40 address entry_point, 1.41 // flag which indicates if exception should be checked 1.42 - bool check_exception=true 1.43 + bool check_exception = true 1.44 ); 1.45 1.46 // Support for VM calls. This is the base routine called by the 1.47 @@ -530,9 +547,7 @@ 1.48 inline void null_check_throw(Register a, int offset, Register temp_reg, address exception_entry); 1.49 1.50 // Check accessed object for null. Use SIGTRAP-based null checks on AIX. 1.51 - inline void ld_with_trap_null_check(Register d, int si16, Register s1); 1.52 - // Variant for heap OOPs including decompression of compressed OOPs. 1.53 - inline void load_heap_oop_with_trap_null_check(Register d, RegisterOrConstant offs, Register s1); 1.54 + inline void load_with_trap_null_check(Register d, int si16, Register s1); 1.55 1.56 // Load heap oop and decompress. Loaded oop may not be null. 1.57 inline void load_heap_oop_not_null(Register d, RegisterOrConstant offs, Register s1 = noreg); 1.58 @@ -584,6 +599,8 @@ 1.59 is_trap_range_check_g(x) || is_trap_range_check_ge(x); 1.60 } 1.61 1.62 + void clear_memory_doubleword(Register base_ptr, Register cnt_dwords, Register tmp = R0); 1.63 + 1.64 // Needle of length 1. 1.65 void string_indexof_1(Register result, Register haystack, Register haycnt, 1.66 Register needle, jchar needleChar, 1.67 @@ -630,7 +647,7 @@ 1.68 1.69 // TODO: verify method and klass metadata (compare against vptr?) 1.70 void _verify_method_ptr(Register reg, const char * msg, const char * file, int line) {} 1.71 - void _verify_klass_ptr(Register reg, const char * msg, const char * file, int line){} 1.72 + void _verify_klass_ptr(Register reg, const char * msg, const char * file, int line) {} 1.73 1.74 #define verify_method_ptr(reg) _verify_method_ptr(reg, "broken method " #reg, __FILE__, __LINE__) 1.75 #define verify_klass_ptr(reg) _verify_klass_ptr(reg, "broken klass " #reg, __FILE__, __LINE__)