Mercurial > hg > truffle
annotate graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java @ 13931:ce73694346b2
minor assembly tweaks
author | Tom Rodriguez <tom.rodriguez@oracle.com> |
---|---|
date | Tue, 11 Feb 2014 10:37:28 -0800 |
parents | 40e81cba9e08 |
children | 390c4b742890 38c881305352 |
rev | line source |
---|---|
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
1 /* |
8144
a016a19f3792
Remove SpillMoveOp.
Roland Schatz <roland.schatz@oracle.com>
parents:
8136
diff
changeset
|
2 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
4 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
8 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
14 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
18 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
21 * questions. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
22 */ |
5060
4ed4295ce15f
Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5059
diff
changeset
|
23 package com.oracle.graal.lir.amd64; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
24 |
5547
b6617d13ea44
Dropping Ci* prefixes. Some additional renamings in the api.code interface.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5539
diff
changeset
|
25 import static com.oracle.graal.api.code.ValueUtil.*; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
26 import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
27 import static java.lang.Double.*; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
28 import static java.lang.Float.*; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
29 |
6580
d56d600819fe
moved AMD64 into its own (new) project: com.oracle.graal.amd64
Doug Simon <doug.simon@oracle.com>
parents:
6539
diff
changeset
|
30 import com.oracle.graal.amd64.*; |
7882
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
31 import com.oracle.graal.api.code.*; |
5507
dc71b06d09f8
Moving classes from cri.ri to api.meta.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5506
diff
changeset
|
32 import com.oracle.graal.api.meta.*; |
6531
4afe23aa0a00
renamed packages: com.oracle.max.asm... -> com.oracle.graal.asm...
Doug Simon <doug.simon@oracle.com>
parents:
6493
diff
changeset
|
33 import com.oracle.graal.asm.*; |
4afe23aa0a00
renamed packages: com.oracle.max.asm... -> com.oracle.graal.asm...
Doug Simon <doug.simon@oracle.com>
parents:
6493
diff
changeset
|
34 import com.oracle.graal.asm.amd64.*; |
5060
4ed4295ce15f
Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5059
diff
changeset
|
35 import com.oracle.graal.graph.*; |
4ed4295ce15f
Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5059
diff
changeset
|
36 import com.oracle.graal.lir.*; |
12785
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
37 import com.oracle.graal.lir.StandardOp.ImplicitNullCheck; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
38 import com.oracle.graal.lir.StandardOp.MoveOp; |
12785
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
39 import com.oracle.graal.lir.StandardOp.NullCheck; |
5060
4ed4295ce15f
Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5059
diff
changeset
|
40 import com.oracle.graal.lir.asm.*; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
41 |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
42 public class AMD64Move { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
43 |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
44 @Opcode("MOVE") |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
45 public static class MoveToRegOp extends AMD64LIRInstruction implements MoveOp { |
7881 | 46 |
9297
a5f2b9012865
Interval locations can only be AllocatableValues.
Roland Schatz <roland.schatz@oracle.com>
parents:
9293
diff
changeset
|
47 @Def({REG, HINT}) protected AllocatableValue result; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
48 @Use({REG, STACK, CONST}) protected Value input; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
49 |
9297
a5f2b9012865
Interval locations can only be AllocatableValues.
Roland Schatz <roland.schatz@oracle.com>
parents:
9293
diff
changeset
|
50 public MoveToRegOp(AllocatableValue result, Value input) { |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
51 this.result = result; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
52 this.input = input; |
4245
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
53 } |
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
54 |
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
55 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
56 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
57 move(crb, masm, getResult(), getInput()); |
4245
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
58 } |
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
59 |
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
60 @Override |
5539
bc647d8b0080
Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5538
diff
changeset
|
61 public Value getInput() { |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
62 return input; |
4245
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
63 } |
7881 | 64 |
4245
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
65 @Override |
9297
a5f2b9012865
Interval locations can only be AllocatableValues.
Roland Schatz <roland.schatz@oracle.com>
parents:
9293
diff
changeset
|
66 public AllocatableValue getResult() { |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
67 return result; |
4245
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
68 } |
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
69 } |
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
70 |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
71 @Opcode("MOVE") |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
72 public static class MoveFromRegOp extends AMD64LIRInstruction implements MoveOp { |
7881 | 73 |
9297
a5f2b9012865
Interval locations can only be AllocatableValues.
Roland Schatz <roland.schatz@oracle.com>
parents:
9293
diff
changeset
|
74 @Def({REG, STACK}) protected AllocatableValue result; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
75 @Use({REG, CONST, HINT}) protected Value input; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
76 |
9297
a5f2b9012865
Interval locations can only be AllocatableValues.
Roland Schatz <roland.schatz@oracle.com>
parents:
9293
diff
changeset
|
77 public MoveFromRegOp(AllocatableValue result, Value input) { |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
78 this.result = result; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
79 this.input = input; |
4245
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
80 } |
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
81 |
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
82 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
83 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
84 move(crb, masm, getResult(), getInput()); |
4245
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
85 } |
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
86 |
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
87 @Override |
5539
bc647d8b0080
Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5538
diff
changeset
|
88 public Value getInput() { |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
89 return input; |
4245
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
90 } |
7881 | 91 |
4245
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
92 @Override |
9297
a5f2b9012865
Interval locations can only be AllocatableValues.
Roland Schatz <roland.schatz@oracle.com>
parents:
9293
diff
changeset
|
93 public AllocatableValue getResult() { |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
94 return result; |
4245
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
95 } |
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
96 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
97 |
12785
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
98 public abstract static class MemOp extends AMD64LIRInstruction implements ImplicitNullCheck { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
99 |
9293
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
100 protected final Kind kind; |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
101 @Use({COMPOSITE}) protected AMD64AddressValue address; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
102 @State protected LIRFrameState state; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
103 |
9293
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
104 public MemOp(Kind kind, AMD64AddressValue address, LIRFrameState state) { |
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
105 this.kind = kind; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
106 this.address = address; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
107 this.state = state; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
108 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
109 |
13520
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
110 protected abstract void emitMemAccess(CompilationResultBuilder crb, AMD64MacroAssembler masm); |
7905
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
111 |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
112 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
113 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
114 if (state != null) { |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
115 crb.recordImplicitException(masm.codeBuffer.position(), state); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
116 } |
13520
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
117 emitMemAccess(crb, masm); |
7905
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
118 } |
12785
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
119 |
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
120 public boolean makeNullCheckFor(Value value, LIRFrameState nullCheckState, int implicitNullCheckLimit) { |
13111
caeacd31800a
replaced == with equals as pointed out by VerifyUsageWithEquals
twisti
parents:
12785
diff
changeset
|
121 if (state == null && value.equals(address.base) && address.index.equals(Value.ILLEGAL) && address.displacement >= 0 && address.displacement < implicitNullCheckLimit) { |
12785
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
122 state = nullCheckState; |
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
123 return true; |
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
124 } |
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
125 return false; |
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
126 } |
7905
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
127 } |
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
128 |
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
129 public static class LoadOp extends MemOp { |
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
130 |
7908
775745294caa
Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents:
7905
diff
changeset
|
131 @Def({REG}) protected AllocatableValue result; |
7905
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
132 |
9293
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
133 public LoadOp(Kind kind, AllocatableValue result, AMD64AddressValue address, LIRFrameState state) { |
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
134 super(kind, address, state); |
7905
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
135 this.result = result; |
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
136 } |
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
137 |
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
138 @Override |
13520
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
139 public void emitMemAccess(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
9293
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
140 switch (kind) { |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
141 case Boolean: |
13931
ce73694346b2
minor assembly tweaks
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13587
diff
changeset
|
142 masm.movzbl(asRegister(result), address.toAddress()); |
ce73694346b2
minor assembly tweaks
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13587
diff
changeset
|
143 break; |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
144 case Byte: |
13587
40e81cba9e08
renamed movzx/movsx instructions; removed duplicate movswl; added movzbl
twisti
parents:
13576
diff
changeset
|
145 masm.movsbl(asRegister(result), address.toAddress()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
146 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
147 case Char: |
13587
40e81cba9e08
renamed movzx/movsx instructions; removed duplicate movswl; added movzbl
twisti
parents:
13576
diff
changeset
|
148 masm.movzwl(asRegister(result), address.toAddress()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
149 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
150 case Short: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
151 masm.movswl(asRegister(result), address.toAddress()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
152 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
153 case Int: |
12766
0b7172f093d0
don't sign extend integer laods
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
11959
diff
changeset
|
154 masm.movl(asRegister(result), address.toAddress()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
155 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
156 case Long: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
157 masm.movq(asRegister(result), address.toAddress()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
158 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
159 case Float: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
160 masm.movflt(asFloatReg(result), address.toAddress()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
161 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
162 case Double: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
163 masm.movdbl(asDoubleReg(result), address.toAddress()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
164 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
165 case Object: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
166 masm.movq(asRegister(result), address.toAddress()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
167 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
168 default: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
169 throw GraalInternalError.shouldNotReachHere(); |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
170 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
171 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
172 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
173 |
7905
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
174 public static class StoreOp extends MemOp { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
175 |
7908
775745294caa
Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents:
7905
diff
changeset
|
176 @Use({REG}) protected AllocatableValue input; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
177 |
9293
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
178 public StoreOp(Kind kind, AMD64AddressValue address, AllocatableValue input, LIRFrameState state) { |
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
179 super(kind, address, state); |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
180 this.input = input; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
181 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
182 |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
183 @Override |
13520
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
184 public void emitMemAccess(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
185 assert isRegister(input); |
9293
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
186 switch (kind) { |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
187 case Boolean: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
188 case Byte: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
189 masm.movb(address.toAddress(), asRegister(input)); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
190 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
191 case Char: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
192 case Short: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
193 masm.movw(address.toAddress(), asRegister(input)); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
194 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
195 case Int: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
196 masm.movl(address.toAddress(), asRegister(input)); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
197 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
198 case Long: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
199 masm.movq(address.toAddress(), asRegister(input)); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
200 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
201 case Float: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
202 masm.movflt(address.toAddress(), asFloatReg(input)); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
203 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
204 case Double: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
205 masm.movsd(address.toAddress(), asDoubleReg(input)); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
206 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
207 case Object: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
208 masm.movq(address.toAddress(), asRegister(input)); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
209 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
210 default: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
211 throw GraalInternalError.shouldNotReachHere(); |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
212 } |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
213 } |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
214 } |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
215 |
7905
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
216 public static class StoreConstantOp extends MemOp { |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
217 |
8136
c66aa27ef4da
Reenable patching of optimized and static calls but without out-of-line stubs.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7908
diff
changeset
|
218 protected final Constant input; |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
219 |
11474
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
11452
diff
changeset
|
220 public StoreConstantOp(Kind kind, AMD64AddressValue address, Constant input, LIRFrameState state) { |
9293
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
221 super(kind, address, state); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
222 this.input = input; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
223 } |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
224 |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
225 @Override |
13520
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
226 public void emitMemAccess(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
9293
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
227 switch (kind) { |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
228 case Boolean: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
229 case Byte: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
230 masm.movb(address.toAddress(), input.asInt() & 0xFF); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
231 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
232 case Char: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
233 case Short: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
234 masm.movw(address.toAddress(), input.asInt() & 0xFFFF); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
235 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
236 case Int: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
237 masm.movl(address.toAddress(), input.asInt()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
238 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
239 case Long: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
240 if (NumUtil.isInt(input.asLong())) { |
11474
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
11452
diff
changeset
|
241 masm.movslq(address.toAddress(), (int) input.asLong()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
242 } else { |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
243 throw GraalInternalError.shouldNotReachHere("Cannot store 64-bit constants to memory"); |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
244 } |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
245 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
246 case Float: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
247 masm.movl(address.toAddress(), floatToRawIntBits(input.asFloat())); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
248 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
249 case Double: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
250 throw GraalInternalError.shouldNotReachHere("Cannot store 64-bit constants to memory"); |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
251 case Object: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
252 if (input.isNull()) { |
11474
df18a4214c7c
Move compressed pointers' logic to HotSpot specific move
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
11452
diff
changeset
|
253 masm.movptr(address.toAddress(), 0); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
254 } else { |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
255 throw GraalInternalError.shouldNotReachHere("Cannot store 64-bit constants to memory"); |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
256 } |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
257 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
258 default: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
259 throw GraalInternalError.shouldNotReachHere(); |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
260 } |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
261 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
262 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
263 |
7881 | 264 public static class LeaOp extends AMD64LIRInstruction { |
4245
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
265 |
7908
775745294caa
Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents:
7905
diff
changeset
|
266 @Def({REG}) protected AllocatableValue result; |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
267 @Use({COMPOSITE, UNINITIALIZED}) protected AMD64AddressValue address; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
268 |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
269 public LeaOp(AllocatableValue result, AMD64AddressValue address) { |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
270 this.result = result; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
271 this.address = address; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
272 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
273 |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
274 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
275 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
276 masm.leaq(asLongReg(result), address.toAddress()); |
7882
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
277 } |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
278 } |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
279 |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
280 public static class StackLeaOp extends AMD64LIRInstruction { |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
281 |
7908
775745294caa
Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents:
7905
diff
changeset
|
282 @Def({REG}) protected AllocatableValue result; |
7882
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
283 @Use({STACK, UNINITIALIZED}) protected StackSlot slot; |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
284 |
7908
775745294caa
Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents:
7905
diff
changeset
|
285 public StackLeaOp(AllocatableValue result, StackSlot slot) { |
7882
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
286 this.result = result; |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
287 this.slot = slot; |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
288 } |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
289 |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
290 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
291 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
292 masm.leaq(asLongReg(result), (AMD64Address) crb.asAddress(slot)); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
293 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
294 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
295 |
7881 | 296 public static class MembarOp extends AMD64LIRInstruction { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
297 |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
298 private final int barriers; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
299 |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
300 public MembarOp(final int barriers) { |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
301 this.barriers = barriers; |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
302 } |
4245
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
303 |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
304 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
305 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
306 masm.membar(barriers); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
307 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
308 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
309 |
12785
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
310 public static class NullCheckOp extends AMD64LIRInstruction implements NullCheck { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
311 |
8390
acc24060b64f
Use implicit null checks for all null checks
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
8166
diff
changeset
|
312 @Use({REG}) protected AllocatableValue input; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
313 @State protected LIRFrameState state; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
314 |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
315 public NullCheckOp(Variable input, LIRFrameState state) { |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
316 this.input = input; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
317 this.state = state; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
318 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
319 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
320 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
321 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
322 crb.recordImplicitException(masm.codeBuffer.position(), state); |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
323 masm.nullCheck(asRegister(input)); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
324 } |
12785
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
325 |
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
326 public Value getCheckedValue() { |
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
327 return input; |
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
328 } |
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
329 |
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
330 public LIRFrameState getState() { |
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
331 return state; |
c13633a4d472
peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents:
12766
diff
changeset
|
332 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
333 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
334 |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
335 @Opcode("CAS") |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
336 public static class CompareAndSwapOp extends AMD64LIRInstruction { |
7881 | 337 |
7908
775745294caa
Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents:
7905
diff
changeset
|
338 @Def protected AllocatableValue result; |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
339 @Use({COMPOSITE}) protected AMD64AddressValue address; |
7908
775745294caa
Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents:
7905
diff
changeset
|
340 @Use protected AllocatableValue cmpValue; |
775745294caa
Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents:
7905
diff
changeset
|
341 @Use protected AllocatableValue newValue; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
342 |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
343 public CompareAndSwapOp(AllocatableValue result, AMD64AddressValue address, AllocatableValue cmpValue, AllocatableValue newValue) { |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
344 this.result = result; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
345 this.address = address; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
346 this.cmpValue = cmpValue; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
347 this.newValue = newValue; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
348 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
349 |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
350 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
351 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
352 compareAndSwap(crb, masm, result, address, cmpValue, newValue); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
353 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
354 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
355 |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
356 public static void move(CompilationResultBuilder crb, AMD64MacroAssembler masm, Value result, Value input) { |
4183
9e0c1b4cfef5
Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4181
diff
changeset
|
357 if (isRegister(input)) { |
9e0c1b4cfef5
Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4181
diff
changeset
|
358 if (isRegister(result)) { |
9e0c1b4cfef5
Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4181
diff
changeset
|
359 reg2reg(masm, result, input); |
9e0c1b4cfef5
Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4181
diff
changeset
|
360 } else if (isStackSlot(result)) { |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
361 reg2stack(crb, masm, result, input); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
362 } else { |
4524
dcc8f5c6f394
Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4323
diff
changeset
|
363 throw GraalInternalError.shouldNotReachHere(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
364 } |
4183
9e0c1b4cfef5
Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4181
diff
changeset
|
365 } else if (isStackSlot(input)) { |
9e0c1b4cfef5
Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4181
diff
changeset
|
366 if (isRegister(result)) { |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
367 stack2reg(crb, masm, result, input); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
368 } else { |
4524
dcc8f5c6f394
Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4323
diff
changeset
|
369 throw GraalInternalError.shouldNotReachHere(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
370 } |
4183
9e0c1b4cfef5
Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4181
diff
changeset
|
371 } else if (isConstant(input)) { |
9e0c1b4cfef5
Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4181
diff
changeset
|
372 if (isRegister(result)) { |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
373 const2reg(crb, masm, result, (Constant) input); |
4183
9e0c1b4cfef5
Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4181
diff
changeset
|
374 } else if (isStackSlot(result)) { |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
375 const2stack(crb, masm, result, (Constant) input); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
376 } else { |
4524
dcc8f5c6f394
Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4323
diff
changeset
|
377 throw GraalInternalError.shouldNotReachHere(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
378 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
379 } else { |
4524
dcc8f5c6f394
Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4323
diff
changeset
|
380 throw GraalInternalError.shouldNotReachHere(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
381 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
382 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
383 |
5539
bc647d8b0080
Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5538
diff
changeset
|
384 private static void reg2reg(AMD64MacroAssembler masm, Value result, Value input) { |
6474
f2624e472426
ignore kinds when checking for redundant register to register move
Doug Simon <doug.simon@oracle.com>
parents:
6329
diff
changeset
|
385 if (asRegister(input).equals(asRegister(result))) { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
386 return; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
387 } |
6329
92bc58dc5b5e
More clean up and documentation in api.code and api.meta.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5733
diff
changeset
|
388 switch (input.getKind()) { |
7881 | 389 case Int: |
390 masm.movl(asRegister(result), asRegister(input)); | |
391 break; | |
392 case Long: | |
393 masm.movq(asRegister(result), asRegister(input)); | |
394 break; | |
395 case Float: | |
396 masm.movflt(asFloatReg(result), asFloatReg(input)); | |
397 break; | |
398 case Double: | |
399 masm.movdbl(asDoubleReg(result), asDoubleReg(input)); | |
400 break; | |
401 case Object: | |
402 masm.movq(asRegister(result), asRegister(input)); | |
403 break; | |
404 default: | |
405 throw GraalInternalError.shouldNotReachHere("kind=" + result.getKind()); | |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
406 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
407 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
408 |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
409 private static void reg2stack(CompilationResultBuilder crb, AMD64MacroAssembler masm, Value result, Value input) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
410 AMD64Address dest = (AMD64Address) crb.asAddress(result); |
6329
92bc58dc5b5e
More clean up and documentation in api.code and api.meta.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5733
diff
changeset
|
411 switch (input.getKind()) { |
7881 | 412 case Int: |
413 masm.movl(dest, asRegister(input)); | |
414 break; | |
415 case Long: | |
416 masm.movq(dest, asRegister(input)); | |
417 break; | |
418 case Float: | |
419 masm.movflt(dest, asFloatReg(input)); | |
420 break; | |
421 case Double: | |
422 masm.movsd(dest, asDoubleReg(input)); | |
423 break; | |
424 case Object: | |
425 masm.movq(dest, asRegister(input)); | |
426 break; | |
427 default: | |
428 throw GraalInternalError.shouldNotReachHere(); | |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
429 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
430 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
431 |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
432 private static void stack2reg(CompilationResultBuilder crb, AMD64MacroAssembler masm, Value result, Value input) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
433 AMD64Address src = (AMD64Address) crb.asAddress(input); |
6329
92bc58dc5b5e
More clean up and documentation in api.code and api.meta.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5733
diff
changeset
|
434 switch (input.getKind()) { |
7881 | 435 case Int: |
436 masm.movl(asRegister(result), src); | |
437 break; | |
438 case Long: | |
439 masm.movq(asRegister(result), src); | |
440 break; | |
441 case Float: | |
442 masm.movflt(asFloatReg(result), src); | |
443 break; | |
444 case Double: | |
445 masm.movdbl(asDoubleReg(result), src); | |
446 break; | |
447 case Object: | |
448 masm.movq(asRegister(result), src); | |
449 break; | |
450 default: | |
451 throw GraalInternalError.shouldNotReachHere(); | |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
452 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
453 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
454 |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
455 private static void const2reg(CompilationResultBuilder crb, AMD64MacroAssembler masm, Value result, Constant input) { |
7881 | 456 /* |
457 * Note: we use the kind of the input operand (and not the kind of the result operand) | |
458 * because they don't match in all cases. For example, an object constant can be loaded to a | |
459 * long register when unsafe casts occurred (e.g., for a write barrier where arithmetic | |
460 * operations are then performed on the pointer). | |
461 */ | |
6539
2463eb24b644
Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6531
diff
changeset
|
462 switch (input.getKind().getStackKind()) { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
463 case Int: |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
464 if (crb.codeCache.needsDataPatch(input)) { |
13576
4e679d50ba9a
Move data section building code to Java.
Roland Schatz <roland.schatz@oracle.com>
parents:
13520
diff
changeset
|
465 crb.recordInlineDataInCode(input); |
6996
eec373d34caf
added support for annotated Constants and used it to track Klass* values in Graal and register them in the metadata section of a nmethod during code installation
Doug Simon <doug.simon@oracle.com>
parents:
6580
diff
changeset
|
466 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
467 // Do not optimize with an XOR as this instruction may be between |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
468 // a CMP and a Jcc in which case the XOR will modify the condition |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
469 // flags and interfere with the Jcc. |
6996
eec373d34caf
added support for annotated Constants and used it to track Klass* values in Graal and register them in the metadata section of a nmethod during code installation
Doug Simon <doug.simon@oracle.com>
parents:
6580
diff
changeset
|
470 masm.movl(asRegister(result), input.asInt()); |
eec373d34caf
added support for annotated Constants and used it to track Klass* values in Graal and register them in the metadata section of a nmethod during code installation
Doug Simon <doug.simon@oracle.com>
parents:
6580
diff
changeset
|
471 |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
472 break; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
473 case Long: |
13520
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
474 boolean patch = false; |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
475 if (crb.codeCache.needsDataPatch(input)) { |
13520
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
476 patch = true; |
13576
4e679d50ba9a
Move data section building code to Java.
Roland Schatz <roland.schatz@oracle.com>
parents:
13520
diff
changeset
|
477 crb.recordInlineDataInCode(input); |
6996
eec373d34caf
added support for annotated Constants and used it to track Klass* values in Graal and register them in the metadata section of a nmethod during code installation
Doug Simon <doug.simon@oracle.com>
parents:
6580
diff
changeset
|
478 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
479 // Do not optimize with an XOR as this instruction may be between |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
480 // a CMP and a Jcc in which case the XOR will modify the condition |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
481 // flags and interfere with the Jcc. |
13520
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
482 if (patch) { |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
483 masm.movq(asRegister(result), input.asLong()); |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
484 } else { |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
485 if (input.asLong() == (int) input.asLong()) { |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
486 // Sign extended to long |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
487 masm.movslq(asRegister(result), (int) input.asLong()); |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
488 } else if ((input.asLong() & 0xFFFFFFFFL) == input.asLong()) { |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
489 // Zero extended to long |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
490 masm.movl(asRegister(result), (int) input.asLong()); |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
491 } else { |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
492 masm.movq(asRegister(result), input.asLong()); |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
493 } |
fb7b39f07232
Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13240
diff
changeset
|
494 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
495 break; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
496 case Float: |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
497 // This is *not* the same as 'constant == 0.0f' in the case where constant is -0.0f |
4581
8f985001dc27
Use kind of input operand (instead of result operand) to determine the type of moves, because an Object constant can be loaded to a Long register for unsafe operation.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4525
diff
changeset
|
498 if (Float.floatToRawIntBits(input.asFloat()) == Float.floatToRawIntBits(0.0f)) { |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
499 assert !crb.codeCache.needsDataPatch(input); |
4183
9e0c1b4cfef5
Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4181
diff
changeset
|
500 masm.xorps(asFloatReg(result), asFloatReg(result)); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
501 } else { |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
502 masm.movflt(asFloatReg(result), (AMD64Address) crb.asFloatConstRef(input)); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
503 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
504 break; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
505 case Double: |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
506 // This is *not* the same as 'constant == 0.0d' in the case where constant is -0.0d |
4581
8f985001dc27
Use kind of input operand (instead of result operand) to determine the type of moves, because an Object constant can be loaded to a Long register for unsafe operation.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4525
diff
changeset
|
507 if (Double.doubleToRawLongBits(input.asDouble()) == Double.doubleToRawLongBits(0.0d)) { |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
508 assert !crb.codeCache.needsDataPatch(input); |
4183
9e0c1b4cfef5
Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4181
diff
changeset
|
509 masm.xorpd(asDoubleReg(result), asDoubleReg(result)); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
510 } else { |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
511 masm.movdbl(asDoubleReg(result), (AMD64Address) crb.asDoubleConstRef(input)); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
512 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
513 break; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
514 case Object: |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
515 // Do not optimize with an XOR as this instruction may be between |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
516 // a CMP and a Jcc in which case the XOR will modify the condition |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
517 // flags and interfere with the Jcc. |
4581
8f985001dc27
Use kind of input operand (instead of result operand) to determine the type of moves, because an Object constant can be loaded to a Long register for unsafe operation.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4525
diff
changeset
|
518 if (input.isNull()) { |
4183
9e0c1b4cfef5
Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4181
diff
changeset
|
519 masm.movq(asRegister(result), 0x0L); |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
520 } else if (crb.target.inlineObjects) { |
13576
4e679d50ba9a
Move data section building code to Java.
Roland Schatz <roland.schatz@oracle.com>
parents:
13520
diff
changeset
|
521 crb.recordInlineDataInCode(input); |
4183
9e0c1b4cfef5
Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4181
diff
changeset
|
522 masm.movq(asRegister(result), 0xDEADDEADDEADDEADL); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
523 } else { |
13576
4e679d50ba9a
Move data section building code to Java.
Roland Schatz <roland.schatz@oracle.com>
parents:
13520
diff
changeset
|
524 masm.movq(asRegister(result), (AMD64Address) crb.recordDataReferenceInCode(input, 0)); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
525 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
526 break; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
527 default: |
4524
dcc8f5c6f394
Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4323
diff
changeset
|
528 throw GraalInternalError.shouldNotReachHere(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
529 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
530 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
531 |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
532 private static void const2stack(CompilationResultBuilder crb, AMD64MacroAssembler masm, Value result, Constant input) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
533 assert !crb.codeCache.needsDataPatch(input); |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
534 AMD64Address dest = (AMD64Address) crb.asAddress(result); |
6539
2463eb24b644
Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents:
6531
diff
changeset
|
535 switch (input.getKind().getStackKind()) { |
7881 | 536 case Int: |
537 masm.movl(dest, input.asInt()); | |
538 break; | |
539 case Long: | |
540 masm.movlong(dest, input.asLong()); | |
541 break; | |
542 case Float: | |
543 masm.movl(dest, floatToRawIntBits(input.asFloat())); | |
544 break; | |
545 case Double: | |
546 masm.movlong(dest, doubleToRawLongBits(input.asDouble())); | |
547 break; | |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
548 case Object: |
4581
8f985001dc27
Use kind of input operand (instead of result operand) to determine the type of moves, because an Object constant can be loaded to a Long register for unsafe operation.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4525
diff
changeset
|
549 if (input.isNull()) { |
7839
838293a77af7
Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents:
7827
diff
changeset
|
550 masm.movlong(dest, 0L); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
551 } else { |
4524
dcc8f5c6f394
Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4323
diff
changeset
|
552 throw GraalInternalError.shouldNotReachHere("Non-null object constants must be in register"); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
553 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
554 break; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
555 default: |
4524
dcc8f5c6f394
Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4323
diff
changeset
|
556 throw GraalInternalError.shouldNotReachHere(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
557 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
558 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
559 |
13240
3543861aeeb2
fixes for eclipseformat
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
560 protected static void compareAndSwap(CompilationResultBuilder crb, AMD64MacroAssembler masm, AllocatableValue result, AMD64AddressValue address, AllocatableValue cmpValue, |
3543861aeeb2
fixes for eclipseformat
Doug Simon <doug.simon@oracle.com>
parents:
13227
diff
changeset
|
561 AllocatableValue newValue) { |
9791
e92fdf3e1558
Register: replace usages of object identity with equals()
Bernhard Urban <bernhard.urban@jku.at>
parents:
9297
diff
changeset
|
562 assert asRegister(cmpValue).equals(AMD64.rax) && asRegister(result).equals(AMD64.rax); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
563 |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
13111
diff
changeset
|
564 if (crb.target.isMP) { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
565 masm.lock(); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
566 } |
6329
92bc58dc5b5e
More clean up and documentation in api.code and api.meta.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5733
diff
changeset
|
567 switch (cmpValue.getKind()) { |
7881 | 568 case Int: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
569 masm.cmpxchgl(asRegister(newValue), address.toAddress()); |
7881 | 570 break; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
571 case Long: |
7881 | 572 case Object: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
573 masm.cmpxchgq(asRegister(newValue), address.toAddress()); |
7881 | 574 break; |
575 default: | |
576 throw GraalInternalError.shouldNotReachHere(); | |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
577 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
578 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
579 } |