< prev index next >

test/hotspot/jtreg/compiler/floatingpoint/TestFloatJNIArgs.java

Print this page
rev 51081 : 8207838: aarch64: fix the order in which float registers are restored in restore_args
Summary: fix the order in which float registers are restored in restore_args for aarch64
Reviewed-by: aph
Contributed-by: guoge1@huawei.com

*** 1,7 **** /* ! * Copyright (c) 2015, 2016 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2015, 2018 SAP SE. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 25,34 **** --- 25,36 ---- * @bug 8139258 8165673 * @summary Regression test for passing float args to a jni function. * * * @run main/othervm/native -Xint compiler.floatingpoint.TestFloatJNIArgs + * @run main/othervm/native -XX:+TieredCompilation compiler.floatingpoint.TestFloatJNIArgs + * @run main/othervm/native -XX:-TieredCompilation compiler.floatingpoint.TestFloatJNIArgs * @run main/othervm/native -XX:+TieredCompilation -Xcomp compiler.floatingpoint.TestFloatJNIArgs * @run main/othervm/native -XX:-TieredCompilation -Xcomp compiler.floatingpoint.TestFloatJNIArgs */ package compiler.floatingpoint;
*** 40,49 **** --- 42,53 ---- } catch (UnsatisfiedLinkError e) { System.out.println("could not load native lib: " + e); } } + private static final int numberOfThreads = 8; + public static native float add15floats( float f1, float f2, float f3, float f4, float f5, float f6, float f7, float f8, float f9, float f10, float f11, float f12, float f13, float f14, float f15);
*** 63,72 **** --- 67,84 ---- double d1, double d2, double d3, double d4, double d5, double d6, double d7, double d8, double d9, double d10, double d11, double d12, double d13, double d14, double d15); + public static synchronized native float add5floats( + float f1, float f2, float f3, float f4, + float f5, float f6, float f7, float f8, int a9, int a10); + + public static synchronized native double add5doubles( + double f1, double f2, double f3, double f4, + double f5, double f6, double f7, double f8, int a9, int a10); + static void test() throws Exception { float sum = TestFloatJNIArgs.add15floats(1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f); if (sum != 15.0f) { throw new Error("Passed 15 times 1.0f to jni function which didn't add them properly: " + sum);
*** 86,95 **** --- 98,139 ---- double dsum = TestFloatJNIArgs.add15doubles(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0); if (dsum != 15.0) { throw new Error("Passed 15 times 1.0 to jni function which didn't add them properly: " + dsum); } + + Thread[] threads = new Thread[numberOfThreads]; + + for (int i = 0; i < numberOfThreads; i++) { + threads[i] = new Thread(() -> { + for (int j = 0; j < 10000; j++) { + float f = TestFloatJNIArgs.add5floats(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9, 10); + if (f != 15.0f) { + throw new Error("jni function didn't add first five float args properly: " + f); + } + } + }); + threads[i].start(); + } + for (int i = 0; i < numberOfThreads; i++) { + threads[i].join(); + } + + for (int i = 0; i < numberOfThreads; i++) { + threads[i] = new Thread(() -> { + for (int j = 0; j < 10000; j++) { + double d = TestFloatJNIArgs.add5doubles(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9, 10); + if (d != 15.0) { + throw new Error("jni function didn't add first five double args properly: " + d); + } + } + }); + threads[i].start(); + } + for (int i = 0; i < numberOfThreads; i++) { + threads[i].join(); + } } public static void main(String[] args) throws Exception { for (int i = 0; i < 200; ++i) { test();
< prev index next >