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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
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
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
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
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
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
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
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
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
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
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
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
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
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
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
389 case Int:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
390 masm.movl(asRegister(result), asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
391 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
392 case Long:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
393 masm.movq(asRegister(result), asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
394 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
395 case Float:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
396 masm.movflt(asFloatReg(result), asFloatReg(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
397 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
398 case Double:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
399 masm.movdbl(asDoubleReg(result), asDoubleReg(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
400 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
401 case Object:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
402 masm.movq(asRegister(result), asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
403 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
404 default:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
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
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
412 case Int:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
413 masm.movl(dest, asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
414 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
415 case Long:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
416 masm.movq(dest, asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
417 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
418 case Float:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
419 masm.movflt(dest, asFloatReg(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
420 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
421 case Double:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
422 masm.movsd(dest, asDoubleReg(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
423 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
424 case Object:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
425 masm.movq(dest, asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
426 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
427 default:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
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
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
435 case Int:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
436 masm.movl(asRegister(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
437 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
438 case Long:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
439 masm.movq(asRegister(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
440 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
441 case Float:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
442 masm.movflt(asFloatReg(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
443 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
444 case Double:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
445 masm.movdbl(asDoubleReg(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
446 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
447 case Object:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
448 masm.movq(asRegister(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
449 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
450 default:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
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
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
456 /*
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
457 * Note: we use the kind of the input operand (and not the kind of the result operand)
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
458 * because they don't match in all cases. For example, an object constant can be loaded to a
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
459 * long register when unsafe casts occurred (e.g., for a write barrier where arithmetic
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
460 * operations are then performed on the pointer).
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
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
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
536 case Int:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
537 masm.movl(dest, input.asInt());
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
538 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
539 case Long:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
540 masm.movlong(dest, input.asLong());
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
541 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
542 case Float:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
543 masm.movl(dest, floatToRawIntBits(input.asFloat()));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
544 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
545 case Double:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
546 masm.movlong(dest, doubleToRawLongBits(input.asDouble()));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
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
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
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
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
570 break;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
571 case Long:
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
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
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
574 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
575 default:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
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 }