src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.hotspot.aarch64/src/org/graalvm/compiler/hotspot/aarch64/AArch64HotSpotLIRGenerator.java
author chegar
Thu, 17 Oct 2019 20:53:35 +0100
branchdatagramsocketimpl-branch
changeset 58678 9cf78a70fa4f
parent 54328 37648a9c4a6a
child 58679 9c3209ff7550
permissions -rw-r--r--
datagramsocketimpl-branch: update to default
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
     1
/*
58678
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
     2
 * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
     3
 * Copyright (c) 2018, Red Hat Inc. All rights reserved.
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
     4
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
     5
 *
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
     6
 * This code is free software; you can redistribute it and/or modify it
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
     7
 * under the terms of the GNU General Public License version 2 only, as
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
     8
 * published by the Free Software Foundation.
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
     9
 *
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    10
 * This code is distributed in the hope that it will be useful, but WITHOUT
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    11
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    12
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    13
 * version 2 for more details (a copy is included in the LICENSE file that
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    14
 * accompanied this code).
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    15
 *
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License version
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    17
 * 2 along with this work; if not, write to the Free Software Foundation,
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    18
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    19
 *
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    20
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    21
 * or visit www.oracle.com if you need additional information or have any
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    22
 * questions.
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    23
 */
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    24
50858
2d3e99a72541 8205824: Update Graal
never
parents: 50330
diff changeset
    25
2d3e99a72541 8205824: Update Graal
never
parents: 50330
diff changeset
    26
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    27
package org.graalvm.compiler.hotspot.aarch64;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    28
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
    29
import static org.graalvm.compiler.core.common.GraalOptions.GeneratePIC;
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
    30
import static org.graalvm.compiler.hotspot.HotSpotBackend.INITIALIZE_KLASS_BY_SYMBOL;
51126
a25c48c0a1ab 8181855: [Graal] runtime/ReservedStack/ReservedStackTest.java triggers: assert(thread->deopt_mark() == __null) failed: no stack overflow from deopt blob/uncommon trap
dlong
parents: 50858
diff changeset
    31
import static org.graalvm.compiler.hotspot.HotSpotBackend.RESOLVE_DYNAMIC_INVOKE;
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
    32
import static org.graalvm.compiler.hotspot.HotSpotBackend.RESOLVE_KLASS_BY_SYMBOL;
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
    33
import static org.graalvm.compiler.hotspot.HotSpotBackend.RESOLVE_METHOD_BY_SYMBOL_AND_LOAD_COUNTERS;
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
    34
import static org.graalvm.compiler.hotspot.HotSpotBackend.RESOLVE_STRING_BY_SYMBOL;
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
    35
import static org.graalvm.compiler.hotspot.meta.HotSpotConstantLoadAction.INITIALIZE;
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
    36
import static org.graalvm.compiler.hotspot.meta.HotSpotConstantLoadAction.LOAD_COUNTERS;
51126
a25c48c0a1ab 8181855: [Graal] runtime/ReservedStack/ReservedStackTest.java triggers: assert(thread->deopt_mark() == __null) failed: no stack overflow from deopt blob/uncommon trap
dlong
parents: 50858
diff changeset
    37
import static org.graalvm.compiler.hotspot.meta.HotSpotConstantLoadAction.RESOLVE;
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    38
import static org.graalvm.compiler.lir.LIRValueUtil.asConstant;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    39
import static org.graalvm.compiler.lir.LIRValueUtil.isConstantValue;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    40
58678
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
    41
import java.util.EnumSet;
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    42
import java.util.function.Function;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    43
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    44
import org.graalvm.compiler.asm.Label;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    45
import org.graalvm.compiler.asm.aarch64.AArch64Address.AddressingMode;
48398
79afa4c434f6 8193439: Update Graal
iveresov
parents: 48172
diff changeset
    46
import org.graalvm.compiler.asm.aarch64.AArch64Assembler.ConditionFlag;
46640
70bdce04c59b 8183991: Update Graal
iveresov
parents: 46536
diff changeset
    47
import org.graalvm.compiler.asm.aarch64.AArch64Assembler.PrefetchMode;
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    48
import org.graalvm.compiler.core.aarch64.AArch64ArithmeticLIRGenerator;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    49
import org.graalvm.compiler.core.aarch64.AArch64LIRGenerator;
46459
7d4e637d3f21 8180267: Update Graal
kvn
parents: 46344
diff changeset
    50
import org.graalvm.compiler.core.aarch64.AArch64LIRKindTool;
46344
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
    51
import org.graalvm.compiler.core.common.CompressEncoding;
58678
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
    52
