diff options
Diffstat (limited to 'test/178-app-image-native-method/src/Main.java')
-rw-r--r-- | test/178-app-image-native-method/src/Main.java | 216 |
1 files changed, 215 insertions, 1 deletions
diff --git a/test/178-app-image-native-method/src/Main.java b/test/178-app-image-native-method/src/Main.java index 877efa4be4..760f066caa 100644 --- a/test/178-app-image-native-method/src/Main.java +++ b/test/178-app-image-native-method/src/Main.java @@ -201,7 +201,7 @@ public class Main { // for i in {0..84}; \ // do echo " 0xf00000000L + $((i*3))L,"; \ // echo " $((i*3+2)),"; \ - // done + // done 0xf00000000L + 0L, 2, 0xf00000000L + 3L, @@ -372,8 +372,206 @@ public class Main { 251, 0xf00000000L + 252L, 254)); + assertEquals(42, CriticalSignatures.nativeDFDFDFDFDFIJ( + 1.0, 2.0f, 3.0, 4.0f, 5.0, 6.0f, 7.0, 8.0f, 9.0, 10.0f, 11, 12L)); + // Exercise spilling args from registers on riscv64. + double double9_0 = $noinline$returnDoubleArg(9.0); + float float10_0 = $noinline$returnFloatArg(10.0f); + int int11 = $noinline$returnIntArg(11); + long long12 = $noinline$returnLongArg(12); + assertEquals(42, CriticalSignatures.nativeDFDFDFDFDFIJ( + 1.0, 2.0f, 3.0, 4.0f, 5.0, 6.0f, 7.0, 8.0f, double9_0, float10_0, int11, long12)); + // Split out the last test to keep this method under the large method threshold. + $noinline$opt$testCriticalSignaturesStackMoves(); } + public static void $noinline$opt$testCriticalSignaturesStackMoves() { + // Exercise moving non-const args to stack by having more non-const args than registers. + // At least on riscv64, where we need to properly sign-extend narrow (int) arguments + // passed on stack, this covers both register and stack source locations. + assertEquals(42, CriticalSignatures.nativeFullArgs( + // Generated by script (then modified to close argument list): + // for i in {0..84}; \ + // do echo " \$noinline\$returnLongArg(0xf00000000L + $((i*3))L),"; \ + // echo " \$noinline\$returnIntArg($((i*3+2))),"; \ + // done + $noinline$returnLongArg(0xf00000000L + 0L), + $noinline$returnIntArg(2), + $noinline$returnLongArg(0xf00000000L + 3L), + $noinline$returnIntArg(5), + $noinline$returnLongArg(0xf00000000L + 6L), + $noinline$returnIntArg(8), + $noinline$returnLongArg(0xf00000000L + 9L), + $noinline$returnIntArg(11), + $noinline$returnLongArg(0xf00000000L + 12L), + $noinline$returnIntArg(14), + $noinline$returnLongArg(0xf00000000L + 15L), + $noinline$returnIntArg(17), + $noinline$returnLongArg(0xf00000000L + 18L), + $noinline$returnIntArg(20), + $noinline$returnLongArg(0xf00000000L + 21L), + $noinline$returnIntArg(23), + $noinline$returnLongArg(0xf00000000L + 24L), + $noinline$returnIntArg(26), + $noinline$returnLongArg(0xf00000000L + 27L), + $noinline$returnIntArg(29), + $noinline$returnLongArg(0xf00000000L + 30L), + $noinline$returnIntArg(32), + $noinline$returnLongArg(0xf00000000L + 33L), + $noinline$returnIntArg(35), + $noinline$returnLongArg(0xf00000000L + 36L), + $noinline$returnIntArg(38), + $noinline$returnLongArg(0xf00000000L + 39L), + $noinline$returnIntArg(41), + $noinline$returnLongArg(0xf00000000L + 42L), + $noinline$returnIntArg(44), + $noinline$returnLongArg(0xf00000000L + 45L), + $noinline$returnIntArg(47), + $noinline$returnLongArg(0xf00000000L + 48L), + $noinline$returnIntArg(50), + $noinline$returnLongArg(0xf00000000L + 51L), + $noinline$returnIntArg(53), + $noinline$returnLongArg(0xf00000000L + 54L), + $noinline$returnIntArg(56), + $noinline$returnLongArg(0xf00000000L + 57L), + $noinline$returnIntArg(59), + $noinline$returnLongArg(0xf00000000L + 60L), + $noinline$returnIntArg(62), + $noinline$returnLongArg(0xf00000000L + 63L), + $noinline$returnIntArg(65), + $noinline$returnLongArg(0xf00000000L + 66L), + $noinline$returnIntArg(68), + $noinline$returnLongArg(0xf00000000L + 69L), + $noinline$returnIntArg(71), + $noinline$returnLongArg(0xf00000000L + 72L), + $noinline$returnIntArg(74), + $noinline$returnLongArg(0xf00000000L + 75L), + $noinline$returnIntArg(77), + $noinline$returnLongArg(0xf00000000L + 78L), + $noinline$returnIntArg(80), + $noinline$returnLongArg(0xf00000000L + 81L), + $noinline$returnIntArg(83), + $noinline$returnLongArg(0xf00000000L + 84L), + $noinline$returnIntArg(86), + $noinline$returnLongArg(0xf00000000L + 87L), + $noinline$returnIntArg(89), + $noinline$returnLongArg(0xf00000000L + 90L), + $noinline$returnIntArg(92), + $noinline$returnLongArg(0xf00000000L + 93L), + $noinline$returnIntArg(95), + $noinline$returnLongArg(0xf00000000L + 96L), + $noinline$returnIntArg(98), + $noinline$returnLongArg(0xf00000000L + 99L), + $noinline$returnIntArg(101), + $noinline$returnLongArg(0xf00000000L + 102L), + $noinline$returnIntArg(104), + $noinline$returnLongArg(0xf00000000L + 105L), + $noinline$returnIntArg(107), + $noinline$returnLongArg(0xf00000000L + 108L), + $noinline$returnIntArg(110), + $noinline$returnLongArg(0xf00000000L + 111L), + $noinline$returnIntArg(113), + $noinline$returnLongArg(0xf00000000L + 114L), + $noinline$returnIntArg(116), + $noinline$returnLongArg(0xf00000000L + 117L), + $noinline$returnIntArg(119), + $noinline$returnLongArg(0xf00000000L + 120L), + $noinline$returnIntArg(122), + $noinline$returnLongArg(0xf00000000L + 123L), + $noinline$returnIntArg(125), + $noinline$returnLongArg(0xf00000000L + 126L), + $noinline$returnIntArg(128), + $noinline$returnLongArg(0xf00000000L + 129L), + $noinline$returnIntArg(131), + $noinline$returnLongArg(0xf00000000L + 132L), + $noinline$returnIntArg(134), + $noinline$returnLongArg(0xf00000000L + 135L), + $noinline$returnIntArg(137), + $noinline$returnLongArg(0xf00000000L + 138L), + $noinline$returnIntArg(140), + $noinline$returnLongArg(0xf00000000L + 141L), + $noinline$returnIntArg(143), + $noinline$returnLongArg(0xf00000000L + 144L), + $noinline$returnIntArg(146), + $noinline$returnLongArg(0xf00000000L + 147L), + $noinline$returnIntArg(149), + $noinline$returnLongArg(0xf00000000L + 150L), + $noinline$returnIntArg(152), + $noinline$returnLongArg(0xf00000000L + 153L), + $noinline$returnIntArg(155), + $noinline$returnLongArg(0xf00000000L + 156L), + $noinline$returnIntArg(158), + $noinline$returnLongArg(0xf00000000L + 159L), + $noinline$returnIntArg(161), + $noinline$returnLongArg(0xf00000000L + 162L), + $noinline$returnIntArg(164), + $noinline$returnLongArg(0xf00000000L + 165L), + $noinline$returnIntArg(167), + $noinline$returnLongArg(0xf00000000L + 168L), + $noinline$returnIntArg(170), + $noinline$returnLongArg(0xf00000000L + 171L), + $noinline$returnIntArg(173), + $noinline$returnLongArg(0xf00000000L + 174L), + $noinline$returnIntArg(176), + $noinline$returnLongArg(0xf00000000L + 177L), + $noinline$returnIntArg(179), + $noinline$returnLongArg(0xf00000000L + 180L), + $noinline$returnIntArg(182), + $noinline$returnLongArg(0xf00000000L + 183L), + $noinline$returnIntArg(185), + $noinline$returnLongArg(0xf00000000L + 186L), + $noinline$returnIntArg(188), + $noinline$returnLongArg(0xf00000000L + 189L), + $noinline$returnIntArg(191), + $noinline$returnLongArg(0xf00000000L + 192L), + $noinline$returnIntArg(194), + $noinline$returnLongArg(0xf00000000L + 195L), + $noinline$returnIntArg(197), + $noinline$returnLongArg(0xf00000000L + 198L), + $noinline$returnIntArg(200), + $noinline$returnLongArg(0xf00000000L + 201L), + $noinline$returnIntArg(203), + $noinline$returnLongArg(0xf00000000L + 204L), + $noinline$returnIntArg(206), + $noinline$returnLongArg(0xf00000000L + 207L), + $noinline$returnIntArg(209), + $noinline$returnLongArg(0xf00000000L + 210L), + $noinline$returnIntArg(212), + $noinline$returnLongArg(0xf00000000L + 213L), + $noinline$returnIntArg(215), + $noinline$returnLongArg(0xf00000000L + 216L), + $noinline$returnIntArg(218), + $noinline$returnLongArg(0xf00000000L + 219L), + $noinline$returnIntArg(221), + $noinline$returnLongArg(0xf00000000L + 222L), + $noinline$returnIntArg(224), + $noinline$returnLongArg(0xf00000000L + 225L), + $noinline$returnIntArg(227), + $noinline$returnLongArg(0xf00000000L + 228L), + $noinline$returnIntArg(230), + $noinline$returnLongArg(0xf00000000L + 231L), + $noinline$returnIntArg(233), + $noinline$returnLongArg(0xf00000000L + 234L), + $noinline$returnIntArg(236), + $noinline$returnLongArg(0xf00000000L + 237L), + $noinline$returnIntArg(239), + $noinline$returnLongArg(0xf00000000L + 240L), + $noinline$returnIntArg(242), + $noinline$returnLongArg(0xf00000000L + 243L), + $noinline$returnIntArg(245), + $noinline$returnLongArg(0xf00000000L + 246L), + $noinline$returnIntArg(248), + $noinline$returnLongArg(0xf00000000L + 249L), + $noinline$returnIntArg(251), + $noinline$returnLongArg(0xf00000000L + 252L), + $noinline$returnIntArg(254))); + } + + static double $noinline$returnDoubleArg(double d) { return d; } + static float $noinline$returnFloatArg(float f) { return f; } + static int $noinline$returnIntArg(int i) { return i; } + static long $noinline$returnLongArg(long l) { return l; } + static void $noinline$regressionTestB181736463() { // Regression test for bug 181736463 (GenericJNI crashing when class initializer throws). try { @@ -820,6 +1018,22 @@ class CriticalSignatures { int i251, long l252, int i254); + + // This signature exercises passing FP args in core registers on riscv64. + @CriticalNative + public static native int nativeDFDFDFDFDFIJ( + double d1, + float f1, + double d2, + float f2, + double d3, + float f3, + double d4, + float f4, + double d5, + float f5, + int i, + long j); } class CriticalClinitCheck { |