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