import org.graalvm.compiler.core.common.GraalOptions;
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    53
import org.graalvm.compiler.core.common.LIRKind;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    54
import org.graalvm.compiler.core.common.calc.Condition;
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
    55
import org.graalvm.compiler.core.common.spi.ForeignCallDescriptor;
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    56
import org.graalvm.compiler.core.common.spi.ForeignCallLinkage;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    57
import org.graalvm.compiler.core.common.spi.LIRKindTool;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    58
import org.graalvm.compiler.debug.GraalError;
46344
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
    59
import org.graalvm.compiler.hotspot.GraalHotSpotVMConfig;
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    60
import org.graalvm.compiler.hotspot.HotSpotBackend;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    61
import org.graalvm.compiler.hotspot.HotSpotDebugInfoBuilder;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    62
import org.graalvm.compiler.hotspot.HotSpotForeignCallLinkage;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    63
import org.graalvm.compiler.hotspot.HotSpotLIRGenerationResult;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    64
import org.graalvm.compiler.hotspot.HotSpotLIRGenerator;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    65
import org.graalvm.compiler.hotspot.HotSpotLockStack;
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
    66
import org.graalvm.compiler.hotspot.meta.HotSpotConstantLoadAction;
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    67
import org.graalvm.compiler.hotspot.meta.HotSpotProviders;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    68
import org.graalvm.compiler.hotspot.meta.HotSpotRegistersProvider;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    69
import org.graalvm.compiler.hotspot.stubs.Stub;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    70
import org.graalvm.compiler.lir.LIRFrameState;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    71
import org.graalvm.compiler.lir.LIRInstruction;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    72
import org.graalvm.compiler.lir.LabelRef;
58678
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
    73
import org.graalvm.compiler.lir.StandardOp.ZapRegistersOp;
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    74
import org.graalvm.compiler.lir.SwitchStrategy;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    75
import org.graalvm.compiler.lir.Variable;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    76
import org.graalvm.compiler.lir.VirtualStackSlot;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    77
import org.graalvm.compiler.lir.aarch64.AArch64AddressValue;
46344
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
    78
import org.graalvm.compiler.lir.aarch64.AArch64CCall;
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    79
import org.graalvm.compiler.lir.aarch64.AArch64Call;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    80
import org.graalvm.compiler.lir.aarch64.AArch64ControlFlow.StrategySwitchOp;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    81
import org.graalvm.compiler.lir.aarch64.AArch64FrameMapBuilder;
46344
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
    82
import org.graalvm.compiler.lir.aarch64.AArch64Move;
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    83
import org.graalvm.compiler.lir.aarch64.AArch64Move.StoreOp;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    84
import org.graalvm.compiler.lir.aarch64.AArch64PrefetchOp;
51126
a25c48c0a1ab 8181855: [Graal] runtime/ReservedStack/ReservedStackTest.java triggers: assert(thread->deopt_mark() == __null) failed: no stack overflow from deopt blob/uncommon trap
dlong
parents: 50858
diff changeset
    85
import org.graalvm.compiler.lir.aarch64.AArch64RestoreRegistersOp;
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
    86
import org.graalvm.compiler.lir.aarch64.AArch64SaveRegistersOp;
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    87
import org.graalvm.compiler.lir.gen.LIRGenerationResult;
51126
a25c48c0a1ab 8181855: [Graal] runtime/ReservedStack/ReservedStackTest.java triggers: assert(thread->deopt_mark() == __null) failed: no stack overflow from deopt blob/uncommon trap
dlong
parents: 50858
diff changeset
    88
import org.graalvm.compiler.options.OptionValues;
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    89
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    90
import jdk.vm.ci.aarch64.AArch64;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    91
import jdk.vm.ci.aarch64.AArch64Kind;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    92
import jdk.vm.ci.code.CallingConvention;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    93
import jdk.vm.ci.code.Register;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    94
import jdk.vm.ci.code.RegisterValue;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    95
import jdk.vm.ci.code.StackSlot;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    96
import jdk.vm.ci.hotspot.HotSpotCompressedNullConstant;
51126
a25c48c0a1ab 8181855: [Graal] runtime/ReservedStack/ReservedStackTest.java triggers: assert(thread->deopt_mark() == __null) failed: no stack overflow from deopt blob/uncommon trap
dlong
parents: 50858
diff changeset
    97
import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant;
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    98
import jdk.vm.ci.hotspot.HotSpotObjectConstant;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
    99
