/*
 * Copyright (c) 2015, 2015, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */
package org.graalvm.compiler.jtt.loop;

import org.junit.Test;

import org.graalvm.compiler.jtt.JTTTest;

public class LoopSpilling extends JTTTest {

    private static final int ITERATION = 64;

    
Modification of sun.security.provider.SHA2.implCompress().
/** * Modification of sun.security.provider.SHA2.implCompress(). */
void test(int[] state) { int a1 = state[0]; int b1 = state[1]; int c1 = state[2]; int d1 = state[3]; int e1 = state[4]; int f1 = state[5]; int g1 = state[6]; int h1 = state[7]; // 2nd int a2 = state[8]; int b2 = state[9]; int c2 = state[10]; int d2 = state[11]; int e2 = state[12]; int f2 = state[13]; int g2 = state[14]; int h2 = state[15]; for (int i = 0; i < ITERATION; i++) { h1 = g1; g1 = f1; f1 = e1; e1 = d1; d1 = c1; c1 = b1; b1 = a1; a1 = h1; // 2nd h2 = g2; g2 = f2; f2 = e2; e2 = d2; d2 = c2; c2 = b2; b2 = a2; a2 = h2; } state[0] += a1; state[1] += b1; state[2] += c1; state[3] += d1; state[4] += e1; state[5] += f1; state[6] += g1; state[7] += h1; // 2nd state[8] += a2; state[9] += b2; state[10] += c2; state[11] += d2; state[12] += e2; state[13] += f2; state[14] += g2; state[15] += h2; } private static final int[] INITIAL_HASHES = {0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4, 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19}; @Test public void run0() throws Throwable { runTest("test", supply(() -> INITIAL_HASHES.clone())); } }