Mercurial > hg > truffle
annotate graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Move.java @ 9293:d006c9920e94
Make kind of LIR memory access operations explicit.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Thu, 25 Apr 2013 16:12:06 +0200 |
parents | acc24060b64f |
children | a5f2b9012865 |
rev | line source |
---|---|
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
1 /* |
8144
a016a19f3792
Remove SpillMoveOp.
Roland Schatz <roland.schatz@oracle.com>
parents:
8136
diff
changeset
|
2 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved. |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
4 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
8 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
14 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
18 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
21 * questions. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
22 */ |
5060
4ed4295ce15f
Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5059
diff
changeset
|
23 package com.oracle.graal.lir.amd64; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
24 |
5547
b6617d13ea44
Dropping Ci* prefixes. Some additional renamings in the api.code interface.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5539
diff
changeset
|
25 import static com.oracle.graal.api.code.ValueUtil.*; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
26 import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; |
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 MoveToRegOp extends AMD64LIRInstruction implements MoveOp { |
7881 | 46 |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
47 @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
|
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 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
|
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 | 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 MoveFromRegOp extends AMD64LIRInstruction implements MoveOp { |
7881 | 73 |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
74 @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
|
75 @Use({REG, CONST, HINT}) protected Value input; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
76 |
5539
bc647d8b0080
Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5538
diff
changeset
|
77 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
|
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 | 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 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
97 |
7905
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
98 public abstract static class MemOp extends AMD64LIRInstruction { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
99 |
9293
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
100 protected final Kind kind; |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
101 @Use({COMPOSITE}) protected AMD64AddressValue address; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
102 @State protected LIRFrameState state; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
103 |
9293
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
104 public MemOp(Kind kind, AMD64AddressValue address, LIRFrameState state) { |
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
105 this.kind = kind; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
106 this.address = address; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
107 this.state = state; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
108 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
109 |
7905
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
110 protected abstract void emitMemAccess(AMD64MacroAssembler masm); |
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
111 |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
112 @Override |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
113 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
|
114 if (state != null) { |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
115 tasm.recordImplicitException(masm.codeBuffer.position(), state); |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
116 } |
7905
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
117 emitMemAccess(masm); |
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
118 } |
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
119 } |
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
120 |
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
121 public static class LoadOp extends MemOp { |
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
122 |
7908
775745294caa
Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents:
7905
diff
changeset
|
123 @Def({REG}) protected AllocatableValue result; |
7905
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
124 |
9293
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
125 public LoadOp(Kind kind, AllocatableValue result, AMD64AddressValue address, LIRFrameState state) { |
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
126 super(kind, address, state); |
7905
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
127 this.result = result; |
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
128 } |
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
129 |
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
130 @Override |
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
131 public void emitMemAccess(AMD64MacroAssembler masm) { |
9293
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
132 switch (kind) { |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
133 case Boolean: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
134 case Byte: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
135 masm.movsxb(asRegister(result), address.toAddress()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
136 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
137 case Char: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
138 masm.movzxl(asRegister(result), address.toAddress()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
139 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
140 case Short: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
141 masm.movswl(asRegister(result), address.toAddress()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
142 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
143 case Int: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
144 masm.movslq(asRegister(result), address.toAddress()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
145 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
146 case Long: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
147 masm.movq(asRegister(result), address.toAddress()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
148 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
149 case Float: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
150 masm.movflt(asFloatReg(result), address.toAddress()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
151 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
152 case Double: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
153 masm.movdbl(asDoubleReg(result), address.toAddress()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
154 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
155 case Object: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
156 masm.movq(asRegister(result), address.toAddress()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
157 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
158 default: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
159 throw GraalInternalError.shouldNotReachHere(); |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
160 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
161 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
162 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
163 |
7905
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
164 public static class StoreOp extends MemOp { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
165 |
7908
775745294caa
Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents:
7905
diff
changeset
|
166 @Use({REG}) protected AllocatableValue input; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
167 |
9293
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
168 public StoreOp(Kind kind, AMD64AddressValue address, AllocatableValue input, LIRFrameState state) { |
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
169 super(kind, address, state); |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
170 this.input = input; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
171 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
172 |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
173 @Override |
7905
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
174 public void emitMemAccess(AMD64MacroAssembler masm) { |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
175 assert isRegister(input); |
9293
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
176 switch (kind) { |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
177 case Boolean: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
178 case Byte: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
179 masm.movb(address.toAddress(), asRegister(input)); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
180 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
181 case Char: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
182 case Short: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
183 masm.movw(address.toAddress(), asRegister(input)); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
184 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
185 case Int: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
186 masm.movl(address.toAddress(), asRegister(input)); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
187 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
188 case Long: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
189 masm.movq(address.toAddress(), asRegister(input)); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
190 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
191 case Float: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
192 masm.movflt(address.toAddress(), asFloatReg(input)); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
193 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
194 case Double: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
195 masm.movsd(address.toAddress(), asDoubleReg(input)); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
196 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
197 case Object: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
198 masm.movq(address.toAddress(), asRegister(input)); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
199 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
200 default: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
201 throw GraalInternalError.shouldNotReachHere(); |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
202 } |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
203 } |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
204 } |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
205 |
7905
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
206 public static class StoreConstantOp extends MemOp { |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
207 |
8136
c66aa27ef4da
Reenable patching of optimized and static calls but without out-of-line stubs.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7908
diff
changeset
|
208 protected final Constant input; |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
209 |
9293
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
210 public StoreConstantOp(Kind kind, AMD64AddressValue address, Constant input, LIRFrameState state) { |
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
211 super(kind, address, state); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
212 this.input = input; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
213 } |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
214 |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
215 @Override |
7905
38a597987357
Common base class for Load and Store.
Roland Schatz <roland.schatz@oracle.com>
parents:
7884
diff
changeset
|
216 public void emitMemAccess(AMD64MacroAssembler masm) { |
9293
d006c9920e94
Make kind of LIR memory access operations explicit.
Roland Schatz <roland.schatz@oracle.com>
parents:
8390
diff
changeset
|
217 switch (kind) { |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
218 case Boolean: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
219 case Byte: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
220 masm.movb(address.toAddress(), input.asInt() & 0xFF); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
221 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
222 case Char: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
223 case Short: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
224 masm.movw(address.toAddress(), input.asInt() & 0xFFFF); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
225 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
226 case Int: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
227 masm.movl(address.toAddress(), input.asInt()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
228 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
229 case Long: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
230 if (NumUtil.isInt(input.asLong())) { |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
231 masm.movslq(address.toAddress(), (int) input.asLong()); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
232 } else { |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
233 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
|
234 } |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
235 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
236 case Float: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
237 masm.movl(address.toAddress(), floatToRawIntBits(input.asFloat())); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
238 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
239 case Double: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
240 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
|
241 case Object: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
242 if (input.isNull()) { |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
243 masm.movptr(address.toAddress(), 0); |
7884
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
244 } else { |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
245 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
|
246 } |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
247 break; |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
248 default: |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
249 throw GraalInternalError.shouldNotReachHere(); |
14b52a260099
Separate store op for storing constants.
Roland Schatz <roland.schatz@oracle.com>
parents:
7882
diff
changeset
|
250 } |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
251 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
252 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
253 |
7881 | 254 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
|
255 |
7908
775745294caa
Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents:
7905
diff
changeset
|
256 @Def({REG}) protected AllocatableValue result; |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
257 @Use({COMPOSITE, UNINITIALIZED}) protected AMD64AddressValue address; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
258 |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
259 public LeaOp(AllocatableValue result, AMD64AddressValue address) { |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
260 this.result = result; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
261 this.address = address; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
262 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
263 |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
264 @Override |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
265 public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) { |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
266 masm.leaq(asLongReg(result), address.toAddress()); |
7882
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
267 } |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
268 } |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
269 |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
270 public static class StackLeaOp extends AMD64LIRInstruction { |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
271 |
7908
775745294caa
Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents:
7905
diff
changeset
|
272 @Def({REG}) protected AllocatableValue result; |
7882
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
273 @Use({STACK, UNINITIALIZED}) protected StackSlot slot; |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
274 |
7908
775745294caa
Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents:
7905
diff
changeset
|
275 public StackLeaOp(AllocatableValue result, StackSlot slot) { |
7882
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
276 this.result = result; |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
277 this.slot = slot; |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
278 } |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
279 |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
280 @Override |
124b28240347
Separate STACK and ADDR nodes in LIR.
Roland Schatz <roland.schatz@oracle.com>
parents:
7881
diff
changeset
|
281 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
|
282 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
|
283 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
284 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
285 |
7881 | 286 public static class MembarOp extends AMD64LIRInstruction { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
287 |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
288 private final int barriers; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
289 |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
290 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
|
291 this.barriers = barriers; |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
292 } |
4245
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4231
diff
changeset
|
293 |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
294 @Override |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
295 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
|
296 masm.membar(barriers); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
297 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
298 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
299 |
7881 | 300 public static class NullCheckOp extends AMD64LIRInstruction { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
301 |
8390
acc24060b64f
Use implicit null checks for all null checks
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
8166
diff
changeset
|
302 @Use({REG}) protected AllocatableValue input; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
303 @State protected LIRFrameState state; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
304 |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
305 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
|
306 this.input = input; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
307 this.state = state; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
308 } |
3733
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 @Override |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
311 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
|
312 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
|
313 masm.nullCheck(asRegister(input)); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
314 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
315 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
316 |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
317 @Opcode("CAS") |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
318 public static class CompareAndSwapOp extends AMD64LIRInstruction { |
7881 | 319 |
7908
775745294caa
Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents:
7905
diff
changeset
|
320 @Def protected AllocatableValue result; |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
321 @Use({COMPOSITE}) protected AMD64AddressValue address; |
7908
775745294caa
Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents:
7905
diff
changeset
|
322 @Use protected AllocatableValue cmpValue; |
775745294caa
Change Value to AllocatableValue in move operations.
Roland Schatz <roland.schatz@oracle.com>
parents:
7905
diff
changeset
|
323 @Use protected AllocatableValue newValue; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
324 |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
325 public CompareAndSwapOp(AllocatableValue result, AMD64AddressValue address, AllocatableValue cmpValue, AllocatableValue newValue) { |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
326 this.result = result; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
327 this.address = address; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
328 this.cmpValue = cmpValue; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5547
diff
changeset
|
329 this.newValue = newValue; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
330 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
331 |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
332 @Override |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4314
diff
changeset
|
333 public void emitCode(TargetMethodAssembler tasm, AMD64MacroAssembler masm) { |
7880
eb41b39fd1e4
Convert Value fields to Address.
Roland Schatz <roland.schatz@oracle.com>
parents:
7839
diff
changeset
|
334 compareAndSwap(tasm, masm, result, address, cmpValue, newValue); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
335 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
336 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
337 |
5539
bc647d8b0080
Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5538
diff
changeset
|
338 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
|
339 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
|
340 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
|
341 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
|
342 } else if (isStackSlot(result)) { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
343 reg2stack(tasm, masm, result, input); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
344 } else { |
4524
dcc8f5c6f394
Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4323
diff
changeset
|
345 throw GraalInternalError.shouldNotReachHere(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
346 } |
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
|
347 } 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
|
348 if (isRegister(result)) { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
349 stack2reg(tasm, masm, result, input); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
350 } else { |
4524
dcc8f5c6f394
Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4323
diff
changeset
|
351 throw GraalInternalError.shouldNotReachHere(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
352 } |
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
|
353 } 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
|
354 if (isRegister(result)) { |
5538
e18ba36bfebc
Renamed RiConstant => Constant.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5510
diff
changeset
|
355 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
|
356 } else if (isStackSlot(result)) { |
5538
e18ba36bfebc
Renamed RiConstant => Constant.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5510
diff
changeset
|
357 const2stack(tasm, masm, result, (Constant) input); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
358 } else { |
4524
dcc8f5c6f394
Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4323
diff
changeset
|
359 throw GraalInternalError.shouldNotReachHere(); |
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 } else { |
4524
dcc8f5c6f394
Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4323
diff
changeset
|
362 throw GraalInternalError.shouldNotReachHere(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
363 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
364 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
365 |
5539
bc647d8b0080
Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5538
diff
changeset
|
366 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
|
367 if (asRegister(input).equals(asRegister(result))) { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
368 return; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
369 } |
6329
92bc58dc5b5e
More clean up and documentation in api.code and api.meta.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5733
diff
changeset
|
370 switch (input.getKind()) { |
7881 | 371 case Int: |
372 masm.movl(asRegister(result), asRegister(input)); | |
373 break; | |
374 case Long: | |
375 masm.movq(asRegister(result), asRegister(input)); | |
376 break; | |
377 case Float: | |
378 masm.movflt(asFloatReg(result), asFloatReg(input)); | |
379 break; | |
380 case Double: | |
381 masm.movdbl(asDoubleReg(result), asDoubleReg(input)); | |
382 break; | |
383 case Object: | |
384 masm.movq(asRegister(result), asRegister(input)); | |
385 break; | |
386 default: | |
387 throw GraalInternalError.shouldNotReachHere("kind=" + result.getKind()); | |
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 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
|
392 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
|
393 switch (input.getKind()) { |
7881 | 394 case Int: |
395 masm.movl(dest, asRegister(input)); | |
396 break; | |
397 case Long: | |
398 masm.movq(dest, asRegister(input)); | |
399 break; | |
400 case Float: | |
401 masm.movflt(dest, asFloatReg(input)); | |
402 break; | |
403 case Double: | |
404 masm.movsd(dest, asDoubleReg(input)); | |
405 break; | |
406 case Object: | |
407 masm.movq(dest, asRegister(input)); | |
408 break; | |
409 default: | |
410 throw GraalInternalError.shouldNotReachHere(); | |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
411 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
412 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
413 |
5539
bc647d8b0080
Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5538
diff
changeset
|
414 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
|
415 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
|
416 switch (input.getKind()) { |
7881 | 417 case Int: |
418 masm.movl(asRegister(result), src); | |
419 break; | |
420 case Long: | |
421 masm.movq(asRegister(result), src); | |
422 break; | |
423 case Float: | |
424 masm.movflt(asFloatReg(result), src); | |
425 break; | |
426 case Double: | |
427 masm.movdbl(asDoubleReg(result), src); | |
428 break; | |
429 case Object: | |
430 masm.movq(asRegister(result), src); | |
431 break; | |
432 default: | |
433 throw GraalInternalError.shouldNotReachHere(); | |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
434 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
435 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
436 |
5539
bc647d8b0080
Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5538
diff
changeset
|
437 private static void const2reg(TargetMethodAssembler tasm, AMD64MacroAssembler masm, Value result, Constant input) { |
7881 | 438 /* |
439 * Note: we use the kind of the input operand (and not the kind of the result operand) | |
440 * because they don't match in all cases. For example, an object constant can be loaded to a | |
441 * long register when unsafe casts occurred (e.g., for a write barrier where arithmetic | |
442 * operations are then performed on the pointer). | |
443 */ | |
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
|
444 switch (input.getKind().getStackKind()) { |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
445 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
|
446 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
|
447 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
|
448 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
449 // 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
|
450 // 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
|
451 // 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
|
452 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
|
453 |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
454 break; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
455 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
|
456 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
|
457 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
|
458 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
459 // 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
|
460 // 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
|
461 // 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
|
462 masm.movq(asRegister(result), input.asLong()); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
463 break; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
464 case Float: |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
465 // 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
|
466 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
|
467 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
|
468 masm.xorps(asFloatReg(result), asFloatReg(result)); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
469 } else { |
7839
838293a77af7
Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents:
7827
diff
changeset
|
470 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
|
471 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
472 break; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
473 case Double: |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
474 // 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
|
475 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
|
476 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
|
477 masm.xorpd(asDoubleReg(result), asDoubleReg(result)); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
478 } else { |
7839
838293a77af7
Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents:
7827
diff
changeset
|
479 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
|
480 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
481 break; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
482 case Object: |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
483 // 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
|
484 // 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
|
485 // 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
|
486 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
|
487 masm.movq(asRegister(result), 0x0L); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
488 } 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
|
489 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
|
490 masm.movq(asRegister(result), 0xDEADDEADDEADDEADL); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
491 } else { |
7839
838293a77af7
Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents:
7827
diff
changeset
|
492 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
|
493 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
494 break; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
495 default: |
4524
dcc8f5c6f394
Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4323
diff
changeset
|
496 throw GraalInternalError.shouldNotReachHere(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
497 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
498 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
499 |
5539
bc647d8b0080
Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5538
diff
changeset
|
500 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
|
501 assert !tasm.runtime.needsDataPatch(input); |
7839
838293a77af7
Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents:
7827
diff
changeset
|
502 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
|
503 switch (input.getKind().getStackKind()) { |
7881 | 504 case Int: |
505 masm.movl(dest, input.asInt()); | |
506 break; | |
507 case Long: | |
508 masm.movlong(dest, input.asLong()); | |
509 break; | |
510 case Float: | |
511 masm.movl(dest, floatToRawIntBits(input.asFloat())); | |
512 break; | |
513 case Double: | |
514 masm.movlong(dest, doubleToRawLongBits(input.asDouble())); | |
515 break; | |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
516 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
|
517 if (input.isNull()) { |
7839
838293a77af7
Make Address class platform specific.
Roland Schatz <roland.schatz@oracle.com>
parents:
7827
diff
changeset
|
518 masm.movlong(dest, 0L); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
519 } else { |
4524
dcc8f5c6f394
Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4323
diff
changeset
|
520 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
|
521 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
522 break; |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
523 default: |
4524
dcc8f5c6f394
Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4323
diff
changeset
|
524 throw GraalInternalError.shouldNotReachHere(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
525 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
526 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
527 |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
528 protected static void compareAndSwap(TargetMethodAssembler tasm, AMD64MacroAssembler masm, AllocatableValue result, AMD64AddressValue address, AllocatableValue cmpValue, AllocatableValue 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
|
529 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
|
530 |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
531 if (tasm.target.isMP) { |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
532 masm.lock(); |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
533 } |
6329
92bc58dc5b5e
More clean up and documentation in api.code and api.meta.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5733
diff
changeset
|
534 switch (cmpValue.getKind()) { |
7881 | 535 case Int: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
536 masm.cmpxchgl(asRegister(newValue), address.toAddress()); |
7881 | 537 break; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
538 case Long: |
7881 | 539 case Object: |
8166
d2733c9b3d0e
Convert AMD64Address to CompositeValue.
Roland Schatz <roland.schatz@oracle.com>
parents:
8144
diff
changeset
|
540 masm.cmpxchgq(asRegister(newValue), address.toAddress()); |
7881 | 541 break; |
542 default: | |
543 throw GraalInternalError.shouldNotReachHere(); | |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
544 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
545 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
546 } |