import jdk.vm.ci.meta.AllocatableValue;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   100
import jdk.vm.ci.meta.Constant;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   101
import jdk.vm.ci.meta.DeoptimizationAction;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   102
import jdk.vm.ci.meta.DeoptimizationReason;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   103
import jdk.vm.ci.meta.JavaConstant;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   104
import jdk.vm.ci.meta.JavaKind;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   105
import jdk.vm.ci.meta.PlatformKind;
50858
2d3e99a72541 8205824: Update Graal
never
parents: 50330
diff changeset
   106
import jdk.vm.ci.meta.SpeculationLog;
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   107
import jdk.vm.ci.meta.Value;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   108
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   109
/**
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   110
 * LIR generator specialized for AArch64 HotSpot.
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   111
 */
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   112
public class AArch64HotSpotLIRGenerator extends AArch64LIRGenerator implements HotSpotLIRGenerator {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   113
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   114
    final GraalHotSpotVMConfig config;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   115
    private HotSpotDebugInfoBuilder debugInfoBuilder;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   116
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   117
    protected AArch64HotSpotLIRGenerator(HotSpotProviders providers, GraalHotSpotVMConfig config, LIRGenerationResult lirGenRes) {
54328
37648a9c4a6a 8221341: Update Graal
jwilhelm
parents: 52910
diff changeset
   118
        this(new AArch64LIRKindTool(), new AArch64ArithmeticLIRGenerator(null), new AArch64HotSpotMoveFactory(), providers, config, lirGenRes);
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   119
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   120
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   121
    protected AArch64HotSpotLIRGenerator(LIRKindTool lirKindTool, AArch64ArithmeticLIRGenerator arithmeticLIRGen, MoveFactory moveFactory, HotSpotProviders providers, GraalHotSpotVMConfig config,
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   122
                    LIRGenerationResult lirGenRes) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   123
        super(lirKindTool, arithmeticLIRGen, moveFactory, providers, lirGenRes);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   124
        this.config = config;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   125
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   126
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   127
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   128
    public HotSpotProviders getProviders() {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   129
        return (HotSpotProviders) super.getProviders();
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   130
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   131
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   132
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   133
    public boolean needOnlyOopMaps() {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   134
        // Stubs only need oop maps
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   135
        return getResult().getStub() != null;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   136
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   137
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   138
    private LIRFrameState currentRuntimeCallInfo;
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   139
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   140
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   141
    protected void emitForeignCallOp(ForeignCallLinkage linkage, Value result, Value[] arguments, Value[] temps, LIRFrameState info) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   142
        currentRuntimeCallInfo = info;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   143
        if (AArch64Call.isNearCall(linkage)) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   144
            append(new AArch64Call.DirectNearForeignCallOp(linkage, result, arguments, temps, info, label));
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   145
        } else {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   146
            append(new AArch64Call.DirectFarForeignCallOp(linkage, result, arguments, temps, info, label));
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   147
        }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   148
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   149
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   150
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   151
    public void emitTailcall(Value[] args, Value address) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   152
        throw GraalError.unimplemented();
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   153
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   154
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   155
    @Override
46344
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   156
    public void emitCCall(long address, CallingConvention nativeCallingConvention, Value[] args) {
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   157
        Value[] argLocations = new Value[args.length];
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   158
        getResult().getFrameMapBuilder().callsMethod(nativeCallingConvention);
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   159
        for (int i = 0; i < args.length; i++) {
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   160
            Value arg = args[i];
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   161
            AllocatableValue loc = nativeCallingConvention.getArgument(i);
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   162
            emitMove(loc, arg);
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   163
            argLocations[i] = loc;
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   164
        }
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   165
        Value ptr = emitLoadConstant(LIRKind.value(AArch64Kind.QWORD), JavaConstant.forLong(address));
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   166
        append(new AArch64CCall(nativeCallingConvention.getReturn(), ptr, argLocations));
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   167
    }
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   168
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   169
    /**
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   170
     * @param savedRegisters the registers saved by this operation which may be subject to pruning
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   171
     * @param savedRegisterLocations the slots to which the registers are saved
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   172
     */
58678
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   173
    protected AArch64SaveRegistersOp emitSaveRegisters(Register[] savedRegisters, AllocatableValue[] savedRegisterLocations) {
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   174
        AArch64SaveRegistersOp save = new AArch64SaveRegistersOp(savedRegisters, savedRegisterLocations);
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   175
        append(save);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   176
        return save;
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   177
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   178
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   179
    /**
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   180
     * Allocate a stack slot for saving a register.
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   181
     */
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   182
    protected VirtualStackSlot allocateSaveRegisterLocation(Register register) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   183
        PlatformKind kind = target().arch.getLargestStorableKind(register.getRegisterCategory());
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   184
        if (kind.getVectorLength() > 1) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   185
            // we don't use vector registers, so there is no need to save them
58678
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   186
            kind = AArch64Kind.DOUBLE;
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   187
        }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   188
        return getResult().getFrameMapBuilder().allocateSpillSlot(LIRKind.value(kind));
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   189
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   190
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   191
    /**
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   192
     * Adds a node to the graph that saves all allocatable registers to the stack.
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   193
     *
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   194
     * @return the register save node
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   195
     */
58678
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   196
    private AArch64SaveRegistersOp emitSaveAllRegisters(Register[] savedRegisters) {
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   197
        AllocatableValue[] savedRegisterLocations = new AllocatableValue[savedRegisters.length];
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   198
        for (int i = 0; i < savedRegisters.length; i++) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   199
            savedRegisterLocations[i] = allocateSaveRegisterLocation(savedRegisters[i]);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   200
        }
58678
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   201
        return emitSaveRegisters(savedRegisters, savedRegisterLocations);
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   202
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   203
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   204
    protected void emitRestoreRegisters(AArch64SaveRegistersOp save) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   205
        append(new AArch64RestoreRegistersOp(save.getSlots().clone(), save));
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   206
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   207
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   208
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   209
    public VirtualStackSlot getLockSlot(int lockDepth) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   210
        return getLockStack().makeLockSlot(lockDepth);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   211
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   212
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   213
    private HotSpotLockStack getLockStack() {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   214
        assert debugInfoBuilder != null && debugInfoBuilder.lockStack() != null;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   215
        return debugInfoBuilder.lockStack();
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   216
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   217
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   218
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   219
    public void emitCompareBranch(PlatformKind cmpKind, Value x, Value y, Condition cond, boolean unorderedIsTrue, LabelRef trueDestination, LabelRef falseDestination,
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   220
                    double trueDestinationProbability) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   221
        Value localX = x;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   222
        Value localY = y;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   223
        if (localX instanceof HotSpotObjectConstant) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   224
            localX = load(localX);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   225
        }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   226
        if (localY instanceof HotSpotObjectConstant) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   227
            localY = load(localY);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   228
        }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   229
        super.emitCompareBranch(cmpKind, localX, localY, cond, unorderedIsTrue, trueDestination, falseDestination, trueDestinationProbability);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   230
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   231
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   232
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   233
    protected boolean emitCompare(PlatformKind cmpKind, Value a, Value b, Condition condition, boolean unorderedIsTrue) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   234
        Value localA = a;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   235
        Value localB = b;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   236
        if (isConstantValue(a)) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   237
            Constant c = asConstant(a);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   238
            if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(c)) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   239
                localA = AArch64.zr.asValue(LIRKind.value(AArch64Kind.DWORD));
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   240
            } else if (c instanceof HotSpotObjectConstant) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   241
                localA = load(localA);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   242
            }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   243
        }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   244
        if (isConstantValue(b)) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   245
            Constant c = asConstant(b);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   246
            if (HotSpotCompressedNullConstant.COMPRESSED_NULL.equals(c)) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   247
                localB = AArch64.zr.asValue(LIRKind.value(AArch64Kind.DWORD));
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   248
            } else if (c instanceof HotSpotObjectConstant) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   249
                localB = load(localB);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   250
            }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   251
        }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   252
        return super.emitCompare(cmpKind, localA, localB, condition, unorderedIsTrue);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   253
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   254
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   255
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   256
    public Value emitCompress(Value pointer, CompressEncoding encoding, boolean nonNull) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   257
        LIRKind inputKind = pointer.getValueKind(LIRKind.class);
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   258
        LIRKindTool lirKindTool = getLIRKindTool();
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   259
        assert inputKind.getPlatformKind() == AArch64Kind.QWORD;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   260
        if (inputKind.isReference(0)) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   261
            // oop
