--- a/src/hotspot/cpu/x86/macroAssembler_x86.hpp Wed Apr 11 10:05:02 2018 -0400
+++ b/src/hotspot/cpu/x86/macroAssembler_x86.hpp Wed Apr 11 16:07:42 2018 +0200
@@ -38,11 +38,7 @@
friend class LIR_Assembler;
friend class Runtime1; // as_Address()
- protected:
-
- Address as_Address(AddressLiteral adr);
- Address as_Address(ArrayAddress adr);
-
+ public:
// Support for VM calls
//
// This is the base routine called by the different versions of call_VM_leaf. The interpreter
@@ -54,6 +50,7 @@
int number_of_arguments // the number of arguments to pop after the call
);
+ protected:
// This is the base routine called by the different versions of call_VM. The interpreter
// may customize this version by overriding it for its purposes (e.g., to save/restore
// additional registers when doing a VM call).
@@ -87,6 +84,9 @@
virtual void check_and_handle_popframe(Register java_thread);
virtual void check_and_handle_earlyret(Register java_thread);
+ Address as_Address(AddressLiteral adr);
+ Address as_Address(ArrayAddress adr);
+
// Support for NULL-checks
//
// Generates code that causes a NULL OS exception if the content of reg is NULL.
@@ -293,29 +293,9 @@
// thread in the default location (r15_thread on 64bit)
void reset_last_Java_frame(bool clear_fp);
- // Stores
- void store_check(Register obj); // store check for obj - register is destroyed afterwards
- void store_check(Register obj, Address dst); // same as above, dst is exact store location (reg. is destroyed)
-
- void resolve_jobject(Register value, Register thread, Register tmp);
+ // jobjects
void clear_jweak_tag(Register possibly_jweak);
-
-#if INCLUDE_ALL_GCS
-
- void g1_write_barrier_pre(Register obj,
- Register pre_val,
- Register thread,
- Register tmp,
- bool tosca_live,
- bool expand_call);
-
- void g1_write_barrier_post(Register store_addr,
- Register new_val,
- Register thread,
- Register tmp,
- Register tmp2);
-
-#endif // INCLUDE_ALL_GCS
+ void resolve_jobject(Register value, Register thread, Register tmp);
// C 'boolean' to Java boolean: x == 0 ? 0 : 1
void c2bool(Register x);
@@ -334,9 +314,17 @@
void load_klass(Register dst, Register src);
void store_klass(Register dst, Register src);
- void load_heap_oop(Register dst, Address src);
- void load_heap_oop_not_null(Register dst, Address src);
- void store_heap_oop(Address dst, Register src);
+ void access_load_at(BasicType type, DecoratorSet decorators, Register dst, Address src,
+ Register tmp1, Register thread_tmp);
+ void access_store_at(BasicType type, DecoratorSet decorators, Address dst, Register src,
+ Register tmp1, Register tmp2);
+
+ void load_heap_oop(Register dst, Address src, Register tmp1 = noreg,
+ Register thread_tmp = noreg, DecoratorSet decorators = 0);
+ void load_heap_oop_not_null(Register dst, Address src, Register tmp1 = noreg,
+ Register thread_tmp = noreg, DecoratorSet decorators = 0);
+ void store_heap_oop(Address dst, Register src, Register tmp1 = noreg,
+ Register tmp2 = noreg, DecoratorSet decorators = 0);
// Used for storing NULL. All other oop constants should be
// stored using routines that take a jobject.