test/mips64/11080/TestFloatSyncJNIArgs.java

Mon, 25 Nov 2019 15:36:48 +0800

author
huangjia
date
Mon, 25 Nov 2019 15:36:48 +0800
changeset 9758
122547cfa3c8
permissions
-rw-r--r--

#11080 Backport testcase of JDK-8207838 compiler/floatingpoint/TestFloatSyncJNIArgs.java
Reviewed-by: aoqi
Contributed-by: guoge1@huawei.com, huangjia

huangjia@9758 1 /*
huangjia@9758 2 * Copyright (c) 2015, 2019, SAP SE. All rights reserved.
huangjia@9758 3 * Copyright (c) 2018, 2019, Red Hat, Inc. All rights reserved.
huangjia@9758 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
huangjia@9758 5 *
huangjia@9758 6 * This code is free software; you can redistribute it and/or modify it
huangjia@9758 7 * under the terms of the GNU General Public License version 2 only, as
huangjia@9758 8 * published by the Free Software Foundation.
huangjia@9758 9 *
huangjia@9758 10 * This code is distributed in the hope that it will be useful, but WITHOUT
huangjia@9758 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
huangjia@9758 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
huangjia@9758 13 * version 2 for more details (a copy is included in the LICENSE file that
huangjia@9758 14 * accompanied this code).
huangjia@9758 15 *
huangjia@9758 16 * You should have received a copy of the GNU General Public License version
huangjia@9758 17 * 2 along with this work; if not, write to the Free Software Foundation,
huangjia@9758 18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
huangjia@9758 19 *
huangjia@9758 20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
huangjia@9758 21 * or visit www.oracle.com if you need additional information or have any
huangjia@9758 22 * questions.
huangjia@9758 23 */
huangjia@9758 24
huangjia@9758 25 public class TestFloatSyncJNIArgs {
huangjia@9758 26 static {
huangjia@9758 27 try {
huangjia@9758 28 System.loadLibrary("TestFloatSyncJNIArgs");
huangjia@9758 29 } catch (UnsatisfiedLinkError e) {
huangjia@9758 30 System.out.println("could not load native lib: " + e);
huangjia@9758 31 }
huangjia@9758 32 }
huangjia@9758 33
huangjia@9758 34 private static final int numberOfThreads = 8;
huangjia@9758 35
huangjia@9758 36 static volatile Error testFailed = null;
huangjia@9758 37
huangjia@9758 38 public synchronized static native float combine15floats(
huangjia@9758 39 float f1, float f2, float f3, float f4,
huangjia@9758 40 float f5, float f6, float f7, float f8,
huangjia@9758 41 float f9, float f10, float f11, float f12,
huangjia@9758 42 float f13, float f14, float f15);
huangjia@9758 43
huangjia@9758 44 public synchronized static native double combine15doubles(
huangjia@9758 45 double d1, double d2, double d3, double d4,
huangjia@9758 46 double d5, double d6, double d7, double d8,
huangjia@9758 47 double d9, double d10, double d11, double d12,
huangjia@9758 48 double d13, double d14, double d15);
huangjia@9758 49
huangjia@9758 50 static void test() throws Exception {
huangjia@9758 51 Thread[] threads = new Thread[numberOfThreads];
huangjia@9758 52
huangjia@9758 53 for (int i = 0; i < numberOfThreads; i++) {
huangjia@9758 54 threads[i] = new Thread(() -> {
huangjia@9758 55 for (int j = 0; j < 10000; j++) {
huangjia@9758 56 float f = combine15floats(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f,
huangjia@9758 57 9, 10, 11, 12, 13, 14, 15);
huangjia@9758 58 if (f != 81720.0f) {
huangjia@9758 59 testFailed = new Error("jni function didn't combine 15 float args properly: " + f);
huangjia@9758 60 throw testFailed;
huangjia@9758 61 }
huangjia@9758 62 }
huangjia@9758 63 });
huangjia@9758 64 }
huangjia@9758 65 for (int i = 0; i < numberOfThreads; i++) {
huangjia@9758 66 threads[i].start();
huangjia@9758 67 }
huangjia@9758 68 for (int i = 0; i < numberOfThreads; i++) {
huangjia@9758 69 threads[i].join();
huangjia@9758 70 }
huangjia@9758 71 if (testFailed != null) {
huangjia@9758 72 throw testFailed;
huangjia@9758 73 }
huangjia@9758 74
huangjia@9758 75 for (int i = 0; i < numberOfThreads; i++) {
huangjia@9758 76 threads[i] = new Thread(() -> {
huangjia@9758 77 for (int j = 0; j < 10000; j++) {
huangjia@9758 78 double d = combine15doubles(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0,
huangjia@9758 79 9, 10, 11, 12, 13, 14, 15);
huangjia@9758 80 if (d != 81720.0) {
huangjia@9758 81 testFailed = new Error("jni function didn't combine 15 double args properly: " + d);
huangjia@9758 82 throw testFailed;
huangjia@9758 83 }
huangjia@9758 84 }
huangjia@9758 85 });
huangjia@9758 86 }
huangjia@9758 87 for (int i = 0; i < numberOfThreads; i++) {
huangjia@9758 88 threads[i].start();
huangjia@9758 89 }
huangjia@9758 90 for (int i = 0; i < numberOfThreads; i++) {
huangjia@9758 91 threads[i].join();
huangjia@9758 92 }
huangjia@9758 93 if (testFailed != null) {
huangjia@9758 94 throw testFailed;
huangjia@9758 95 }
huangjia@9758 96 }
huangjia@9758 97
huangjia@9758 98 public static void main(String[] args) throws Exception {
huangjia@9758 99 for (int i = 0; i < 200; ++i) {
huangjia@9758 100 test();
huangjia@9758 101 }
huangjia@9758 102 }
huangjia@9758 103 }

mercurial