--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp Thu Oct 17 20:27:44 2019 +0100
+++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp Thu Oct 17 20:53:35 2019 +0100
@@ -1,6 +1,6 @@
/*
* Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2014, 2015, Red Hat Inc. All rights reserved.
+ * Copyright (c) 2014, 2019, Red Hat Inc. 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
@@ -170,13 +170,10 @@
virtual void _call_Unimplemented(address call_site) {
mov(rscratch2, call_site);
- haltsim();
}
#define call_Unimplemented() _call_Unimplemented((address)__PRETTY_FUNCTION__)
- virtual void notify(int type);
-
// aliases defined in AARCH64 spec
template<class T>
@@ -445,12 +442,18 @@
int push(unsigned int bitset, Register stack);
int pop(unsigned int bitset, Register stack);
+ int push_fp(unsigned int bitset, Register stack);
+ int pop_fp(unsigned int bitset, Register stack);
+
void mov(Register dst, Address a);
public:
void push(RegSet regs, Register stack) { if (regs.bits()) push(regs.bits(), stack); }
void pop(RegSet regs, Register stack) { if (regs.bits()) pop(regs.bits(), stack); }
+ void push_fp(RegSet regs, Register stack) { if (regs.bits()) push_fp(regs.bits(), stack); }
+ void pop_fp(RegSet regs, Register stack) { if (regs.bits()) pop_fp(regs.bits(), stack); }
+
// Push and pop everything that might be clobbered by a native
// runtime call except rscratch1 and rscratch2. (They are always
// scratch, so we don't have to protect them.) Only save the lower
@@ -788,6 +791,8 @@
// C 'boolean' to Java boolean: x == 0 ? 0 : 1
void c2bool(Register x);
+ void load_method_holder(Register holder, Register method);
+
// oop manipulations
void load_klass(Register dst, Register src);
void store_klass(Register dst, Register src);
@@ -926,6 +931,11 @@
Register temp_reg,
Label& L_success);
+ void clinit_barrier(Register klass,
+ Register thread,
+ Label* L_fast_path = NULL,
+ Label* L_slow_path = NULL);
+
Address argument_address(RegisterOrConstant arg_slot, int extra_slot_offset = 0);
@@ -1178,28 +1188,6 @@
//
public:
- // enum used for aarch64--x86 linkage to define return type of x86 function
- enum ret_type { ret_type_void, ret_type_integral, ret_type_float, ret_type_double};
-
-#ifdef BUILTIN_SIM
- void c_stub_prolog(int gp_arg_count, int fp_arg_count, int ret_type, address *prolog_ptr = NULL);
-#else
- void c_stub_prolog(int gp_arg_count, int fp_arg_count, int ret_type) { }
-#endif
-
- // special version of call_VM_leaf_base needed for aarch64 simulator
- // where we need to specify both the gp and fp arg counts and the
- // return type so that the linkage routine from aarch64 to x86 and
- // back knows which aarch64 registers to copy to x86 registers and
- // which x86 result register to copy back to an aarch64 register
-
- void call_VM_leaf_base1(
- address entry_point, // the entry point
- int number_of_gp_arguments, // the number of gp reg arguments to pass
- int number_of_fp_arguments, // the number of fp reg arguments to pass
- ret_type type, // the return type for the call
- Label* retaddr = NULL
- );
void ldr_constant(Register dest, const Address &const_addr) {
if (NearCpool) {
@@ -1362,6 +1350,9 @@
spill(tmp1, true, dst_offset+8);
}
}
+
+ void cache_wb(Address line);
+ void cache_wbsync(bool is_pre);
};
#ifdef ASSERT