< prev index next > src/hotspot/cpu/ppc/macroAssembler_ppc.hpp
Print this page
#ifndef CPU_PPC_MACROASSEMBLER_PPC_HPP
#define CPU_PPC_MACROASSEMBLER_PPC_HPP
#include "asm/assembler.hpp"
#include "oops/accessDecorators.hpp"
+ #include "runtime/signature.hpp"
#include "utilities/macros.hpp"
// MacroAssembler extends Assembler by a few frequently used macros.
class ciTypeArray;
class OopMap;
+ class ciInlineKlass;
+ class SigEntry;
+ class VMRegPair;
class MacroAssembler: public Assembler {
public:
MacroAssembler(CodeBuffer* code) : Assembler(code) {}
enum { trampoline_stub_size = 6 * 4 };
address trampoline_call(AddressLiteral target,
Register Rmethod_toc = noreg,
bool scratch_emit = false);
+ // Inline type specific methods
+ #include "asm/macroAssembler_common.hpp"
+
+ void save_stack_increment(int sp_inc, int frame_size);
+
protected:
// It is imperative that all calls into the VM are handled via the
// call_VM macros. They make sure that the stack linkage is setup
// correctly. call_VM's correspond to ENTRY/ENTRY_X entry points
void load_method_holder(Register holder, Register method);
void decode_klass_not_null(Register dst, Register src = noreg);
Register encode_klass_not_null(Register dst, Register src = noreg);
+ // markWord tests, kills markWord reg
+ void test_markword_is_inline_type(Register markword, Label& is_inline_type);
+
+ // inlineKlass queries, kills temp_reg
+ void test_oop_is_not_inline_type(Register object, Label& not_inline_type, bool can_be_null = true);
+
+ void test_field_is_null_free_inline_type(Register flags, Label& is_null_free);
+ void test_field_is_not_null_free_inline_type(Register flags, Label& not_null_free);
+ void test_field_is_flat(Register flags, Label& is_flat);
+
+ // Check oops for special arrays, i.e. flat arrays and/or null-free arrays
+ void test_oop_prototype_bit(Register oop, Register temp_reg, int32_t test_bit, bool jmp_set, Label& jmp_label, bool maybe_far = false);
+ void test_flat_array_oop(Register oop, Register temp_reg, Label& is_flat_array, bool maybe_far = false);
+ void test_non_flat_array_oop(Register oop, Register temp_reg, Label& is_non_flat_array);
+ void test_null_free_array_oop(Register oop, Register temp_reg, Label& is_null_free_array, bool maybe_far = false);
+ void test_non_null_free_array_oop(Register oop, Register temp_reg, Label& is_non_null_free_array);
+
+ // Check array klass layout helper for flat or null-free arrays...
+ void test_flat_array_layout(Register lh, Label& is_flat_array);
+
+ void load_metadata(Register dst, Register src);
+
+ void flat_field_copy(DecoratorSet decorators, Register src, Register dst, Register inline_layout_info);
+
+ void load_prototype_header(Register dst, Register src);
+
+ void inline_layout_info(Register holder_klass, Register index, Register layout_info);
+
+ // inline type data payload offsets...
+ void payload_offset(Register inline_klass, Register offset);
+ void payload_address(Register oop, Register data, Register inline_klass, Register t1);
+
// SIGTRAP-based range checks for arrays.
inline void trap_range_check_l(Register a, Register b);
inline void trap_range_check_l(Register a, int si16);
static bool is_trap_range_check_l(int x) {
return (is_tw (x, traptoLessThanUnsigned, -1/*any reg*/, -1/*any reg*/) ||
}
void clear_memory_unrolled(Register base_ptr, int cnt_dwords, Register tmp = R0, int offset = 0);
void clear_memory_constlen(Register base_ptr, int cnt_dwords, Register tmp = R0);
void clear_memory_doubleword(Register base_ptr, Register cnt_dwords, Register tmp = R0, long const_cnt = -1);
+ void fill_words(Register base, Register cnt, Register value);
// Emitters for BigInteger.multiplyToLen intrinsic.
inline void multiply64(Register dest_hi, Register dest_lo,
Register x, Register y);
void add2_with_carry(Register dest_hi, Register dest_lo,
void untested (const char* msg = nullptr) { stop(stop_untested, msg); }
void unimplemented (const char* msg = nullptr) { stop(stop_unimplemented, msg); }
void should_not_reach_here(const char* msg = nullptr) { stop(stop_shouldnotreachhere, msg); }
void zap_from_to(Register low, int before, Register high, int after, Register val, Register addr) PRODUCT_RETURN;
+
+ // Inline type specific methods
+ #include "asm/macroAssembler_common.hpp"
};
#endif // CPU_PPC_MACROASSEMBLER_PPC_HPP
< prev index next >