author | neliasso |
Thu, 14 Feb 2019 14:54:05 +0100 | |
changeset 55307 | ed12027517c0 |
parent 53844 | 8323fdac6da5 |
child 55563 | d56b192c73e9 |
permissions | -rw-r--r-- |
53542
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
1 |
// |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
2 |
// Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
3 |
// DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
4 |
// |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
5 |
// This code is free software; you can redistribute it and/or modify it |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
6 |
// under the terms of the GNU General Public License version 2 only, as |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
7 |
// published by the Free Software Foundation. |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
8 |
// |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
9 |
// This code is distributed in the hope that it will be useful, but WITHOUT |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
10 |
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
11 |
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
12 |
// version 2 for more details (a copy is included in the LICENSE file that |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
13 |
// accompanied this code). |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
14 |
// |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
15 |
// You should have received a copy of the GNU General Public License version |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
16 |
// 2 along with this work; if not, write to the Free Software Foundation, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
17 |
// Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
18 |
// |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
19 |
// Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
20 |
// or visit www.oracle.com if you need additional information or have any |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
21 |
// questions. |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
22 |
// |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
23 |
|
55307 | 24 |
source_hpp %{ |
25 |
||
26 |
#include "gc/z/c2/zBarrierSetC2.hpp" |
|
27 |
||
28 |
%} |
|
29 |
||
53542
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
30 |
source %{ |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
31 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
32 |
#include "gc/z/zBarrierSetAssembler.hpp" |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
33 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
34 |
static void z_load_barrier_slow_reg(MacroAssembler& _masm, Register dst, Address src, bool weak) { |
53844
8323fdac6da5
8218767: ZGC: Do not assume that r12 is a special register in C2
pliden
parents:
53542
diff
changeset
|
35 |
assert(dst != rsp, "Invalid register"); |
53542
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
36 |
assert(dst != r15, "Invalid register"); |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
37 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
38 |
const address stub = weak ? ZBarrierSet::assembler()->load_barrier_weak_slow_stub(dst) |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
39 |
: ZBarrierSet::assembler()->load_barrier_slow_stub(dst); |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
40 |
__ lea(dst, src); |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
41 |
__ call(RuntimeAddress(stub)); |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
42 |
} |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
43 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
44 |
%} |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
45 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
46 |
// For XMM and YMM enabled processors |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
47 |
instruct zLoadBarrierSlowRegXmmAndYmm(rRegP dst, memory src, rFlagsReg cr, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
48 |
rxmm0 x0, rxmm1 x1, rxmm2 x2,rxmm3 x3, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
49 |
rxmm4 x4, rxmm5 x5, rxmm6 x6, rxmm7 x7, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
50 |
rxmm8 x8, rxmm9 x9, rxmm10 x10, rxmm11 x11, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
51 |
rxmm12 x12, rxmm13 x13, rxmm14 x14, rxmm15 x15) %{ |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
52 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
53 |
match(Set dst (LoadBarrierSlowReg src)); |
55307 | 54 |
predicate((UseAVX <= 2) && !n->as_LoadBarrierSlowReg()->is_weak()); |
53542
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
55 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
56 |
effect(DEF dst, KILL cr, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
57 |
KILL x0, KILL x1, KILL x2, KILL x3, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
58 |
KILL x4, KILL x5, KILL x6, KILL x7, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
59 |
KILL x8, KILL x9, KILL x10, KILL x11, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
60 |
KILL x12, KILL x13, KILL x14, KILL x15); |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
61 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
62 |
format %{ "zLoadBarrierSlowRegXmmAndYmm $dst, $src" %} |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
63 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
64 |
ins_encode %{ |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
65 |
z_load_barrier_slow_reg(_masm, $dst$$Register, $src$$Address, false /* weak */); |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
66 |
%} |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
67 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
68 |
ins_pipe(pipe_slow); |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
69 |
%} |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
70 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
71 |
// For ZMM enabled processors |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
72 |
instruct zLoadBarrierSlowRegZmm(rRegP dst, memory src, rFlagsReg cr, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
73 |
rxmm0 x0, rxmm1 x1, rxmm2 x2,rxmm3 x3, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
74 |
rxmm4 x4, rxmm5 x5, rxmm6 x6, rxmm7 x7, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
75 |
rxmm8 x8, rxmm9 x9, rxmm10 x10, rxmm11 x11, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
76 |
rxmm12 x12, rxmm13 x13, rxmm14 x14, rxmm15 x15, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
77 |
rxmm16 x16, rxmm17 x17, rxmm18 x18, rxmm19 x19, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
78 |
rxmm20 x20, rxmm21 x21, rxmm22 x22, rxmm23 x23, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
79 |
rxmm24 x24, rxmm25 x25, rxmm26 x26, rxmm27 x27, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
80 |
rxmm28 x28, rxmm29 x29, rxmm30 x30, rxmm31 x31) %{ |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
81 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
82 |
match(Set dst (LoadBarrierSlowReg src)); |
55307 | 83 |
predicate((UseAVX == 3) && !n->as_LoadBarrierSlowReg()->is_weak()); |
53542
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
84 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
85 |
effect(DEF dst, KILL cr, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
86 |
KILL x0, KILL x1, KILL x2, KILL x3, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
87 |
KILL x4, KILL x5, KILL x6, KILL x7, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
88 |
KILL x8, KILL x9, KILL x10, KILL x11, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
89 |
KILL x12, KILL x13, KILL x14, KILL x15, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
90 |
KILL x16, KILL x17, KILL x18, KILL x19, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
91 |
KILL x20, KILL x21, KILL x22, KILL x23, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
92 |
KILL x24, KILL x25, KILL x26, KILL x27, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
93 |
KILL x28, KILL x29, KILL x30, KILL x31); |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
94 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
95 |
format %{ "zLoadBarrierSlowRegZmm $dst, $src" %} |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
96 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
97 |
ins_encode %{ |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
98 |
z_load_barrier_slow_reg(_masm, $dst$$Register, $src$$Address, false /* weak */); |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
99 |
%} |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
100 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
101 |
ins_pipe(pipe_slow); |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
102 |
%} |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
103 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
104 |
// For XMM and YMM enabled processors |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
105 |
instruct zLoadBarrierWeakSlowRegXmmAndYmm(rRegP dst, memory src, rFlagsReg cr, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
106 |
rxmm0 x0, rxmm1 x1, rxmm2 x2,rxmm3 x3, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
107 |
rxmm4 x4, rxmm5 x5, rxmm6 x6, rxmm7 x7, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
108 |
rxmm8 x8, rxmm9 x9, rxmm10 x10, rxmm11 x11, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
109 |
rxmm12 x12, rxmm13 x13, rxmm14 x14, rxmm15 x15) %{ |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
110 |
|
55307 | 111 |
match(Set dst (LoadBarrierSlowReg src)); |
112 |
predicate((UseAVX <= 2) && n->as_LoadBarrierSlowReg()->is_weak()); |
|
53542
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
113 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
114 |
effect(DEF dst, KILL cr, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
115 |
KILL x0, KILL x1, KILL x2, KILL x3, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
116 |
KILL x4, KILL x5, KILL x6, KILL x7, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
117 |
KILL x8, KILL x9, KILL x10, KILL x11, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
118 |
KILL x12, KILL x13, KILL x14, KILL x15); |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
119 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
120 |
format %{ "zLoadBarrierWeakSlowRegXmmAndYmm $dst, $src" %} |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
121 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
122 |
ins_encode %{ |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
123 |
z_load_barrier_slow_reg(_masm, $dst$$Register, $src$$Address, true /* weak */); |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
124 |
%} |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
125 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
126 |
ins_pipe(pipe_slow); |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
127 |
%} |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
128 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
129 |
// For ZMM enabled processors |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
130 |
instruct zLoadBarrierWeakSlowRegZmm(rRegP dst, memory src, rFlagsReg cr, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
131 |
rxmm0 x0, rxmm1 x1, rxmm2 x2,rxmm3 x3, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
132 |
rxmm4 x4, rxmm5 x5, rxmm6 x6, rxmm7 x7, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
133 |
rxmm8 x8, rxmm9 x9, rxmm10 x10, rxmm11 x11, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
134 |
rxmm12 x12, rxmm13 x13, rxmm14 x14, rxmm15 x15, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
135 |
rxmm16 x16, rxmm17 x17, rxmm18 x18, rxmm19 x19, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
136 |
rxmm20 x20, rxmm21 x21, rxmm22 x22, rxmm23 x23, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
137 |
rxmm24 x24, rxmm25 x25, rxmm26 x26, rxmm27 x27, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
138 |
rxmm28 x28, rxmm29 x29, rxmm30 x30, rxmm31 x31) %{ |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
139 |
|
55307 | 140 |
match(Set dst (LoadBarrierSlowReg src)); |
141 |
predicate((UseAVX == 3) && n->as_LoadBarrierSlowReg()->is_weak()); |
|
53542
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
142 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
143 |
effect(DEF dst, KILL cr, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
144 |
KILL x0, KILL x1, KILL x2, KILL x3, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
145 |
KILL x4, KILL x5, KILL x6, KILL x7, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
146 |
KILL x8, KILL x9, KILL x10, KILL x11, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
147 |
KILL x12, KILL x13, KILL x14, KILL x15, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
148 |
KILL x16, KILL x17, KILL x18, KILL x19, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
149 |
KILL x20, KILL x21, KILL x22, KILL x23, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
150 |
KILL x24, KILL x25, KILL x26, KILL x27, |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
151 |
KILL x28, KILL x29, KILL x30, KILL x31); |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
152 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
153 |
format %{ "zLoadBarrierWeakSlowRegZmm $dst, $src" %} |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
154 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
155 |
ins_encode %{ |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
156 |
z_load_barrier_slow_reg(_masm, $dst$$Register, $src$$Address, true /* weak */); |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
157 |
%} |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
158 |
|
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
159 |
ins_pipe(pipe_slow); |
5c80e6994d8a
8217856: ZGC: Break out C2 matching rules into separate AD file
pliden
parents:
diff
changeset
|
160 |
%} |
55307 | 161 |
|
162 |
// Specialized versions of compareAndExchangeP that adds a keepalive that is consumed |
|
163 |
// but doesn't affect output. |
|
164 |
||
165 |
instruct z_compareAndExchangeP( |
|
166 |
memory mem_ptr, |
|
167 |
rax_RegP oldval, rRegP newval, rRegP keepalive, |
|
168 |
rFlagsReg cr) %{ |
|
169 |
predicate(VM_Version::supports_cx8()); |
|
170 |
match(Set oldval (ZCompareAndExchangeP (Binary mem_ptr keepalive) (Binary oldval newval))); |
|
171 |
effect(KILL cr); |
|
172 |
||
173 |
format %{ "cmpxchgq $mem_ptr,$newval\t# " |
|
174 |
"If rax == $mem_ptr then store $newval into $mem_ptr\n\t" %} |
|
175 |
opcode(0x0F, 0xB1); |
|
176 |
ins_encode(lock_prefix, |
|
177 |
REX_reg_mem_wide(newval, mem_ptr), |
|
178 |
OpcP, OpcS, |
|
179 |
reg_mem(newval, mem_ptr) // lock cmpxchg |
|
180 |
); |
|
181 |
ins_pipe( pipe_cmpxchg ); |
|
182 |
%} |
|
183 |
||
184 |
instruct z_compareAndSwapP(rRegI res, |
|
185 |
memory mem_ptr, |
|
186 |
rax_RegP oldval, rRegP newval, rRegP keepalive, |
|
187 |
rFlagsReg cr) %{ |
|
188 |
predicate(VM_Version::supports_cx8()); |
|
189 |
match(Set res (ZCompareAndSwapP (Binary mem_ptr keepalive) (Binary oldval newval))); |
|
190 |
match(Set res (ZWeakCompareAndSwapP (Binary mem_ptr keepalive) (Binary oldval newval))); |
|
191 |
effect(KILL cr, KILL oldval); |
|
192 |
||
193 |
format %{ "cmpxchgq $mem_ptr,$newval\t# " |
|
194 |
"If rax == $mem_ptr then store $newval into $mem_ptr\n\t" |
|
195 |
"sete $res\n\t" |
|
196 |
"movzbl $res, $res" %} |
|
197 |
opcode(0x0F, 0xB1); |
|
198 |
ins_encode(lock_prefix, |
|
199 |
REX_reg_mem_wide(newval, mem_ptr), |
|
200 |
OpcP, OpcS, |
|
201 |
reg_mem(newval, mem_ptr), |
|
202 |
REX_breg(res), Opcode(0x0F), Opcode(0x94), reg(res), // sete |
|
203 |
REX_reg_breg(res, res), // movzbl |
|
204 |
Opcode(0xF), Opcode(0xB6), reg_reg(res, res)); |
|
205 |
ins_pipe( pipe_cmpxchg ); |
|
206 |
%} |
|
207 |
||
208 |
instruct z_xchgP( memory mem, rRegP newval, rRegP keepalive) %{ |
|
209 |
match(Set newval (ZGetAndSetP mem (Binary newval keepalive))); |
|
210 |
format %{ "XCHGQ $newval,[$mem]" %} |
|
211 |
ins_encode %{ |
|
212 |
__ xchgq($newval$$Register, $mem$$Address); |
|
213 |
%} |
|
214 |
ins_pipe( pipe_cmpxchg ); |
|
215 |
%} |