< prev index next >

test/jdk/jdk/incubator/vector/benchmark/src/main/java/benchmark/crypto/Poly1305Bench.java

Print this page
rev 55894 : 8222897: [vector] Renaming of shift, rotate operations. Few other api changes.
Summary: Renaming of shift, rotate operations. Few other api changes.
Reviewed-by: jrose, briangoetz

*** 35,53 **** public class Poly1305Bench { @Param({"16384", "65536"}) private int dataSize; ! private Poly1305Vector poly1305_S128 = makePoly1305(Vector.Shape.S_128_BIT); ! private Poly1305Vector poly1305_S256 = makePoly1305(Vector.Shape.S_256_BIT); ! private Poly1305Vector poly1305_S512 = makePoly1305(Vector.Shape.S_512_BIT); private byte[] in; private byte[] out = new byte[16]; private byte[] key = new byte[32]; ! private static Poly1305Vector makePoly1305(Vector.Shape shape) { Poly1305Vector poly = new Poly1305Vector(shape); runKAT(poly); return poly; } --- 35,53 ---- public class Poly1305Bench { @Param({"16384", "65536"}) private int dataSize; ! private Poly1305Vector poly1305_S128 = makePoly1305(VectorShape.S_128_BIT); ! private Poly1305Vector poly1305_S256 = makePoly1305(VectorShape.S_256_BIT); ! private Poly1305Vector poly1305_S512 = makePoly1305(VectorShape.S_512_BIT); private byte[] in; private byte[] out = new byte[16]; private byte[] key = new byte[32]; ! private static Poly1305Vector makePoly1305(VectorShape shape) { Poly1305Vector poly = new Poly1305Vector(shape); runKAT(poly); return poly; }
*** 76,128 **** private static final int BITS_PER_LIMB = 26; private static final int LIMB_MASK = (1 << BITS_PER_LIMB) - 1; private static final int KEY_LENGTH = 32; private static final int RS_LENGTH = KEY_LENGTH / 2; ! private final Vector.Species<Long> longSpecies; ! private final Vector.Species<Integer> intSpecies; private final int vectorWidth; private final int parBlockCount; ! private final LongVector.Shuffle<Long> inShuffle0; ! private final LongVector.Shuffle<Long> inShuffle1; ! private final IntVector.Mask<Long> inMask; ! public Poly1305Vector(Vector.Shape shape) { ! this.longSpecies = Vector.Species.of(long.class, shape); int intSize = shape.bitSize() / 2; ! Vector.Shape intShape = Vector.Shape.forBitSize(intSize); ! this.intSpecies = Vector.Species.of(int.class, intShape); this.vectorWidth = longSpecies.length(); this.parBlockCount = vectorWidth * 16; this.inShuffle0 = makeInShuffle0(); this.inShuffle1 = makeInShuffle1(); this.inMask = makeInMask(); } ! private LongVector.Shuffle<Long> makeInShuffle0() { int[] indexArr = new int[vectorWidth]; for (int i = 0; i < indexArr.length; i++) { indexArr[i] = (2 * i) % vectorWidth; } ! return LongVector.shuffleFromArray(longSpecies, indexArr, 0); } ! private LongVector.Shuffle<Long> makeInShuffle1() { int[] indexArr = new int[vectorWidth]; for (int i = 0; i < indexArr.length; i++) { indexArr[i] = ((2 * i) % vectorWidth) + 1; } ! return LongVector.shuffleFromArray(longSpecies, indexArr, 0); } ! private LongVector.Mask<Long> makeInMask() { boolean[] maskArr = new boolean[vectorWidth]; for (int i = vectorWidth / 2; i < vectorWidth; i++) { maskArr[i] = true; } ! return LongVector.maskFromArray(longSpecies, maskArr, 0); } private static int[] fromByteArray(byte[] buf) { int[] result = new int[5]; --- 76,128 ---- private static final int BITS_PER_LIMB = 26; private static final int LIMB_MASK = (1 << BITS_PER_LIMB) - 1; private static final int KEY_LENGTH = 32; private static final int RS_LENGTH = KEY_LENGTH / 2; ! private final VectorSpecies<Long> longSpecies; ! private final VectorSpecies<Integer> intSpecies; private final int vectorWidth; private final int parBlockCount; ! private final VectorShuffle<Long> inShuffle0; ! private final VectorShuffle<Long> inShuffle1; ! private final VectorMask<Long> inMask; ! public Poly1305Vector(VectorShape shape) { ! this.longSpecies = VectorSpecies.of(long.class, shape); int intSize = shape.bitSize() / 2; ! VectorShape intShape = VectorShape.forBitSize(intSize); ! this.intSpecies = VectorSpecies.of(int.class, intShape); this.vectorWidth = longSpecies.length(); this.parBlockCount = vectorWidth * 16; this.inShuffle0 = makeInShuffle0(); this.inShuffle1 = makeInShuffle1(); this.inMask = makeInMask(); } ! private VectorShuffle<Long> makeInShuffle0() { int[] indexArr = new int[vectorWidth]; for (int i = 0; i < indexArr.length; i++) { indexArr[i] = (2 * i) % vectorWidth; } ! return VectorShuffle.fromArray(longSpecies, indexArr, 0); } ! private VectorShuffle<Long> makeInShuffle1() { int[] indexArr = new int[vectorWidth]; for (int i = 0; i < indexArr.length; i++) { indexArr[i] = ((2 * i) % vectorWidth) + 1; } ! return VectorShuffle.fromArray(longSpecies, indexArr, 0); } ! private VectorMask<Long> makeInMask() { boolean[] maskArr = new boolean[vectorWidth]; for (int i = vectorWidth / 2; i < vectorWidth; i++) { maskArr[i] = true; } ! return VectorMask.fromArray(longSpecies, maskArr, 0); } private static int[] fromByteArray(byte[] buf) { int[] result = new int[5];
*** 296,313 **** longMsg0.rearrange(longMsg1, inShuffle1, inMask); IntVector a0 = (IntVector) inAlign0.and(LIMB_MASK).cast(intSpecies); IntVector a1 = (IntVector) ! inAlign0.shiftR(26).and(LIMB_MASK).cast(intSpecies); IntVector a2 = (IntVector) ! inAlign0.shiftR(52).and(0xFFF).cast(intSpecies); ! a2 = a2.or(inAlign1.and(0x3FFF).shiftL(12).cast(intSpecies)); IntVector a3 = (IntVector) ! inAlign1.shiftR(14).and(LIMB_MASK).cast(intSpecies); IntVector a4 = (IntVector) ! inAlign1.shiftR(40).and(0xFFFFFF).cast(intSpecies); a4 = a4.or(1 << 24); int numParBlocks = msg.length / parBlockCount - 1; for (int i = 0; i < numParBlocks; i++) { --- 296,313 ---- longMsg0.rearrange(longMsg1, inShuffle1, inMask); IntVector a0 = (IntVector) inAlign0.and(LIMB_MASK).cast(intSpecies); IntVector a1 = (IntVector) ! inAlign0.shiftRight(26).and(LIMB_MASK).cast(intSpecies); IntVector a2 = (IntVector) ! inAlign0.shiftRight(52).and(0xFFF).cast(intSpecies); ! a2 = a2.or(inAlign1.and(0x3FFF).shiftLeft(12).cast(intSpecies)); IntVector a3 = (IntVector) ! inAlign1.shiftRight(14).and(LIMB_MASK).cast(intSpecies); IntVector a4 = (IntVector) ! inAlign1.shiftRight(40).and(0xFFFFFF).cast(intSpecies); a4 = a4.or(1 << 24); int numParBlocks = msg.length / parBlockCount - 1; for (int i = 0; i < numParBlocks; i++) {
*** 347,367 **** .add(a3.cast(longSpecies).mul(rUp1_int.cast(longSpecies))) .add(a4.cast(longSpecies).mul(rUp0_int.cast(longSpecies))); // carry/reduce // Note: this carry/reduce sequence might not be correct ! c4 = c4.add(c3.shiftR(BITS_PER_LIMB)); c3 = c3.and(LIMB_MASK); ! c0 = c0.add(c4.shiftR(BITS_PER_LIMB).mul(5)); c4 = c4.and(LIMB_MASK); ! c1 = c1.add(c0.shiftR(BITS_PER_LIMB)); c0 = c0.and(LIMB_MASK); ! c2 = c2.add(c1.shiftR(BITS_PER_LIMB)); c1 = c1.and(LIMB_MASK); ! c3 = c3.add(c2.shiftR(BITS_PER_LIMB)); c2 = c2.and(LIMB_MASK); ! c4 = c4.add(c3.shiftR(BITS_PER_LIMB)); c3 = c3.and(LIMB_MASK); a0 = (IntVector) c0.cast(intSpecies); a1 = (IntVector) c1.cast(intSpecies); a2 = (IntVector) c2.cast(intSpecies); --- 347,367 ---- .add(a3.cast(longSpecies).mul(rUp1_int.cast(longSpecies))) .add(a4.cast(longSpecies).mul(rUp0_int.cast(longSpecies))); // carry/reduce // Note: this carry/reduce sequence might not be correct ! c4 = c4.add(c3.shiftRight(BITS_PER_LIMB)); c3 = c3.and(LIMB_MASK); ! c0 = c0.add(c4.shiftRight(BITS_PER_LIMB).mul(5)); c4 = c4.and(LIMB_MASK); ! c1 = c1.add(c0.shiftRight(BITS_PER_LIMB)); c0 = c0.and(LIMB_MASK); ! c2 = c2.add(c1.shiftRight(BITS_PER_LIMB)); c1 = c1.and(LIMB_MASK); ! c3 = c3.add(c2.shiftRight(BITS_PER_LIMB)); c2 = c2.and(LIMB_MASK); ! c4 = c4.add(c3.shiftRight(BITS_PER_LIMB)); c3 = c3.and(LIMB_MASK); a0 = (IntVector) c0.cast(intSpecies); a1 = (IntVector) c1.cast(intSpecies); a2 = (IntVector) c2.cast(intSpecies);
*** 379,396 **** inAlign1 = longMsg0.rearrange(longMsg1, inShuffle1, inMask); IntVector in0 = (IntVector) inAlign0.and(LIMB_MASK).cast(intSpecies); IntVector in1 = (IntVector) ! inAlign0.shiftR(26).and(LIMB_MASK).cast(intSpecies); IntVector in2 = (IntVector) ! inAlign0.shiftR(52).and(0xFFF).cast(intSpecies); ! in2 = in2.or(inAlign1.and(0x3FFF).shiftL(12).cast(intSpecies)); IntVector in3 = (IntVector) ! inAlign1.shiftR(14).and(LIMB_MASK).cast(intSpecies); IntVector in4 = (IntVector) ! inAlign1.shiftR(40).and(0xFFFFFF).cast(intSpecies); in4 = in4.or(1 << 24); a0 = a0.add(in0); a1 = a1.add(in1); a2 = a2.add(in2); --- 379,396 ---- inAlign1 = longMsg0.rearrange(longMsg1, inShuffle1, inMask); IntVector in0 = (IntVector) inAlign0.and(LIMB_MASK).cast(intSpecies); IntVector in1 = (IntVector) ! inAlign0.shiftRight(26).and(LIMB_MASK).cast(intSpecies); IntVector in2 = (IntVector) ! inAlign0.shiftRight(52).and(0xFFF).cast(intSpecies); ! in2 = in2.or(inAlign1.and(0x3FFF).shiftLeft(12).cast(intSpecies)); IntVector in3 = (IntVector) ! inAlign1.shiftRight(14).and(LIMB_MASK).cast(intSpecies); IntVector in4 = (IntVector) ! inAlign1.shiftRight(40).and(0xFFFFFF).cast(intSpecies); in4 = in4.or(1 << 24); a0 = a0.add(in0); a1 = a1.add(in1); a2 = a2.add(in2);
*** 435,469 **** .add(a1.cast(longSpecies).mul(rFin3)) .add(a2.cast(longSpecies).mul(rFin2)) .add(a3.cast(longSpecies).mul(rFin1)) .add(a4.cast(longSpecies).mul(rFin0)); ! c4 = c4.add(c3.shiftR(BITS_PER_LIMB)); c3 = c3.and(LIMB_MASK); ! c0 = c0.add(c4.shiftR(BITS_PER_LIMB).mul(5)); c4 = c4.and(LIMB_MASK); ! c1 = c1.add(c0.shiftR(BITS_PER_LIMB)); c0 = c0.and(LIMB_MASK); ! c2 = c2.add(c1.shiftR(BITS_PER_LIMB)); c1 = c1.and(LIMB_MASK); ! c3 = c3.add(c2.shiftR(BITS_PER_LIMB)); c2 = c2.and(LIMB_MASK); ! c4 = c4.add(c3.shiftR(BITS_PER_LIMB)); c3 = c3.and(LIMB_MASK); a0 = (IntVector) c0.cast(intSpecies); a1 = (IntVector) c1.cast(intSpecies); a2 = (IntVector) c2.cast(intSpecies); a3 = (IntVector) c3.cast(intSpecies); a4 = (IntVector) c4.cast(intSpecies); // collect lanes and calculate tag ! long a0Fin = a0.addAll(); ! long a1Fin = a1.addAll(); ! long a2Fin = a2.addAll(); ! long a3Fin = a3.addAll(); ! long a4Fin = a4.addAll(); // carry/reduce the result a4Fin = a4Fin + (a3Fin >>> BITS_PER_LIMB); a3Fin = a3Fin & LIMB_MASK; a0Fin = a0Fin + ((a4Fin >>> BITS_PER_LIMB) * 5); --- 435,469 ---- .add(a1.cast(longSpecies).mul(rFin3)) .add(a2.cast(longSpecies).mul(rFin2)) .add(a3.cast(longSpecies).mul(rFin1)) .add(a4.cast(longSpecies).mul(rFin0)); ! c4 = c4.add(c3.shiftRight(BITS_PER_LIMB)); c3 = c3.and(LIMB_MASK); ! c0 = c0.add(c4.shiftRight(BITS_PER_LIMB).mul(5)); c4 = c4.and(LIMB_MASK); ! c1 = c1.add(c0.shiftRight(BITS_PER_LIMB)); c0 = c0.and(LIMB_MASK); ! c2 = c2.add(c1.shiftRight(BITS_PER_LIMB)); c1 = c1.and(LIMB_MASK); ! c3 = c3.add(c2.shiftRight(BITS_PER_LIMB)); c2 = c2.and(LIMB_MASK); ! c4 = c4.add(c3.shiftRight(BITS_PER_LIMB)); c3 = c3.and(LIMB_MASK); a0 = (IntVector) c0.cast(intSpecies); a1 = (IntVector) c1.cast(intSpecies); a2 = (IntVector) c2.cast(intSpecies); a3 = (IntVector) c3.cast(intSpecies); a4 = (IntVector) c4.cast(intSpecies); // collect lanes and calculate tag ! long a0Fin = a0.addLanes(); ! long a1Fin = a1.addLanes(); ! long a2Fin = a2.addLanes(); ! long a3Fin = a3.addLanes(); ! long a4Fin = a4.addLanes(); // carry/reduce the result a4Fin = a4Fin + (a3Fin >>> BITS_PER_LIMB); a3Fin = a3Fin & LIMB_MASK; a0Fin = a0Fin + ((a4Fin >>> BITS_PER_LIMB) * 5);
< prev index next >