Mercurial > hg > truffle
annotate graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64Arithmetic.java @ 19526:8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Fri, 20 Feb 2015 22:22:55 +0100 |
parents | 437894ecd7c5 |
children | 89c729e9e0a4 |
rev | line source |
---|---|
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
1 /* |
18841
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
2 * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
4 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
7 * published by the Free Software Foundation. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
8 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
13 * accompanied this code). |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
14 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
18 * |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
21 * questions. |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
22 */ |
5060
4ed4295ce15f
Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5059
diff
changeset
|
23 package com.oracle.graal.lir.amd64; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
24 |
5547
b6617d13ea44
Dropping Ci* prefixes. Some additional renamings in the api.code interface.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5540
diff
changeset
|
25 import static com.oracle.graal.api.code.ValueUtil.*; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
26 import static com.oracle.graal.lir.LIRInstruction.OperandFlag.*; |
4245
75c620f90ab9
Support stack-operands and register hints in new register allocator API
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4207
diff
changeset
|
27 |
6580
d56d600819fe
moved AMD64 into its own (new) project: com.oracle.graal.amd64
Doug Simon <doug.simon@oracle.com>
parents:
6539
diff
changeset
|
28 import com.oracle.graal.amd64.*; |
5507
dc71b06d09f8
Moving classes from cri.ri to api.meta.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5506
diff
changeset
|
29 import com.oracle.graal.api.meta.*; |
9581
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
30 import com.oracle.graal.asm.*; |
6531
4afe23aa0a00
renamed packages: com.oracle.max.asm... -> com.oracle.graal.asm...
Doug Simon <doug.simon@oracle.com>
parents:
6493
diff
changeset
|
31 import com.oracle.graal.asm.amd64.*; |
9581
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
32 import com.oracle.graal.asm.amd64.AMD64Assembler.ConditionFlag; |
15193
96bb07a5d667
Spit up and move GraalInternalError.
Josef Eisl <josef.eisl@jku.at>
parents:
14942
diff
changeset
|
33 import com.oracle.graal.compiler.common.*; |
5060
4ed4295ce15f
Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5059
diff
changeset
|
34 import com.oracle.graal.lir.*; |
14931
d45e8c306349
use MemOp as base class for new memory ops
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14707
diff
changeset
|
35 import com.oracle.graal.lir.amd64.AMD64Move.MemOp; |
5060
4ed4295ce15f
Update import statements.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5059
diff
changeset
|
36 import com.oracle.graal.lir.asm.*; |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
37 |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
38 public enum AMD64Arithmetic { |
10959 | 39 |
40 // @formatter:off | |
41 | |
15691
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
42 IADD, ISUB, IMUL, IUMUL, IDIV, IDIVREM, IREM, IUDIV, IUREM, IAND, IOR, IXOR, ISHL, ISHR, IUSHR, IROL, IROR, |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
43 LADD, LSUB, LMUL, LUMUL, LDIV, LDIVREM, LREM, LUDIV, LUREM, LAND, LOR, LXOR, LSHL, LSHR, LUSHR, LROL, LROR, |
9581
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
44 FADD, FSUB, FMUL, FDIV, FREM, FAND, FOR, FXOR, |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
45 DADD, DSUB, DMUL, DDIV, DREM, DAND, DOR, DXOR, |
11355
01269a181628
add bitwise "not" operation
Lukas Stadler <lukas.stadler@jku.at>
parents:
11273
diff
changeset
|
46 INEG, LNEG, INOT, LNOT, |
11273
b5e95841d366
Move SQRT from AMD64MathIntrinsicOp to AMD64Arithmetic.
Roland Schatz <roland.schatz@oracle.com>
parents:
10959
diff
changeset
|
47 SQRT, |
14001
79114edb5130
Explicit x2L instructions in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
13587
diff
changeset
|
48 L2I, B2I, S2I, B2L, S2L, I2L, |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
49 F2D, D2F, |
8179
80a825206cbc
replaced AMD64Arithmetic.ConvertSlowPath with a snippet (GRAAL-140)
Doug Simon <doug.simon@oracle.com>
parents:
8136
diff
changeset
|
50 I2F, I2D, |
80a825206cbc
replaced AMD64Arithmetic.ConvertSlowPath with a snippet (GRAAL-140)
Doug Simon <doug.simon@oracle.com>
parents:
8136
diff
changeset
|
51 L2F, L2D, |
80a825206cbc
replaced AMD64Arithmetic.ConvertSlowPath with a snippet (GRAAL-140)
Doug Simon <doug.simon@oracle.com>
parents:
8136
diff
changeset
|
52 MOV_I2F, MOV_L2D, MOV_F2I, MOV_D2L, |
14707
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
53 MOV_B2UI, MOV_B2UL, // Zero extending byte loads |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
54 |
8179
80a825206cbc
replaced AMD64Arithmetic.ConvertSlowPath with a snippet (GRAAL-140)
Doug Simon <doug.simon@oracle.com>
parents:
8136
diff
changeset
|
55 /* |
80a825206cbc
replaced AMD64Arithmetic.ConvertSlowPath with a snippet (GRAAL-140)
Doug Simon <doug.simon@oracle.com>
parents:
8136
diff
changeset
|
56 * Converts a float/double to an int/long. The result of the conversion does not comply with Java semantics |
80a825206cbc
replaced AMD64Arithmetic.ConvertSlowPath with a snippet (GRAAL-140)
Doug Simon <doug.simon@oracle.com>
parents:
8136
diff
changeset
|
57 * when the input is a NaN, infinity or the conversion result is greater than Integer.MAX_VALUE/Long.MAX_VALUE. |
80a825206cbc
replaced AMD64Arithmetic.ConvertSlowPath with a snippet (GRAAL-140)
Doug Simon <doug.simon@oracle.com>
parents:
8136
diff
changeset
|
58 */ |
80a825206cbc
replaced AMD64Arithmetic.ConvertSlowPath with a snippet (GRAAL-140)
Doug Simon <doug.simon@oracle.com>
parents:
8136
diff
changeset
|
59 F2I, D2I, F2L, D2L; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
60 |
10959 | 61 // @formatter:on |
62 | |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
63 /** |
10959 | 64 * Unary operation with separate source and destination operand. |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
65 */ |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
66 public static final class Unary2Op extends AMD64LIRInstruction { |
10959 | 67 |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
68 public static final LIRInstructionClass<Unary2Op> TYPE = LIRInstructionClass.create(Unary2Op.class); |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
69 @Opcode private final AMD64Arithmetic opcode; |
7910
748cb57f53cb
Cleanup Op1 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7839
diff
changeset
|
70 @Def({REG}) protected AllocatableValue result; |
8192
b1d5f203c57d
Allow STACK argument in conversion ops.
Roland Schatz <roland.schatz@oracle.com>
parents:
8179
diff
changeset
|
71 @Use({REG, STACK}) protected AllocatableValue x; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
72 |
7910
748cb57f53cb
Cleanup Op1 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7839
diff
changeset
|
73 public Unary2Op(AMD64Arithmetic opcode, AllocatableValue result, AllocatableValue x) { |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
74 super(TYPE); |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
75 this.opcode = opcode; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
76 this.result = result; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
77 this.x = x; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
78 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
79 |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
80 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
81 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
82 emit(crb, masm, opcode, result, x, null); |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
83 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
84 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
85 |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
86 /** |
15278
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
87 * Unary operation with separate source and destination operand but register only. |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
88 */ |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
89 public static final class Unary2RegOp extends AMD64LIRInstruction { |
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
90 public static final LIRInstructionClass<Unary2RegOp> TYPE = LIRInstructionClass.create(Unary2RegOp.class); |
15278
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
91 |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
92 @Opcode private final AMD64Arithmetic opcode; |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
93 @Def({REG}) protected AllocatableValue result; |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
94 @Use({REG}) protected AllocatableValue x; |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
95 |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
96 public Unary2RegOp(AMD64Arithmetic opcode, AllocatableValue result, AllocatableValue x) { |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
97 super(TYPE); |
15278
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
98 this.opcode = opcode; |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
99 this.result = result; |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
100 this.x = x; |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
101 } |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
102 |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
103 @Override |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
104 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
105 emit(crb, masm, opcode, result, x, null); |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
106 } |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
107 } |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
108 |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
109 /** |
10959 | 110 * Unary operation with single operand for source and destination. |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
111 */ |
7910
748cb57f53cb
Cleanup Op1 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7839
diff
changeset
|
112 public static class Unary1Op extends AMD64LIRInstruction { |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
113 public static final LIRInstructionClass<Unary1Op> TYPE = LIRInstructionClass.create(Unary1Op.class); |
10959 | 114 |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
115 @Opcode private final AMD64Arithmetic opcode; |
7910
748cb57f53cb
Cleanup Op1 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7839
diff
changeset
|
116 @Def({REG, HINT}) protected AllocatableValue result; |
748cb57f53cb
Cleanup Op1 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7839
diff
changeset
|
117 @Use({REG, STACK}) protected AllocatableValue x; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
118 |
7910
748cb57f53cb
Cleanup Op1 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7839
diff
changeset
|
119 public Unary1Op(AMD64Arithmetic opcode, AllocatableValue result, AllocatableValue x) { |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
120 super(TYPE); |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
121 this.opcode = opcode; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
122 this.result = result; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
123 this.x = x; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
124 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
125 |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
126 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
127 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
128 AMD64Move.move(crb, masm, result, x); |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
129 emit(crb, masm, opcode, result); |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
130 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
131 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
132 |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
133 /** |
14707
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
134 * Unary operation with separate memory source and destination operand. |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
135 */ |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
136 public static final class Unary2MemoryOp extends MemOp { |
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
137 public static final LIRInstructionClass<Unary2MemoryOp> TYPE = LIRInstructionClass.create(Unary2MemoryOp.class); |
14707
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
138 |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
139 @Opcode private final AMD64Arithmetic opcode; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
140 @Def({REG}) protected AllocatableValue result; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
141 |
14931
d45e8c306349
use MemOp as base class for new memory ops
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14707
diff
changeset
|
142 public Unary2MemoryOp(AMD64Arithmetic opcode, AllocatableValue result, Kind kind, AMD64AddressValue address, LIRFrameState state) { |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
143 super(TYPE, kind, address, state); |
14707
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
144 this.opcode = opcode; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
145 this.result = result; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
146 } |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
147 |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
148 @Override |
14931
d45e8c306349
use MemOp as base class for new memory ops
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14707
diff
changeset
|
149 public void emitMemAccess(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
d45e8c306349
use MemOp as base class for new memory ops
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14707
diff
changeset
|
150 emit(crb, masm, opcode, result, address, null); |
14707
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
151 } |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
152 } |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
153 |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
154 /** |
10959 | 155 * Binary operation with two operands. The first source operand is combined with the |
156 * destination. The second source operand may be a stack slot. | |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
157 */ |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
158 public static class BinaryRegStack extends AMD64LIRInstruction { |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
159 public static final LIRInstructionClass<BinaryRegStack> TYPE = LIRInstructionClass.create(BinaryRegStack.class); |
10959 | 160 |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
161 @Opcode private final AMD64Arithmetic opcode; |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
162 @Def({REG, HINT}) protected AllocatableValue result; |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
163 @Use({REG, STACK}) protected AllocatableValue x; |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
164 @Alive({REG, STACK}) protected AllocatableValue y; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
165 |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
166 public BinaryRegStack(AMD64Arithmetic opcode, AllocatableValue result, AllocatableValue x, AllocatableValue y) { |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
167 super(TYPE); |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
168 this.opcode = opcode; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
169 this.result = result; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
170 this.x = x; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
171 this.y = y; |
4325 | 172 } |
173 | |
174 @Override | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
175 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
176 AMD64Move.move(crb, masm, result, x); |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
177 emit(crb, masm, opcode, result, y, null); |
4325 | 178 } |
179 | |
180 @Override | |
181 public void verify() { | |
182 super.verify(); | |
183 assert differentRegisters(result, y) || sameRegister(x, y); | |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
184 verifyKind(opcode, result, x, y); |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
185 } |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
186 } |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
187 |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
188 /** |
10959 | 189 * Binary operation with two operands. The first source operand is combined with the |
14707
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
190 * destination. The second source operand may be a stack slot. |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
191 */ |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
192 public static final class BinaryMemory extends AMD64LIRInstruction { |
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
193 public static final LIRInstructionClass<BinaryMemory> TYPE = LIRInstructionClass.create(BinaryMemory.class); |
14707
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
194 |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
195 @Opcode private final AMD64Arithmetic opcode; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
196 @Def({REG, HINT}) protected AllocatableValue result; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
197 @Use({REG}) protected AllocatableValue x; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
198 protected final Kind kind; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
199 @Alive({COMPOSITE}) protected AMD64AddressValue location; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
200 @State protected LIRFrameState state; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
201 |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
202 public BinaryMemory(AMD64Arithmetic opcode, Kind kind, AllocatableValue result, AllocatableValue x, AMD64AddressValue location, LIRFrameState state) { |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
203 super(TYPE); |
14707
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
204 this.opcode = opcode; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
205 this.result = result; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
206 this.x = x; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
207 this.location = location; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
208 this.kind = kind; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
209 this.state = state; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
210 } |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
211 |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
212 @Override |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
213 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
214 AMD64Move.move(crb, masm, result, x); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
215 if (state != null) { |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
216 crb.recordImplicitException(masm.position(), state); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
217 } |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
218 emit(crb, masm, opcode, result, location, null); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
219 } |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
220 |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
221 @Override |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
222 public void verify() { |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
223 super.verify(); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
224 assert differentRegisters(result, location) || sameRegister(x, location); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
225 // verifyKind(opcode, result, x, location); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
226 } |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
227 } |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
228 |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
229 /** |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
230 * Binary operation with two operands. The first source operand is combined with the |
10959 | 231 * destination. The second source operand must be a register. |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
232 */ |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
233 public static final class BinaryRegReg extends AMD64LIRInstruction { |
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
234 public static final LIRInstructionClass<BinaryRegReg> TYPE = LIRInstructionClass.create(BinaryRegReg.class); |
10959 | 235 |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
236 @Opcode private final AMD64Arithmetic opcode; |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
237 @Def({REG, HINT}) protected AllocatableValue result; |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
238 @Use({REG, STACK}) protected AllocatableValue x; |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
239 @Alive({REG}) protected AllocatableValue y; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
240 |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
241 public BinaryRegReg(AMD64Arithmetic opcode, AllocatableValue result, AllocatableValue x, AllocatableValue y) { |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
242 super(TYPE); |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
243 this.opcode = opcode; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
244 this.result = result; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
245 this.x = x; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
246 this.y = y; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
247 } |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
248 |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
249 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
250 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
251 AMD64Move.move(crb, masm, result, x); |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
252 emit(crb, masm, opcode, result, y, null); |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
253 } |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
254 |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
255 @Override |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
256 public void verify() { |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
257 super.verify(); |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
258 assert differentRegisters(result, y) || sameRegister(x, y); |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
259 verifyKind(opcode, result, x, y); |
4325 | 260 } |
261 } | |
262 | |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
263 /** |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
264 * Binary operation with single source/destination operand and one constant. |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
265 */ |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
266 public static final class BinaryRegConst extends AMD64LIRInstruction { |
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
267 public static final LIRInstructionClass<BinaryRegConst> TYPE = LIRInstructionClass.create(BinaryRegConst.class); |
10959 | 268 |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
269 @Opcode private final AMD64Arithmetic opcode; |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
270 @Def({REG, HINT}) protected AllocatableValue result; |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
271 @Use({REG, STACK}) protected AllocatableValue x; |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17604
diff
changeset
|
272 protected JavaConstant y; |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
273 |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17604
diff
changeset
|
274 public BinaryRegConst(AMD64Arithmetic opcode, AllocatableValue result, AllocatableValue x, JavaConstant y) { |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
275 super(TYPE); |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
276 this.opcode = opcode; |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
277 this.result = result; |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
278 this.x = x; |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
279 this.y = y; |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
280 } |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
281 |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
282 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
283 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
284 AMD64Move.move(crb, masm, result, x); |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
285 emit(crb, masm, opcode, result, y, null); |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
286 } |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
287 |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
288 @Override |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
289 public void verify() { |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
290 super.verify(); |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
291 verifyKind(opcode, result, x, y); |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
292 } |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
293 } |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
294 |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
295 /** |
10959 | 296 * Commutative binary operation with two operands. One of the operands is combined with the |
297 * result. | |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
298 */ |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
299 public static final class BinaryCommutative extends AMD64LIRInstruction { |
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
300 public static final LIRInstructionClass<BinaryCommutative> TYPE = LIRInstructionClass.create(BinaryCommutative.class); |
10959 | 301 |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
302 @Opcode private final AMD64Arithmetic opcode; |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
303 @Def({REG, HINT}) protected AllocatableValue result; |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
304 @Use({REG, STACK}) protected AllocatableValue x; |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
305 @Use({REG, STACK}) protected AllocatableValue y; |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
306 |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
307 public BinaryCommutative(AMD64Arithmetic opcode, AllocatableValue result, AllocatableValue x, AllocatableValue y) { |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
308 super(TYPE); |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
309 this.opcode = opcode; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
310 this.result = result; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
311 this.x = x; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
312 this.y = y; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
313 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
314 |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
315 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
316 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:
4254
diff
changeset
|
317 if (sameRegister(result, y)) { |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
318 emit(crb, masm, opcode, result, x, null); |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
319 } else { |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
320 AMD64Move.move(crb, masm, result, x); |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
321 emit(crb, masm, opcode, result, y, null); |
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:
4254
diff
changeset
|
323 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
324 |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
325 @Override |
17604
35ae3e916582
Make LIRInstruction an interface.
Josef Eisl <josef.eisl@jku.at>
parents:
16891
diff
changeset
|
326 public void verify() { |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
327 super.verify(); |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
328 verifyKind(opcode, result, x, y); |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
329 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
330 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
331 |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
332 /** |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
333 * Binary operation with separate source and destination and one constant operand. |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
334 */ |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
335 public static final class BinaryRegStackConst extends AMD64LIRInstruction { |
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
336 public static final LIRInstructionClass<BinaryRegStackConst> TYPE = LIRInstructionClass.create(BinaryRegStackConst.class); |
10959 | 337 |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
338 @Opcode private final AMD64Arithmetic opcode; |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
339 @Def({REG}) protected AllocatableValue result; |
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
340 @Use({REG, STACK}) protected AllocatableValue x; |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17604
diff
changeset
|
341 protected JavaConstant y; |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
342 |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
17604
diff
changeset
|
343 public BinaryRegStackConst(AMD64Arithmetic opcode, AllocatableValue result, AllocatableValue x, JavaConstant y) { |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
344 super(TYPE); |
5733
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
345 this.opcode = opcode; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
346 this.result = result; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
347 this.x = x; |
141b15521a39
use annotated fields for operands of LIR instructions
Christian Wimmer <christian.wimmer@oracle.com>
parents:
5652
diff
changeset
|
348 this.y = y; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
349 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
350 |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
351 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
352 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
18841
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
353 if (isRegister(x)) { |
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
354 switch (opcode) { |
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
355 case IMUL: |
18842
437894ecd7c5
Fix type error in code generation.
Roland Schatz <roland.schatz@oracle.com>
parents:
18841
diff
changeset
|
356 masm.imull(asIntReg(result), asIntReg(x), crb.asIntConst(y)); |
18841
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
357 break; |
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
358 case LMUL: |
18842
437894ecd7c5
Fix type error in code generation.
Roland Schatz <roland.schatz@oracle.com>
parents:
18841
diff
changeset
|
359 masm.imulq(asLongReg(result), asLongReg(x), crb.asIntConst(y)); |
18841
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
360 break; |
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
361 default: |
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
362 throw GraalInternalError.shouldNotReachHere(); |
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
363 } |
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
364 } else { |
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
365 assert isStackSlot(x); |
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
366 switch (opcode) { |
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
367 case IMUL: |
18842
437894ecd7c5
Fix type error in code generation.
Roland Schatz <roland.schatz@oracle.com>
parents:
18841
diff
changeset
|
368 masm.imull(asIntReg(result), (AMD64Address) crb.asIntAddr(x), crb.asIntConst(y)); |
18841
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
369 break; |
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
370 case LMUL: |
18842
437894ecd7c5
Fix type error in code generation.
Roland Schatz <roland.schatz@oracle.com>
parents:
18841
diff
changeset
|
371 masm.imulq(asLongReg(result), (AMD64Address) crb.asLongAddr(x), crb.asIntConst(y)); |
18841
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
372 break; |
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
373 default: |
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
374 throw GraalInternalError.shouldNotReachHere(); |
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
375 } |
f2f2897880c8
Avoid unnecessary register-register move before IMUL instructions.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
376 } |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
377 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
378 |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
379 @Override |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
380 public void verify() { |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
381 super.verify(); |
7919
0ae70d44ec9a
Restructure Op2 in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
7910
diff
changeset
|
382 verifyKind(opcode, result, x, y); |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
383 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
384 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
385 |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
386 public static final class MulHighOp extends AMD64LIRInstruction { |
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
387 public static final LIRInstructionClass<MulHighOp> TYPE = LIRInstructionClass.create(MulHighOp.class); |
15691
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
388 |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
389 @Opcode private final AMD64Arithmetic opcode; |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
390 @Def({REG}) public AllocatableValue lowResult; |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
391 @Def({REG}) public AllocatableValue highResult; |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
392 @Use({REG}) public AllocatableValue x; |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
393 @Use({REG, STACK}) public AllocatableValue y; |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
394 |
16346
bbf051d717f5
Propagate reference information through arithmetics.
Roland Schatz <roland.schatz@oracle.com>
parents:
16094
diff
changeset
|
395 public MulHighOp(AMD64Arithmetic opcode, LIRKind kind, AllocatableValue y) { |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
396 super(TYPE); |
15691
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
397 this.opcode = opcode; |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
398 this.x = AMD64.rax.asValue(kind); |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
399 this.y = y; |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
400 this.lowResult = AMD64.rax.asValue(kind); |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
401 this.highResult = AMD64.rdx.asValue(kind); |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
402 } |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
403 |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
404 @Override |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
405 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
406 if (isRegister(y)) { |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
407 switch (opcode) { |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
408 case IMUL: |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
409 masm.imull(asRegister(y)); |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
410 break; |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
411 case IUMUL: |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
412 masm.mull(asRegister(y)); |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
413 break; |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
414 case LMUL: |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
415 masm.imulq(asRegister(y)); |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
416 break; |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
417 case LUMUL: |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
418 masm.mulq(asRegister(y)); |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
419 break; |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
420 default: |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
421 throw GraalInternalError.shouldNotReachHere(); |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
422 } |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
423 } else { |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
424 switch (opcode) { |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
425 case IMUL: |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
426 masm.imull((AMD64Address) crb.asAddress(y)); |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
427 break; |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
428 case IUMUL: |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
429 masm.mull((AMD64Address) crb.asAddress(y)); |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
430 break; |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
431 case LMUL: |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
432 masm.imulq((AMD64Address) crb.asAddress(y)); |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
433 break; |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
434 case LUMUL: |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
435 masm.mulq((AMD64Address) crb.asAddress(y)); |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
436 break; |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
437 default: |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
438 throw GraalInternalError.shouldNotReachHere(); |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
439 } |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
440 } |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
441 } |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
442 } |
6a13c422fca4
API for high word multiplication.
Roland Schatz <roland.schatz@oracle.com>
parents:
15453
diff
changeset
|
443 |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
444 public static final class DivRemOp extends AMD64LIRInstruction { |
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
445 public static final LIRInstructionClass<DivRemOp> TYPE = LIRInstructionClass.create(DivRemOp.class); |
10959 | 446 |
7379
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
447 @Opcode private final AMD64Arithmetic opcode; |
16346
bbf051d717f5
Propagate reference information through arithmetics.
Roland Schatz <roland.schatz@oracle.com>
parents:
16094
diff
changeset
|
448 @Def public AllocatableValue divResult; |
bbf051d717f5
Propagate reference information through arithmetics.
Roland Schatz <roland.schatz@oracle.com>
parents:
16094
diff
changeset
|
449 @Def public AllocatableValue remResult; |
7921
1b591118d01e
Use AllocatableValue in DivRemOp.
Roland Schatz <roland.schatz@oracle.com>
parents:
7920
diff
changeset
|
450 @Use protected AllocatableValue x; |
1b591118d01e
Use AllocatableValue in DivRemOp.
Roland Schatz <roland.schatz@oracle.com>
parents:
7920
diff
changeset
|
451 @Alive protected AllocatableValue y; |
7379
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
452 @State protected LIRFrameState state; |
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
453 |
7921
1b591118d01e
Use AllocatableValue in DivRemOp.
Roland Schatz <roland.schatz@oracle.com>
parents:
7920
diff
changeset
|
454 public DivRemOp(AMD64Arithmetic opcode, AllocatableValue x, AllocatableValue y, LIRFrameState state) { |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
455 super(TYPE); |
7379
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
456 this.opcode = opcode; |
16346
bbf051d717f5
Propagate reference information through arithmetics.
Roland Schatz <roland.schatz@oracle.com>
parents:
16094
diff
changeset
|
457 this.divResult = AMD64.rax.asValue(LIRKind.derive(x, y)); |
bbf051d717f5
Propagate reference information through arithmetics.
Roland Schatz <roland.schatz@oracle.com>
parents:
16094
diff
changeset
|
458 this.remResult = AMD64.rdx.asValue(LIRKind.derive(x, y)); |
7379
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
459 this.x = x; |
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
460 this.y = y; |
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
461 this.state = state; |
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
462 } |
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
463 |
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
464 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
465 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
466 emit(crb, masm, opcode, null, y, state); |
7379
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
467 } |
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
468 |
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
469 @Override |
17604
35ae3e916582
Make LIRInstruction an interface.
Josef Eisl <josef.eisl@jku.at>
parents:
16891
diff
changeset
|
470 public void verify() { |
7379
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
471 super.verify(); |
10959 | 472 // left input in rax, right input in any register but rax and rdx, result quotient in |
473 // rax, result remainder in rdx | |
9791
e92fdf3e1558
Register: replace usages of object identity with equals()
Bernhard Urban <bernhard.urban@jku.at>
parents:
9581
diff
changeset
|
474 assert asRegister(x).equals(AMD64.rax); |
7379
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
475 assert differentRegisters(y, AMD64.rax.asValue(), AMD64.rdx.asValue()); |
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
476 verifyKind(opcode, divResult, x, y); |
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
477 verifyKind(opcode, remResult, x, y); |
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
478 } |
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
479 } |
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
480 |
9581
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
481 public static class FPDivRemOp extends AMD64LIRInstruction { |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
482 public static final LIRInstructionClass<FPDivRemOp> TYPE = LIRInstructionClass.create(FPDivRemOp.class); |
10959 | 483 |
9581
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
484 @Opcode private final AMD64Arithmetic opcode; |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
485 @Def protected AllocatableValue result; |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
486 @Use protected AllocatableValue x; |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
487 @Use protected AllocatableValue y; |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
488 @Temp protected AllocatableValue raxTemp; |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
489 |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
490 public FPDivRemOp(AMD64Arithmetic opcode, AllocatableValue result, AllocatableValue x, AllocatableValue y) { |
19526
8fc336a04d77
Create TYPE fields for LIRInstruction and CompositeValue. Renaming NodeClass#get to NodeClass#create.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
18842
diff
changeset
|
491 super(TYPE); |
9581
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
492 this.opcode = opcode; |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
493 this.result = result; |
16094
c0b8d395368b
Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
15691
diff
changeset
|
494 this.raxTemp = AMD64.rax.asValue(LIRKind.value(Kind.Int)); |
9581
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
495 this.x = x; |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
496 this.y = y; |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
497 } |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
498 |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
499 @Override |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
500 public void emitCode(CompilationResultBuilder crb, AMD64MacroAssembler masm) { |
9581
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
501 AMD64Address tmp = new AMD64Address(AMD64.rsp); |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
502 masm.subq(AMD64.rsp, 8); |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
503 if (opcode == FREM) { |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
504 masm.movflt(tmp, asRegister(y)); |
10513
00b70a864d3b
updated Checkstyle rules to prohibit underscores in method names and fixed current violations
Doug Simon <doug.simon@oracle.com>
parents:
9791
diff
changeset
|
505 masm.flds(tmp); |
9581
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
506 masm.movflt(tmp, asRegister(x)); |
10513
00b70a864d3b
updated Checkstyle rules to prohibit underscores in method names and fixed current violations
Doug Simon <doug.simon@oracle.com>
parents:
9791
diff
changeset
|
507 masm.flds(tmp); |
9581
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
508 } else { |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
509 assert opcode == DREM; |
13265
2d76d0c85345
Make selection of x86 floating point move instruction extensible.
Roland Schatz <roland.schatz@oracle.com>
parents:
13227
diff
changeset
|
510 masm.movdbl(tmp, asRegister(y)); |
10513
00b70a864d3b
updated Checkstyle rules to prohibit underscores in method names and fixed current violations
Doug Simon <doug.simon@oracle.com>
parents:
9791
diff
changeset
|
511 masm.fldd(tmp); |
13265
2d76d0c85345
Make selection of x86 floating point move instruction extensible.
Roland Schatz <roland.schatz@oracle.com>
parents:
13227
diff
changeset
|
512 masm.movdbl(tmp, asRegister(x)); |
10513
00b70a864d3b
updated Checkstyle rules to prohibit underscores in method names and fixed current violations
Doug Simon <doug.simon@oracle.com>
parents:
9791
diff
changeset
|
513 masm.fldd(tmp); |
9581
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
514 } |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
515 |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
516 Label label = new Label(); |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
517 masm.bind(label); |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
518 masm.fprem(); |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
519 masm.fwait(); |
10513
00b70a864d3b
updated Checkstyle rules to prohibit underscores in method names and fixed current violations
Doug Simon <doug.simon@oracle.com>
parents:
9791
diff
changeset
|
520 masm.fnstswAX(); |
9581
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
521 masm.testl(AMD64.rax, 0x400); |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
522 masm.jcc(ConditionFlag.NotZero, label); |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
523 masm.fxch(1); |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
524 masm.fpop(); |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
525 |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
526 if (opcode == FREM) { |
10513
00b70a864d3b
updated Checkstyle rules to prohibit underscores in method names and fixed current violations
Doug Simon <doug.simon@oracle.com>
parents:
9791
diff
changeset
|
527 masm.fstps(tmp); |
9581
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
528 masm.movflt(asRegister(result), tmp); |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
529 } else { |
10513
00b70a864d3b
updated Checkstyle rules to prohibit underscores in method names and fixed current violations
Doug Simon <doug.simon@oracle.com>
parents:
9791
diff
changeset
|
530 masm.fstpd(tmp); |
13265
2d76d0c85345
Make selection of x86 floating point move instruction extensible.
Roland Schatz <roland.schatz@oracle.com>
parents:
13227
diff
changeset
|
531 masm.movdbl(asRegister(result), tmp); |
9581
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
532 } |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
533 masm.addq(AMD64.rsp, 8); |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
534 } |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
535 |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
536 @Override |
17604
35ae3e916582
Make LIRInstruction an interface.
Josef Eisl <josef.eisl@jku.at>
parents:
16891
diff
changeset
|
537 public void verify() { |
9581
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
538 super.verify(); |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
539 verifyKind(opcode, result, x, y); |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
540 } |
d84ea522800e
replaced arithmetic_[fd]rem stubs with inline compiled code (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9422
diff
changeset
|
541 } |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
542 |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
543 @SuppressWarnings("unused") |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
544 protected static void emit(CompilationResultBuilder crb, AMD64MacroAssembler masm, AMD64Arithmetic opcode, AllocatableValue result) { |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
545 switch (opcode) { |
10959 | 546 case INEG: |
547 masm.negl(asIntReg(result)); | |
548 break; | |
549 case LNEG: | |
550 masm.negq(asLongReg(result)); | |
551 break; | |
11355
01269a181628
add bitwise "not" operation
Lukas Stadler <lukas.stadler@jku.at>
parents:
11273
diff
changeset
|
552 case INOT: |
01269a181628
add bitwise "not" operation
Lukas Stadler <lukas.stadler@jku.at>
parents:
11273
diff
changeset
|
553 masm.notl(asIntReg(result)); |
01269a181628
add bitwise "not" operation
Lukas Stadler <lukas.stadler@jku.at>
parents:
11273
diff
changeset
|
554 break; |
01269a181628
add bitwise "not" operation
Lukas Stadler <lukas.stadler@jku.at>
parents:
11273
diff
changeset
|
555 case LNOT: |
01269a181628
add bitwise "not" operation
Lukas Stadler <lukas.stadler@jku.at>
parents:
11273
diff
changeset
|
556 masm.notq(asLongReg(result)); |
01269a181628
add bitwise "not" operation
Lukas Stadler <lukas.stadler@jku.at>
parents:
11273
diff
changeset
|
557 break; |
10959 | 558 default: |
559 throw GraalInternalError.shouldNotReachHere(); | |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
560 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
561 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
562 |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
563 public static void emit(CompilationResultBuilder crb, AMD64MacroAssembler masm, AMD64Arithmetic opcode, Value dst, Value src, LIRFrameState info) { |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
564 int exceptionOffset = -1; |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
565 if (isRegister(src)) { |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
566 switch (opcode) { |
10959 | 567 case IADD: |
568 masm.addl(asIntReg(dst), asIntReg(src)); | |
569 break; | |
570 case ISUB: | |
571 masm.subl(asIntReg(dst), asIntReg(src)); | |
572 break; | |
573 case IAND: | |
574 masm.andl(asIntReg(dst), asIntReg(src)); | |
575 break; | |
576 case IMUL: | |
577 masm.imull(asIntReg(dst), asIntReg(src)); | |
578 break; | |
579 case IOR: | |
580 masm.orl(asIntReg(dst), asIntReg(src)); | |
581 break; | |
582 case IXOR: | |
583 masm.xorl(asIntReg(dst), asIntReg(src)); | |
584 break; | |
585 case ISHL: | |
586 assert asIntReg(src).equals(AMD64.rcx); | |
587 masm.shll(asIntReg(dst)); | |
588 break; | |
589 case ISHR: | |
590 assert asIntReg(src).equals(AMD64.rcx); | |
591 masm.sarl(asIntReg(dst)); | |
592 break; | |
593 case IUSHR: | |
594 assert asIntReg(src).equals(AMD64.rcx); | |
595 masm.shrl(asIntReg(dst)); | |
596 break; | |
15370
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
597 case IROL: |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
598 assert asIntReg(src).equals(AMD64.rcx); |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
599 masm.roll(asIntReg(dst)); |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
600 break; |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
601 case IROR: |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
602 assert asIntReg(src).equals(AMD64.rcx); |
15453
100306ae985b
switch MatchRule from class to method annotation and fix review feedback
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15370
diff
changeset
|
603 masm.rorl(asIntReg(dst)); |
15370
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
604 break; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
605 |
10959 | 606 case LADD: |
607 masm.addq(asLongReg(dst), asLongReg(src)); | |
608 break; | |
609 case LSUB: | |
610 masm.subq(asLongReg(dst), asLongReg(src)); | |
611 break; | |
612 case LMUL: | |
613 masm.imulq(asLongReg(dst), asLongReg(src)); | |
614 break; | |
615 case LAND: | |
616 masm.andq(asLongReg(dst), asLongReg(src)); | |
617 break; | |
618 case LOR: | |
619 masm.orq(asLongReg(dst), asLongReg(src)); | |
620 break; | |
621 case LXOR: | |
622 masm.xorq(asLongReg(dst), asLongReg(src)); | |
623 break; | |
624 case LSHL: | |
625 assert asIntReg(src).equals(AMD64.rcx); | |
626 masm.shlq(asLongReg(dst)); | |
627 break; | |
628 case LSHR: | |
629 assert asIntReg(src).equals(AMD64.rcx); | |
630 masm.sarq(asLongReg(dst)); | |
631 break; | |
632 case LUSHR: | |
633 assert asIntReg(src).equals(AMD64.rcx); | |
634 masm.shrq(asLongReg(dst)); | |
635 break; | |
15370
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
636 case LROL: |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
637 assert asIntReg(src).equals(AMD64.rcx); |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
638 masm.rolq(asLongReg(dst)); |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
639 break; |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
640 case LROR: |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
641 assert asIntReg(src).equals(AMD64.rcx); |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
642 masm.rorq(asLongReg(dst)); |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
643 break; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
644 |
10959 | 645 case FADD: |
646 masm.addss(asFloatReg(dst), asFloatReg(src)); | |
647 break; | |
648 case FSUB: | |
649 masm.subss(asFloatReg(dst), asFloatReg(src)); | |
650 break; | |
651 case FMUL: | |
652 masm.mulss(asFloatReg(dst), asFloatReg(src)); | |
653 break; | |
654 case FDIV: | |
655 masm.divss(asFloatReg(dst), asFloatReg(src)); | |
656 break; | |
657 case FAND: | |
658 masm.andps(asFloatReg(dst), asFloatReg(src)); | |
659 break; | |
660 case FOR: | |
661 masm.orps(asFloatReg(dst), asFloatReg(src)); | |
662 break; | |
663 case FXOR: | |
664 masm.xorps(asFloatReg(dst), asFloatReg(src)); | |
665 break; | |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
666 |
10959 | 667 case DADD: |
668 masm.addsd(asDoubleReg(dst), asDoubleReg(src)); | |
669 break; | |
670 case DSUB: | |
671 masm.subsd(asDoubleReg(dst), asDoubleReg(src)); | |
672 break; | |
673 case DMUL: | |
674 masm.mulsd(asDoubleReg(dst), asDoubleReg(src)); | |
675 break; | |
676 case DDIV: | |
677 masm.divsd(asDoubleReg(dst), asDoubleReg(src)); | |
678 break; | |
679 case DAND: | |
680 masm.andpd(asDoubleReg(dst), asDoubleReg(src)); | |
681 break; | |
682 case DOR: | |
683 masm.orpd(asDoubleReg(dst), asDoubleReg(src)); | |
684 break; | |
685 case DXOR: | |
686 masm.xorpd(asDoubleReg(dst), asDoubleReg(src)); | |
687 break; | |
4254
1cf920630944
Canonicalize parameter lists and names
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4245
diff
changeset
|
688 |
11273
b5e95841d366
Move SQRT from AMD64MathIntrinsicOp to AMD64Arithmetic.
Roland Schatz <roland.schatz@oracle.com>
parents:
10959
diff
changeset
|
689 case SQRT: |
b5e95841d366
Move SQRT from AMD64MathIntrinsicOp to AMD64Arithmetic.
Roland Schatz <roland.schatz@oracle.com>
parents:
10959
diff
changeset
|
690 masm.sqrtsd(asDoubleReg(dst), asDoubleReg(src)); |
b5e95841d366
Move SQRT from AMD64MathIntrinsicOp to AMD64Arithmetic.
Roland Schatz <roland.schatz@oracle.com>
parents:
10959
diff
changeset
|
691 break; |
b5e95841d366
Move SQRT from AMD64MathIntrinsicOp to AMD64Arithmetic.
Roland Schatz <roland.schatz@oracle.com>
parents:
10959
diff
changeset
|
692 |
14001
79114edb5130
Explicit x2L instructions in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
13587
diff
changeset
|
693 case B2I: |
13587
40e81cba9e08
renamed movzx/movsx instructions; removed duplicate movswl; added movzbl
twisti
parents:
13265
diff
changeset
|
694 masm.movsbl(asIntReg(dst), asIntReg(src)); |
10959 | 695 break; |
14001
79114edb5130
Explicit x2L instructions in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
13587
diff
changeset
|
696 case S2I: |
13587
40e81cba9e08
renamed movzx/movsx instructions; removed duplicate movswl; added movzbl
twisti
parents:
13265
diff
changeset
|
697 masm.movswl(asIntReg(dst), asIntReg(src)); |
10959 | 698 break; |
14001
79114edb5130
Explicit x2L instructions in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
13587
diff
changeset
|
699 case B2L: |
79114edb5130
Explicit x2L instructions in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
13587
diff
changeset
|
700 masm.movsbq(asLongReg(dst), asIntReg(src)); |
79114edb5130
Explicit x2L instructions in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
13587
diff
changeset
|
701 break; |
79114edb5130
Explicit x2L instructions in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
13587
diff
changeset
|
702 case S2L: |
79114edb5130
Explicit x2L instructions in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
13587
diff
changeset
|
703 masm.movswq(asLongReg(dst), asIntReg(src)); |
79114edb5130
Explicit x2L instructions in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
13587
diff
changeset
|
704 break; |
10959 | 705 case I2L: |
706 masm.movslq(asLongReg(dst), asIntReg(src)); | |
707 break; | |
15278
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
708 case L2I: |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
709 masm.movl(asIntReg(dst), asLongReg(src)); |
3ef4196cf8e5
use movl instead of andl for L2I
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15193
diff
changeset
|
710 break; |
10959 | 711 case F2D: |
712 masm.cvtss2sd(asDoubleReg(dst), asFloatReg(src)); | |
713 break; | |
714 case D2F: | |
715 masm.cvtsd2ss(asFloatReg(dst), asDoubleReg(src)); | |
716 break; | |
717 case I2F: | |
718 masm.cvtsi2ssl(asFloatReg(dst), asIntReg(src)); | |
719 break; | |
720 case I2D: | |
721 masm.cvtsi2sdl(asDoubleReg(dst), asIntReg(src)); | |
722 break; | |
723 case L2F: | |
724 masm.cvtsi2ssq(asFloatReg(dst), asLongReg(src)); | |
725 break; | |
726 case L2D: | |
727 masm.cvtsi2sdq(asDoubleReg(dst), asLongReg(src)); | |
728 break; | |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
729 case F2I: |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
730 masm.cvttss2sil(asIntReg(dst), asFloatReg(src)); |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
731 break; |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
732 case D2I: |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
733 masm.cvttsd2sil(asIntReg(dst), asDoubleReg(src)); |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
734 break; |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
735 case F2L: |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
736 masm.cvttss2siq(asLongReg(dst), asFloatReg(src)); |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
737 break; |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
738 case D2L: |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
739 masm.cvttsd2siq(asLongReg(dst), asDoubleReg(src)); |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
740 break; |
10959 | 741 case MOV_I2F: |
742 masm.movdl(asFloatReg(dst), asIntReg(src)); | |
743 break; | |
744 case MOV_L2D: | |
745 masm.movdq(asDoubleReg(dst), asLongReg(src)); | |
746 break; | |
747 case MOV_F2I: | |
748 masm.movdl(asIntReg(dst), asFloatReg(src)); | |
749 break; | |
750 case MOV_D2L: | |
751 masm.movdq(asLongReg(dst), asDoubleReg(src)); | |
752 break; | |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
753 |
7379
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
754 case IDIVREM: |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
755 case IDIV: |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
756 case IREM: |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
757 masm.cdql(); |
14031
390c4b742890
made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents:
14001
diff
changeset
|
758 exceptionOffset = masm.position(); |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
759 masm.idivl(asRegister(src)); |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
760 break; |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
761 |
7379
0cc86f2309be
Added DivRemOp that produces both the division result and the remainder.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7306
diff
changeset
|
762 case LDIVREM: |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
763 case LDIV: |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
764 case LREM: |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
765 masm.cdqq(); |
14031
390c4b742890
made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents:
14001
diff
changeset
|
766 exceptionOffset = masm.position(); |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
767 masm.idivq(asRegister(src)); |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
768 break; |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
769 |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
770 case IUDIV: |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
771 case IUREM: |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
772 // Must zero the high 64-bit word (in RDX) of the dividend |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
773 masm.xorq(AMD64.rdx, AMD64.rdx); |
14031
390c4b742890
made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents:
14001
diff
changeset
|
774 exceptionOffset = masm.position(); |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
775 masm.divl(asRegister(src)); |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
776 break; |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
777 |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
778 case LUDIV: |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
779 case LUREM: |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
780 // Must zero the high 64-bit word (in RDX) of the dividend |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
781 masm.xorq(AMD64.rdx, AMD64.rdx); |
14031
390c4b742890
made com.oracle.graal.asm.Buffer non-public and a private field in AbstractAssembler
twisti
parents:
14001
diff
changeset
|
782 exceptionOffset = masm.position(); |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
783 masm.divq(asRegister(src)); |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
784 break; |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
785 default: |
4524
dcc8f5c6f394
Refactorings to prepare for LIR project splitting
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4325
diff
changeset
|
786 throw GraalInternalError.shouldNotReachHere(); |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
787 } |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
788 } else if (isConstant(src)) { |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
789 switch (opcode) { |
10959 | 790 case IADD: |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
791 masm.incrementl(asIntReg(dst), crb.asIntConst(src)); |
10959 | 792 break; |
793 case ISUB: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
794 masm.decrementl(asIntReg(dst), crb.asIntConst(src)); |
10959 | 795 break; |
796 case IAND: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
797 masm.andl(asIntReg(dst), crb.asIntConst(src)); |
10959 | 798 break; |
799 case IOR: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
800 masm.orl(asIntReg(dst), crb.asIntConst(src)); |
10959 | 801 break; |
802 case IXOR: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
803 masm.xorl(asIntReg(dst), crb.asIntConst(src)); |
10959 | 804 break; |
805 case ISHL: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
806 masm.shll(asIntReg(dst), crb.asIntConst(src) & 31); |
10959 | 807 break; |
808 case ISHR: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
809 masm.sarl(asIntReg(dst), crb.asIntConst(src) & 31); |
10959 | 810 break; |
811 case IUSHR: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
812 masm.shrl(asIntReg(dst), crb.asIntConst(src) & 31); |
10959 | 813 break; |
15370
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
814 case IROL: |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
815 masm.roll(asIntReg(dst), crb.asIntConst(src) & 31); |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
816 break; |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
817 case IROR: |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
818 masm.rorl(asIntReg(dst), crb.asIntConst(src) & 31); |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
819 break; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
820 |
10959 | 821 case LADD: |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
822 masm.addq(asLongReg(dst), crb.asIntConst(src)); |
10959 | 823 break; |
824 case LSUB: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
825 masm.subq(asLongReg(dst), crb.asIntConst(src)); |
10959 | 826 break; |
827 case LAND: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
828 masm.andq(asLongReg(dst), crb.asIntConst(src)); |
10959 | 829 break; |
830 case LOR: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
831 masm.orq(asLongReg(dst), crb.asIntConst(src)); |
10959 | 832 break; |
833 case LXOR: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
834 masm.xorq(asLongReg(dst), crb.asIntConst(src)); |
10959 | 835 break; |
836 case LSHL: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
837 masm.shlq(asLongReg(dst), crb.asIntConst(src) & 63); |
10959 | 838 break; |
839 case LSHR: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
840 masm.sarq(asLongReg(dst), crb.asIntConst(src) & 63); |
10959 | 841 break; |
842 case LUSHR: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
843 masm.shrq(asLongReg(dst), crb.asIntConst(src) & 63); |
10959 | 844 break; |
15370
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
845 case LROL: |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
846 masm.rolq(asLongReg(dst), crb.asIntConst(src) & 31); |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
847 break; |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
848 case LROR: |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
849 masm.rorq(asLongReg(dst), crb.asIntConst(src) & 31); |
319deee16746
add support for matching multiple HIR nodes when lowering to LIR
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15278
diff
changeset
|
850 break; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
851 |
10959 | 852 case FADD: |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
853 masm.addss(asFloatReg(dst), (AMD64Address) crb.asFloatConstRef(src)); |
10959 | 854 break; |
855 case FSUB: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
856 masm.subss(asFloatReg(dst), (AMD64Address) crb.asFloatConstRef(src)); |
10959 | 857 break; |
858 case FMUL: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
859 masm.mulss(asFloatReg(dst), (AMD64Address) crb.asFloatConstRef(src)); |
10959 | 860 break; |
861 case FAND: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
862 masm.andps(asFloatReg(dst), (AMD64Address) crb.asFloatConstRef(src, 16)); |
10959 | 863 break; |
864 case FOR: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
865 masm.orps(asFloatReg(dst), (AMD64Address) crb.asFloatConstRef(src, 16)); |
10959 | 866 break; |
867 case FXOR: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
868 masm.xorps(asFloatReg(dst), (AMD64Address) crb.asFloatConstRef(src, 16)); |
10959 | 869 break; |
870 case FDIV: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
871 masm.divss(asFloatReg(dst), (AMD64Address) crb.asFloatConstRef(src)); |
10959 | 872 break; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
873 |
10959 | 874 case DADD: |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
875 masm.addsd(asDoubleReg(dst), (AMD64Address) crb.asDoubleConstRef(src)); |
10959 | 876 break; |
877 case DSUB: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
878 masm.subsd(asDoubleReg(dst), (AMD64Address) crb.asDoubleConstRef(src)); |
10959 | 879 break; |
880 case DMUL: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
881 masm.mulsd(asDoubleReg(dst), (AMD64Address) crb.asDoubleConstRef(src)); |
10959 | 882 break; |
883 case DDIV: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
884 masm.divsd(asDoubleReg(dst), (AMD64Address) crb.asDoubleConstRef(src)); |
10959 | 885 break; |
886 case DAND: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
887 masm.andpd(asDoubleReg(dst), (AMD64Address) crb.asDoubleConstRef(src, 16)); |
10959 | 888 break; |
889 case DOR: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
890 masm.orpd(asDoubleReg(dst), (AMD64Address) crb.asDoubleConstRef(src, 16)); |
10959 | 891 break; |
892 case DXOR: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
893 masm.xorpd(asDoubleReg(dst), (AMD64Address) crb.asDoubleConstRef(src, 16)); |
10959 | 894 break; |
895 default: | |
896 throw GraalInternalError.shouldNotReachHere(); | |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
897 } |
14707
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
898 } else if (isStackSlot(src)) { |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
899 |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
900 switch (opcode) { |
10959 | 901 case IADD: |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
902 masm.addl(asIntReg(dst), (AMD64Address) crb.asIntAddr(src)); |
10959 | 903 break; |
904 case ISUB: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
905 masm.subl(asIntReg(dst), (AMD64Address) crb.asIntAddr(src)); |
10959 | 906 break; |
907 case IAND: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
908 masm.andl(asIntReg(dst), (AMD64Address) crb.asIntAddr(src)); |
10959 | 909 break; |
910 case IMUL: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
911 masm.imull(asIntReg(dst), (AMD64Address) crb.asIntAddr(src)); |
10959 | 912 break; |
913 case IOR: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
914 masm.orl(asIntReg(dst), (AMD64Address) crb.asIntAddr(src)); |
10959 | 915 break; |
916 case IXOR: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
917 masm.xorl(asIntReg(dst), (AMD64Address) crb.asIntAddr(src)); |
10959 | 918 break; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
919 |
10959 | 920 case LADD: |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
921 masm.addq(asLongReg(dst), (AMD64Address) crb.asLongAddr(src)); |
10959 | 922 break; |
923 case LSUB: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
924 masm.subq(asLongReg(dst), (AMD64Address) crb.asLongAddr(src)); |
10959 | 925 break; |
926 case LMUL: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
927 masm.imulq(asLongReg(dst), (AMD64Address) crb.asLongAddr(src)); |
10959 | 928 break; |
929 case LAND: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
930 masm.andq(asLongReg(dst), (AMD64Address) crb.asLongAddr(src)); |
10959 | 931 break; |
932 case LOR: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
933 masm.orq(asLongReg(dst), (AMD64Address) crb.asLongAddr(src)); |
10959 | 934 break; |
935 case LXOR: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
936 masm.xorq(asLongReg(dst), (AMD64Address) crb.asLongAddr(src)); |
10959 | 937 break; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
938 |
10959 | 939 case FADD: |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
940 masm.addss(asFloatReg(dst), (AMD64Address) crb.asFloatAddr(src)); |
10959 | 941 break; |
942 case FSUB: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
943 masm.subss(asFloatReg(dst), (AMD64Address) crb.asFloatAddr(src)); |
10959 | 944 break; |
945 case FMUL: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
946 masm.mulss(asFloatReg(dst), (AMD64Address) crb.asFloatAddr(src)); |
10959 | 947 break; |
948 case FDIV: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
949 masm.divss(asFloatReg(dst), (AMD64Address) crb.asFloatAddr(src)); |
10959 | 950 break; |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
951 |
10959 | 952 case DADD: |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
953 masm.addsd(asDoubleReg(dst), (AMD64Address) crb.asDoubleAddr(src)); |
10959 | 954 break; |
955 case DSUB: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
956 masm.subsd(asDoubleReg(dst), (AMD64Address) crb.asDoubleAddr(src)); |
10959 | 957 break; |
958 case DMUL: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
959 masm.mulsd(asDoubleReg(dst), (AMD64Address) crb.asDoubleAddr(src)); |
10959 | 960 break; |
961 case DDIV: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
962 masm.divsd(asDoubleReg(dst), (AMD64Address) crb.asDoubleAddr(src)); |
10959 | 963 break; |
8192
b1d5f203c57d
Allow STACK argument in conversion ops.
Roland Schatz <roland.schatz@oracle.com>
parents:
8179
diff
changeset
|
964 |
11273
b5e95841d366
Move SQRT from AMD64MathIntrinsicOp to AMD64Arithmetic.
Roland Schatz <roland.schatz@oracle.com>
parents:
10959
diff
changeset
|
965 case SQRT: |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
966 masm.sqrtsd(asDoubleReg(dst), (AMD64Address) crb.asDoubleAddr(src)); |
11273
b5e95841d366
Move SQRT from AMD64MathIntrinsicOp to AMD64Arithmetic.
Roland Schatz <roland.schatz@oracle.com>
parents:
10959
diff
changeset
|
967 break; |
b5e95841d366
Move SQRT from AMD64MathIntrinsicOp to AMD64Arithmetic.
Roland Schatz <roland.schatz@oracle.com>
parents:
10959
diff
changeset
|
968 |
14001
79114edb5130
Explicit x2L instructions in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
13587
diff
changeset
|
969 case B2I: |
16891
f3bc50fe5157
use correct asXyzAddr methods in AMD64Arithmetic
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16346
diff
changeset
|
970 masm.movsbl(asIntReg(dst), (AMD64Address) crb.asByteAddr(src)); |
10959 | 971 break; |
14001
79114edb5130
Explicit x2L instructions in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
13587
diff
changeset
|
972 case S2I: |
16891
f3bc50fe5157
use correct asXyzAddr methods in AMD64Arithmetic
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16346
diff
changeset
|
973 masm.movswl(asIntReg(dst), (AMD64Address) crb.asShortAddr(src)); |
10959 | 974 break; |
14001
79114edb5130
Explicit x2L instructions in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
13587
diff
changeset
|
975 case B2L: |
16891
f3bc50fe5157
use correct asXyzAddr methods in AMD64Arithmetic
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16346
diff
changeset
|
976 masm.movsbq(asLongReg(dst), (AMD64Address) crb.asByteAddr(src)); |
14001
79114edb5130
Explicit x2L instructions in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
13587
diff
changeset
|
977 break; |
79114edb5130
Explicit x2L instructions in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
13587
diff
changeset
|
978 case S2L: |
16891
f3bc50fe5157
use correct asXyzAddr methods in AMD64Arithmetic
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16346
diff
changeset
|
979 masm.movswq(asLongReg(dst), (AMD64Address) crb.asShortAddr(src)); |
14001
79114edb5130
Explicit x2L instructions in AMD64 backend.
Roland Schatz <roland.schatz@oracle.com>
parents:
13587
diff
changeset
|
980 break; |
10959 | 981 case I2L: |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
982 masm.movslq(asLongReg(dst), (AMD64Address) crb.asIntAddr(src)); |
10959 | 983 break; |
984 case F2D: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
985 masm.cvtss2sd(asDoubleReg(dst), (AMD64Address) crb.asFloatAddr(src)); |
10959 | 986 break; |
987 case D2F: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
988 masm.cvtsd2ss(asFloatReg(dst), (AMD64Address) crb.asDoubleAddr(src)); |
10959 | 989 break; |
990 case I2F: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
991 masm.cvtsi2ssl(asFloatReg(dst), (AMD64Address) crb.asIntAddr(src)); |
10959 | 992 break; |
993 case I2D: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
994 masm.cvtsi2sdl(asDoubleReg(dst), (AMD64Address) crb.asIntAddr(src)); |
10959 | 995 break; |
996 case L2F: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
997 masm.cvtsi2ssq(asFloatReg(dst), (AMD64Address) crb.asLongAddr(src)); |
10959 | 998 break; |
999 case L2D: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
1000 masm.cvtsi2sdq(asDoubleReg(dst), (AMD64Address) crb.asLongAddr(src)); |
10959 | 1001 break; |
8192
b1d5f203c57d
Allow STACK argument in conversion ops.
Roland Schatz <roland.schatz@oracle.com>
parents:
8179
diff
changeset
|
1002 case F2I: |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
1003 masm.cvttss2sil(asIntReg(dst), (AMD64Address) crb.asFloatAddr(src)); |
8192
b1d5f203c57d
Allow STACK argument in conversion ops.
Roland Schatz <roland.schatz@oracle.com>
parents:
8179
diff
changeset
|
1004 break; |
b1d5f203c57d
Allow STACK argument in conversion ops.
Roland Schatz <roland.schatz@oracle.com>
parents:
8179
diff
changeset
|
1005 case D2I: |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
1006 masm.cvttsd2sil(asIntReg(dst), (AMD64Address) crb.asDoubleAddr(src)); |
8192
b1d5f203c57d
Allow STACK argument in conversion ops.
Roland Schatz <roland.schatz@oracle.com>
parents:
8179
diff
changeset
|
1007 break; |
b1d5f203c57d
Allow STACK argument in conversion ops.
Roland Schatz <roland.schatz@oracle.com>
parents:
8179
diff
changeset
|
1008 case F2L: |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
1009 masm.cvttss2siq(asLongReg(dst), (AMD64Address) crb.asFloatAddr(src)); |
8192
b1d5f203c57d
Allow STACK argument in conversion ops.
Roland Schatz <roland.schatz@oracle.com>
parents:
8179
diff
changeset
|
1010 break; |
b1d5f203c57d
Allow STACK argument in conversion ops.
Roland Schatz <roland.schatz@oracle.com>
parents:
8179
diff
changeset
|
1011 case D2L: |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
1012 masm.cvttsd2siq(asLongReg(dst), (AMD64Address) crb.asDoubleAddr(src)); |
8192
b1d5f203c57d
Allow STACK argument in conversion ops.
Roland Schatz <roland.schatz@oracle.com>
parents:
8179
diff
changeset
|
1013 break; |
10959 | 1014 case MOV_I2F: |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
1015 masm.movss(asFloatReg(dst), (AMD64Address) crb.asIntAddr(src)); |
10959 | 1016 break; |
1017 case MOV_L2D: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
1018 masm.movsd(asDoubleReg(dst), (AMD64Address) crb.asLongAddr(src)); |
10959 | 1019 break; |
1020 case MOV_F2I: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
1021 masm.movl(asIntReg(dst), (AMD64Address) crb.asFloatAddr(src)); |
10959 | 1022 break; |
1023 case MOV_D2L: | |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
1024 masm.movq(asLongReg(dst), (AMD64Address) crb.asDoubleAddr(src)); |
10959 | 1025 break; |
8192
b1d5f203c57d
Allow STACK argument in conversion ops.
Roland Schatz <roland.schatz@oracle.com>
parents:
8179
diff
changeset
|
1026 |
10959 | 1027 default: |
1028 throw GraalInternalError.shouldNotReachHere(); | |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
1029 } |
14707
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1030 } else { |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1031 switch (opcode) { |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1032 case IADD: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1033 masm.addl(asIntReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1034 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1035 case ISUB: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1036 masm.subl(asIntReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1037 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1038 case IAND: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1039 masm.andl(asIntReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1040 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1041 case IMUL: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1042 masm.imull(asIntReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1043 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1044 case IOR: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1045 masm.orl(asIntReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1046 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1047 case IXOR: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1048 masm.xorl(asIntReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1049 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1050 |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1051 case LADD: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1052 masm.addq(asLongReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1053 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1054 case LSUB: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1055 masm.subq(asLongReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1056 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1057 case LMUL: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1058 masm.imulq(asLongReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1059 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1060 case LAND: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1061 masm.andq(asLongReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1062 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1063 case LOR: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1064 masm.orq(asLongReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1065 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1066 case LXOR: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1067 masm.xorq(asLongReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1068 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1069 |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1070 case FADD: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1071 masm.addss(asFloatReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1072 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1073 case FSUB: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1074 masm.subss(asFloatReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1075 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1076 case FMUL: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1077 masm.mulss(asFloatReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1078 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1079 case FDIV: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1080 masm.divss(asFloatReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1081 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1082 |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1083 case DADD: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1084 masm.addsd(asDoubleReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1085 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1086 case DSUB: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1087 masm.subsd(asDoubleReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1088 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1089 case DMUL: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1090 masm.mulsd(asDoubleReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1091 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1092 case DDIV: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1093 masm.divsd(asDoubleReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1094 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1095 |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1096 case SQRT: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1097 masm.sqrtsd(asDoubleReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1098 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1099 |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1100 case B2I: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1101 masm.movsbl(asIntReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1102 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1103 case S2I: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1104 masm.movswl(asIntReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1105 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1106 case B2L: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1107 masm.movsbq(asLongReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1108 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1109 case S2L: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1110 masm.movswq(asLongReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1111 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1112 case I2L: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1113 masm.movslq(asLongReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1114 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1115 case F2D: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1116 masm.cvtss2sd(asDoubleReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1117 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1118 case D2F: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1119 masm.cvtsd2ss(asFloatReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1120 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1121 case I2F: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1122 masm.cvtsi2ssl(asFloatReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1123 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1124 case I2D: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1125 masm.cvtsi2sdl(asDoubleReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1126 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1127 case L2F: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1128 masm.cvtsi2ssq(asFloatReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1129 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1130 case L2D: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1131 masm.cvtsi2sdq(asDoubleReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1132 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1133 case F2I: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1134 masm.cvttss2sil(asIntReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1135 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1136 case D2I: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1137 masm.cvttsd2sil(asIntReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1138 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1139 case F2L: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1140 masm.cvttss2siq(asLongReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1141 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1142 case D2L: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1143 masm.cvttsd2siq(asLongReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1144 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1145 case MOV_I2F: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1146 masm.movss(asFloatReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1147 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1148 case MOV_L2D: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1149 masm.movsd(asDoubleReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1150 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1151 case MOV_F2I: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1152 masm.movl(asIntReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1153 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1154 case MOV_D2L: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1155 masm.movq(asLongReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1156 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1157 case MOV_B2UI: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1158 masm.movzbl(asIntReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1159 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1160 case MOV_B2UL: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1161 masm.movzbl(asLongReg(dst), ((AMD64AddressValue) src).toAddress()); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1162 break; |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1163 |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1164 default: |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1165 throw GraalInternalError.shouldNotReachHere(); |
6ce6c4ccba8f
initial support for memory arithmetic on x86
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
14031
diff
changeset
|
1166 } |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
1167 } |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
1168 |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
1169 if (info != null) { |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
1170 assert exceptionOffset != -1; |
13227
1a66453f73db
renamed TargetMethodAssembler to CompilationResultBuilder
Doug Simon <doug.simon@oracle.com>
parents:
11355
diff
changeset
|
1171 crb.recordImplicitException(exceptionOffset, info); |
4323
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
1172 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
1173 } |
df5547057954
Remove LIROpcode and use non-anonymous subclasses of LIRInstruction
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4254
diff
changeset
|
1174 |
5539
bc647d8b0080
Renaming RiValue => Value.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5538
diff
changeset
|
1175 private static void verifyKind(AMD64Arithmetic opcode, Value result, Value x, Value y) { |
14942
13a8c3454e76
Make type assertions in backend less strict.
Roland Schatz <roland.schatz@oracle.com>
parents:
14931
diff
changeset
|
1176 assert (opcode.name().startsWith("I") && result.getKind().getStackKind() == Kind.Int && x.getKind().getStackKind() == Kind.Int && y.getKind().getStackKind() == Kind.Int) || |
10959 | 1177 (opcode.name().startsWith("L") && result.getKind() == Kind.Long && x.getKind() == Kind.Long && y.getKind() == Kind.Long) || |
1178 (opcode.name().startsWith("F") && result.getKind() == Kind.Float && x.getKind() == Kind.Float && y.getKind() == Kind.Float) || | |
1179 (opcode.name().startsWith("D") && result.getKind() == Kind.Double && x.getKind() == Kind.Double && y.getKind() == Kind.Double) || | |
1180 (opcode.name().matches(".U?SH.") && result.getKind() == x.getKind() && y.getKind() == Kind.Int && (isConstant(y) || asRegister(y).equals(AMD64.rcx))); | |
3733
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
1181 } |
e233f5660da4
Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff
changeset
|
1182 } |