48398
79afa4c434f6 8193439: Update Graal
iveresov
parents: 48172
diff changeset
   262
            Variable result = newVariable(LIRKind.compressedReference(AArch64Kind.DWORD));
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   263
            append(new AArch64HotSpotMove.CompressPointer(result, asAllocatable(pointer), getProviders().getRegisters().getHeapBaseRegister().asValue(), encoding, nonNull));
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   264
            return result;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   265
        } else {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   266
            // metaspace pointer
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   267
            Variable result = newVariable(LIRKind.value(AArch64Kind.DWORD));
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   268
            AllocatableValue base = Value.ILLEGAL;
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   269
            OptionValues options = getResult().getLIR().getOptions();
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   270
            if (encoding.hasBase() || GeneratePIC.getValue(options)) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   271
                if (GeneratePIC.getValue(options)) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   272
                    Variable baseAddress = newVariable(lirKindTool.getWordKind());
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   273
                    AArch64HotSpotMove.BaseMove move = new AArch64HotSpotMove.BaseMove(baseAddress, config);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   274
                    append(move);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   275
                    base = baseAddress;
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   276
                } else {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   277
                    base = emitLoadConstant(LIRKind.value(AArch64Kind.QWORD), JavaConstant.forLong(encoding.getBase()));
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   278
                }
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   279
            }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   280
            append(new AArch64HotSpotMove.CompressPointer(result, asAllocatable(pointer), base, encoding, nonNull));
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   281
            return result;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   282
        }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   283
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   284
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   285
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   286
    public Value emitUncompress(Value pointer, CompressEncoding encoding, boolean nonNull) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   287
        LIRKind inputKind = pointer.getValueKind(LIRKind.class);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   288
        assert inputKind.getPlatformKind() == AArch64Kind.DWORD;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   289
        if (inputKind.isReference(0)) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   290
            // oop
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   291
            Variable result = newVariable(LIRKind.reference(AArch64Kind.QWORD));
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   292
            append(new AArch64HotSpotMove.UncompressPointer(result, asAllocatable(pointer), getProviders().getRegisters().getHeapBaseRegister().asValue(), encoding, nonNull));
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   293
            return result;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   294
        } else {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   295
            // metaspace pointer
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   296
            Variable result = newVariable(LIRKind.value(AArch64Kind.QWORD));
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   297
            AllocatableValue base = Value.ILLEGAL;
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   298
            OptionValues options = getResult().getLIR().getOptions();
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   299
            if (encoding.hasBase() || GeneratePIC.getValue(options)) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   300
                if (GeneratePIC.getValue(options)) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   301
                    Variable baseAddress = newVariable(LIRKind.value(AArch64Kind.QWORD));
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   302
                    AArch64HotSpotMove.BaseMove move = new AArch64HotSpotMove.BaseMove(baseAddress, config);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   303
                    append(move);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   304
                    base = baseAddress;
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   305
                } else {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   306
                    base = emitLoadConstant(LIRKind.value(AArch64Kind.QWORD), JavaConstant.forLong(encoding.getBase()));
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   307
                }
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   308
            }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   309
            append(new AArch64HotSpotMove.UncompressPointer(result, asAllocatable(pointer), base, encoding, nonNull));
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   310
            return result;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   311
        }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   312
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   313
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   314
    @Override
