test/hotspot/jtreg/compiler/codegen/TestSignedMultiplyLong.java
author pli
Wed, 30 Oct 2019 09:17:36 +0800
changeset 58852 674131501e98
permissions -rw-r--r--
8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl Reviewed-by: aph
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
58852
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
     1
/*
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
     2
 * Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
     3
 * Copyright (c) 2019, Arm Limited. All rights reserved.
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
     4
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
     5
 *
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
     6
 * This code is free software; you can redistribute it and/or modify it
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
     7
 * under the terms of the GNU General Public License version 2 only, as
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
     8
 * published by the Free Software Foundation.
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
     9
 *
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    10
 * This code is distributed in the hope that it will be useful, but WITHOUT
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    11
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    12
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    13
 * version 2 for more details (a copy is included in the LICENSE file that
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    14
 * accompanied this code).
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    15
 *
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    16
 * You should have received a copy of the GNU General Public License version
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    17
 * 2 along with this work; if not, write to the Free Software Foundation,
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    18
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    19
 *
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    20
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    21
 * or visit www.oracle.com if you need additional information or have any
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    22
 * questions.
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    23
 */
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    24
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    25
/*
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    26
 * @test
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    27
 * @bug 8232591
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    28
 * @summary Test some cases of combined signed multiply long operation
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    29
 * @library /test/lib
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    30
 * @run main/othervm -XX:+UnlockDiagnosticVMOptions
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    31
 *                   -Xcomp -XX:-TieredCompilation -XX:-Inline
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    32
 *                   compiler.codegen.TestSignedMultiplyLong
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    33
 */
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    34
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    35
package compiler.codegen;
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    36
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    37
import jdk.test.lib.Asserts;
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    38
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    39
public class TestSignedMultiplyLong {
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    40
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    41
    private static final int   minInt = Integer.MIN_VALUE; // -2147483648
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    42
    private static final int   maxInt = Integer.MAX_VALUE; //  2147483647
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    43
    private static final long minLong =    Long.MIN_VALUE; // -9223372036854775808
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    44
    private static final long maxLong =    Long.MAX_VALUE; //  9223372036854775807
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    45
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    46
    private static Case[] testCases = {
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    47
        // case:     a       b       c         resSmaddl          resSmsubl          resSmnegl
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    48
        new Case(  1000,   -200, 500000L,           300000L,           700000L,           200000L),
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    49
        new Case(maxInt,      1,      1L, (long)maxInt + 1L, (long)minInt + 2L,  (long)minInt + 1L),
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    50
        new Case(minInt,     -1,      1L, (long)maxInt + 2L, (long)minInt + 1L,       (long)minInt),
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    51
        new Case(   -10, minInt,      1L,      21474836481L,     -21474836479L,      -21474836480L),
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    52
        new Case(     1,      1, maxLong,           minLong,      maxLong - 1L,                -1L),
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    53
        new Case(     1,     -1, minLong,           maxLong,      minLong + 1L,                 1L),
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    54
        new Case(    -1,     -1, 0xffffffffeL << 32, 0xfffffffe00000001L, 0xfffffffdffffffffL, -1L)
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    55
    };
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    56
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    57
    private static class Case {
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    58
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    59
        private int a;
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    60
        private int b;
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    61
        private long c;
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    62
        private long resSmaddl;
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    63
        private long resSmsubl;
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    64
        private long resSmnegl;
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    65
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    66
        public Case(int a, int b, long c, long resSmaddl, long resSmsubl, long resSmnegl) {
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    67
            this.a = a;
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    68
            this.b = b;
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    69
            this.c = c;
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    70
            this.resSmaddl = resSmaddl;
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    71
            this.resSmsubl = resSmsubl;
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    72
            this.resSmnegl = resSmnegl;
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    73
        }
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    74
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    75
        public void verify() {
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    76
            Asserts.assertEQ(smaddl(a, b, c), resSmaddl,
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    77
                "Unexpected result from signed multiply-add long.");
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    78
            Asserts.assertEQ(smsubl(a, b, c), resSmsubl,
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    79
                "Unexpected result from signed multiply-sub long.");
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    80
            Asserts.assertEQ(smnegl(a, b), resSmnegl,
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    81
                "Unexpected result from signed multiply-neg long.");
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    82
        }
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    83
    }
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    84
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    85
    private static long smaddl(int a, int b, long c) {
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    86
        return c + a * (long) b;
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    87
    }
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    88
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    89
    private static long smsubl(int a, int b, long c) {
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    90
        return c - a * (long) b;
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    91
    }
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    92
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    93
    private static long smnegl(int a, int b) {
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    94
        return a * (-(long) b);
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    95
    }
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    96
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    97
    public static void main(String[] args) {
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    98
        for (Case c : testCases) {
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
    99
            c.verify();
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
   100
        }
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
   101
    }
674131501e98 8232591: AArch64: Add missing match rules for smaddl, smsubl and smnegl
pli
parents:
diff changeset
   102
}