< prev index next >
src/cpu/ppc/vm/macroAssembler_ppc.hpp
Print this page
rev 8109 : 8077838: Recent developments for ppc.
Reviewed-by: kvn
*** 1,8 ****
/*
! * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved.
! * Copyright 2012, 2014 SAP AG. 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,8 ----
/*
! * Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
! * Copyright 2012, 2015 SAP AG. 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.
*** 25,34 ****
--- 25,35 ----
#ifndef CPU_PPC_VM_MACROASSEMBLER_PPC_HPP
#define CPU_PPC_VM_MACROASSEMBLER_PPC_HPP
#include "asm/assembler.hpp"
+ #include "runtime/rtmLocking.hpp"
#include "utilities/macros.hpp"
// MacroAssembler extends Assembler by a few frequently used macros.
class ciTypeArray;
*** 430,441 ****
void cmpxchgw(ConditionRegister flag,
Register dest_current_value, Register compare_value, Register exchange_value, Register addr_base,
int semantics, bool cmpxchgx_hint = false,
Register int_flag_success = noreg, bool contention_hint = false);
void cmpxchgd(ConditionRegister flag,
! Register dest_current_value, Register compare_value, Register exchange_value, Register addr_base,
! int semantics, bool cmpxchgx_hint = false,
Register int_flag_success = noreg, Label* failed = NULL, bool contention_hint = false);
// interface method calling
void lookup_interface_method(Register recv_klass,
Register intf_klass,
--- 431,442 ----
void cmpxchgw(ConditionRegister flag,
Register dest_current_value, Register compare_value, Register exchange_value, Register addr_base,
int semantics, bool cmpxchgx_hint = false,
Register int_flag_success = noreg, bool contention_hint = false);
void cmpxchgd(ConditionRegister flag,
! Register dest_current_value, RegisterOrConstant compare_value, Register exchange_value,
! Register addr_base, int semantics, bool cmpxchgx_hint = false,
Register int_flag_success = noreg, Label* failed = NULL, bool contention_hint = false);
// interface method calling
void lookup_interface_method(Register recv_klass,
Register intf_klass,
*** 504,515 ****
// If allow_delay_slot_filling is set to true, the next instruction
// emitted after this one will go in an annulled delay slot if the
// biased locking exit case failed.
void biased_locking_exit(ConditionRegister cr_reg, Register mark_addr, Register temp_reg, Label& done);
! void compiler_fast_lock_object( ConditionRegister flag, Register oop, Register box, Register tmp1, Register tmp2, Register tmp3);
! void compiler_fast_unlock_object(ConditionRegister flag, Register oop, Register box, Register tmp1, Register tmp2, Register tmp3);
// Support for serializing memory accesses between threads
void serialize_memory(Register thread, Register tmp1, Register tmp2);
// GC barrier support.
--- 505,550 ----
// If allow_delay_slot_filling is set to true, the next instruction
// emitted after this one will go in an annulled delay slot if the
// biased locking exit case failed.
void biased_locking_exit(ConditionRegister cr_reg, Register mark_addr, Register temp_reg, Label& done);
! void atomic_inc_ptr(Register addr, Register result, int simm16 = 1);
! void atomic_ori_int(Register addr, Register result, int uimm16);
!
! #if INCLUDE_RTM_OPT
! void rtm_counters_update(Register abort_status, Register rtm_counters);
! void branch_on_random_using_tb(Register tmp, int count, Label& brLabel);
! void rtm_abort_ratio_calculation(Register rtm_counters_reg, RTMLockingCounters* rtm_counters,
! Metadata* method_data);
! void rtm_profiling(Register abort_status_Reg, Register temp_Reg,
! RTMLockingCounters* rtm_counters, Metadata* method_data, bool profile_rtm);
! void rtm_retry_lock_on_abort(Register retry_count, Register abort_status,
! Label& retryLabel, Label* checkRetry = NULL);
! void rtm_retry_lock_on_busy(Register retry_count, Register owner_addr, Label& retryLabel);
! void rtm_stack_locking(ConditionRegister flag, Register obj, Register mark_word, Register tmp,
! Register retry_on_abort_count,
! RTMLockingCounters* stack_rtm_counters,
! Metadata* method_data, bool profile_rtm,
! Label& DONE_LABEL, Label& IsInflated);
! void rtm_inflated_locking(ConditionRegister flag, Register obj, Register mark_word, Register box,
! Register retry_on_busy_count, Register retry_on_abort_count,
! RTMLockingCounters* rtm_counters,
! Metadata* method_data, bool profile_rtm,
! Label& DONE_LABEL);
! #endif
!
! void compiler_fast_lock_object(ConditionRegister flag, Register oop, Register box,
! Register tmp1, Register tmp2, Register tmp3,
! bool try_bias = UseBiasedLocking,
! RTMLockingCounters* rtm_counters = NULL,
! RTMLockingCounters* stack_rtm_counters = NULL,
! Metadata* method_data = NULL,
! bool use_rtm = false, bool profile_rtm = false);
!
! void compiler_fast_unlock_object(ConditionRegister flag, Register oop, Register box,
! Register tmp1, Register tmp2, Register tmp3,
! bool try_bias = UseBiasedLocking, bool use_rtm = false);
// Support for serializing memory accesses between threads
void serialize_memory(Register thread, Register tmp1, Register tmp2);
// GC barrier support.
*** 574,584 ****
// Specify tmp register if d should not be changed.
inline void store_heap_oop_not_null(Register d, RegisterOrConstant offs, Register s1,
Register tmp = noreg);
// Null allowed.
! inline void load_heap_oop(Register d, RegisterOrConstant offs, Register s1 = noreg);
// Encode/decode heap oop. Oop may not be null, else en/decoding goes wrong.
// src == d allowed.
inline Register encode_heap_oop_not_null(Register d, Register src = noreg);
inline Register decode_heap_oop_not_null(Register d, Register src = noreg);
--- 609,619 ----
// Specify tmp register if d should not be changed.
inline void store_heap_oop_not_null(Register d, RegisterOrConstant offs, Register s1,
Register tmp = noreg);
// Null allowed.
! inline void load_heap_oop(Register d, RegisterOrConstant offs, Register s1 = noreg, Label *is_null = NULL);
// Encode/decode heap oop. Oop may not be null, else en/decoding goes wrong.
// src == d allowed.
inline Register encode_heap_oop_not_null(Register d, Register src = noreg);
inline Register decode_heap_oop_not_null(Register d, Register src = noreg);
*** 591,601 ****
void load_klass_with_trap_null_check(Register dst, Register src);
void store_klass(Register dst_oop, Register klass, Register tmp = R0);
void store_klass_gap(Register dst_oop, Register val = noreg); // Will store 0 if val not specified.
static int instr_size_for_decode_klass_not_null();
void decode_klass_not_null(Register dst, Register src = noreg);
! void encode_klass_not_null(Register dst, Register src = noreg);
// Load common heap base into register.
void reinit_heapbase(Register d, Register tmp = noreg);
// SIGTRAP-based range checks for arrays.
--- 626,636 ----
void load_klass_with_trap_null_check(Register dst, Register src);
void store_klass(Register dst_oop, Register klass, Register tmp = R0);
void store_klass_gap(Register dst_oop, Register val = noreg); // Will store 0 if val not specified.
static int instr_size_for_decode_klass_not_null();
void decode_klass_not_null(Register dst, Register src = noreg);
! Register encode_klass_not_null(Register dst, Register src = noreg);
// Load common heap base into register.
void reinit_heapbase(Register d, Register tmp = noreg);
// SIGTRAP-based range checks for arrays.
< prev index next >