46344
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   315
    public void emitNullCheck(Value address, LIRFrameState state) {
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   316
        if (address.getValueKind().getPlatformKind() == AArch64Kind.DWORD) {
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   317
            CompressEncoding encoding = config.getOopEncoding();
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   318
            Value uncompressed = emitUncompress(address, encoding, false);
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   319
            append(new AArch64Move.NullCheckOp(asAddressValue(uncompressed), state));
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   320
        } else {
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   321
            super.emitNullCheck(address, state);
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   322
        }
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   323
    }
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   324
694c102fd8ed 8177046: Update Graal
iveresov
parents: 43972
diff changeset
   325
    @Override
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   326
    public void emitPrefetchAllocate(Value address) {
46640
70bdce04c59b 8183991: Update Graal
iveresov
parents: 46536
diff changeset
   327
        append(new AArch64PrefetchOp(asAddressValue(address), PrefetchMode.PSTL1KEEP));
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   328
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   329
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   330
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   331
    public void beforeRegisterAllocation() {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   332
        super.beforeRegisterAllocation();
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   333
        boolean hasDebugInfo = getResult().getLIR().hasDebugInfo();
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   334
        if (hasDebugInfo) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   335
            getResult().setDeoptimizationRescueSlot(((AArch64FrameMapBuilder) getResult().getFrameMapBuilder()).allocateDeoptimizationRescueSlot());
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   336
        }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   337
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   338
        getResult().setMaxInterpreterFrameSize(debugInfoBuilder.maxInterpreterFrameSize());
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   339
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   340
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   341
    private Label label;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   342
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   343
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   344
    public Variable emitForeignCall(ForeignCallLinkage linkage, LIRFrameState state, Value... args) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   345
        HotSpotForeignCallLinkage hotspotLinkage = (HotSpotForeignCallLinkage) linkage;
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   346
        boolean destroysRegisters = hotspotLinkage.destroysRegisters();
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   347
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   348
        AArch64SaveRegistersOp save = null;
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   349
        Stub stub = getStub();
58678
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   350
        if (destroysRegisters && stub != null && stub.shouldSaveRegistersAroundCalls()) {
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   351
            Register[] savedRegisters = getRegisterConfig().getAllocatableRegisters().toArray();
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   352
            save = emitSaveAllRegisters(savedRegisters);
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   353
        }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   354
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   355
        Variable result;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   356
        LIRFrameState debugInfo = null;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   357
        if (hotspotLinkage.needsDebugInfo()) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   358
            debugInfo = state;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   359
            assert debugInfo != null || getStub() != null;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   360
        }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   361
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   362
        if (destroysRegisters || hotspotLinkage.needsJavaFrameAnchor()) {
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   363
            HotSpotRegistersProvider registers = getProviders().getRegisters();
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   364
            Register thread = registers.getThreadRegister();
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   365
            Variable scratch = newVariable(LIRKind.value(target().arch.getWordKind()));
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   366
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   367
            // We need a label for the return address.
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   368
            label = new Label();
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   369
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   370
            append(new AArch64HotSpotCRuntimeCallPrologueOp(config.threadLastJavaSpOffset(), config.threadLastJavaPcOffset(), thread, scratch, label));
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   371
            result = super.emitForeignCall(hotspotLinkage, debugInfo, args);
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   372
            append(new AArch64HotSpotCRuntimeCallEpilogueOp(config.threadLastJavaSpOffset(), config.threadLastJavaPcOffset(), thread, label));
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   373
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   374
            // Clear it out so it's not being reused later.
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   375
            label = null;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   376
        } else {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   377
            result = super.emitForeignCall(hotspotLinkage, debugInfo, args);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   378
        }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   379
