/* Regression test: triggered an SSA renaming bug. */ staticlong divideLongByBillion(long a) { long quot; long rem;
if (a >= 0) { long bLong = 1000000000L;
quot = (a / bLong);
rem = (a % bLong);
} else { /* *Makethedividendpositiveshiftingitrightby1bitthenget *thequotientanremainderandcorrectthemproperly
*/ long aPos = a >>> 1; long bPos = 1000000000L >>> 1;
quot = aPos / bPos;
rem = aPos % bPos; // double the remainder and add 1 if 'a' is odd
rem = (rem << 1) + (a & 1);
} return ((rem << 32) | (quot & 0xFFFFFFFFL));
}
staticint instanceTest(int x) {
IntMathBase a = new IntMathBase();
Main b = new Main();
if (!(nullinstanceof IntMathBase)) {
x = x + 42;
}
if (a instanceof IntMathBase) {
x = x * 2;
}
if (a instanceof Main) {
x = x + 13;
}
if (b instanceof IntMathBase) {
x = x -1;
}
if (b instanceof Main) {
x = x + 1333;
} return x;
}
int tryThing() { int val = super.tryThing(); return val + 10;
}
staticint superTest(int x) {
Main instance = new Main();
Main base = instance; int val1 = instance.tryThing(); int val2 = base.tryThing(); return val1 + val2 + x;
}
staticint constClassTest(int x) { Class<?> c = String.class; if (c != null) { return x * 2;
} else { return x;
}
}
if (mBytes[0] != 0x11) return20; if (mBytes[1] != 0x22) return21; if (mBytes[2] != 0x33) return22; if (mBytes[3] != 0x44) return23; if (mBytes[4] != 0x88) return24; if (mBytes[5] != 0x99) return25; if (mBytes[6] != 0xaa) return26; if (mBytes[7] != 0xbb) return27;
/* this seems to generate "op-int" instructions */
results[0] = x + y;
results[1] = x - y;
results[2] = x * y;
results[3] = x * x;
results[4] = x / y;
results[5] = x % -y;
results[6] = x & y;
results[7] = x | y;
results[8] = x ^ y;
/* this seems to generate "op-int/2addr" instructions */
results[9] = x + ((((((((x + y) - y) * y) / y) % y) & y) | y) ^ y);
/* check this edge case while we're here (div-int/2addr) */ int minInt = -2147483648; int negOne = -results[5]; int plusOne = 1; int result = (((minInt + plusOne) - plusOne) / negOne) / negOne; int shouldBeZero = minInt % negOne;
if (result != minInt) { return1;}; if (results[0] != 69997) { return2;}; if (results[1] != 70003) { return3;}; if (results[2] != -210000) { return4;}; if (results[3] != 605032704) { return5;}; if (results[4] != -23333) { return6;}; if (results[5] != 1) { return7;}; if (results[6] != 70000) { return8;}; if (results[7] != -3) { return9;}; if (results[8] != -70003) { return10;}; if (results[9] != 70000) { return11;}; if (shouldBeZero != 0) { return12;};
/* try to generate op-int/lit16" instructions */
results[0] = x + 1000;
results[1] = 1000 - x;
results[2] = x * 1000;
results[3] = x / 1000;
results[4] = x % 1000;
results[5] = x & 1000;
results[6] = x | -1000;
results[7] = x ^ -1000; /* use an 16-bit constant that has its MSB (bit-15) set */
results[8] = x / 32769;
results[9] = x / -32769;
if (results[0] != 78777) { return1; } if (results[1] != -76777) { return2; } if (results[2] != 77777000) { return3; } if (results[3] != 77) { return4; } if (results[4] != 777) { return5; } if (results[5] != 960) { return6; } if (results[6] != -39) { return7; } if (results[7] != -76855) { return8; } if (results[8] != 2) { return9; } if (results[9] != -2) { return10; } return0;
}
/* this seems to generate "op-long" instructions */
results[0] = x + y;
results[1] = x - y;
results[2] = x * y;
results[3] = x * x;
results[4] = x / y;
results[5] = x % -y;
results[6] = x & y;
results[7] = x | y;
results[8] = x ^ y; /* this seems to generate "op-long/2addr" instructions */
results[9] = x + ((((((((x + y) - y) * y) / y) % y) & y) | y) ^ y); /* check this edge case while we're here (div-long/2addr) */ long minLong = -9223372036854775808L; long negOne = -results[5]; long plusOne = 1; long result = (((minLong + plusOne) - plusOne) / negOne) / negOne; if (result != minLong) { return1; } if (results[0] != 69999999997L) { return2; } if (results[1] != 70000000003L) { return3; } if (results[2] != -210000000000L) { return4; } if (results[3] != -6833923606740729856L) { return5; } // overflow if (results[4] != -23333333333L) { return6; } if (results[5] != 1) { return7; } if (results[6] != 70000000000L) { return8; } if (results[7] != -3) { return9; } if (results[8] != -70000000003L) { return10; } if (results[9] != 70000000000L) { return11; } if (results.length != 10) { return12; } return0;
}
/* *Shiftsomedata.(value=0xd5aa96deff00aa01,dist=16)
*/ staticlong longShiftTest(long value, int dist) { long results[] = newlong[4];
results[0] = value << dist;
results[1] = value >> dist;
results[2] = value >>> dist;
results[3] = (((value << dist) >> dist) >>> dist) << dist; if (results[0] != 0x96deff00aa010000L) { return results[0]; } if (results[1] != 0xffffd5aa96deff00L) { return results[1]; } if (results[2] != 0x0000d5aa96deff00L) { return results[2]; } if (results[3] != 0xffff96deff000000L) { return results[3]; } if (results.length != 4) { return5; }
return results[0]; // test return-long
}
staticint switchTest(int a) { int res = 1234;
switch (a) { case -1: res = 1; return res; case0: res = 2; return res; case1: /*correct*/ break; case2: res = 3; return res; case3: res = 4; return res; case4: res = 5; return res; default: res = 6; return res;
} switch (a) { case3: res = 7; return res; case4: res = 8; return res; default: /*correct*/ break;
}
a = 0x12345678;
switch (a) { case0x12345678: /*correct*/ break; case0x12345679: res = 9; return res; default: res = 1; return res;
} switch (a) { case57: res = 10; return res; case -6: res = 11; return res; case0x12345678: /*correct*/ break; case22: res = 12; return res; case3: res = 13; return res; default: res = 14; return res;
} switch (a) { case -6: res = 15; return res; case3: res = 16; return res; default: /*correct*/ break;
}
a = -5; switch (a) { case12: res = 17; return res; case -5: /*correct*/ break; case0: res = 18; return res; default: res = 19; return res;
}
switch (a) { default: /*correct*/ break;
} return res;
} /* *Testtheintegercomparisonsinvariousways.
*/ staticint testIntCompare(int minus, int plus, int plus2, int zero) { int res = 1111;
if (minus > plus) return1; if (minus >= plus) return2; if (plus < minus) return3; if (plus <= minus) return4; if (plus == minus) return5; if (plus != plus2) return6;
/* try a branch-taken */ if (plus != minus) {
res = res;
} else { return7;
}
if (minus > 0) return8; if (minus >= 0) return9; if (plus < 0) return10; if (plus <= 0) return11; if (plus == 0) return12; if (zero != 0) return13;
if (zero == 0) {
res = res;
} else { return14;
} return res;
}
/* *Testcmp-long. * *minus=-5,alsoMinus=0xFFFFFFFF00000009,plus=4,alsoPlus=8
*/ staticint testLongCompare(long minus, long alsoMinus, long plus, long alsoPlus) { int res = 2222;
if (minus > plus) return2; if (plus < minus) return3; if (plus == minus) return4;
if (plus >= plus+1) return5; if (minus >= minus+1) return6;
/* try a branch-taken */ if (plus != minus) {
res = res;
} else { return7;
}
/* compare when high words are equal but low words differ */ if (plus > alsoPlus) return8; if (alsoPlus < plus) return9; if (alsoPlus == plus) return10;
/* high words are equal, low words have apparently different signs */ if (minus < alsoMinus) // bug! return11; if (alsoMinus > minus) return12; if (alsoMinus == minus) return13;
return res;
}
/* *Testcmpl-floatandcmpg-float.
*/ staticint testFloatCompare(float minus, float plus, float plus2, float nan) { if (minus > plus) return1; if (plus < minus) return2; if (plus == minus) return3; if (plus != plus2) return4;
if (plus <= nan) return5; if (plus >= nan) return6; if (minus <= nan) return7; if (minus >= nan) return8; if (nan >= plus) return9; if (nan <= plus) return10;
if (minus > plus) return1; if (plus < minus) return2; if (plus == minus) return3; if (plus != plus2) return4;
if (plus <= nan) return5; if (plus >= nan) return6; if (minus <= nan) return7; if (minus >= nan) return8; if (nan >= plus) return9; if (nan <= plus) return10;
staticint manyArgs(int a0, long a1, int a2, long a3, int a4, long a5, int a6, int a7, double a8, float a9, double a10, short a11, int a12, char a13, int a14, int a15, byte a16, boolean a17, int a18, int a19, long a20, long a21, int a22, int a23, int a24, int a25, int a26)
{ if (a0 != 0) return0; if (a1 != 1L) return1; if (a2 != 2) return2; if (a3 != 3L) return3; if (a4 != 4) return4; if (a5 != 5L) return5; if (a6 != 6) return6; if (a7 != 7) return7; if (a8 != 8.0) return8; if (a9 != 9.0f) return9; if (a10 != 10.0) return10; if (a11 != (short)11) return11; if (a12 != 12) return12; if (a13 != (char)13) return13; if (a14 != 14) return14; if (a15 != 15) return15; if (a16 != (byte)-16) return16; if (a17 != true) return17; if (a18 != 18) return18; if (a19 != 19) return19; if (a20 != 20L) return20; if (a21 != 21L) return21; if (a22 != 22) return22; if (a23 != 23) return23; if (a24 != 24) return24; if (a25 != 25) return25; if (a26 != 26) return26; return -1;
}
int virtualCall(int a)
{ return a * 2;
}
void setFoo(int a)
{
foo_ = a;
}
int getFoo()
{ return foo_;
}
staticint staticCall(int a)
{
Main foo = new Main(); return foo.virtualCall(a);
}
staticint testIGetPut(int a)
{
Main foo = new Main(99);
Main foo123 = new Main(); int z = foo.getFoo();
z += a;
z += foo123.getFoo();
foo.setFoo(z); return foo.getFoo();
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.