Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/jdk17u
Path: blob/master/src/hotspot/cpu/ppc/gc/shenandoah/shenandoahBarrierSetAssembler_ppc.hpp
66646 views
1
/*
2
* Copyright (c) 2018, 2021, Red Hat, Inc. All rights reserved.
3
* Copyright (c) 2012, 2021 SAP SE. All rights reserved.
4
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5
*
6
* This code is free software; you can redistribute it and/or modify it
7
* under the terms of the GNU General Public License version 2 only, as
8
* published by the Free Software Foundation.
9
*
10
* This code is distributed in the hope that it will be useful, but WITHOUT
11
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13
* version 2 for more details (a copy is included in the LICENSE file that
14
* accompanied this code).
15
*
16
* You should have received a copy of the GNU General Public License version
17
* 2 along with this work; if not, write to the Free Software Foundation,
18
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19
*
20
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21
* or visit www.oracle.com if you need additional information or have any
22
* questions.
23
*
24
*/
25
26
#ifndef CPU_PPC_GC_SHENANDOAH_SHENANDOAHBARRIERSETASSEMBLER_PPC_HPP
27
#define CPU_PPC_GC_SHENANDOAH_SHENANDOAHBARRIERSETASSEMBLER_PPC_HPP
28
29
#include "asm/macroAssembler.hpp"
30
#include "gc/shared/barrierSetAssembler.hpp"
31
#include "gc/shenandoah/shenandoahBarrierSet.hpp"
32
33
#ifdef COMPILER1
34
35
class LIR_Assembler;
36
class ShenandoahPreBarrierStub;
37
class ShenandoahLoadReferenceBarrierStub;
38
class StubAssembler;
39
40
#endif
41
42
class StubCodeGenerator;
43
44
class ShenandoahBarrierSetAssembler: public BarrierSetAssembler {
45
private:
46
47
/* ==== Actual barrier implementations ==== */
48
void satb_write_barrier_impl(MacroAssembler* masm, DecoratorSet decorators,
49
Register base, RegisterOrConstant ind_or_offs,
50
Register pre_val,
51
Register tmp1, Register tmp2,
52
MacroAssembler::PreservationLevel preservation_level);
53
54
void load_reference_barrier_impl(MacroAssembler* masm, DecoratorSet decorators,
55
Register base, RegisterOrConstant ind_or_offs,
56
Register dst,
57
Register tmp1, Register tmp2,
58
MacroAssembler::PreservationLevel preservation_level);
59
60
/* ==== Helper methods for barrier implementations ==== */
61
void resolve_forward_pointer_not_null(MacroAssembler* masm, Register dst, Register tmp);
62
63
public:
64
65
/* ==== C1 stubs ==== */
66
#ifdef COMPILER1
67
68
void gen_pre_barrier_stub(LIR_Assembler* ce, ShenandoahPreBarrierStub* stub);
69
70
void gen_load_reference_barrier_stub(LIR_Assembler* ce, ShenandoahLoadReferenceBarrierStub* stub);
71
72
void generate_c1_pre_barrier_runtime_stub(StubAssembler* sasm);
73
74
void generate_c1_load_reference_barrier_runtime_stub(StubAssembler* sasm, DecoratorSet decorators);
75
76
#endif
77
78
/* ==== Available barriers (facades of the actual implementations) ==== */
79
void satb_write_barrier(MacroAssembler* masm,
80
Register base, RegisterOrConstant ind_or_offs,
81
Register tmp1, Register tmp2, Register tmp3,
82
MacroAssembler::PreservationLevel preservation_level);
83
84
void iu_barrier(MacroAssembler* masm,
85
Register val,
86
Register tmp1, Register tmp2,
87
MacroAssembler::PreservationLevel preservation_level, DecoratorSet decorators = 0);
88
89
void load_reference_barrier(MacroAssembler* masm, DecoratorSet decorators,
90
Register base, RegisterOrConstant ind_or_offs,
91
Register dst,
92
Register tmp1, Register tmp2,
93
MacroAssembler::PreservationLevel preservation_level);
94
95
/* ==== Helper methods used by C1 and C2 ==== */
96
void cmpxchg_oop(MacroAssembler* masm, Register base_addr, Register expected, Register new_val,
97
Register tmp1, Register tmp2,
98
bool is_cae, Register result);
99
100
/* ==== Access api ==== */
101
virtual void arraycopy_prologue(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
102
Register src, Register dst, Register count, Register preserve1, Register preserve2);
103
104
virtual void store_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
105
Register base, RegisterOrConstant ind_or_offs, Register val,
106
Register tmp1, Register tmp2, Register tmp3,
107
MacroAssembler::PreservationLevel preservation_level);
108
109
virtual void load_at(MacroAssembler* masm, DecoratorSet decorators, BasicType type,
110
Register base, RegisterOrConstant ind_or_offs, Register dst,
111
Register tmp1, Register tmp2,
112
MacroAssembler::PreservationLevel preservation_level, Label* L_handle_null = NULL);
113
114
virtual void try_resolve_jobject_in_native(MacroAssembler* masm, Register dst, Register jni_env,
115
Register obj, Register tmp, Label& slowpath);
116
};
117
118
#endif // CPU_PPC_GC_SHENANDOAH_SHENANDOAHBARRIERSETASSEMBLER_PPC_HPP
119
120