58678
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   380
        if (save != null) {
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   381
            HotSpotLIRGenerationResult generationResult = getResult();
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   382
            LIRFrameState key = currentRuntimeCallInfo;
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   383
            if (key == null) {
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   384
                key = LIRFrameState.NO_STATE;
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   385
            }
58678
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   386
            assert !generationResult.getCalleeSaveInfo().containsKey(key);
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   387
            generationResult.getCalleeSaveInfo().put(key, save);
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   388
            emitRestoreRegisters(save);
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   389
        }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   390
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   391
        return result;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   392
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   393
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   394
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   395
    public void emitDeoptimizeCaller(DeoptimizationAction action, DeoptimizationReason reason) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   396
        Value actionAndReason = emitJavaConstant(getMetaAccess().encodeDeoptActionAndReason(action, reason, 0));
50858
2d3e99a72541 8205824: Update Graal
never
parents: 50330
diff changeset
   397
        Value speculation = emitJavaConstant(getMetaAccess().encodeSpeculation(SpeculationLog.NO_SPECULATION));
2d3e99a72541 8205824: Update Graal
never
parents: 50330
diff changeset
   398
        moveDeoptValuesToThread(actionAndReason, speculation);
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   399
        append(new AArch64HotSpotDeoptimizeCallerOp(config));
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   400
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   401
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   402
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   403
    public void emitDeoptimize(Value actionAndReason, Value failedSpeculation, LIRFrameState state) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   404
        moveDeoptValuesToThread(actionAndReason, failedSpeculation);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   405
        append(new AArch64HotSpotDeoptimizeOp(state));
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   406
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   407
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   408
    private void moveDeoptValuesToThread(Value actionAndReason, Value speculation) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   409
        moveValueToThread(actionAndReason, config.pendingDeoptimizationOffset);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   410
        moveValueToThread(speculation, config.pendingFailedSpeculationOffset);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   411
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   412
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   413
    private void moveValueToThread(Value value, int offset) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   414
        LIRKind wordKind = LIRKind.value(target().arch.getWordKind());
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   415
        RegisterValue thread = getProviders().getRegisters().getThreadRegister().asValue(wordKind);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   416
        final int transferSize = value.getValueKind().getPlatformKind().getSizeInBytes();
