< prev index next >

test/hotspot/jtreg/compiler/valhalla/valuetypes/TestCallingConventionC1.java

Print this page

*** 1968,1973 **** --- 1968,2023 ---- int result = test99(pointField1, pointField2); int n = test99_helper(pointField1, pointField2); Asserts.assertEQ(result, n); } } + + + // C2->C1 invokestatic, packing causes stack growth (1 extra stack word). + // Make sure stack frame is set up properly for GC. + @Test(compLevel = C2) + public float test100(FloatPoint fp1, FloatPoint fp2, RefPoint rp, int a1, int a2, int a3, int a4) { + return test100_helper(fp1, fp2, rp, a1, a2, a3, a4); + } + + @DontInline + @ForceCompile(compLevel = C1) + private static float test100_helper(FloatPoint fp1, FloatPoint fp2, RefPoint rp, int a1, int a2, int a3, int a4) { + // On x64: + // Scalarized entry -- all parameters are passed in registers + // xmm0 = fp1.x + // xmm1 = fp1.y + // xmm2 = fp2.x + // xmm3 = fp2.y + // rsi = rp.x (oop) + // rdx = rp.y (oop) + // cx = a1 + // r8 = a2 + // r9 = a3 + // di = a4 + // Non-scalarized entry -- a6 is passed on stack[0] + // rsi = fp1 + // rdx = fp2 + // rcx = rp + // r8 = a1 + // r9 = a2 + // di = a3 + // [sp + ??] = a4 + return fp1.x + fp1.y + fp2.x + fp2.y + rp.x.n + rp.y.n + a1 + a2 + a3 + a4; + } + + @DontCompile + public void test100_verifier(boolean warmup) { + int count = warmup ? 1 : 4; + for (int i=0; i<count; i++) { + FloatPoint fp1 = new FloatPoint(i+0, i+11); + FloatPoint fp2 = new FloatPoint(i+222, i+3333); + RefPoint rp = new RefPoint(i+44444, i+555555); + float result; + try (ForceGCMarker m = ForceGCMarker.mark(warmup)) { + result = test100(fp1, fp2, rp, 1, 2, 3, 4); + } + float n = test100_helper(fp1, fp2, rp, 1, 2, 3, 4); + Asserts.assertEQ(result, n); + } + } }
< prev index next >