The Java code below returns unpredictable results when ran on a Cortex-A53 and specifically on Xperia XA devices.
The first iterations print the correct values:
[24, 42, 61, 45, 29, 46, 35, 36, 48, 47, 20, 64, 45, 15, 37, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70]
and after some repetitions it prints:
[24, 61, 29, 35, 48, 20, 45, 37, 1886962617, 41137, 6952, 58489, 6151, 55208, 154, 57100, 20418, 57100, 20418, 57100, 20418, 57100, 20418, 57100, 20418, 57100, 20418, 57100, 20418, 57100, 20418]
If I use float or double or int instead of long, the results are still wrong but different:
[24.0, 61.0, 29.0, 35.0, 48.0, 20.0, 45.0, 37.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, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
On other devices it runs as expected. Is this a problem of JVM or caused by a CPU errata?
public static void runTest() {
    long[] t = new long[]{ 23,41, 60, 44, 28, 45, 34, 35, 47, 46, 19, 63, 44, 14, 36, 69};
    for(int i = 0; i < 40; i++) {
        long[] output = calculate(t);
        Log.e("TEST", Arrays.toString(output));
    }
}
private static long[] calculate(long[] input) {
    long[] result = new long[31];
    for (int i = 0; i < 16; i ++) {
        for (int j = 0; j < 16; j++) {
            result[i + j] = input[i] + 1;
        }
    }
    return result;
}
If I move the code from calculate inside the runTest's for-loop, it runs correctly. Also, if I read the input values inside calculate it works.
So, what is the cause of this issue and where should I leave my feedback to get this resolved?
