annotate graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java @ 22595:dcfd57b9f2d3

Update jvmci import: Remove Value.getKind().
author Roland Schatz <roland.schatz@oracle.com>
date Tue, 08 Sep 2015 15:11:16 +0200
parents 3285aa5a60f8
children b00cc0475f31
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 /*
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
2 * Copyright (c) 2011, 2015, 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
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
25 import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*;
22540
3285aa5a60f8 Update jvmci: Remove JavaConstant from Value hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents: 22510
diff changeset
26 import static com.oracle.graal.lir.LIRValueUtil.*;
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.*;
22054
0e095e2c24e2 Rename com.oracle.jvmci to jdk.internal.jvmci
twisti
parents: 22045
diff changeset
29 import static jdk.internal.jvmci.code.ValueUtil.*;
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
30 import jdk.internal.jvmci.amd64.*;
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
31 import jdk.internal.jvmci.code.*;
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
32 import jdk.internal.jvmci.common.*;
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
33 import jdk.internal.jvmci.meta.*;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
34
21720
d915361cc3a1 moved asm, bytecode and asm.test code back to com.oracle.graal name space (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21708
diff changeset
35 import com.oracle.graal.asm.*;
d915361cc3a1 moved asm, bytecode and asm.test code back to com.oracle.graal name space (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21708
diff changeset
36 import com.oracle.graal.asm.amd64.*;
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
37 import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MIOp;
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
38 import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MOp;
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
39 import com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize;
5060
4ed4295ce15f Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5059
diff changeset
40 import com.oracle.graal.lir.*;
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
41 import com.oracle.graal.lir.StandardOp.LoadConstantOp;
12785
c13633a4d472 peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents: 12766
diff changeset
42 import com.oracle.graal.lir.StandardOp.NullCheck;
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
43 import com.oracle.graal.lir.StandardOp.ValueMoveOp;
5060
4ed4295ce15f Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5059
diff changeset
44 import com.oracle.graal.lir.asm.*;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
45
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
46 public class AMD64Move {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
47
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
48 private abstract static class AbstractMoveOp extends AMD64LIRInstruction implements ValueMoveOp {
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
49 public static final LIRInstructionClass<AbstractMoveOp> TYPE = LIRInstructionClass.create(AbstractMoveOp.class);
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
50
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
51 private Kind moveKind;
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
52
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
53 protected AbstractMoveOp(LIRInstructionClass<? extends AbstractMoveOp> c, Kind moveKind) {
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
54 super(c);
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
55 if (moveKind == Kind.Illegal) {
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
56 // unknown operand size, conservatively move the whole register
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
57 this.moveKind = Kind.Long;
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
58 } else {
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
59 this.moveKind = moveKind;
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
60 }
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
61 }
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
62
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
63 @Override
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
64 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
65 move(moveKind, crb, masm, getResult(), getInput());
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
66 }
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
67 }
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
68
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
69 @Opcode("MOVE")
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
70 public static final class MoveToRegOp extends AbstractMoveOp {
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
71 public static final LIRInstructionClass<MoveToRegOp> TYPE = LIRInstructionClass.create(MoveToRegOp.class);
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
72
9297
a5f2b9012865 Interval locations can only be AllocatableValues.
Roland Schatz <roland.schatz@oracle.com>
parents: 9293
diff changeset
73 @Def({REG, HINT}) protected AllocatableValue result;
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
74 @Use({REG, STACK}) protected AllocatableValue input;
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
75
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
76 public MoveToRegOp(Kind moveKind, AllocatableValue result, AllocatableValue input) {
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
77 super(TYPE, moveKind);
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
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
83 public AllocatableValue getInput() {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
84 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
85 }
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
86
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
87 @Override
9297
a5f2b9012865 Interval locations can only be AllocatableValues.
Roland Schatz <roland.schatz@oracle.com>
parents: 9293
diff changeset
88 public AllocatableValue getResult() {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
89 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
90 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
91 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
92
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
93 @Opcode("MOVE")
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
94 public static final class MoveFromRegOp extends AbstractMoveOp {
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
95 public static final LIRInstructionClass<MoveFromRegOp> TYPE = LIRInstructionClass.create(MoveFromRegOp.class);
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
96
9297
a5f2b9012865 Interval locations can only be AllocatableValues.
Roland Schatz <roland.schatz@oracle.com>
parents: 9293
diff changeset
97 @Def({REG, STACK}) protected AllocatableValue result;
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
98 @Use({REG, HINT}) protected AllocatableValue input;
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
99
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
100 public MoveFromRegOp(Kind moveKind, AllocatableValue result, AllocatableValue input) {
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
101 super(TYPE, moveKind);
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
102 this.result = result;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
103 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
104 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
105
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
106 @Override
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
107 public AllocatableValue getInput() {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
108 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
109 }
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
110
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
111 @Override
9297
a5f2b9012865 Interval locations can only be AllocatableValues.
Roland Schatz <roland.schatz@oracle.com>
parents: 9293
diff changeset
112 public AllocatableValue getResult() {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
113 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
114 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
115 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
116
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
117 @Opcode("MOVE")
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
118 public static class MoveFromConstOp extends AMD64LIRInstruction implements LoadConstantOp {
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
119 public static final LIRInstructionClass<MoveFromConstOp> TYPE = LIRInstructionClass.create(MoveFromConstOp.class);
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
120
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
121 @Def({REG, STACK}) protected AllocatableValue result;
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
122 private final JavaConstant input;
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
123
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
124 public MoveFromConstOp(AllocatableValue result, JavaConstant input) {
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
125 super(TYPE);
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
126 this.result = result;
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
127 this.input = input;
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
128 }
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
129
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
130 @Override
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
131 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
132 if (isRegister(result)) {
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
133 const2reg(crb, masm, result, input);
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
134 } else {
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
135 assert isStackSlot(result);
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
136 const2stack(crb, masm, result, input);
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
137 }
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
138 }
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
139
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
140 public Constant getConstant() {
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
141 return input;
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
142 }
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
143
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
144 public AllocatableValue getResult() {
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
145 return result;
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
146 }
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
147 }
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
148
21200
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
149 @Opcode("STACKMOVE")
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
150 public static final class AMD64StackMove extends AMD64LIRInstruction implements ValueMoveOp {
21200
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
151 public static final LIRInstructionClass<AMD64StackMove> TYPE = LIRInstructionClass.create(AMD64StackMove.class);
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
152
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
153 @Def({STACK}) protected AllocatableValue result;
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
154 @Use({STACK, HINT}) protected AllocatableValue input;
21200
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
155 @Alive({OperandFlag.STACK, OperandFlag.UNINITIALIZED}) private StackSlotValue backupSlot;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
156
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
157 private Register scratch;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
158
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
159 public AMD64StackMove(AllocatableValue result, AllocatableValue input, Register scratch, StackSlotValue backupSlot) {
21200
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
160 super(TYPE);
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
161 this.result = result;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
162 this.input = input;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
163 this.backupSlot = backupSlot;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
164 this.scratch = scratch;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
165 }
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
166
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
167 @Override
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
168 public AllocatableValue getInput() {
21200
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
169 return input;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
170 }
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
171
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
172 @Override
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
173 public AllocatableValue getResult() {
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
174 return result;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
175 }
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
176
22045
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
177 public Register getScratchRegister() {
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
178 return scratch;
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
179 }
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
180
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
181 public StackSlotValue getBackupSlot() {
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
182 return backupSlot;
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
183 }
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
184
21200
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
185 @Override
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
186 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
187 // backup scratch register
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
188 move((Kind) backupSlot.getPlatformKind(), crb, masm, backupSlot, scratch.asValue(backupSlot.getLIRKind()));
21200
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
189 // move stack slot
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
190 move((Kind) getInput().getPlatformKind(), crb, masm, scratch.asValue(getInput().getLIRKind()), getInput());
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
191 move((Kind) getResult().getPlatformKind(), crb, masm, getResult(), scratch.asValue(getResult().getLIRKind()));
21200
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
192 // restore scratch register
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
193 move((Kind) backupSlot.getPlatformKind(), crb, masm, scratch.asValue(backupSlot.getLIRKind()), backupSlot);
21200
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
194
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
195 }
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
196 }
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
197
22045
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
198 @Opcode("MULTISTACKMOVE")
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
199 public static final class AMD64MultiStackMove extends AMD64LIRInstruction {
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
200 public static final LIRInstructionClass<AMD64MultiStackMove> TYPE = LIRInstructionClass.create(AMD64MultiStackMove.class);
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
201
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
202 @Def({STACK}) protected AllocatableValue[] results;
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
203 @Use({STACK}) protected Value[] inputs;
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
204 @Alive({OperandFlag.STACK, OperandFlag.UNINITIALIZED}) private StackSlotValue backupSlot;
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
205
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
206 private Register scratch;
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
207
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
208 public AMD64MultiStackMove(AllocatableValue[] results, Value[] inputs, Register scratch, StackSlotValue backupSlot) {
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
209 super(TYPE);
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
210 this.results = results;
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
211 this.inputs = inputs;
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
212 this.backupSlot = backupSlot;
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
213 this.scratch = scratch;
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
214 }
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
215
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
216 @Override
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
217 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
218 // backup scratch register
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
219 move((Kind) backupSlot.getPlatformKind(), crb, masm, backupSlot, scratch.asValue(backupSlot.getLIRKind()));
22045
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
220 for (int i = 0; i < results.length; i++) {
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
221 Value input = inputs[i];
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
222 AllocatableValue result = results[i];
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
223 // move stack slot
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
224 move((Kind) input.getPlatformKind(), crb, masm, scratch.asValue(input.getLIRKind()), input);
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
225 move((Kind) result.getPlatformKind(), crb, masm, result, scratch.asValue(result.getLIRKind()));
22045
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
226 }
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
227 // restore scratch register
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
228 move((Kind) backupSlot.getPlatformKind(), crb, masm, scratch.asValue(backupSlot.getLIRKind()), backupSlot);
22045
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
229
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
230 }
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
231 }
e38161633db6 AMD64Move: add AMD64MultiStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 22006
diff changeset
232
22006
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
233 @Opcode("STACKMOVE")
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
234 public static final class AMD64PushPopStackMove extends AMD64LIRInstruction implements ValueMoveOp {
22006
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
235 public static final LIRInstructionClass<AMD64PushPopStackMove> TYPE = LIRInstructionClass.create(AMD64PushPopStackMove.class);
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
236
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
237 @Def({STACK}) protected AllocatableValue result;
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
238 @Use({STACK, HINT}) protected AllocatableValue input;
22006
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
239 private final OperandSize size;
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
240
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
241 public AMD64PushPopStackMove(OperandSize size, AllocatableValue result, AllocatableValue input) {
22006
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
242 super(TYPE);
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
243 this.result = result;
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
244 this.input = input;
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
245 this.size = size;
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
246 }
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
247
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
248 @Override
22510
d3d19b31e9a4 Split MoveOp into ValueMoveOp and LoadConstantOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 22207
diff changeset
249 public AllocatableValue getInput() {
22006
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
250 return input;
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
251 }
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
252
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
253 @Override
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
254 public AllocatableValue getResult() {
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
255 return result;
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
256 }
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
257
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
258 @Override
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
259 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
260 AMD64MOp.PUSH.emit(masm, size, (AMD64Address) crb.asAddress(input));
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
261 AMD64MOp.POP.emit(masm, size, (AMD64Address) crb.asAddress(result));
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
262 }
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
263 }
985f49785f06 AMD64Move: add AMD64PushPopStackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21720
diff changeset
264
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
265 public static final class LeaOp extends AMD64LIRInstruction {
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
266 public static final LIRInstructionClass<LeaOp> TYPE = LIRInstructionClass.create(LeaOp.class);
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
267
7908
775745294caa Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents: 7905
diff changeset
268 @Def({REG}) protected AllocatableValue result;
8166
d2733c9b3d0e Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents: 8144
diff changeset
269 @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
270
8166
d2733c9b3d0e Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents: 8144
diff changeset
271 public LeaOp(AllocatableValue result, AMD64AddressValue address) {
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
272 super(TYPE);
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
273 this.result = result;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
274 this.address = address;
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
275 }
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
276
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
277 @Override
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13113
diff changeset
278 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
279 masm.leaq(asRegister(result, Kind.Long), address.toAddress());
7882
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
280 }
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
281 }
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
282
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
283 public static final class LeaDataOp extends AMD64LIRInstruction {
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
284 public static final LIRInstructionClass<LeaDataOp> TYPE = LIRInstructionClass.create(LeaDataOp.class);
14735
c5ee41cf9823 replaced RawDataValue with LIRGeneratorTool.emitData(); accept only ASCII strings in log and VM error messages
Doug Simon <doug.simon@oracle.com>
parents: 14730
diff changeset
285
c5ee41cf9823 replaced RawDataValue with LIRGeneratorTool.emitData(); accept only ASCII strings in log and VM error messages
Doug Simon <doug.simon@oracle.com>
parents: 14730
diff changeset
286 @Def({REG}) protected AllocatableValue result;
c5ee41cf9823 replaced RawDataValue with LIRGeneratorTool.emitData(); accept only ASCII strings in log and VM error messages
Doug Simon <doug.simon@oracle.com>
parents: 14730
diff changeset
287 private final byte[] data;
c5ee41cf9823 replaced RawDataValue with LIRGeneratorTool.emitData(); accept only ASCII strings in log and VM error messages
Doug Simon <doug.simon@oracle.com>
parents: 14730
diff changeset
288
c5ee41cf9823 replaced RawDataValue with LIRGeneratorTool.emitData(); accept only ASCII strings in log and VM error messages
Doug Simon <doug.simon@oracle.com>
parents: 14730
diff changeset
289 public LeaDataOp(AllocatableValue result, byte[] data) {
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
290 super(TYPE);
14735
c5ee41cf9823 replaced RawDataValue with LIRGeneratorTool.emitData(); accept only ASCII strings in log and VM error messages
Doug Simon <doug.simon@oracle.com>
parents: 14730
diff changeset
291 this.result = result;
c5ee41cf9823 replaced RawDataValue with LIRGeneratorTool.emitData(); accept only ASCII strings in log and VM error messages
Doug Simon <doug.simon@oracle.com>
parents: 14730
diff changeset
292 this.data = data;
c5ee41cf9823 replaced RawDataValue with LIRGeneratorTool.emitData(); accept only ASCII strings in log and VM error messages
Doug Simon <doug.simon@oracle.com>
parents: 14730
diff changeset
293 }
c5ee41cf9823 replaced RawDataValue with LIRGeneratorTool.emitData(); accept only ASCII strings in log and VM error messages
Doug Simon <doug.simon@oracle.com>
parents: 14730
diff changeset
294
c5ee41cf9823 replaced RawDataValue with LIRGeneratorTool.emitData(); accept only ASCII strings in log and VM error messages
Doug Simon <doug.simon@oracle.com>
parents: 14730
diff changeset
295 @Override
c5ee41cf9823 replaced RawDataValue with LIRGeneratorTool.emitData(); accept only ASCII strings in log and VM error messages
Doug Simon <doug.simon@oracle.com>
parents: 14730
diff changeset
296 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
18176
c2270ad35f57 Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents: 15251
diff changeset
297 masm.leaq(asRegister(result), (AMD64Address) crb.recordDataReferenceInCode(data, 16));
14735
c5ee41cf9823 replaced RawDataValue with LIRGeneratorTool.emitData(); accept only ASCII strings in log and VM error messages
Doug Simon <doug.simon@oracle.com>
parents: 14730
diff changeset
298 }
c5ee41cf9823 replaced RawDataValue with LIRGeneratorTool.emitData(); accept only ASCII strings in log and VM error messages
Doug Simon <doug.simon@oracle.com>
parents: 14730
diff changeset
299 }
c5ee41cf9823 replaced RawDataValue with LIRGeneratorTool.emitData(); accept only ASCII strings in log and VM error messages
Doug Simon <doug.simon@oracle.com>
parents: 14730
diff changeset
300
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
301 public static final class StackLeaOp extends AMD64LIRInstruction {
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
302 public static final LIRInstructionClass<StackLeaOp> TYPE = LIRInstructionClass.create(StackLeaOp.class);
7882
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
303
7908
775745294caa Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents: 7905
diff changeset
304 @Def({REG}) protected AllocatableValue result;
18425
b856446ff7e0 Introduce StackSlotValue and VirtualStackSlot.
Josef Eisl <josef.eisl@jku.at>
parents: 18187
diff changeset
305 @Use({STACK, UNINITIALIZED}) protected StackSlotValue slot;
7882
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
306
18425
b856446ff7e0 Introduce StackSlotValue and VirtualStackSlot.
Josef Eisl <josef.eisl@jku.at>
parents: 18187
diff changeset
307 public StackLeaOp(AllocatableValue result, StackSlotValue slot) {
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
308 super(TYPE);
18436
59e65d3aa2fc Use StackSlotValue where appropriate.
Josef Eisl <josef.eisl@jku.at>
parents: 18425
diff changeset
309 assert isStackSlotValue(slot) : "Not a stack slot: " + slot;
7882
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
310 this.result = result;
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
311 this.slot = slot;
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
312 }
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
313
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
314 @Override
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13113
diff changeset
315 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
316 masm.leaq(asRegister(result, Kind.Long), (AMD64Address) crb.asAddress(slot));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
317 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
318 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
319
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
320 public static final class MembarOp extends AMD64LIRInstruction {
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
321 public static final LIRInstructionClass<MembarOp> TYPE = LIRInstructionClass.create(MembarOp.class);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
322
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
323 private final int barriers;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
324
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
325 public MembarOp(final int barriers) {
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
326 super(TYPE);
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
327 this.barriers = barriers;
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
328 }
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
329
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
330 @Override
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13113
diff changeset
331 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
332 masm.membar(barriers);
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 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
335
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
336 public static final class NullCheckOp extends AMD64LIRInstruction implements NullCheck {
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
337 public static final LIRInstructionClass<NullCheckOp> TYPE = LIRInstructionClass.create(NullCheckOp.class);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
338
21080
3253fe1bed41 Remove CompressedNullCheckOp, merge functionality into regular NullCheckOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 19972
diff changeset
339 @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
340 @State protected LIRFrameState state;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
341
21080
3253fe1bed41 Remove CompressedNullCheckOp, merge functionality into regular NullCheckOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 19972
diff changeset
342 public NullCheckOp(AMD64AddressValue address, LIRFrameState state) {
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
343 super(TYPE);
21080
3253fe1bed41 Remove CompressedNullCheckOp, merge functionality into regular NullCheckOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 19972
diff changeset
344 this.address = address;
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
345 this.state = state;
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
346 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
347
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
348 @Override
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13113
diff changeset
349 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
14031
390c4b742890 made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents: 13931
diff changeset
350 crb.recordImplicitException(masm.position(), state);
21080
3253fe1bed41 Remove CompressedNullCheckOp, merge functionality into regular NullCheckOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 19972
diff changeset
351 masm.nullCheck(address.toAddress());
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
352 }
12785
c13633a4d472 peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents: 12766
diff changeset
353
c13633a4d472 peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents: 12766
diff changeset
354 public Value getCheckedValue() {
21080
3253fe1bed41 Remove CompressedNullCheckOp, merge functionality into regular NullCheckOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 19972
diff changeset
355 return address.base;
12785
c13633a4d472 peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents: 12766
diff changeset
356 }
c13633a4d472 peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents: 12766
diff changeset
357
c13633a4d472 peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents: 12766
diff changeset
358 public LIRFrameState getState() {
c13633a4d472 peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents: 12766
diff changeset
359 return state;
c13633a4d472 peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents: 12766
diff changeset
360 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
361 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
362
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
363 @Opcode("CAS")
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
364 public static final class CompareAndSwapOp extends AMD64LIRInstruction {
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
365 public static final LIRInstructionClass<CompareAndSwapOp> TYPE = LIRInstructionClass.create(CompareAndSwapOp.class);
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
366
15024
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
367 private final Kind accessKind;
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
368
7908
775745294caa Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents: 7905
diff changeset
369 @Def protected AllocatableValue result;
8166
d2733c9b3d0e Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents: 8144
diff changeset
370 @Use({COMPOSITE}) protected AMD64AddressValue address;
7908
775745294caa Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents: 7905
diff changeset
371 @Use protected AllocatableValue cmpValue;
775745294caa Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents: 7905
diff changeset
372 @Use protected AllocatableValue newValue;
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
373
15024
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
374 public CompareAndSwapOp(Kind accessKind, AllocatableValue result, AMD64AddressValue address, AllocatableValue cmpValue, AllocatableValue newValue) {
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
375 super(TYPE);
15024
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
376 this.accessKind = accessKind;
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
377 this.result = result;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
378 this.address = address;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
379 this.cmpValue = cmpValue;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
380 this.newValue = newValue;
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
381 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
382
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
383 @Override
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13113
diff changeset
384 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
15024
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
385 assert asRegister(cmpValue).equals(AMD64.rax) && asRegister(result).equals(AMD64.rax);
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
386
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
387 if (crb.target.isMP) {
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
388 masm.lock();
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
389 }
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
390 switch (accessKind) {
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
391 case Int:
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
392 masm.cmpxchgl(asRegister(newValue), address.toAddress());
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
393 break;
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
394 case Long:
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
395 case Object:
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
396 masm.cmpxchgq(asRegister(newValue), address.toAddress());
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
397 break;
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
398 default:
21543
93c50cefb9e8 moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21438
diff changeset
399 throw JVMCIError.shouldNotReachHere();
15024
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
400 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
401 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
402 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
403
15251
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
404 @Opcode("ATOMIC_READ_AND_ADD")
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
405 public static final class AtomicReadAndAddOp extends AMD64LIRInstruction {
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
406 public static final LIRInstructionClass<AtomicReadAndAddOp> TYPE = LIRInstructionClass.create(AtomicReadAndAddOp.class);
15251
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
407
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
408 private final Kind accessKind;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
409
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
410 @Def protected AllocatableValue result;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
411 @Alive({COMPOSITE}) protected AMD64AddressValue address;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
412 @Use protected AllocatableValue delta;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
413
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
414 public AtomicReadAndAddOp(Kind accessKind, AllocatableValue result, AMD64AddressValue address, AllocatableValue delta) {
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
415 super(TYPE);
15251
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
416 this.accessKind = accessKind;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
417 this.result = result;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
418 this.address = address;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
419 this.delta = delta;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
420 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
421
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
422 @Override
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
423 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
424 move(accessKind, crb, masm, result, delta);
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
425 if (crb.target.isMP) {
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
426 masm.lock();
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
427 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
428 switch (accessKind) {
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
429 case Int:
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
430 masm.xaddl(address.toAddress(), asRegister(result));
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
431 break;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
432 case Long:
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
433 masm.xaddq(address.toAddress(), asRegister(result));
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
434 break;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
435 default:
21543
93c50cefb9e8 moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21438
diff changeset
436 throw JVMCIError.shouldNotReachHere();
15251
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
437 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
438 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
439 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
440
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
441 @Opcode("ATOMIC_READ_AND_WRITE")
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
442 public static final class AtomicReadAndWriteOp extends AMD64LIRInstruction {
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
443 public static final LIRInstructionClass<AtomicReadAndWriteOp> TYPE = LIRInstructionClass.create(AtomicReadAndWriteOp.class);
15251
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
444
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
445 private final Kind accessKind;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
446
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
447 @Def protected AllocatableValue result;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
448 @Alive({COMPOSITE}) protected AMD64AddressValue address;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
449 @Use protected AllocatableValue newValue;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
450
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
451 public AtomicReadAndWriteOp(Kind accessKind, AllocatableValue result, AMD64AddressValue address, AllocatableValue newValue) {
19529
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
452 super(TYPE);
15251
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
453 this.accessKind = accessKind;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
454 this.result = result;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
455 this.address = address;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
456 this.newValue = newValue;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
457 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
458
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
459 @Override
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
460 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
461 move(accessKind, crb, masm, result, newValue);
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
462 switch (accessKind) {
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
463 case Int:
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
464 masm.xchgl(asRegister(result), address.toAddress());
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
465 break;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
466 case Long:
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
467 case Object:
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
468 masm.xchgq(asRegister(result), address.toAddress());
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
469 break;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
470 default:
21543
93c50cefb9e8 moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21438
diff changeset
471 throw JVMCIError.shouldNotReachHere();
15251
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
472 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
473 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
474 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
475
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13113
diff changeset
476 public static void move(CompilationResultBuilder crb, AMD64MacroAssembler masm, Value result, Value input) {
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
477 move((Kind) result.getPlatformKind(), crb, masm, result, input);
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
478 }
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
479
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
480 public static void move(Kind moveKind, 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
481 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
482 if (isRegister(result)) {
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
483 reg2reg(moveKind, masm, result, 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
484 } else if (isStackSlot(result)) {
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
485 reg2stack(moveKind, crb, masm, result, input);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
486 } else {
21543
93c50cefb9e8 moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21438
diff changeset
487 throw JVMCIError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
488 }
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
489 } 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
490 if (isRegister(result)) {
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
491 stack2reg(moveKind, crb, masm, result, input);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
492 } else {
21543
93c50cefb9e8 moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21438
diff changeset
493 throw JVMCIError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
494 }
22540
3285aa5a60f8 Update jvmci: Remove JavaConstant from Value hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents: 22510
diff changeset
495 } else if (isJavaConstant(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
496 if (isRegister(result)) {
22540
3285aa5a60f8 Update jvmci: Remove JavaConstant from Value hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents: 22510
diff changeset
497 const2reg(crb, masm, result, asJavaConstant(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
498 } else if (isStackSlot(result)) {
22540
3285aa5a60f8 Update jvmci: Remove JavaConstant from Value hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents: 22510
diff changeset
499 const2stack(crb, masm, result, asJavaConstant(input));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
500 } else {
21543
93c50cefb9e8 moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21438
diff changeset
501 throw JVMCIError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
502 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
503 } else {
21543
93c50cefb9e8 moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21438
diff changeset
504 throw JVMCIError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
505 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
506 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
507
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
508 private static void reg2reg(Kind kind, 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
509 if (asRegister(input).equals(asRegister(result))) {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
510 return;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
511 }
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
512 switch (kind.getStackKind()) {
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
513 case Int:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
514 masm.movl(asRegister(result), asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
515 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
516 case Long:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
517 masm.movq(asRegister(result), asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
518 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
519 case Float:
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
520 masm.movflt(asRegister(result, Kind.Float), asRegister(input, Kind.Float));
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
521 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
522 case Double:
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
523 masm.movdbl(asRegister(result, Kind.Double), asRegister(input, Kind.Double));
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
524 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
525 case Object:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
526 masm.movq(asRegister(result), asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
527 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
528 default:
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
529 throw JVMCIError.shouldNotReachHere("kind=" + result.getPlatformKind());
3733
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 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
532
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
533 private static void reg2stack(Kind kind, CompilationResultBuilder crb, AMD64MacroAssembler masm, Value result, Value input) {
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13113
diff changeset
534 AMD64Address dest = (AMD64Address) crb.asAddress(result);
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
535 switch (kind) {
14944
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
536 case Boolean:
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
537 case Byte:
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
538 masm.movb(dest, asRegister(input));
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
539 break;
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
540 case Short:
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
541 case Char:
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
542 masm.movw(dest, asRegister(input));
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
543 break;
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
544 case Int:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
545 masm.movl(dest, asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
546 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
547 case Long:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
548 masm.movq(dest, asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
549 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
550 case Float:
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
551 masm.movflt(dest, asRegister(input, Kind.Float));
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
552 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
553 case Double:
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
554 masm.movsd(dest, asRegister(input, Kind.Double));
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
555 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
556 case Object:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
557 masm.movq(dest, asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
558 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
559 default:
21543
93c50cefb9e8 moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21438
diff changeset
560 throw JVMCIError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
561 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
562 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
563
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
564 private static void stack2reg(Kind kind, CompilationResultBuilder crb, AMD64MacroAssembler masm, Value result, Value input) {
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13113
diff changeset
565 AMD64Address src = (AMD64Address) crb.asAddress(input);
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
566 switch (kind) {
14944
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
567 case Boolean:
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
568 masm.movzbl(asRegister(result), src);
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
569 break;
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
570 case Byte:
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
571 masm.movsbl(asRegister(result), src);
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
572 break;
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
573 case Short:
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
574 masm.movswl(asRegister(result), src);
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
575 break;
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
576 case Char:
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
577 masm.movzwl(asRegister(result), src);
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
578 break;
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
579 case Int:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
580 masm.movl(asRegister(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
581 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
582 case Long:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
583 masm.movq(asRegister(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
584 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
585 case Float:
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
586 masm.movflt(asRegister(result, Kind.Float), src);
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
587 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
588 case Double:
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
589 masm.movdbl(asRegister(result, Kind.Double), src);
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
590 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
591 case Object:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
592 masm.movq(asRegister(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
593 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
594 default:
21543
93c50cefb9e8 moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21438
diff changeset
595 throw JVMCIError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
596 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
597 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
598
22540
3285aa5a60f8 Update jvmci: Remove JavaConstant from Value hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents: 22510
diff changeset
599 public static void const2reg(CompilationResultBuilder crb, AMD64MacroAssembler masm, Value result, JavaConstant input) {
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
600 /*
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
601 * 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
602 * 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
603 * 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
604 * operations are then performed on the pointer).
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
605 */
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
606 switch (input.getKind().getStackKind()) {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
607 case Int:
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13113
diff changeset
608 if (crb.codeCache.needsDataPatch(input)) {
13576
4e679d50ba9a Move data section building code to Java.
Roland Schatz <roland.schatz@oracle.com>
parents: 13520
diff changeset
609 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
610 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
611 // 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
612 // 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
613 // 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
614 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
615
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
616 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
617 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
618 boolean patch = false;
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13113
diff changeset
619 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
620 patch = true;
13576
4e679d50ba9a Move data section building code to Java.
Roland Schatz <roland.schatz@oracle.com>
parents: 13520
diff changeset
621 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
622 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
623 // 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
624 // 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
625 // 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
626 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
627 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
628 } else {
fb7b39f07232 Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13240
diff changeset
629 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
630 // 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
631 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
632 } 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
633 // 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
634 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
635 } else {
fb7b39f07232 Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13240
diff changeset
636 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
637 }
fb7b39f07232 Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13240
diff changeset
638 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
639 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
640 case Float:
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
641 // 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
642 if (Float.floatToRawIntBits(input.asFloat()) == Float.floatToRawIntBits(0.0f)) {
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13113
diff changeset
643 assert !crb.codeCache.needsDataPatch(input);
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
644 masm.xorps(asRegister(result, Kind.Float), asRegister(result, Kind.Float));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
645 } else {
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
646 masm.movflt(asRegister(result, Kind.Float), (AMD64Address) crb.asFloatConstRef(input));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
647 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
648 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
649 case Double:
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
650 // 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
651 if (Double.doubleToRawLongBits(input.asDouble()) == Double.doubleToRawLongBits(0.0d)) {
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13113
diff changeset
652 assert !crb.codeCache.needsDataPatch(input);
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
653 masm.xorpd(asRegister(result, Kind.Double), asRegister(result, Kind.Double));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
654 } else {
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
655 masm.movdbl(asRegister(result, Kind.Double), (AMD64Address) crb.asDoubleConstRef(input));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
656 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
657 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
658 case Object:
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
659 // 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
660 // 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
661 // 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
662 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
663 masm.movq(asRegister(result), 0x0L);
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13113
diff changeset
664 } else if (crb.target.inlineObjects) {
13576
4e679d50ba9a Move data section building code to Java.
Roland Schatz <roland.schatz@oracle.com>
parents: 13520
diff changeset
665 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
666 masm.movq(asRegister(result), 0xDEADDEADDEADDEADL);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
667 } else {
13576
4e679d50ba9a Move data section building code to Java.
Roland Schatz <roland.schatz@oracle.com>
parents: 13520
diff changeset
668 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
669 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
670 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
671 default:
21543
93c50cefb9e8 moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21438
diff changeset
672 throw JVMCIError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
673 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
674 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
675
22540
3285aa5a60f8 Update jvmci: Remove JavaConstant from Value hierarchy.
Roland Schatz <roland.schatz@oracle.com>
parents: 22510
diff changeset
676 public static void const2stack(CompilationResultBuilder crb, AMD64MacroAssembler masm, Value result, JavaConstant input) {
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13113
diff changeset
677 assert !crb.codeCache.needsDataPatch(input);
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13113
diff changeset
678 AMD64Address dest = (AMD64Address) crb.asAddress(result);
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
679 final long imm;
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
680 switch (input.getKind().getStackKind()) {
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
681 case Int:
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
682 imm = input.asInt();
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
683 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
684 case Long:
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
685 imm = input.asLong();
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
686 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
687 case Float:
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
688 imm = floatToRawIntBits(input.asFloat());
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
689 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
690 case Double:
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
691 imm = doubleToRawLongBits(input.asDouble());
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
692 break;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
693 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
694 if (input.isNull()) {
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
695 imm = 0;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
696 } else {
21543
93c50cefb9e8 moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21438
diff changeset
697 throw JVMCIError.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
698 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
699 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
700 default:
21543
93c50cefb9e8 moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21438
diff changeset
701 throw JVMCIError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
702 }
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
703 switch ((Kind) result.getPlatformKind()) {
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
704 case Byte:
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
705 assert NumUtil.isByte(imm) : "Is not in byte range: " + imm;
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
706 AMD64MIOp.MOVB.emit(masm, OperandSize.BYTE, dest, (int) imm);
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
707 break;
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
708 case Short:
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
709 assert NumUtil.isShort(imm) : "Is not in short range: " + imm;
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
710 AMD64MIOp.MOV.emit(masm, OperandSize.WORD, dest, (int) imm);
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
711 break;
22207
aff4dce0b9f6 AMD64Move#const2stack: add support for Char.
Josef Eisl <josef.eisl@jku.at>
parents: 22054
diff changeset
712 case Char:
aff4dce0b9f6 AMD64Move#const2stack: add support for Char.
Josef Eisl <josef.eisl@jku.at>
parents: 22054
diff changeset
713 assert NumUtil.isUShort(imm) : "Is not in char range: " + imm;
aff4dce0b9f6 AMD64Move#const2stack: add support for Char.
Josef Eisl <josef.eisl@jku.at>
parents: 22054
diff changeset
714 AMD64MIOp.MOV.emit(masm, OperandSize.WORD, dest, (int) imm);
aff4dce0b9f6 AMD64Move#const2stack: add support for Char.
Josef Eisl <josef.eisl@jku.at>
parents: 22054
diff changeset
715 break;
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
716 case Int:
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
717 case Float:
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
718 assert NumUtil.isInt(imm) : "Is not in int range: " + imm;
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
719 masm.movl(dest, (int) imm);
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
720 break;
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
721 case Long:
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
722 case Double:
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
723 case Object:
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
724 masm.movlong(dest, imm);
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
725 break;
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
726 default:
22595
dcfd57b9f2d3 Update jvmci import: Remove Value.getKind().
Roland Schatz <roland.schatz@oracle.com>
parents: 22540
diff changeset
727 throw JVMCIError.shouldNotReachHere("Unknown result Kind: " + result.getPlatformKind());
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
728 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
729 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
730 }