annotate graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java @ 7905:38a597987357

Common base class for Load and Store.
author Roland Schatz <roland.schatz@oracle.com>
date Thu, 28 Feb 2013 14:15:24 +0100
parents 14b52a260099
children 775745294caa
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 /*
4181
319860ae697a Simplify FrameMap: make offsets of spill slots and outgoing parameters independent so that they can be allocated at the same time, eliminating the separate phases. This makes the separate StackBlock unnecesary. Change CiStackSlot to use byte offsets instead of spill slot index. This makes CiTarget.spillSlotSize unnecessary.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4142
diff changeset
2 * Copyright (c) 2011, 2012, 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.*;
7882
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
27
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
28 import static java.lang.Double.*;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
29 import static java.lang.Float.*;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
30
6580
d56d600819fe moved AMD64 into its own (new) project: com.oracle.graal.amd64
Doug Simon <doug.simon@oracle.com>
parents: 6539
diff changeset
31 import com.oracle.graal.amd64.*;
7882
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
32 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
33 import com.oracle.graal.api.meta.*;
6531
4afe23aa0a00 renamed packages: com.oracle.max.asm... -> com.oracle.graal.asm...
Doug Simon <doug.simon@oracle.com>
parents: 6493
diff changeset
34 import com.oracle.graal.asm.*;
4afe23aa0a00 renamed packages: com.oracle.max.asm... -> com.oracle.graal.asm...
Doug Simon <doug.simon@oracle.com>
parents: 6493
diff changeset
35 import com.oracle.graal.asm.amd64.*;
5060
4ed4295ce15f Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5059
diff changeset
36 import com.oracle.graal.graph.*;
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.LIRInstruction.Opcode;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
39 import com.oracle.graal.lir.StandardOp.MoveOp;
5060
4ed4295ce15f Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5059
diff changeset
40 import com.oracle.graal.lir.asm.*;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
41
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
42 public class AMD64Move {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
43
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
44 @Opcode("MOVE")
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
45 public static class SpillMoveOp extends AMD64LIRInstruction implements MoveOp {
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
46
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
47 @Def({REG, STACK}) protected Value result;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
48 @Use({REG, STACK, CONST}) protected Value input;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
49
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
50 public SpillMoveOp(Value result, Value input) {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
51 this.result = result;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
52 this.input = input;
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
53 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
54
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
55 @Override
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
56 public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) {
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
57 move(tasm, masm, getResult(), getInput());
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
58 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
59
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
60 @Override
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
61 public Value getInput() {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
62 return input;
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
63 }
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
64
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
65 @Override
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
66 public Value getResult() {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
67 return result;
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
68 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
69 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
70
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
71 @Opcode("MOVE")
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
72 public static class MoveToRegOp extends AMD64LIRInstruction implements MoveOp {
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
73
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
74 @Def({REG, HINT}) protected Value result;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
75 @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
76
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
77 public MoveToRegOp(Value result, Value input) {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
78 this.result = result;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
79 this.input = input;
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
80 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
81
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
82 @Override
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
83 public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) {
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
84 move(tasm, masm, getResult(), getInput());
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
85 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
86
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
87 @Override
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
88 public Value getInput() {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
89 return input;
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
90 }
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
91
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
92 @Override
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
93 public Value getResult() {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
94 return result;
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
95 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
96 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
97
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
98 @Opcode("MOVE")
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
99 public static class MoveFromRegOp extends AMD64LIRInstruction implements MoveOp {
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
100
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
101 @Def({REG, STACK}) protected Value result;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
102 @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
103
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
104 public MoveFromRegOp(Value result, Value input) {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
105 this.result = result;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
106 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
107 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
108
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
109 @Override
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
110 public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) {
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
111 move(tasm, masm, getResult(), getInput());
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
112 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
113
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
114 @Override
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
115 public Value getInput() {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
116 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
117 }
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
118
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
119 @Override
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
120 public Value getResult() {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
121 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
122 }
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
123 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
124
7905
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
125 public abstract static class MemOp extends AMD64LIRInstruction {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
126
7880
eb41b39fd1e4 Convert Value fields to Address.
Roland Schatz <roland.schatz@oracle.com>
parents: 7839
diff changeset
127 @Use({ADDR}) protected AMD64Address address;
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
128 @State protected LIRFrameState state;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
129
7905
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
130 public MemOp(AMD64Address address, LIRFrameState state) {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
131 this.address = address;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
132 this.state = state;
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
133 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
134
7905
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
135 protected abstract void emitMemAccess(AMD64MacroAssembler masm);
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
136
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
137 @Override
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
138 public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) {
7884
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
139 if (state != null) {
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
140 tasm.recordImplicitException(masm.codeBuffer.position(), state);
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
141 }
7905
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
142 emitMemAccess(masm);
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
143 }
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
144 }
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
145
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
146 public static class LoadOp extends MemOp {
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
147
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
148 @Def({REG}) protected Value result;
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
149
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
150 public LoadOp(Value result, AMD64Address address, LIRFrameState state) {
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
151 super(address, state);
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
152 this.result = result;
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
153 }
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
154
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
155 @Override
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
156 public void emitMemAccess(AMD64MacroAssembler masm) {
7884
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
157 switch (address.getKind()) {
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
158 case Boolean:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
159 case Byte:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
160 masm.movsxb(asRegister(result), address);
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
161 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
162 case Char:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
163 masm.movzxl(asRegister(result), address);
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
164 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
165 case Short:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
166 masm.movswl(asRegister(result), address);
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
167 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
168 case Int:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
169 masm.movslq(asRegister(result), address);
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
170 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
171 case Long:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
172 masm.movq(asRegister(result), address);
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
173 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
174 case Float:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
175 masm.movflt(asFloatReg(result), address);
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
176 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
177 case Double:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
178 masm.movdbl(asDoubleReg(result), address);
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
179 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
180 case Object:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
181 masm.movq(asRegister(result), address);
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
182 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
183 default:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
184 throw GraalInternalError.shouldNotReachHere();
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
185 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
186 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
187 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
188
7905
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
189 public static class StoreOp extends MemOp {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
190
7884
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
191 @Use({REG}) protected Value input;
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
192
7880
eb41b39fd1e4 Convert Value fields to Address.
Roland Schatz <roland.schatz@oracle.com>
parents: 7839
diff changeset
193 public StoreOp(AMD64Address address, Value input, LIRFrameState state) {
7905
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
194 super(address, state);
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
195 this.input = input;
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
196 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
197
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
198 @Override
7905
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
199 public void emitMemAccess(AMD64MacroAssembler masm) {
7884
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
200 assert isRegister(input);
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
201 switch (address.getKind()) {
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
202 case Boolean:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
203 case Byte:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
204 masm.movb(address, asRegister(input));
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
205 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
206 case Char:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
207 case Short:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
208 masm.movw(address, asRegister(input));
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
209 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
210 case Int:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
211 masm.movl(address, asRegister(input));
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
212 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
213 case Long:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
214 masm.movq(address, asRegister(input));
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
215 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
216 case Float:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
217 masm.movflt(address, asFloatReg(input));
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
218 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
219 case Double:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
220 masm.movsd(address, asDoubleReg(input));
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
221 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
222 case Object:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
223 masm.movq(address, asRegister(input));
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
224 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
225 default:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
226 throw GraalInternalError.shouldNotReachHere();
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
227 }
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
228 }
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
229 }
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
230
7905
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
231 public static class StoreConstantOp extends MemOp {
7884
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
232
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
233 @Use({CONST}) protected Constant input;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
234
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
235 public StoreConstantOp(AMD64Address address, Constant input, LIRFrameState state) {
7905
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
236 super(address, state);
7884
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
237 this.input = input;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
238 }
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
239
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
240 @Override
7905
38a597987357 Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents: 7884
diff changeset
241 public void emitMemAccess(AMD64MacroAssembler masm) {
7884
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
242 switch (address.getKind()) {
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
243 case Boolean:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
244 case Byte:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
245 masm.movb(address, input.asInt() & 0xFF);
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
246 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
247 case Char:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
248 case Short:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
249 masm.movw(address, input.asInt() & 0xFFFF);
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
250 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
251 case Int:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
252 masm.movl(address, input.asInt());
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
253 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
254 case Long:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
255 if (NumUtil.isInt(input.asLong())) {
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
256 masm.movslq(address, (int) input.asLong());
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
257 } else {
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
258 throw GraalInternalError.shouldNotReachHere("Cannot store 64-bit constants to memory");
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
259 }
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
260 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
261 case Float:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
262 masm.movl(address, floatToRawIntBits(input.asFloat()));
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
263 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
264 case Double:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
265 throw GraalInternalError.shouldNotReachHere("Cannot store 64-bit constants to memory");
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
266 case Object:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
267 if (input.isNull()) {
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
268 masm.movptr(address, 0);
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
269 } else {
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
270 throw GraalInternalError.shouldNotReachHere("Cannot store 64-bit constants to memory");
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
271 }
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
272 break;
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
273 default:
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
274 throw GraalInternalError.shouldNotReachHere();
14b52a260099 Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents: 7882
diff changeset
275 }
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
276 }
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
277 }
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
278
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
279 public static class LeaOp extends AMD64LIRInstruction {
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
280
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
281 @Def({REG}) protected Value result;
7882
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
282 @Use({ADDR, UNINITIALIZED}) protected AMD64Address address;
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
283
7882
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
284 public LeaOp(Value result, AMD64Address address) {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
285 this.result = result;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
286 this.address = address;
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
287 }
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
288
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
289 @Override
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
290 public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) {
7882
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
291 masm.leaq(asLongReg(result), address);
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
292 }
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
293 }
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
294
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
295 public static class StackLeaOp extends AMD64LIRInstruction {
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
296
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
297 @Def({REG}) protected Value result;
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
298 @Use({STACK, UNINITIALIZED}) protected StackSlot slot;
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
299
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
300 public StackLeaOp(Value result, StackSlot slot) {
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
301 this.result = result;
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
302 this.slot = slot;
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
303 }
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
304
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
305 @Override
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
306 public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) {
124b28240347 Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents: 7881
diff changeset
307 masm.leaq(asLongReg(result), (AMD64Address) tasm.asAddress(slot));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
308 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
309 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
310
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
311 public static class MembarOp extends AMD64LIRInstruction {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
312
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
313 private final int barriers;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
314
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
315 public MembarOp(final int barriers) {
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
316 this.barriers = barriers;
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
317 }
4245
75c620f90ab9 Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4231
diff changeset
318
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
319 @Override
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
320 public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) {
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
321 masm.membar(barriers);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
322 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
323 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
324
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
325 public static class NullCheckOp extends AMD64LIRInstruction {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
326
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
327 @Use protected Value input;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
328 @State protected LIRFrameState state;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
329
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
330 public NullCheckOp(Variable input, LIRFrameState state) {
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
331 this.input = input;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
332 this.state = state;
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
333 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
334
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
335 @Override
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
336 public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
337 tasm.recordImplicitException(masm.codeBuffer.position(), state);
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
338 masm.nullCheck(asRegister(input));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
339 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
340 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
341
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
342 @Opcode("CAS")
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
343 public static class CompareAndSwapOp extends AMD64LIRInstruction {
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
344
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
345 @Def protected Value result;
7880
eb41b39fd1e4 Convert Value fields to Address.
Roland Schatz <roland.schatz@oracle.com>
parents: 7839
diff changeset
346 @Use({ADDR}) protected AMD64Address address;
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
347 @Use protected Value cmpValue;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
348 @Use protected Value newValue;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
349
7880
eb41b39fd1e4 Convert Value fields to Address.
Roland Schatz <roland.schatz@oracle.com>
parents: 7839
diff changeset
350 public CompareAndSwapOp(Value result, AMD64Address address, Value cmpValue, Value newValue) {
5733
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
351 this.result = result;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
352 this.address = address;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
353 this.cmpValue = cmpValue;
141b15521a39 use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents: 5547
diff changeset
354 this.newValue = newValue;
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
355 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
356
4323
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
357 @Override
df5547057954 Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4314
diff changeset
358 public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) {
7880
eb41b39fd1e4 Convert Value fields to Address.
Roland Schatz <roland.schatz@oracle.com>
parents: 7839
diff changeset
359 compareAndSwap(tasm, masm, result, address, cmpValue, newValue);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
360 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
361 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
362
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
363 public static void move(TargetMethodAssembler tasm, 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
364 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
365 if (isRegister(result)) {
9e0c1b4cfef5 Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4181
diff changeset
366 reg2reg(masm, result, input);
9e0c1b4cfef5 Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4181
diff changeset
367 } else if (isStackSlot(result)) {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
368 reg2stack(tasm, masm, result, input);
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
369 } else {
4524
dcc8f5c6f394 Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4323
diff changeset
370 throw GraalInternalError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
371 }
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
372 } 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
373 if (isRegister(result)) {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
374 stack2reg(tasm, masm, result, input);
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
375 } else {
4524
dcc8f5c6f394 Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4323
diff changeset
376 throw GraalInternalError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
377 }
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
378 } 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
379 if (isRegister(result)) {
5538
e18ba36bfebc Renamed RiConstant => Constant.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5510
diff changeset
380 const2reg(tasm, masm, result, (Constant) input);
4183
9e0c1b4cfef5 Move all isXxx and asXxx out of CiValue and into their own util class.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4181
diff changeset
381 } else if (isStackSlot(result)) {
5538
e18ba36bfebc Renamed RiConstant => Constant.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5510
diff changeset
382 const2stack(tasm, masm, result, (Constant) input);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
383 } else {
4524
dcc8f5c6f394 Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4323
diff changeset
384 throw GraalInternalError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
385 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
386 } else {
4524
dcc8f5c6f394 Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4323
diff changeset
387 throw GraalInternalError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
388 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
389 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
390
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
391 private static void reg2reg(AMD64MacroAssembler masm, Value result, Value input) {
6474
f2624e472426 ignore kinds when checking for redundant register to register move
Doug Simon <doug.simon@oracle.com>
parents: 6329
diff changeset
392 if (asRegister(input).equals(asRegister(result))) {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
393 return;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
394 }
6329
92bc58dc5b5e More clean up and documentation in api.code and api.meta.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5733
diff changeset
395 switch (input.getKind()) {
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
396 case Int:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
397 masm.movl(asRegister(result), asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
398 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
399 case Long:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
400 masm.movq(asRegister(result), asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
401 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
402 case Float:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
403 masm.movflt(asFloatReg(result), asFloatReg(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
404 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
405 case Double:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
406 masm.movdbl(asDoubleReg(result), asDoubleReg(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
407 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
408 case Object:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
409 masm.movq(asRegister(result), asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
410 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
411 default:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
412 throw GraalInternalError.shouldNotReachHere("kind=" + result.getKind());
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
413 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
414 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
415
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
416 private static void reg2stack(TargetMethodAssembler tasm, AMD64MacroAssembler masm, Value result, Value input) {
7839
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7827
diff changeset
417 AMD64Address dest = (AMD64Address) tasm.asAddress(result);
6329
92bc58dc5b5e More clean up and documentation in api.code and api.meta.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5733
diff changeset
418 switch (input.getKind()) {
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
419 case Int:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
420 masm.movl(dest, asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
421 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
422 case Long:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
423 masm.movq(dest, asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
424 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
425 case Float:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
426 masm.movflt(dest, asFloatReg(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
427 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
428 case Double:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
429 masm.movsd(dest, asDoubleReg(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
430 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
431 case Object:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
432 masm.movq(dest, asRegister(input));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
433 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
434 default:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
435 throw GraalInternalError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
436 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
437 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
438
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
439 private static void stack2reg(TargetMethodAssembler tasm, AMD64MacroAssembler masm, Value result, Value input) {
7839
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7827
diff changeset
440 AMD64Address src = (AMD64Address) tasm.asAddress(input);
6329
92bc58dc5b5e More clean up and documentation in api.code and api.meta.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5733
diff changeset
441 switch (input.getKind()) {
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
442 case Int:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
443 masm.movl(asRegister(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
444 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
445 case Long:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
446 masm.movq(asRegister(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
447 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
448 case Float:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
449 masm.movflt(asFloatReg(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
450 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
451 case Double:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
452 masm.movdbl(asDoubleReg(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
453 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
454 case Object:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
455 masm.movq(asRegister(result), src);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
456 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
457 default:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
458 throw GraalInternalError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
459 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
460 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
461
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
462 private static void const2reg(TargetMethodAssembler tasm, AMD64MacroAssembler masm, Value result, Constant input) {
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
463 /*
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
464 * 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
465 * 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
466 * 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
467 * operations are then performed on the pointer).
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
468 */
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
469 switch (input.getKind().getStackKind()) {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
470 case Int:
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
471 if (tasm.runtime.needsDataPatch(input)) {
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
472 tasm.recordDataReferenceInCode(input, 0, true);
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
473 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
474 // 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
475 // 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
476 // 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
477 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
478
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
479 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
480 case Long:
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
481 if (tasm.runtime.needsDataPatch(input)) {
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
482 tasm.recordDataReferenceInCode(input, 0, true);
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
483 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
484 // 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
485 // 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
486 // 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
487 masm.movq(asRegister(result), input.asLong());
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
488 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
489 case Float:
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
490 // 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
491 if (Float.floatToRawIntBits(input.asFloat()) == Float.floatToRawIntBits(0.0f)) {
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
492 assert !tasm.runtime.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
493 masm.xorps(asFloatReg(result), asFloatReg(result));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
494 } else {
7839
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7827
diff changeset
495 masm.movflt(asFloatReg(result), (AMD64Address) tasm.asFloatConstRef(input));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
496 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
497 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
498 case Double:
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
499 // 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
500 if (Double.doubleToRawLongBits(input.asDouble()) == Double.doubleToRawLongBits(0.0d)) {
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
501 assert !tasm.runtime.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
502 masm.xorpd(asDoubleReg(result), asDoubleReg(result));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
503 } else {
7839
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7827
diff changeset
504 masm.movdbl(asDoubleReg(result), (AMD64Address) tasm.asDoubleConstRef(input));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
505 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
506 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
507 case Object:
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
508 // 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
509 // 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
510 // 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
511 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
512 masm.movq(asRegister(result), 0x0L);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
513 } else if (tasm.target.inlineObjects) {
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
514 tasm.recordDataReferenceInCode(input, 0, true);
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
515 masm.movq(asRegister(result), 0xDEADDEADDEADDEADL);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
516 } else {
7839
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7827
diff changeset
517 masm.movq(asRegister(result), (AMD64Address) tasm.recordDataReferenceInCode(input, 0, false));
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
518 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
519 break;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
520 default:
4524
dcc8f5c6f394 Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4323
diff changeset
521 throw GraalInternalError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
522 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
523 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
524
5539
bc647d8b0080 Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
525 private static void const2stack(TargetMethodAssembler tasm, AMD64MacroAssembler masm, Value result, Constant 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
526 assert !tasm.runtime.needsDataPatch(input);
7839
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7827
diff changeset
527 AMD64Address dest = (AMD64Address) tasm.asAddress(result);
6539
2463eb24b644 Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6531
diff changeset
528 switch (input.getKind().getStackKind()) {
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
529 case Int:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
530 masm.movl(dest, input.asInt());
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
531 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
532 case Long:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
533 masm.movlong(dest, input.asLong());
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
534 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
535 case Float:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
536 masm.movl(dest, floatToRawIntBits(input.asFloat()));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
537 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
538 case Double:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
539 masm.movlong(dest, doubleToRawLongBits(input.asDouble()));
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
540 break;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
541 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
542 if (input.isNull()) {
7839
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7827
diff changeset
543 masm.movlong(dest, 0L);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
544 } else {
4524
dcc8f5c6f394 Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4323
diff changeset
545 throw GraalInternalError.shouldNotReachHere("Non-null object constants must be in register");
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
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 default:
4524
dcc8f5c6f394 Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents: 4323
diff changeset
549 throw GraalInternalError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
550 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
551 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
552
7839
838293a77af7 Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents: 7827
diff changeset
553 protected static void compareAndSwap(TargetMethodAssembler tasm, AMD64MacroAssembler masm, Value result, AMD64Address address, Value cmpValue, Value newValue) {
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
554 assert asRegister(cmpValue) == AMD64.rax && asRegister(result) == AMD64.rax;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
555
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
556 if (tasm.target.isMP) {
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
557 masm.lock();
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
558 }
6329
92bc58dc5b5e More clean up and documentation in api.code and api.meta.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5733
diff changeset
559 switch (cmpValue.getKind()) {
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
560 case Int:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
561 masm.cmpxchgl(asRegister(newValue), address);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
562 break;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
563 case Long:
7881
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
564 case Object:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
565 masm.cmpxchgq(asRegister(newValue), address);
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
566 break;
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
567 default:
d13bf8dae495 Code formatter.
Roland Schatz <roland.schatz@oracle.com>
parents: 7880
diff changeset
568 throw GraalInternalError.shouldNotReachHere();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
569 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
570 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
571 }