< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.nodes.test/src/org/graalvm/compiler/nodes/test/IntegerStampTest.java

Print this page




 535     }
 536 
 537     private static long umulHigh(long a, long b, int bits) {
 538         Assert.assertTrue(bits == 32 || bits == 64);
 539         BigInteger valA = BigInteger.valueOf(a);
 540         if (valA.compareTo(BigInteger.valueOf(0)) < 0) {
 541             valA = valA.add(BigInteger.ONE.shiftLeft(bits));
 542         }
 543         BigInteger valB = BigInteger.valueOf(b);
 544         if (valB.compareTo(BigInteger.valueOf(0)) < 0) {
 545             valB = valB.add(BigInteger.ONE.shiftLeft(bits));
 546         }
 547 
 548         BigInteger result = valA.multiply(valB).shiftRight(bits);
 549         if (bits == 32) {
 550             return result.intValue();
 551         } else {
 552             return result.longValue();
 553         }
 554     }

















 555 }


 535     }
 536 
 537     private static long umulHigh(long a, long b, int bits) {
 538         Assert.assertTrue(bits == 32 || bits == 64);
 539         BigInteger valA = BigInteger.valueOf(a);
 540         if (valA.compareTo(BigInteger.valueOf(0)) < 0) {
 541             valA = valA.add(BigInteger.ONE.shiftLeft(bits));
 542         }
 543         BigInteger valB = BigInteger.valueOf(b);
 544         if (valB.compareTo(BigInteger.valueOf(0)) < 0) {
 545             valB = valB.add(BigInteger.ONE.shiftLeft(bits));
 546         }
 547 
 548         BigInteger result = valA.multiply(valB).shiftRight(bits);
 549         if (bits == 32) {
 550             return result.intValue();
 551         } else {
 552             return result.longValue();
 553         }
 554     }
 555 
 556     @Test
 557     public void testDiv() {
 558         testDiv(32, Integer.MIN_VALUE, Integer.MAX_VALUE);
 559         testDiv(64, Long.MIN_VALUE, Long.MAX_VALUE);
 560     }
 561 
 562     private static void testDiv(int bits, long min, long max) {
 563         BinaryOp<?> div = IntegerStamp.OPS.getDiv();
 564         assertEquals(IntegerStamp.create(bits, -50, 50), div.foldStamp(IntegerStamp.create(bits, -100, 100), IntegerStamp.create(bits, 2, 5)));
 565         assertEquals(IntegerStamp.create(bits, 20, 500), div.foldStamp(IntegerStamp.create(bits, 100, 1000), IntegerStamp.create(bits, 2, 5)));
 566         assertEquals(IntegerStamp.create(bits, -500, -20), div.foldStamp(IntegerStamp.create(bits, -1000, -100), IntegerStamp.create(bits, 2, 5)));
 567         assertEquals(IntegerStamp.create(bits, min, max), div.foldStamp(IntegerStamp.create(bits, min, max), IntegerStamp.create(bits, 1, max)));
 568         assertEquals(IntegerStamp.create(bits, -100, 100), div.foldStamp(IntegerStamp.create(bits, -100, 100), IntegerStamp.create(bits, 1, max)));
 569         assertEquals(IntegerStamp.create(bits, 0, 1000), div.foldStamp(IntegerStamp.create(bits, 100, 1000), IntegerStamp.create(bits, 1, max)));
 570         assertEquals(IntegerStamp.create(bits, -1000, 0), div.foldStamp(IntegerStamp.create(bits, -1000, -100), IntegerStamp.create(bits, 1, max)));
 571     }
 572 }
< prev index next >