46536
79d8dffda212 8182018: Update Graal
iveresov
parents: 46459
diff changeset
   417
        AArch64AddressValue address = new AArch64AddressValue(value.getValueKind(), thread, Value.ILLEGAL, offset, transferSize, AddressingMode.IMMEDIATE_SCALED);
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   418
        append(new StoreOp((AArch64Kind) value.getPlatformKind(), address, loadReg(value), null));
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   419
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   420
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   421
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   422
    public void emitUnwind(Value exception) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   423
        ForeignCallLinkage linkage = getForeignCalls().lookupForeignCall(HotSpotBackend.UNWIND_EXCEPTION_TO_CALLER);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   424
        CallingConvention outgoingCc = linkage.getOutgoingCallingConvention();
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   425
        assert outgoingCc.getArgumentCount() == 2;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   426
        RegisterValue exceptionParameter = (RegisterValue) outgoingCc.getArgument(0);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   427
        emitMove(exceptionParameter, exception);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   428
        append(new AArch64HotSpotUnwindOp(config, exceptionParameter));
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   429
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   430
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   431
    @Override
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   432
    public Value emitLoadObjectAddress(Constant constant) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   433
        HotSpotObjectConstant objectConstant = (HotSpotObjectConstant) constant;
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   434
        LIRKind kind = objectConstant.isCompressed() ? getLIRKindTool().getNarrowOopKind() : getLIRKindTool().getObjectKind();
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   435
        Variable result = newVariable(kind);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   436
        append(new AArch64HotSpotLoadAddressOp(result, constant, HotSpotConstantLoadAction.RESOLVE));
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   437
        return result;
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   438
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   439
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   440
    @Override
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   441
    public Value emitLoadMetaspaceAddress(Constant constant, HotSpotConstantLoadAction action) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   442
        HotSpotMetaspaceConstant metaspaceConstant = (HotSpotMetaspaceConstant) constant;
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   443
        LIRKind kind = metaspaceConstant.isCompressed() ? getLIRKindTool().getNarrowPointerKind() : getLIRKindTool().getWordKind();
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   444
        Variable result = newVariable(kind);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   445
        append(new AArch64HotSpotLoadAddressOp(result, constant, action));
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   446
        return result;
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   447
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   448
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   449
    private Value emitConstantRetrieval(ForeignCallDescriptor foreignCall, Object[] notes, Constant[] constants, AllocatableValue[] constantDescriptions, LIRFrameState frameState) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   450
        ForeignCallLinkage linkage = getForeignCalls().lookupForeignCall(foreignCall);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   451
        append(new AArch64HotSpotConstantRetrievalOp(constants, constantDescriptions, frameState, linkage, notes));
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   452
        AllocatableValue result = linkage.getOutgoingCallingConvention().getReturn();
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   453
        return emitMove(result);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   454
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   455
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   456
    private Value emitConstantRetrieval(ForeignCallDescriptor foreignCall, HotSpotConstantLoadAction action, Constant constant, AllocatableValue[] constantDescriptions, LIRFrameState frameState) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   457
        Constant[] constants = new Constant[]{constant};
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   458
        Object[] notes = new Object[]{action};
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   459
        return emitConstantRetrieval(foreignCall, notes, constants, constantDescriptions, frameState);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   460
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   461
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   462
    @Override
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   463
    public Value emitResolveDynamicInvoke(Constant appendix, LIRFrameState frameState) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   464
        AllocatableValue[] constantDescriptions = new AllocatableValue[0];
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   465
        return emitConstantRetrieval(RESOLVE_DYNAMIC_INVOKE, INITIALIZE, appendix, constantDescriptions, frameState);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   466
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   467
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   468
    @Override
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   469
    public Value emitLoadConfigValue(int markId, LIRKind kind) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   470
        Variable result = newVariable(kind);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   471
        append(new AArch64HotSpotLoadConfigValueOp(markId, result));
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   472
        return result;
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   473
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   474
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   475
    private Value emitConstantRetrieval(ForeignCallDescriptor foreignCall, HotSpotConstantLoadAction action, Constant constant, Value constantDescription, LIRFrameState frameState) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   476
        AllocatableValue[] constantDescriptions = new AllocatableValue[]{asAllocatable(constantDescription)};
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   477
        return emitConstantRetrieval(foreignCall, action, constant, constantDescriptions, frameState);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   478
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   479
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   480
    @Override
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   481
    public Value emitObjectConstantRetrieval(Constant constant, Value constantDescription, LIRFrameState frameState) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   482
        return emitConstantRetrieval(RESOLVE_STRING_BY_SYMBOL, RESOLVE, constant, constantDescription, frameState);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   483
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   484
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   485
    @Override
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   486
    public Value emitMetaspaceConstantRetrieval(Constant constant, Value constantDescription, LIRFrameState frameState) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   487
        return emitConstantRetrieval(RESOLVE_KLASS_BY_SYMBOL, RESOLVE, constant, constantDescription, frameState);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   488
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   489
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   490
    @Override
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   491
    public void emitReturn(JavaKind kind, Value input) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   492
        AllocatableValue operand = Value.ILLEGAL;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   493
        if (input != null) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   494
            operand = resultOperandFor(kind, input.getValueKind());
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   495
            emitMove(operand, input);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   496
        }
48172
e26fc5201707 8191437: AOT doesn't work easily after thread local handshakes
dlong
parents: 47216
diff changeset
   497
        Register thread = getProviders().getRegisters().getThreadRegister();
