annotate graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java @ 21543:93c50cefb9e8

moved GraalInternalError to com.oracle.jvmci.common and renamed it to JVMCIError (JBS:GRAAL-53)
author Doug Simon <doug.simon@oracle.com>
date Mon, 25 May 2015 23:30:34 +0200
parents a4f376f516dc
children 48c1ebd24120
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 /*
19526
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
5547
b6617d13ea44 Dropping Ci* prefixes. Some additional renamings in the api.code interface.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5539
diff changeset
25 import static com.oracle.graal.api.code.ValueUtil.*;
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
26 import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
27 import static java.lang.Double.*;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
28 import static java.lang.Float.*;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
29
6580
d56d600819fe moved AMD64 into its own (new) project: com.oracle.graal.amd64
Doug Simon <doug.simon@oracle.com>
parents: 6539
diff changeset
30 import com.oracle.graal.amd64.*;
7882
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
31 import com.oracle.graal.api.code.*;
5507
dc71b06d09f8 Moving classes from cri.ri to api.meta.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5506
diff changeset
32 import com.oracle.graal.api.meta.*;
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
33 import com.oracle.graal.asm.*;
6531
4afe23aa0a00 renamed packages: com.oracle.max.asm... -> com.oracle.graal.asm...
Doug Simon <doug.simon@oracle.com>
parents: 6493
diff changeset
34 import com.oracle.graal.asm.amd64.*;
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
35 import com.oracle.graal.asm.amd64.AMD64Assembler.AMD64MIOp;
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
36 import com.oracle.graal.asm.amd64.AMD64Assembler.OperandSize;
5060
4ed4295ce15f Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5059
diff changeset
37 import com.oracle.graal.lir.*;
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
38 import com.oracle.graal.lir.StandardOp.MoveOp;
12785
c13633a4d472 peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents: 12766
diff changeset
39 import com.oracle.graal.lir.StandardOp.NullCheck;
5060
4ed4295ce15f Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5059
diff changeset
40 import com.oracle.graal.lir.asm.*;
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
41 import com.oracle.jvmci.common.*;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
42
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
43 public class AMD64Move {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
44
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
45 private abstract static class AbstractMoveOp extends AMD64LIRInstruction implements MoveOp {
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
46 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
47
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
48 private Kind moveKind;
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
49
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
50 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
51 super(c);
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
52 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
53 // 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
54 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
55 } else {
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
56 this.moveKind = moveKind;
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
57 }
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
58 }
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
59
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
60 @Override
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
61 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
62 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
63 }
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
64 }
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
65
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
66 @Opcode("MOVE")
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
67 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
68 public static final LIRInstructionClass<MoveToRegOp> TYPE = LIRInstructionClass.create(MoveToRegOp.class);
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
69
9297
a5f2b9012865 Interval locations can only be AllocatableValues.
Roland Schatz <roland.schatz@oracle.com>
parents: 9293
diff changeset
70 @Def({REG, HINT}) protected AllocatableValue result;
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
71 @Use({REG, STACK, CONST}) protected Value input;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
72
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
73 public MoveToRegOp(Kind moveKind, AllocatableValue result, Value input) {
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
74 super(TYPE, moveKind);
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
75 this.result = result;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
76 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
77 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
78
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
79 @Override
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
80 public Value getInput() {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
81 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
82 }
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
83
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
84 @Override
9297
a5f2b9012865 Interval locations can only be AllocatableValues.
Roland Schatz <roland.schatz@oracle.com>
parents: 9293
diff changeset
85 public AllocatableValue getResult() {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
86 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
87 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
88 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
89
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
90 @Opcode("MOVE")
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
91 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
92 public static final LIRInstructionClass<MoveFromRegOp> TYPE = LIRInstructionClass.create(MoveFromRegOp.class);
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
93
9297
a5f2b9012865 Interval locations can only be AllocatableValues.
Roland Schatz <roland.schatz@oracle.com>
parents: 9293
diff changeset
94 @Def({REG, STACK}) protected AllocatableValue result;
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
95 @Use({REG, CONST, HINT}) protected Value input;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
96
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
97 public MoveFromRegOp(Kind moveKind, AllocatableValue result, Value input) {
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
98 super(TYPE, moveKind);
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
99 this.result = result;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
100 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
101 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
102
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
103 @Override
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
104 public Value getInput() {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
105 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
106 }
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
107
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
108 @Override
9297
a5f2b9012865 Interval locations can only be AllocatableValues.
Roland Schatz <roland.schatz@oracle.com>
parents: 9293
diff changeset
109 public AllocatableValue getResult() {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
110 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
111 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
112 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
113
21200
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
114 @Opcode("STACKMOVE")
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
115 public static final class AMD64StackMove extends AMD64LIRInstruction implements MoveOp {
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
116 public static final LIRInstructionClass<AMD64StackMove> TYPE = LIRInstructionClass.create(AMD64StackMove.class);
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
117
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
118 @Def({STACK}) protected AllocatableValue result;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
119 @Use({STACK, HINT}) protected Value input;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
120 @Alive({OperandFlag.STACK, OperandFlag.UNINITIALIZED}) private StackSlotValue backupSlot;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
121
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
122 private Register scratch;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
123
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
124 public AMD64StackMove(AllocatableValue result, Value input, Register scratch, StackSlotValue backupSlot) {
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
125 super(TYPE);
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
126 this.result = result;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
127 this.input = input;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
128 this.backupSlot = backupSlot;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
129 this.scratch = scratch;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
130 }
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
131
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
132 @Override
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
133 public Value getInput() {
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
134 return input;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
135 }
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
136
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
137 @Override
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
138 public AllocatableValue getResult() {
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
139 return result;
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
140 }
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
141
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
142 @Override
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
143 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
144 // backup scratch register
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
145 move(backupSlot.getKind(), crb, masm, backupSlot, scratch.asValue(backupSlot.getLIRKind()));
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
146 // move stack slot
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
147 move(getInput().getKind(), crb, masm, scratch.asValue(getInput().getLIRKind()), getInput());
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
148 move(getResult().getKind(), crb, masm, getResult(), scratch.asValue(getResult().getLIRKind()));
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
149 // restore scratch register
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
150 move(backupSlot.getKind(), crb, masm, scratch.asValue(backupSlot.getLIRKind()), backupSlot);
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
151
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 }
9965d71c8971 Introduce AMD64StackMove.
Josef Eisl <josef.eisl@jku.at>
parents: 21080
diff changeset
154
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
155 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
156 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
157
7908
775745294caa Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents: 7905
diff changeset
158 @Def({REG}) protected AllocatableValue result;
8166
d2733c9b3d0e Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents: 8144
diff changeset
159 @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
160
8166
d2733c9b3d0e Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents: 8144
diff changeset
161 public LeaOp(AllocatableValue result, AMD64AddressValue address) {
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
162 super(TYPE);
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
163 this.result = result;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
164 this.address = address;
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
165 }
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
166
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
167 @Override
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13111
diff changeset
168 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
8166
d2733c9b3d0e Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents: 8144
diff changeset
169 masm.leaq(asLongReg(result), address.toAddress());
7882
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
170 }
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
171 }
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
172
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
173 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
174 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
175
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
176 @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
177 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
178
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
179 public LeaDataOp(AllocatableValue result, byte[] data) {
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
180 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
181 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
182 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
183 }
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
184
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
185 @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
186 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
187 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
188 }
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
189 }
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
190
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
191 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
192 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
193
7908
775745294caa Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents: 7905
diff changeset
194 @Def({REG}) protected AllocatableValue result;
18425
b856446ff7e0 Introduce StackSlotValue and VirtualStackSlot.
Josef Eisl <josef.eisl@jku.at>
parents: 18187
diff changeset
195 @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
196
18425
b856446ff7e0 Introduce StackSlotValue and VirtualStackSlot.
Josef Eisl <josef.eisl@jku.at>
parents: 18187
diff changeset
197 public StackLeaOp(AllocatableValue result, StackSlotValue slot) {
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
198 super(TYPE);
18436
59e65d3aa2fc Use StackSlotValue where appropriate.
Josef Eisl <josef.eisl@jku.at>
parents: 18425
diff changeset
199 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
200 this.result = result;
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
201 this.slot = slot;
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
202 }
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
203
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
204 @Override
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13111
diff changeset
205 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13111
diff changeset
206 masm.leaq(asLongReg(result), (AMD64Address) crb.asAddress(slot));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
207 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
208 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
209
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
210 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
211 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
212
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
213 private final int barriers;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
214
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
215 public MembarOp(final int barriers) {
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
216 super(TYPE);
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
217 this.barriers = barriers;
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
218 }
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
219
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
220 @Override
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13111
diff changeset
221 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
222 masm.membar(barriers);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
223 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
224 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
225
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
226 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
227 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
228
21080
3253fe1bed41 Remove CompressedNullCheckOp, merge functionality into regular NullCheckOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 19972
diff changeset
229 @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
230 @State protected LIRFrameState state;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
231
21080
3253fe1bed41 Remove CompressedNullCheckOp, merge functionality into regular NullCheckOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 19972
diff changeset
232 public NullCheckOp(AMD64AddressValue address, LIRFrameState state) {
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
233 super(TYPE);
21080
3253fe1bed41 Remove CompressedNullCheckOp, merge functionality into regular NullCheckOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 19972
diff changeset
234 this.address = address;
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
235 this.state = state;
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
236 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
237
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
238 @Override
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13111
diff changeset
239 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
240 crb.recordImplicitException(masm.position(), state);
21080
3253fe1bed41 Remove CompressedNullCheckOp, merge functionality into regular NullCheckOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 19972
diff changeset
241 masm.nullCheck(address.toAddress());
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
242 }
12785
c13633a4d472 peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents: 12766
diff changeset
243
c13633a4d472 peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents: 12766
diff changeset
244 public Value getCheckedValue() {
21080
3253fe1bed41 Remove CompressedNullCheckOp, merge functionality into regular NullCheckOp.
Roland Schatz <roland.schatz@oracle.com>
parents: 19972
diff changeset
245 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
246 }
c13633a4d472 peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents: 12766
diff changeset
247
c13633a4d472 peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents: 12766
diff changeset
248 public LIRFrameState getState() {
c13633a4d472 peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents: 12766
diff changeset
249 return state;
c13633a4d472 peephole optimization to remove null checks at the LIR level
Lukas Stadler <lukas.stadler@jku.at>
parents: 12766
diff changeset
250 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
251 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
252
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
253 @Opcode("CAS")
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
254 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
255 public static final LIRInstructionClass<CompareAndSwapOp> TYPE = LIRInstructionClass.create(CompareAndSwapOp.class);
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
256
15024
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
257 private final Kind accessKind;
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
258
7908
775745294caa Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents: 7905
diff changeset
259 @Def protected AllocatableValue result;
8166
d2733c9b3d0e Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents: 8144
diff changeset
260 @Use({COMPOSITE}) protected AMD64AddressValue address;
7908
775745294caa Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents: 7905
diff changeset
261 @Use protected AllocatableValue cmpValue;
775745294caa Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents: 7905
diff changeset
262 @Use protected AllocatableValue newValue;
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
263
15024
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
264 public CompareAndSwapOp(Kind accessKind, AllocatableValue result, AMD64AddressValue address, AllocatableValue cmpValue, AllocatableValue newValue) {
19526
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 super(TYPE);
15024
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
266 this.accessKind = accessKind;
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
267 this.result = result;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
268 this.address = address;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
269 this.cmpValue = cmpValue;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
270 this.newValue = newValue;
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
271 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
272
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
273 @Override
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13111
diff changeset
274 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
275 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
276
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
277 if (crb.target.isMP) {
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
278 masm.lock();
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
279 }
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
280 switch (accessKind) {
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
281 case Int:
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
282 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
283 break;
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
284 case Long:
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
285 case Object:
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
286 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
287 break;
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
288 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
289 throw JVMCIError.shouldNotReachHere();
15024
2ee777221036 Use high level CompressionNode in lowering of CompareAndSwapNode.
Roland Schatz <roland.schatz@oracle.com>
parents: 14991
diff changeset
290 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
291 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
292 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
293
15251
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
294 @Opcode("ATOMIC_READ_AND_ADD")
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
295 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
296 public static final LIRInstructionClass<AtomicReadAndAddOp> TYPE = LIRInstructionClass.create(AtomicReadAndAddOp.class);
15251
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
297
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
298 private final Kind accessKind;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
299
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
300 @Def protected AllocatableValue result;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
301 @Alive({COMPOSITE}) protected AMD64AddressValue address;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
302 @Use protected AllocatableValue delta;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
303
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
304 public AtomicReadAndAddOp(Kind accessKind, AllocatableValue result, AMD64AddressValue address, AllocatableValue delta) {
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
305 super(TYPE);
15251
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
306 this.accessKind = accessKind;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
307 this.result = result;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
308 this.address = address;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
309 this.delta = delta;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
310 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
311
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
312 @Override
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
313 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
314 move(accessKind, crb, masm, result, delta);
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
315 if (crb.target.isMP) {
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
316 masm.lock();
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
317 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
318 switch (accessKind) {
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
319 case Int:
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
320 masm.xaddl(address.toAddress(), asRegister(result));
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
321 break;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
322 case Long:
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
323 masm.xaddq(address.toAddress(), asRegister(result));
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
324 break;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
325 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
326 throw JVMCIError.shouldNotReachHere();
15251
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
327 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
328 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
329 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
330
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
331 @Opcode("ATOMIC_READ_AND_WRITE")
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
332 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
333 public static final LIRInstructionClass<AtomicReadAndWriteOp> TYPE = LIRInstructionClass.create(AtomicReadAndWriteOp.class);
15251
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
334
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
335 private final Kind accessKind;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
336
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
337 @Def protected AllocatableValue result;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
338 @Alive({COMPOSITE}) protected AMD64AddressValue address;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
339 @Use protected AllocatableValue newValue;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
340
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
341 public AtomicReadAndWriteOp(Kind accessKind, AllocatableValue result, AMD64AddressValue address, AllocatableValue newValue) {
19526
8fc336a04d77 Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 18436
diff changeset
342 super(TYPE);
15251
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
343 this.accessKind = accessKind;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
344 this.result = result;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
345 this.address = address;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
346 this.newValue = newValue;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
347 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
348
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
349 @Override
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
350 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) {
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
351 move(accessKind, crb, masm, result, newValue);
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
352 switch (accessKind) {
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
353 case Int:
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
354 masm.xchgl(asRegister(result), address.toAddress());
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
355 break;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
356 case Long:
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
357 case Object:
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
358 masm.xchgq(asRegister(result), address.toAddress());
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
359 break;
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
360 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
361 throw JVMCIError.shouldNotReachHere();
15251
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
362 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
363 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
364 }
de1d50c121cd Unsafe.getAndAdd/Set method substitutions
twisti
parents: 15193
diff changeset
365
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13111
diff changeset
366 public static void move(CompilationResultBuilder crb, AMD64MacroAssembler masm, Value result, Value input) {
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
367 move(result.getKind(), crb, masm, result, input);
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
368 }
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
369
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
370 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
371 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
372 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
373 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
374 } 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
375 reg2stack(moveKind, crb, masm, result, input);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
376 } 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
377 throw JVMCIError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
378 }
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
379 } 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
380 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
381 stack2reg(moveKind, crb, masm, result, input);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
382 } 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
383 throw JVMCIError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
384 }
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
385 } else if (isConstant(input)) {
9e0c1b4cfef5 Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4181
diff changeset
386 if (isRegister(result)) {
18187
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 18176
diff changeset
387 const2reg(crb, masm, result, (JavaConstant) 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
388 } else if (isStackSlot(result)) {
18187
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 18176
diff changeset
389 const2stack(crb, masm, result, (JavaConstant) input);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
390 } 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
391 throw JVMCIError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
392 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
393 } 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
394 throw JVMCIError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
395 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
396 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
397
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
398 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
399 if (asRegister(input).equals(asRegister(result))) {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
400 return;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
401 }
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
402 switch (kind.getStackKind()) {
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
403 case Int:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
404 masm.movl(asRegister(result), asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
405 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
406 case Long:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
407 masm.movq(asRegister(result), asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
408 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
409 case Float:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
410 masm.movflt(asFloatReg(result), asFloatReg(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
411 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
412 case Double:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
413 masm.movdbl(asDoubleReg(result), asDoubleReg(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
414 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
415 case Object:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
416 masm.movq(asRegister(result), asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
417 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
418 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
419 throw JVMCIError.shouldNotReachHere("kind=" + result.getKind());
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
420 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
421 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
422
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
423 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: 13111
diff changeset
424 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
425 switch (kind) {
14944
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
426 case Boolean:
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
427 case Byte:
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
428 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
429 break;
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
430 case Short:
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
431 case Char:
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
432 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
433 break;
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
434 case Int:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
435 masm.movl(dest, asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
436 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
437 case Long:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
438 masm.movq(dest, asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
439 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
440 case Float:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
441 masm.movflt(dest, asFloatReg(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
442 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
443 case Double:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
444 masm.movsd(dest, asDoubleReg(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
445 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
446 case Object:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
447 masm.movq(dest, asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
448 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
449 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
450 throw JVMCIError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
451 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
452 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
453
14945
b14cb2d9253d Make compression and uncompression explicit in the high level graph.
Roland Schatz <roland.schatz@oracle.com>
parents: 14944
diff changeset
454 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: 13111
diff changeset
455 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
456 switch (kind) {
14944
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
457 case Boolean:
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
458 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
459 break;
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
460 case Byte:
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
461 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
462 break;
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
463 case Short:
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
464 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
465 break;
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
466 case Char:
96f8e6b6a81a Support for spill moves of values smaller than int.
Roland Schatz <roland.schatz@oracle.com>
parents: 14747
diff changeset
467 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
468 break;
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
469 case Int:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
470 masm.movl(asRegister(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
471 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
472 case Long:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
473 masm.movq(asRegister(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
474 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
475 case Float:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
476 masm.movflt(asFloatReg(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
477 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
478 case Double:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
479 masm.movdbl(asDoubleReg(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
480 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
481 case Object:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
482 masm.movq(asRegister(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
483 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
484 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
485 throw JVMCIError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
486 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
487 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
488
18187
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 18176
diff changeset
489 private 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
490 /*
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
491 * 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
492 * 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
493 * 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
494 * operations are then performed on the pointer).
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
495 */
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
496 switch (input.getKind().getStackKind()) {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
497 case Int:
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13111
diff changeset
498 if (crb.codeCache.needsDataPatch(input)) {
13576
4e679d50ba9a Move data section building code to Java.
Roland Schatz <roland.schatz@oracle.com>
parents: 13520
diff changeset
499 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
500 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
501 // 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
502 // 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
503 // 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
504 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
505
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
506 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
507 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
508 boolean patch = false;
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13111
diff changeset
509 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
510 patch = true;
13576
4e679d50ba9a Move data section building code to Java.
Roland Schatz <roland.schatz@oracle.com>
parents: 13520
diff changeset
511 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
512 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
513 // 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
514 // 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
515 // 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
516 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
517 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
518 } else {
fb7b39f07232 Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13240
diff changeset
519 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
520 // 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
521 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
522 } 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
523 // 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
524 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
525 } else {
fb7b39f07232 Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13240
diff changeset
526 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
527 }
fb7b39f07232 Embed compressed constants when possible and use more efficient patterns for encoding
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 13240
diff changeset
528 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
529 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
530 case Float:
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
531 // 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
532 if (Float.floatToRawIntBits(input.asFloat()) == Float.floatToRawIntBits(0.0f)) {
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13111
diff changeset
533 assert !crb.codeCache.needsDataPatch(input);
4183
9e0c1b4cfef5 Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4181
diff changeset
534 masm.xorps(asFloatReg(result), asFloatReg(result));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
535 } else {
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13111
diff changeset
536 masm.movflt(asFloatReg(result), (AMD64Address) crb.asFloatConstRef(input));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
537 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
538 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
539 case Double:
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
540 // 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
541 if (Double.doubleToRawLongBits(input.asDouble()) == Double.doubleToRawLongBits(0.0d)) {
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13111
diff changeset
542 assert !crb.codeCache.needsDataPatch(input);
4183
9e0c1b4cfef5 Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4181
diff changeset
543 masm.xorpd(asDoubleReg(result), asDoubleReg(result));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
544 } else {
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13111
diff changeset
545 masm.movdbl(asDoubleReg(result), (AMD64Address) crb.asDoubleConstRef(input));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
546 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
547 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
548 case Object:
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
549 // 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
550 // 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
551 // 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
552 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
553 masm.movq(asRegister(result), 0x0L);
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13111
diff changeset
554 } else if (crb.target.inlineObjects) {
13576
4e679d50ba9a Move data section building code to Java.
Roland Schatz <roland.schatz@oracle.com>
parents: 13520
diff changeset
555 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
556 masm.movq(asRegister(result), 0xDEADDEADDEADDEADL);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
557 } else {
13576
4e679d50ba9a Move data section building code to Java.
Roland Schatz <roland.schatz@oracle.com>
parents: 13520
diff changeset
558 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
559 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
560 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
561 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
562 throw JVMCIError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
563 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
564 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
565
18187
9619ba4daf4c Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents: 18176
diff changeset
566 private static void const2stack(CompilationResultBuilder crb, AMD64MacroAssembler masm, Value result, JavaConstant input) {
13227
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13111
diff changeset
567 assert !crb.codeCache.needsDataPatch(input);
1a66453f73db renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents: 13111
diff changeset
568 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
569 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
570 switch (input.getKind().getStackKind()) {
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
571 case Int:
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
572 imm = input.asInt();
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
573 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
574 case Long:
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
575 imm = input.asLong();
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
576 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
577 case Float:
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
578 imm = floatToRawIntBits(input.asFloat());
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
579 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
580 case Double:
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
581 imm = doubleToRawLongBits(input.asDouble());
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
582 break;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
583 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
584 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
585 imm = 0;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
586 } 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
587 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
588 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
589 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
590 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
591 throw JVMCIError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
592 }
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
593 switch (result.getKind()) {
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
594 case Byte:
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
595 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
596 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
597 break;
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
598 case Short:
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
599 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
600 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
601 break;
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
602 case Int:
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
603 case Float:
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
604 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
605 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
606 break;
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
607 case Long:
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
608 case Double:
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
609 case Object:
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
610 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
611 break;
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
612 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
613 throw JVMCIError.shouldNotReachHere("Unknown result Kind: " + result.getKind());
21438
a4f376f516dc AMD64Move: refactor #const2stack and add support for short and byte.
Josef Eisl <josef.eisl@jku.at>
parents: 21200
diff changeset
614 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
615 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
616 }