src/cpu/ppc/vm/macroAssembler_ppc.hpp

changeset 6495
67fa91961822
parent 6477
eb178e97560c
child 6511
31e80afe3fed
     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__)

mercurial