summaryrefslogtreecommitdiff
path: root/test/178-app-image-native-method/src/Main.java
diff options
context:
space:
mode:
Diffstat (limited to 'test/178-app-image-native-method/src/Main.java')
-rw-r--r--test/178-app-image-native-method/src/Main.java216
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 {