Backport Math/StrictMath.multiplyHigh

Test: tools/test.py --dex_vm all --no-internal -v *Backport*Test*
Test: tools/test.py --no-internal -v *GenerateBackportMethods*
Change-Id: Icf3d4400ab3e5be6fd6c9ac977ac0f8e840794f5
diff --git a/src/test/examplesJava9/backport/StrictMathBackportJava9Main.java b/src/test/examplesJava9/backport/StrictMathBackportJava9Main.java
index e0e45fb..e9c33ca 100644
--- a/src/test/examplesJava9/backport/StrictMathBackportJava9Main.java
+++ b/src/test/examplesJava9/backport/StrictMathBackportJava9Main.java
@@ -4,6 +4,8 @@
 
 package backport;
 
+import java.math.BigInteger;
+
 public class StrictMathBackportJava9Main {
 
   public static void main(String[] args) {
@@ -37,6 +39,27 @@
         StrictMath.multiplyFull(Integer.MIN_VALUE, Integer.MIN_VALUE));
   }
 
+  public static void testMultiplyHigh() {
+    long[] interestingValues = {
+        Long.MIN_VALUE, Long.MAX_VALUE,
+        Integer.MIN_VALUE, Integer.MAX_VALUE,
+        Short.MIN_VALUE, Short.MAX_VALUE,
+        Byte.MIN_VALUE, Byte.MAX_VALUE,
+        0L,
+        -1L, 1L,
+        -42L, 42L
+    };
+    for (long x : interestingValues) {
+      for (long y : interestingValues) {
+        long expected = BigInteger.valueOf(x)
+            .multiply(BigInteger.valueOf(y))
+            .shiftRight(64)
+            .longValue();
+        assertEquals(expected, StrictMath.multiplyHigh(x, y));
+      }
+    }
+  }
+
   public static void testFloorDivLongInt() {
     assertEquals(1L, StrictMath.floorDiv(4L, 4));
     assertEquals(1L, StrictMath.floorDiv(-4L, -4));