src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.lir.aarch64/src/org/graalvm/compiler/lir/aarch64/AArch64ZeroMemoryOp.java
author dlong
Tue, 24 Sep 2019 12:47:15 -0400
changeset 58299 6df94ce3ab2f
child 58533 46b0b7fe255c
permissions -rw-r--r--
8229201: Update Graal Reviewed-by: kvn
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
58299
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
     1
/*
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
     2
 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
     3
 * Copyright (c) 2019, Arm Limited and affiliates. All rights reserved.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
     4
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
     5
 *
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
     6
 * This code is free software; you can redistribute it and/or modify it
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
     7
 * under the terms of the GNU General Public License version 2 only, as
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
     8
 * published by the Free Software Foundation.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
     9
 *
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    10
 * This code is distributed in the hope that it will be useful, but WITHOUT
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    11
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    12
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    13
 * version 2 for more details (a copy is included in the LICENSE file that
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    14
 * accompanied this code).
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    15
 *
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License version
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    17
 * 2 along with this work; if not, write to the Free Software Foundation,
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    18
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    19
 *
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    20
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    21
 * or visit www.oracle.com if you need additional information or have any
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    22
 * questions.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    23
 */
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    24
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    25
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    26
package org.graalvm.compiler.lir.aarch64;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    27
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    28
import static jdk.vm.ci.aarch64.AArch64.zr;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    29
import static jdk.vm.ci.code.ValueUtil.asRegister;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    30
import static org.graalvm.compiler.lir.LIRInstruction.OperandFlag.REG;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    31
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    32
import org.graalvm.compiler.asm.Label;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    33
import org.graalvm.compiler.asm.aarch64.AArch64Address;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    34
import org.graalvm.compiler.asm.aarch64.AArch64Assembler;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    35
import org.graalvm.compiler.asm.aarch64.AArch64MacroAssembler;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    36
import org.graalvm.compiler.lir.LIRInstructionClass;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    37
import org.graalvm.compiler.lir.Opcode;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    38
import org.graalvm.compiler.lir.asm.CompilationResultBuilder;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    39
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    40
import jdk.vm.ci.code.CodeUtil;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    41
import jdk.vm.ci.code.Register;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    42
import jdk.vm.ci.meta.AllocatableValue;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    43
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    44
/**
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    45
 * Zero a chunk of memory on AArch64.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    46
 */
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    47
@Opcode("ZERO_MEMORY")
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    48
public final class AArch64ZeroMemoryOp extends AArch64LIRInstruction {
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    49
    public static final LIRInstructionClass<AArch64ZeroMemoryOp> TYPE = LIRInstructionClass.create(AArch64ZeroMemoryOp.class);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    50
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    51
    @Use({REG}) protected AllocatableValue addressValue;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    52
    @Use({REG}) protected AllocatableValue lengthValue;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    53
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    54
    private final boolean useDcZva;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    55
    private final int zvaLength;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    56
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    57
    /**
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    58
     * Constructor of AArch64ZeroMemoryOp.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    59
     *
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    60
     * @param address allocatable 8-byte aligned base address of the memory chunk.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    61
     * @param length allocatable length of the memory chunk, the value must be multiple of 8.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    62
     * @param useDcZva is DC ZVA instruction is able to use.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    63
     * @param zvaLength the ZVA length info of current AArch64 CPU, negative value indicates length
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    64
     *            is unknown at compile time.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    65
     */
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    66
    public AArch64ZeroMemoryOp(AllocatableValue address, AllocatableValue length, boolean useDcZva, int zvaLength) {
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    67
        super(TYPE);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    68
        this.addressValue = address;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    69
        this.lengthValue = length;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    70
        this.useDcZva = useDcZva;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    71
        this.zvaLength = zvaLength;
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    72
    }
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    73
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    74
    @Override
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    75
    protected void emitCode(CompilationResultBuilder crb, AArch64MacroAssembler masm) {
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    76
        Register base = asRegister(addressValue);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    77
        Register size = asRegister(lengthValue);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    78
        if (useDcZva && zvaLength > 0) {
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    79
            // From ARMv8-A architecture reference manual D12.2.35 Data Cache Zero ID register:
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    80
            // A valid ZVA length should be a power-of-2 value in [4, 2048]
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    81
            assert (CodeUtil.isPowerOf2(zvaLength) && 4 <= zvaLength && zvaLength <= 2048);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    82
            emitZeroMemoryWithDc(masm, base, size, zvaLength);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    83
        } else {
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    84
            // Use store pair instructions (STP) to zero memory as a fallback.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    85
            emitZeroMemoryWithStp(masm, base, size);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    86
        }
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    87
    }
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    88
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    89
    /**
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    90
     * Zero a chunk of memory with DC ZVA instructions.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    91
     *
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    92
     * @param masm the AArch64 macro assembler.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    93
     * @param base base an 8-byte aligned address of the memory chunk to be zeroed.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    94
     * @param size size of the memory chunk to be zeroed, in bytes, must be multiple of 8.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    95
     * @param zvaLength the ZVA length info of current AArch64 CPU.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    96
     */
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    97
    private static void emitZeroMemoryWithDc(AArch64MacroAssembler masm, Register base, Register size, int zvaLength) {
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    98
        Label preLoop = new Label();
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
    99
        Label zvaLoop = new Label();
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   100
        Label postLoop = new Label();
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   101
        Label tail = new Label();
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   102
        Label done = new Label();
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   103
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   104
        try (AArch64MacroAssembler.ScratchRegister sc1 = masm.getScratchRegister()) {
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   105
            Register rscratch1 = sc1.getRegister();
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   106
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   107
            // Count number of bytes to be pre-zeroed to align base address with ZVA length.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   108
            masm.neg(64, rscratch1, base);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   109
            masm.and(64, rscratch1, rscratch1, zvaLength - 1);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   110
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   111
            // Is size less than number of bytes to be pre-zeroed? Jump to POST_LOOP if so.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   112
            masm.cmp(64, size, rscratch1);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   113
            masm.branchConditionally(AArch64Assembler.ConditionFlag.LE, postLoop);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   114
            masm.sub(64, size, size, rscratch1);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   115
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   116
            // Pre-ZVA loop.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   117
            masm.bind(preLoop);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   118
            masm.subs(64, rscratch1, rscratch1, 8);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   119
            masm.branchConditionally(AArch64Assembler.ConditionFlag.LT, zvaLoop);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   120
            masm.str(64, zr, AArch64Address.createPostIndexedImmediateAddress(base, 8));
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   121
            masm.jmp(preLoop);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   122
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   123
            // ZVA loop.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   124
            masm.bind(zvaLoop);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   125
            masm.subs(64, size, size, zvaLength);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   126
            masm.branchConditionally(AArch64Assembler.ConditionFlag.LT, tail);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   127
            masm.dc(AArch64Assembler.DataCacheOperationType.ZVA, base);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   128
            masm.add(64, base, base, zvaLength);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   129
            masm.jmp(zvaLoop);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   130
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   131
            // Handle bytes after ZVA loop.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   132
            masm.bind(tail);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   133
            masm.add(64, size, size, zvaLength);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   134
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   135
            // Post-ZVA loop.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   136
            masm.bind(postLoop);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   137
            masm.subs(64, size, size, 8);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   138
            masm.branchConditionally(AArch64Assembler.ConditionFlag.LT, done);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   139
            masm.str(64, zr, AArch64Address.createPostIndexedImmediateAddress(base, 8));
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   140
            masm.jmp(postLoop);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   141
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   142
            // Done.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   143
            masm.bind(done);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   144
        }
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   145
    }
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   146
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   147
    /**
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   148
     * Zero a chunk of memory with STP instructions.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   149
     *
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   150
     * @param masm the AArch64 macro assembler.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   151
     * @param base base an 8-byte aligned address of the memory chunk to be zeroed.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   152
     * @param size size of the memory chunk to be zeroed, in bytes, must be multiple of 8.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   153
     */
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   154
    private static void emitZeroMemoryWithStp(AArch64MacroAssembler masm, Register base, Register size) {
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   155
        Label loop = new Label();
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   156
        Label tail = new Label();
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   157
        Label done = new Label();
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   158
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   159
        // Jump to DONE if size is zero.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   160
        masm.cbz(64, size, done);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   161
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   162
        // Is base address already 16-byte aligned? Jump to LDP loop if so.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   163
        masm.tbz(base, 3, loop);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   164
        masm.sub(64, size, size, 8);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   165
        masm.str(64, zr, AArch64Address.createPostIndexedImmediateAddress(base, 8));
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   166
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   167
        // The STP loop that zeros 16 bytes in each iteration.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   168
        masm.bind(loop);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   169
        masm.subs(64, size, size, 16);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   170
        masm.branchConditionally(AArch64Assembler.ConditionFlag.LT, tail);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   171
        masm.stp(64, zr, zr, AArch64Address.createPostIndexedImmediateAddress(base, 2));
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   172
        masm.jmp(loop);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   173
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   174
        // We may need to zero the tail 8 bytes of the memory chunk.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   175
        masm.bind(tail);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   176
        masm.adds(64, size, size, 16);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   177
        masm.branchConditionally(AArch64Assembler.ConditionFlag.EQ, done);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   178
        masm.str(64, zr, AArch64Address.createPostIndexedImmediateAddress(base, 8));
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   179
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   180
        // Done.
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   181
        masm.bind(done);
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   182
    }
6df94ce3ab2f 8229201: Update Graal
dlong
parents:
diff changeset
   183
}