51126
a25c48c0a1ab 8181855: [Graal] runtime/ReservedStack/ReservedStackTest.java triggers: assert(thread->deopt_mark() == __null) failed: no stack overflow from deopt blob/uncommon trap
dlong
parents: 50858
diff changeset
   498
        append(new AArch64HotSpotReturnOp(operand, getStub() != null, config, thread, getResult().requiresReservedStackAccessCheck()));
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   499
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   500
50330
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   501
    @Override
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   502
    public Value emitKlassInitializationAndRetrieval(Constant constant, Value constantDescription, LIRFrameState frameState) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   503
        return emitConstantRetrieval(INITIALIZE_KLASS_BY_SYMBOL, INITIALIZE, constant, constantDescription, frameState);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   504
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   505
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   506
    @Override
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   507
    public Value emitResolveMethodAndLoadCounters(Constant method, Value klassHint, Value methodDescription, LIRFrameState frameState) {
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   508
        AllocatableValue[] constantDescriptions = new AllocatableValue[]{asAllocatable(klassHint), asAllocatable(methodDescription)};
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   509
        return emitConstantRetrieval(RESOLVE_METHOD_BY_SYMBOL_AND_LOAD_COUNTERS, LOAD_COUNTERS, method, constantDescriptions, frameState);
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   510
    }
2cbc42a5764b 8202670: Update Graal
dlong
parents: 48398
diff changeset
   511
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   512
    /**
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   513
     * Gets the {@link Stub} this generator is generating code for or {@code null} if a stub is not
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   514
     * being generated.
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   515
     */
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   516
    public Stub getStub() {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   517
        return getResult().getStub();
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   518
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   519
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   520
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   521
    public HotSpotLIRGenerationResult getResult() {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   522
        return ((HotSpotLIRGenerationResult) super.getResult());
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   523
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   524
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   525
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   526
    protected StrategySwitchOp createStrategySwitchOp(SwitchStrategy strategy, LabelRef[] keyTargets, LabelRef defaultTarget, Variable key, AllocatableValue scratchValue,
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   527
                    Function<Condition, ConditionFlag> converter) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   528
        return new AArch64HotSpotStrategySwitchOp(strategy, keyTargets, defaultTarget, key, scratchValue, converter);
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   529
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   530
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   531
    public void setDebugInfoBuilder(HotSpotDebugInfoBuilder debugInfoBuilder) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   532
        this.debugInfoBuilder = debugInfoBuilder;
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   533
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   534
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   535
    @Override
58678
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   536
    public ZapRegistersOp createZapRegisters(Register[] zappedRegisters, JavaConstant[] zapValues) {
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   537
        throw GraalError.unimplemented();
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   538
    }
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   539
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   540
    @Override
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   541
    public LIRInstruction createZapArgumentSpace(StackSlot[] zappedStack, JavaConstant[] zapValues) {
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   542
        throw GraalError.unimplemented();
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   543
    }
58678
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   544
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   545
    @Override
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   546
    public void emitZeroMemory(Value address, Value length, boolean isAligned) {
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   547
        int dczidValue = config.psrInfoDczidValue;
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   548
        EnumSet<AArch64.Flag> flags = ((AArch64) target().arch).getFlags();
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   549
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   550
        // ARMv8-A architecture reference manual D12.2.35 Data Cache Zero ID register says:
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   551
        // * BS, bits [3:0] indicate log2 of the DC ZVA block size in (4-byte) words.
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   552
        // * DZP, bit [4] of indicates whether use of DC ZVA instruction is prohibited.
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   553
        int zvaLength = 4 << (dczidValue & 0xF);
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   554
        boolean isDcZvaProhibited = ((dczidValue & 0x10) != 0);
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   555
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   556
        // Use DC ZVA if it's not prohibited and AArch64 HotSpot flag UseBlockZeroing is on.
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   557
        boolean useDcZva = !isDcZvaProhibited && flags.contains(AArch64.Flag.UseBlockZeroing);
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   558
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   559
        // Set zva length negative (unknown at compile-time) for AOT compilation, since the value
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   560
        // could be different on different AArch64 CPU implementations.
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   561
        if (GraalOptions.ImmutableCode.getValue(getResult().getLIR().getOptions())) {
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   562
            useDcZva = false;
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   563
        }
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   564
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   565
        emitZeroMemory(address, length, isAligned, useDcZva, zvaLength);
9cf78a70fa4f datagramsocketimpl-branch: update to default
chegar
parents: 54328
diff changeset
   566
    }
43972
1ade39b8381b 8174879: Rename jdk.vm.ci to jdk.internal.vm.ci
kvn
parents:
diff changeset
   567
}