8162106: Remove VarHandle.addAndGet
authorpsandoz
Thu, 01 Sep 2016 10:17:01 -0700
changeset 40733 8d1263354d62
parent 40732 2fd9cf42bb3c
child 40734 48879ea67e2a
8162106: Remove VarHandle.addAndGet Reviewed-by: shade, redestad
jdk/src/java.base/share/classes/java/lang/invoke/VarHandle.java
jdk/src/java.base/share/classes/java/lang/invoke/X-VarHandle.java.template
jdk/src/java.base/share/classes/java/lang/invoke/X-VarHandleByteArrayView.java.template
jdk/src/java.base/share/classes/java/util/concurrent/atomic/AtomicInteger.java
jdk/src/java.base/share/classes/java/util/concurrent/atomic/AtomicIntegerArray.java
jdk/src/java.base/share/classes/java/util/concurrent/atomic/AtomicLong.java
jdk/src/java.base/share/classes/java/util/concurrent/atomic/AtomicLongArray.java
jdk/test/java/lang/invoke/VarHandles/VarHandleBaseTest.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessBoolean.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessByte.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessChar.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessDouble.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessFloat.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessInt.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessLong.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessShort.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessString.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsChar.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsDouble.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsFloat.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsInt.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsLong.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsShort.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessByte.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessChar.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessDouble.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessFloat.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessInt.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessLong.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessShort.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeByte.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeChar.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeDouble.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeFloat.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeInt.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeLong.java
jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeShort.java
jdk/test/java/lang/invoke/VarHandles/X-VarHandleTestAccess.java.template
jdk/test/java/lang/invoke/VarHandles/X-VarHandleTestByteArrayView.java.template
jdk/test/java/lang/invoke/VarHandles/X-VarHandleTestMethodHandleAccess.java.template
jdk/test/java/lang/invoke/VarHandles/X-VarHandleTestMethodType.java.template
--- a/jdk/src/java.base/share/classes/java/lang/invoke/VarHandle.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/VarHandle.java	Thu Sep 01 10:17:01 2016 -0700
@@ -1172,39 +1172,6 @@
     @HotSpotIntrinsicCandidate
     Object getAndAddRelease(Object... args);
 
-    /**
-     * Atomically adds the {@code value} to the current value of a variable with
-     * the memory semantics of {@link #setVolatile}, and returns the variable's
-     * current (updated) value, as accessed with the memory semantics of
-     * {@link #getVolatile}.
-     *
-     * <p>The method signature is of the form {@code (CT, T value)T}.
-     *
-     * <p>The symbolic type descriptor at the call site of {@code addAndGet}
-     * must match the access mode type that is the result of calling
-     * {@code accessModeType(VarHandle.AccessMode.ADD_AND_GET)} on this
-     * VarHandle.
-     *
-     * @param args the signature-polymorphic parameter list of the form
-     * {@code (CT, T value)}
-     * , statically represented using varargs.
-     * @return the signature-polymorphic result that is the current value of
-     * the variable
-     * , statically represented using {@code Object}.
-     * @throws UnsupportedOperationException if the access mode is unsupported
-     * for this VarHandle.
-     * @throws WrongMethodTypeException if the access mode type is not
-     * compatible with the caller's symbolic type descriptor.
-     * @throws ClassCastException if the access mode type is compatible with the
-     * caller's symbolic type descriptor, but a reference cast fails.
-     * @see #setVolatile(Object...)
-     * @see #getVolatile(Object...)
-     */
-    public final native
-    @MethodHandle.PolymorphicSignature
-    @HotSpotIntrinsicCandidate
-    Object addAndGet(Object... args);
-
 
     // Bitwise operations
     // Throw UnsupportedOperationException for refs
@@ -1751,12 +1718,6 @@
         /**
          * The access mode whose access is specified by the corresponding
          * method
-         * {@link VarHandle#addAndGet VarHandle.addAndGet}
-         */
-        ADD_AND_GET("addAndGet", AccessType.GET_AND_UPDATE),
-        /**
-         * The access mode whose access is specified by the corresponding
-         * method
          * {@link VarHandle#getAndBitwiseOr VarHandle.getAndBitwiseOr}
          */
         GET_AND_BITWISE_OR("getAndBitwiseOr", AccessType.GET_AND_UPDATE),
--- a/jdk/src/java.base/share/classes/java/lang/invoke/X-VarHandle.java.template	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/X-VarHandle.java.template	Thu Sep 01 10:17:01 2016 -0700
@@ -231,12 +231,6 @@
                                        value);
         }
 
-        @ForceInline
-        static $type$ addAndGet(FieldInstanceReadWrite handle, Object holder, $type$ value) {
-            return {#if[ShorterThanInt]?($type$)}(UNSAFE.getAndAdd$Type$(Objects.requireNonNull(handle.receiverType.cast(holder)),
-                                       handle.fieldOffset,
-                                       value) + value);
-        }
 #end[AtomicAdd]
 #if[Bitwise]
 
@@ -504,13 +498,6 @@
                                        handle.fieldOffset,
                                        value);
         }
-
-        @ForceInline
-        static $type$ addAndGet(FieldStaticReadWrite handle, $type$ value) {
-            return {#if[ShorterThanInt]?($type$)}(UNSAFE.getAndAdd$Type$(handle.base,
-                                       handle.fieldOffset,
-                                       value) + value);
-        }
 #end[AtomicAdd]
 #if[Bitwise]
 
@@ -860,14 +847,6 @@
                     (((long) Preconditions.checkIndex(index, array.length, AIOOBE_SUPPLIER)) << handle.ashift) + handle.abase,
                     value);
         }
-
-        @ForceInline
-        static $type$ addAndGet(Array handle, Object oarray, int index, $type$ value) {
-            $type$[] array = ($type$[]) oarray;
-            return {#if[ShorterThanInt]?($type$)}(UNSAFE.getAndAdd$Type$(array,
-                    (((long) Preconditions.checkIndex(index, array.length, AIOOBE_SUPPLIER)) << handle.ashift) + handle.abase,
-                    value) + value);
-        }
 #end[AtomicAdd]
 #if[Bitwise]
 
--- a/jdk/src/java.base/share/classes/java/lang/invoke/X-VarHandleByteArrayView.java.template	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/src/java.base/share/classes/java/lang/invoke/X-VarHandleByteArrayView.java.template	Thu Sep 01 10:17:01 2016 -0700
@@ -340,11 +340,6 @@
                     nativeExpectedValue, $RawBoxType$.reverseBytes(expectedValue + delta)));
             return expectedValue;
         }
-
-        @ForceInline
-        static $type$ addAndGet(ArrayHandle handle, Object oba, int index, $type$ delta) {
-            return getAndAdd(handle, oba, index, delta) + delta;
-        }
 #end[AtomicAdd]
 #if[Bitwise]
 
@@ -785,11 +780,6 @@
                     nativeExpectedValue, $RawBoxType$.reverseBytes(expectedValue + delta)));
             return expectedValue;
         }
-
-        @ForceInline
-        static $type$ addAndGet(ByteBufferHandle handle, Object obb, int index, $type$ delta) {
-            return getAndAdd(handle, obb, index, delta) + delta;
-        }
 #end[AtomicAdd]
 #if[Bitwise]
 
--- a/jdk/src/java.base/share/classes/java/util/concurrent/atomic/AtomicInteger.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/atomic/AtomicInteger.java	Thu Sep 01 10:17:01 2016 -0700
@@ -217,7 +217,7 @@
 
     /**
      * Atomically adds the given value to the current value,
-     * with memory effects as specified by {@link VarHandle#addAndGet}.
+     * with memory effects as specified by {@link VarHandle#getAndAdd}.
      *
      * @param delta the value to add
      * @return the updated value
--- a/jdk/src/java.base/share/classes/java/util/concurrent/atomic/AtomicIntegerArray.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/atomic/AtomicIntegerArray.java	Thu Sep 01 10:17:01 2016 -0700
@@ -200,7 +200,7 @@
 
     /**
      * Atomically increments the value of the element at index {@code i},
-     * with memory effects as specified by {@link VarHandle#addAndGet}.
+     * with memory effects as specified by {@link VarHandle#getAndAdd}.
      *
      * <p>Equivalent to {@code addAndGet(i, 1)}.
      *
@@ -208,12 +208,12 @@
      * @return the updated value
      */
     public final int incrementAndGet(int i) {
-        return (int)AA.addAndGet(array, i, 1);
+        return (int)AA.getAndAdd(array, i, 1) + 1;
     }
 
     /**
      * Atomically decrements the value of the element at index {@code i},
-     * with memory effects as specified by {@link VarHandle#addAndGet}.
+     * with memory effects as specified by {@link VarHandle#getAndAdd}.
      *
      * <p>Equivalent to {@code addAndGet(i, -1)}.
      *
@@ -221,19 +221,19 @@
      * @return the updated value
      */
     public final int decrementAndGet(int i) {
-        return (int)AA.addAndGet(array, i, -1);
+        return (int)AA.getAndAdd(array, i, -1) - 1;
     }
 
     /**
      * Atomically adds the given value to the element at index {@code i},
-     * with memory effects as specified by {@link VarHandle#addAndGet}.
+     * with memory effects as specified by {@link VarHandle#getAndAdd}.
      *
      * @param i the index
      * @param delta the value to add
      * @return the updated value
      */
     public final int addAndGet(int i, int delta) {
-        return (int)AA.addAndGet(array, i, delta);
+        return (int)AA.getAndAdd(array, i, delta) + delta;
     }
 
     /**
--- a/jdk/src/java.base/share/classes/java/util/concurrent/atomic/AtomicLong.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/atomic/AtomicLong.java	Thu Sep 01 10:17:01 2016 -0700
@@ -209,7 +209,7 @@
 
     /**
      * Atomically increments the current value,
-     * with memory effects as specified by {@link VarHandle#addAndGet}.
+     * with memory effects as specified by {@link VarHandle#getAndAdd}.
      *
      * <p>Equivalent to {@code addAndGet(1)}.
      *
@@ -221,7 +221,7 @@
 
     /**
      * Atomically decrements the current value,
-     * with memory effects as specified by {@link VarHandle#addAndGet}.
+     * with memory effects as specified by {@link VarHandle#getAndAdd}.
      *
      * <p>Equivalent to {@code addAndGet(-1)}.
      *
@@ -233,7 +233,7 @@
 
     /**
      * Atomically adds the given value to the current value,
-     * with memory effects as specified by {@link VarHandle#addAndGet}.
+     * with memory effects as specified by {@link VarHandle#getAndAdd}.
      *
      * @param delta the value to add
      * @return the updated value
--- a/jdk/src/java.base/share/classes/java/util/concurrent/atomic/AtomicLongArray.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/src/java.base/share/classes/java/util/concurrent/atomic/AtomicLongArray.java	Thu Sep 01 10:17:01 2016 -0700
@@ -200,7 +200,7 @@
 
     /**
      * Atomically increments the value of the element at index {@code i},
-     * with memory effects as specified by {@link VarHandle#addAndGet}.
+     * with memory effects as specified by {@link VarHandle#getAndAdd}.
      *
      * <p>Equivalent to {@code addAndGet(i, 1)}.
      *
@@ -208,12 +208,12 @@
      * @return the updated value
      */
     public final long incrementAndGet(int i) {
-        return (long)AA.addAndGet(array, i, 1L);
+        return (long)AA.getAndAdd(array, i, 1L) + 1L;
     }
 
     /**
      * Atomically decrements the value of the element at index {@code i},
-     * with memory effects as specified by {@link VarHandle#addAndGet}.
+     * with memory effects as specified by {@link VarHandle#getAndAdd}.
      *
      * <p>Equivalent to {@code addAndGet(i, -1)}.
      *
@@ -221,19 +221,19 @@
      * @return the updated value
      */
     public final long decrementAndGet(int i) {
-        return (long)AA.addAndGet(array, i, -1L);
+        return (long)AA.getAndAdd(array, i, -1L) - 1L;
     }
 
     /**
      * Atomically adds the given value to the element at index {@code i},
-     * with memory effects as specified by {@link VarHandle#addAndGet}.
+     * with memory effects as specified by {@link VarHandle#getAndAdd}.
      *
      * @param i the index
      * @param delta the value to add
      * @return the updated value
      */
     public long addAndGet(int i, long delta) {
-        return (long)AA.addAndGet(array, i, delta);
+        return (long)AA.getAndAdd(array, i, delta) + delta;
     }
 
     /**
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleBaseTest.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleBaseTest.java	Thu Sep 01 10:17:01 2016 -0700
@@ -159,7 +159,6 @@
         GET_AND_ADD(TestAccessType.GET_AND_ADD),
         GET_AND_ADD_ACQUIRE(TestAccessType.GET_AND_ADD),
         GET_AND_ADD_RELEASE(TestAccessType.GET_AND_ADD),
-        ADD_AND_GET(TestAccessType.GET_AND_ADD),
         GET_AND_BITWISE_OR(TestAccessType.GET_AND_BITWISE),
         GET_AND_BITWISE_OR_ACQUIRE(TestAccessType.GET_AND_BITWISE),
         GET_AND_BITWISE_OR_RELEASE(TestAccessType.GET_AND_BITWISE),
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessBoolean.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessBoolean.java	Thu Sep 01 10:17:01 2016 -0700
@@ -114,7 +114,6 @@
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE));
@@ -287,10 +286,6 @@
             boolean o = (boolean) vh.getAndAddRelease(recv, true);
         });
 
-        checkUOE(() -> {
-            boolean o = (boolean) vh.addAndGet(recv, true);
-        });
-
     }
 
 
@@ -351,10 +346,6 @@
             boolean o = (boolean) vh.getAndAddRelease(true);
         });
 
-        checkUOE(() -> {
-            boolean o = (boolean) vh.addAndGet(true);
-        });
-
     }
 
 
@@ -615,10 +606,6 @@
             boolean o = (boolean) vh.getAndAddRelease(recv, true);
         });
 
-        checkUOE(() -> {
-            boolean o = (boolean) vh.addAndGet(recv, true);
-        });
-
     }
 
 
@@ -879,10 +866,6 @@
             boolean o = (boolean) vh.getAndAddRelease(true);
         });
 
-        checkUOE(() -> {
-            boolean o = (boolean) vh.addAndGet(true);
-        });
-
     }
 
 
@@ -1150,10 +1133,6 @@
             boolean o = (boolean) vh.getAndAddRelease(array, i, true);
         });
 
-        checkUOE(() -> {
-            boolean o = (boolean) vh.addAndGet(array, i, true);
-        });
-
     }
 
     static void testArrayIndexOutOfBounds(VarHandle vh) throws Throwable {
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessByte.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessByte.java	Thu Sep 01 10:17:01 2016 -0700
@@ -114,7 +114,6 @@
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE));
@@ -489,10 +488,10 @@
         {
             vh.set(recv, (byte)0x01);
 
-            byte o = (byte) vh.getAndAdd(recv, (byte)0x45);
+            byte o = (byte) vh.getAndAdd(recv, (byte)0x23);
             assertEquals(o, (byte)0x01, "getAndAdd byte");
-            byte c = (byte) vh.addAndGet(recv, (byte)0x45);
-            assertEquals(c, (byte)((byte)0x01 + (byte)0x45 + (byte)0x45), "getAndAdd byte value");
+            byte x = (byte) vh.get(recv);
+            assertEquals(x, (byte)((byte)0x01 + (byte)0x23), "getAndAdd byte value");
         }
 
         {
@@ -765,10 +764,10 @@
         {
             vh.set((byte)0x01);
 
-            byte o = (byte) vh.getAndAdd( (byte)0x45);
+            byte o = (byte) vh.getAndAdd((byte)0x23);
             assertEquals(o, (byte)0x01, "getAndAdd byte");
-            byte c = (byte) vh.addAndGet((byte)0x45);
-            assertEquals(c, (byte)((byte)0x01 + (byte)0x45 + (byte)0x45), "getAndAdd byte value");
+            byte x = (byte) vh.get();
+            assertEquals(x, (byte)((byte)0x01 + (byte)0x23), "getAndAdd byte value");
         }
 
         {
@@ -1044,10 +1043,10 @@
             {
                 vh.set(array, i, (byte)0x01);
 
-                byte o = (byte) vh.getAndAdd(array, i, (byte)0x45);
+                byte o = (byte) vh.getAndAdd(array, i, (byte)0x23);
                 assertEquals(o, (byte)0x01, "getAndAdd byte");
-                byte c = (byte) vh.addAndGet(array, i, (byte)0x45);
-                assertEquals(c, (byte)((byte)0x01 + (byte)0x45 + (byte)0x45), "getAndAdd byte value");
+                byte x = (byte) vh.get(array, i);
+                assertEquals(x, (byte)((byte)0x01 + (byte)0x23), "getAndAdd byte value");
             }
 
             {
@@ -1257,10 +1256,6 @@
             });
 
             checkIOOBE(() -> {
-                byte o = (byte) vh.addAndGet(array, ci, (byte)0x01);
-            });
-
-            checkIOOBE(() -> {
                 byte o = (byte) vh.getAndBitwiseOr(array, ci, (byte)0x01);
             });
 
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessChar.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessChar.java	Thu Sep 01 10:17:01 2016 -0700
@@ -114,7 +114,6 @@
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE));
@@ -489,10 +488,10 @@
         {
             vh.set(recv, '\u0123');
 
-            char o = (char) vh.getAndAdd(recv, '\u89AB');
+            char o = (char) vh.getAndAdd(recv, '\u4567');
             assertEquals(o, '\u0123', "getAndAdd char");
-            char c = (char) vh.addAndGet(recv, '\u89AB');
-            assertEquals(c, (char)('\u0123' + '\u89AB' + '\u89AB'), "getAndAdd char value");
+            char x = (char) vh.get(recv);
+            assertEquals(x, (char)('\u0123' + '\u4567'), "getAndAdd char value");
         }
 
         {
@@ -765,10 +764,10 @@
         {
             vh.set('\u0123');
 
-            char o = (char) vh.getAndAdd( '\u89AB');
+            char o = (char) vh.getAndAdd('\u4567');
             assertEquals(o, '\u0123', "getAndAdd char");
-            char c = (char) vh.addAndGet('\u89AB');
-            assertEquals(c, (char)('\u0123' + '\u89AB' + '\u89AB'), "getAndAdd char value");
+            char x = (char) vh.get();
+            assertEquals(x, (char)('\u0123' + '\u4567'), "getAndAdd char value");
         }
 
         {
@@ -1044,10 +1043,10 @@
             {
                 vh.set(array, i, '\u0123');
 
-                char o = (char) vh.getAndAdd(array, i, '\u89AB');
+                char o = (char) vh.getAndAdd(array, i, '\u4567');
                 assertEquals(o, '\u0123', "getAndAdd char");
-                char c = (char) vh.addAndGet(array, i, '\u89AB');
-                assertEquals(c, (char)('\u0123' + '\u89AB' + '\u89AB'), "getAndAdd char value");
+                char x = (char) vh.get(array, i);
+                assertEquals(x, (char)('\u0123' + '\u4567'), "getAndAdd char value");
             }
 
             {
@@ -1257,10 +1256,6 @@
             });
 
             checkIOOBE(() -> {
-                char o = (char) vh.addAndGet(array, ci, '\u0123');
-            });
-
-            checkIOOBE(() -> {
                 char o = (char) vh.getAndBitwiseOr(array, ci, '\u0123');
             });
 
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessDouble.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessDouble.java	Thu Sep 01 10:17:01 2016 -0700
@@ -114,7 +114,6 @@
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE));
@@ -559,10 +558,10 @@
         {
             vh.set(recv, 1.0d);
 
-            double o = (double) vh.getAndAdd(recv, 3.0d);
+            double o = (double) vh.getAndAdd(recv, 2.0d);
             assertEquals(o, 1.0d, "getAndAdd double");
-            double c = (double) vh.addAndGet(recv, 3.0d);
-            assertEquals(c, (double)(1.0d + 3.0d + 3.0d), "getAndAdd double value");
+            double x = (double) vh.get(recv);
+            assertEquals(x, (double)(1.0d + 2.0d), "getAndAdd double value");
         }
 
         {
@@ -787,10 +786,10 @@
         {
             vh.set(1.0d);
 
-            double o = (double) vh.getAndAdd( 3.0d);
+            double o = (double) vh.getAndAdd(2.0d);
             assertEquals(o, 1.0d, "getAndAdd double");
-            double c = (double) vh.addAndGet(3.0d);
-            assertEquals(c, (double)(1.0d + 3.0d + 3.0d), "getAndAdd double value");
+            double x = (double) vh.get();
+            assertEquals(x, (double)(1.0d + 2.0d), "getAndAdd double value");
         }
 
         {
@@ -1018,10 +1017,10 @@
             {
                 vh.set(array, i, 1.0d);
 
-                double o = (double) vh.getAndAdd(array, i, 3.0d);
+                double o = (double) vh.getAndAdd(array, i, 2.0d);
                 assertEquals(o, 1.0d, "getAndAdd double");
-                double c = (double) vh.addAndGet(array, i, 3.0d);
-                assertEquals(c, (double)(1.0d + 3.0d + 3.0d), "getAndAdd double value");
+                double x = (double) vh.get(array, i);
+                assertEquals(x, (double)(1.0d + 2.0d), "getAndAdd double value");
             }
 
             {
@@ -1182,10 +1181,6 @@
                 double o = (double) vh.getAndAddRelease(array, ci, 1.0d);
             });
 
-            checkIOOBE(() -> {
-                double o = (double) vh.addAndGet(array, ci, 1.0d);
-            });
-
         }
     }
 }
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessFloat.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessFloat.java	Thu Sep 01 10:17:01 2016 -0700
@@ -114,7 +114,6 @@
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE));
@@ -559,10 +558,10 @@
         {
             vh.set(recv, 1.0f);
 
-            float o = (float) vh.getAndAdd(recv, 3.0f);
+            float o = (float) vh.getAndAdd(recv, 2.0f);
             assertEquals(o, 1.0f, "getAndAdd float");
-            float c = (float) vh.addAndGet(recv, 3.0f);
-            assertEquals(c, (float)(1.0f + 3.0f + 3.0f), "getAndAdd float value");
+            float x = (float) vh.get(recv);
+            assertEquals(x, (float)(1.0f + 2.0f), "getAndAdd float value");
         }
 
         {
@@ -787,10 +786,10 @@
         {
             vh.set(1.0f);
 
-            float o = (float) vh.getAndAdd( 3.0f);
+            float o = (float) vh.getAndAdd(2.0f);
             assertEquals(o, 1.0f, "getAndAdd float");
-            float c = (float) vh.addAndGet(3.0f);
-            assertEquals(c, (float)(1.0f + 3.0f + 3.0f), "getAndAdd float value");
+            float x = (float) vh.get();
+            assertEquals(x, (float)(1.0f + 2.0f), "getAndAdd float value");
         }
 
         {
@@ -1018,10 +1017,10 @@
             {
                 vh.set(array, i, 1.0f);
 
-                float o = (float) vh.getAndAdd(array, i, 3.0f);
+                float o = (float) vh.getAndAdd(array, i, 2.0f);
                 assertEquals(o, 1.0f, "getAndAdd float");
-                float c = (float) vh.addAndGet(array, i, 3.0f);
-                assertEquals(c, (float)(1.0f + 3.0f + 3.0f), "getAndAdd float value");
+                float x = (float) vh.get(array, i);
+                assertEquals(x, (float)(1.0f + 2.0f), "getAndAdd float value");
             }
 
             {
@@ -1182,10 +1181,6 @@
                 float o = (float) vh.getAndAddRelease(array, ci, 1.0f);
             });
 
-            checkIOOBE(() -> {
-                float o = (float) vh.addAndGet(array, ci, 1.0f);
-            });
-
         }
     }
 }
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessInt.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessInt.java	Thu Sep 01 10:17:01 2016 -0700
@@ -114,7 +114,6 @@
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE));
@@ -489,10 +488,10 @@
         {
             vh.set(recv, 0x01234567);
 
-            int o = (int) vh.getAndAdd(recv, 0xCAFEBABE);
+            int o = (int) vh.getAndAdd(recv, 0x89ABCDEF);
             assertEquals(o, 0x01234567, "getAndAdd int");
-            int c = (int) vh.addAndGet(recv, 0xCAFEBABE);
-            assertEquals(c, (int)(0x01234567 + 0xCAFEBABE + 0xCAFEBABE), "getAndAdd int value");
+            int x = (int) vh.get(recv);
+            assertEquals(x, (int)(0x01234567 + 0x89ABCDEF), "getAndAdd int value");
         }
 
         {
@@ -765,10 +764,10 @@
         {
             vh.set(0x01234567);
 
-            int o = (int) vh.getAndAdd( 0xCAFEBABE);
+            int o = (int) vh.getAndAdd(0x89ABCDEF);
             assertEquals(o, 0x01234567, "getAndAdd int");
-            int c = (int) vh.addAndGet(0xCAFEBABE);
-            assertEquals(c, (int)(0x01234567 + 0xCAFEBABE + 0xCAFEBABE), "getAndAdd int value");
+            int x = (int) vh.get();
+            assertEquals(x, (int)(0x01234567 + 0x89ABCDEF), "getAndAdd int value");
         }
 
         {
@@ -1044,10 +1043,10 @@
             {
                 vh.set(array, i, 0x01234567);
 
-                int o = (int) vh.getAndAdd(array, i, 0xCAFEBABE);
+                int o = (int) vh.getAndAdd(array, i, 0x89ABCDEF);
                 assertEquals(o, 0x01234567, "getAndAdd int");
-                int c = (int) vh.addAndGet(array, i, 0xCAFEBABE);
-                assertEquals(c, (int)(0x01234567 + 0xCAFEBABE + 0xCAFEBABE), "getAndAdd int value");
+                int x = (int) vh.get(array, i);
+                assertEquals(x, (int)(0x01234567 + 0x89ABCDEF), "getAndAdd int value");
             }
 
             {
@@ -1257,10 +1256,6 @@
             });
 
             checkIOOBE(() -> {
-                int o = (int) vh.addAndGet(array, ci, 0x01234567);
-            });
-
-            checkIOOBE(() -> {
                 int o = (int) vh.getAndBitwiseOr(array, ci, 0x01234567);
             });
 
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessLong.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessLong.java	Thu Sep 01 10:17:01 2016 -0700
@@ -114,7 +114,6 @@
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE));
@@ -489,10 +488,10 @@
         {
             vh.set(recv, 0x0123456789ABCDEFL);
 
-            long o = (long) vh.getAndAdd(recv, 0xDEADBEEFDEADBEEFL);
+            long o = (long) vh.getAndAdd(recv, 0xCAFEBABECAFEBABEL);
             assertEquals(o, 0x0123456789ABCDEFL, "getAndAdd long");
-            long c = (long) vh.addAndGet(recv, 0xDEADBEEFDEADBEEFL);
-            assertEquals(c, (long)(0x0123456789ABCDEFL + 0xDEADBEEFDEADBEEFL + 0xDEADBEEFDEADBEEFL), "getAndAdd long value");
+            long x = (long) vh.get(recv);
+            assertEquals(x, (long)(0x0123456789ABCDEFL + 0xCAFEBABECAFEBABEL), "getAndAdd long value");
         }
 
         {
@@ -765,10 +764,10 @@
         {
             vh.set(0x0123456789ABCDEFL);
 
-            long o = (long) vh.getAndAdd( 0xDEADBEEFDEADBEEFL);
+            long o = (long) vh.getAndAdd(0xCAFEBABECAFEBABEL);
             assertEquals(o, 0x0123456789ABCDEFL, "getAndAdd long");
-            long c = (long) vh.addAndGet(0xDEADBEEFDEADBEEFL);
-            assertEquals(c, (long)(0x0123456789ABCDEFL + 0xDEADBEEFDEADBEEFL + 0xDEADBEEFDEADBEEFL), "getAndAdd long value");
+            long x = (long) vh.get();
+            assertEquals(x, (long)(0x0123456789ABCDEFL + 0xCAFEBABECAFEBABEL), "getAndAdd long value");
         }
 
         {
@@ -1044,10 +1043,10 @@
             {
                 vh.set(array, i, 0x0123456789ABCDEFL);
 
-                long o = (long) vh.getAndAdd(array, i, 0xDEADBEEFDEADBEEFL);
+                long o = (long) vh.getAndAdd(array, i, 0xCAFEBABECAFEBABEL);
                 assertEquals(o, 0x0123456789ABCDEFL, "getAndAdd long");
-                long c = (long) vh.addAndGet(array, i, 0xDEADBEEFDEADBEEFL);
-                assertEquals(c, (long)(0x0123456789ABCDEFL + 0xDEADBEEFDEADBEEFL + 0xDEADBEEFDEADBEEFL), "getAndAdd long value");
+                long x = (long) vh.get(array, i);
+                assertEquals(x, (long)(0x0123456789ABCDEFL + 0xCAFEBABECAFEBABEL), "getAndAdd long value");
             }
 
             {
@@ -1257,10 +1256,6 @@
             });
 
             checkIOOBE(() -> {
-                long o = (long) vh.addAndGet(array, ci, 0x0123456789ABCDEFL);
-            });
-
-            checkIOOBE(() -> {
                 long o = (long) vh.getAndBitwiseOr(array, ci, 0x0123456789ABCDEFL);
             });
 
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessShort.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessShort.java	Thu Sep 01 10:17:01 2016 -0700
@@ -114,7 +114,6 @@
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE));
@@ -489,10 +488,10 @@
         {
             vh.set(recv, (short)0x0123);
 
-            short o = (short) vh.getAndAdd(recv, (short)0x89AB);
+            short o = (short) vh.getAndAdd(recv, (short)0x4567);
             assertEquals(o, (short)0x0123, "getAndAdd short");
-            short c = (short) vh.addAndGet(recv, (short)0x89AB);
-            assertEquals(c, (short)((short)0x0123 + (short)0x89AB + (short)0x89AB), "getAndAdd short value");
+            short x = (short) vh.get(recv);
+            assertEquals(x, (short)((short)0x0123 + (short)0x4567), "getAndAdd short value");
         }
 
         {
@@ -765,10 +764,10 @@
         {
             vh.set((short)0x0123);
 
-            short o = (short) vh.getAndAdd( (short)0x89AB);
+            short o = (short) vh.getAndAdd((short)0x4567);
             assertEquals(o, (short)0x0123, "getAndAdd short");
-            short c = (short) vh.addAndGet((short)0x89AB);
-            assertEquals(c, (short)((short)0x0123 + (short)0x89AB + (short)0x89AB), "getAndAdd short value");
+            short x = (short) vh.get();
+            assertEquals(x, (short)((short)0x0123 + (short)0x4567), "getAndAdd short value");
         }
 
         {
@@ -1044,10 +1043,10 @@
             {
                 vh.set(array, i, (short)0x0123);
 
-                short o = (short) vh.getAndAdd(array, i, (short)0x89AB);
+                short o = (short) vh.getAndAdd(array, i, (short)0x4567);
                 assertEquals(o, (short)0x0123, "getAndAdd short");
-                short c = (short) vh.addAndGet(array, i, (short)0x89AB);
-                assertEquals(c, (short)((short)0x0123 + (short)0x89AB + (short)0x89AB), "getAndAdd short value");
+                short x = (short) vh.get(array, i);
+                assertEquals(x, (short)((short)0x0123 + (short)0x4567), "getAndAdd short value");
             }
 
             {
@@ -1257,10 +1256,6 @@
             });
 
             checkIOOBE(() -> {
-                short o = (short) vh.addAndGet(array, ci, (short)0x0123);
-            });
-
-            checkIOOBE(() -> {
                 short o = (short) vh.getAndBitwiseOr(array, ci, (short)0x0123);
             });
 
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessString.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestAccessString.java	Thu Sep 01 10:17:01 2016 -0700
@@ -114,7 +114,6 @@
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE));
@@ -288,10 +287,6 @@
         });
 
         checkUOE(() -> {
-            String o = (String) vh.addAndGet(recv, "foo");
-        });
-
-        checkUOE(() -> {
             String o = (String) vh.getAndBitwiseOr(recv, "foo");
         });
 
@@ -387,10 +382,6 @@
         });
 
         checkUOE(() -> {
-            String o = (String) vh.addAndGet("foo");
-        });
-
-        checkUOE(() -> {
             String o = (String) vh.getAndBitwiseOr("foo");
         });
 
@@ -603,10 +594,6 @@
         });
 
         checkUOE(() -> {
-            String o = (String) vh.addAndGet(recv, "foo");
-        });
-
-        checkUOE(() -> {
             String o = (String) vh.getAndBitwiseOr(recv, "foo");
         });
 
@@ -819,10 +806,6 @@
         });
 
         checkUOE(() -> {
-            String o = (String) vh.addAndGet("foo");
-        });
-
-        checkUOE(() -> {
             String o = (String) vh.getAndBitwiseOr("foo");
         });
 
@@ -1042,10 +1025,6 @@
         });
 
         checkUOE(() -> {
-            String o = (String) vh.addAndGet(array, i, "foo");
-        });
-
-        checkUOE(() -> {
             String o = (String) vh.getAndBitwiseOr(array, i, "foo");
         });
 
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsChar.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsChar.java	Thu Sep 01 10:17:01 2016 -0700
@@ -103,7 +103,6 @@
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE));
@@ -255,10 +254,6 @@
         });
 
         checkUOE(() -> {
-            char o = (char) vh.addAndGet(array, ci, VALUE_1);
-        });
-
-        checkUOE(() -> {
             char o = (char) vh.getAndBitwiseOr(array, ci, VALUE_1);
         });
 
@@ -376,10 +371,6 @@
             });
 
             checkUOE(() -> {
-                char o = (char) vh.addAndGet(array, ci, VALUE_1);
-            });
-
-            checkUOE(() -> {
                 char o = (char) vh.getAndBitwiseOr(array, ci, VALUE_1);
             });
 
@@ -470,10 +461,6 @@
             checkUOE(() -> {
                 char o = (char) vh.getAndAddRelease(array, ci, VALUE_1);
             });
-
-            checkUOE(() -> {
-                char o = (char) vh.addAndGet(array, ci, VALUE_1);
-            });
             checkUOE(() -> {
                 char o = (char) vh.getAndBitwiseOr(array, ci, VALUE_1);
             });
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsDouble.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsDouble.java	Thu Sep 01 10:17:01 2016 -0700
@@ -103,7 +103,6 @@
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE));
@@ -212,10 +211,6 @@
         });
 
         checkUOE(() -> {
-            double o = (double) vh.addAndGet(array, ci, VALUE_1);
-        });
-
-        checkUOE(() -> {
             double o = (double) vh.getAndBitwiseOr(array, ci, VALUE_1);
         });
 
@@ -335,10 +330,6 @@
             });
 
             checkUOE(() -> {
-                double o = (double) vh.addAndGet(array, ci, VALUE_1);
-            });
-
-            checkUOE(() -> {
                 double o = (double) vh.getAndBitwiseOr(array, ci, VALUE_1);
             });
 
@@ -386,10 +377,6 @@
             checkUOE(() -> {
                 double o = (double) vh.getAndAddRelease(array, ci, VALUE_1);
             });
-
-            checkUOE(() -> {
-                double o = (double) vh.addAndGet(array, ci, VALUE_1);
-            });
             checkUOE(() -> {
                 double o = (double) vh.getAndBitwiseOr(array, ci, VALUE_1);
             });
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsFloat.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsFloat.java	Thu Sep 01 10:17:01 2016 -0700
@@ -103,7 +103,6 @@
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE));
@@ -212,10 +211,6 @@
         });
 
         checkUOE(() -> {
-            float o = (float) vh.addAndGet(array, ci, VALUE_1);
-        });
-
-        checkUOE(() -> {
             float o = (float) vh.getAndBitwiseOr(array, ci, VALUE_1);
         });
 
@@ -335,10 +330,6 @@
             });
 
             checkUOE(() -> {
-                float o = (float) vh.addAndGet(array, ci, VALUE_1);
-            });
-
-            checkUOE(() -> {
                 float o = (float) vh.getAndBitwiseOr(array, ci, VALUE_1);
             });
 
@@ -386,10 +377,6 @@
             checkUOE(() -> {
                 float o = (float) vh.getAndAddRelease(array, ci, VALUE_1);
             });
-
-            checkUOE(() -> {
-                float o = (float) vh.addAndGet(array, ci, VALUE_1);
-            });
             checkUOE(() -> {
                 float o = (float) vh.getAndBitwiseOr(array, ci, VALUE_1);
             });
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsInt.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsInt.java	Thu Sep 01 10:17:01 2016 -0700
@@ -103,7 +103,6 @@
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE));
@@ -285,10 +284,6 @@
             });
 
             checkROBE(() -> {
-                int o = (int) vh.addAndGet(array, ci, VALUE_1);
-            });
-
-            checkROBE(() -> {
                 int o = (int) vh.getAndBitwiseOr(array, ci, VALUE_1);
             });
 
@@ -426,10 +421,6 @@
             });
 
             checkIOOBE(() -> {
-                int o = (int) vh.addAndGet(array, ci, VALUE_1);
-            });
-
-            checkIOOBE(() -> {
                 int o = (int) vh.getAndBitwiseOr(array, ci, VALUE_1);
             });
 
@@ -570,10 +561,6 @@
                 });
 
                 checkIOOBE(() -> {
-                    int o = (int) vh.addAndGet(array, ci, VALUE_1);
-                });
-
-                checkIOOBE(() -> {
                     int o = (int) vh.getAndBitwiseOr(array, ci, VALUE_1);
                 });
 
@@ -705,10 +692,6 @@
                 });
 
                 checkISE(() -> {
-                    int o = (int) vh.addAndGet(array, ci, VALUE_1);
-                });
-
-                checkISE(() -> {
                     int o = (int) vh.getAndBitwiseOr(array, ci, VALUE_1);
                 });
 
@@ -842,10 +825,6 @@
                     });
 
                     checkISE(() -> {
-                        int o = (int) vh.addAndGet(array, ci, VALUE_1);
-                    });
-
-                    checkISE(() -> {
                         int o = (int) vh.getAndBitwiseOr(array, ci, VALUE_1);
                     });
 
@@ -1054,10 +1033,10 @@
                 {
                     vh.set(array, i, VALUE_1);
 
-                    int o = (int) vh.getAndAdd(array, i, VALUE_3);
+                    int o = (int) vh.getAndAdd(array, i, VALUE_2);
                     assertEquals(o, VALUE_1, "getAndAdd int");
-                    int c = (int) vh.addAndGet(array, i, VALUE_3);
-                    assertEquals(c, VALUE_1 + VALUE_3 + VALUE_3, "getAndAdd int value");
+                    int x = (int) vh.get(array, i);
+                    assertEquals(x, VALUE_1 + VALUE_2, "getAndAdd int value");
                 }
 
                 {
@@ -1334,10 +1313,10 @@
                 {
                     vh.set(array, i, VALUE_1);
 
-                    int o = (int) vh.getAndAdd(array, i, VALUE_3);
+                    int o = (int) vh.getAndAdd(array, i, VALUE_2);
                     assertEquals(o, VALUE_1, "getAndAdd int");
-                    int c = (int) vh.addAndGet(array, i, VALUE_3);
-                    assertEquals(c, VALUE_1 + VALUE_3 + VALUE_3, "getAndAdd int value");
+                    int x = (int) vh.get(array, i);
+                    assertEquals(x, VALUE_1 + VALUE_2, "getAndAdd int value");
                 }
 
                 {
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsLong.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsLong.java	Thu Sep 01 10:17:01 2016 -0700
@@ -103,7 +103,6 @@
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE));
@@ -285,10 +284,6 @@
             });
 
             checkROBE(() -> {
-                long o = (long) vh.addAndGet(array, ci, VALUE_1);
-            });
-
-            checkROBE(() -> {
                 long o = (long) vh.getAndBitwiseOr(array, ci, VALUE_1);
             });
 
@@ -426,10 +421,6 @@
             });
 
             checkIOOBE(() -> {
-                long o = (long) vh.addAndGet(array, ci, VALUE_1);
-            });
-
-            checkIOOBE(() -> {
                 long o = (long) vh.getAndBitwiseOr(array, ci, VALUE_1);
             });
 
@@ -570,10 +561,6 @@
                 });
 
                 checkIOOBE(() -> {
-                    long o = (long) vh.addAndGet(array, ci, VALUE_1);
-                });
-
-                checkIOOBE(() -> {
                     long o = (long) vh.getAndBitwiseOr(array, ci, VALUE_1);
                 });
 
@@ -705,10 +692,6 @@
                 });
 
                 checkISE(() -> {
-                    long o = (long) vh.addAndGet(array, ci, VALUE_1);
-                });
-
-                checkISE(() -> {
                     long o = (long) vh.getAndBitwiseOr(array, ci, VALUE_1);
                 });
 
@@ -842,10 +825,6 @@
                     });
 
                     checkISE(() -> {
-                        long o = (long) vh.addAndGet(array, ci, VALUE_1);
-                    });
-
-                    checkISE(() -> {
                         long o = (long) vh.getAndBitwiseOr(array, ci, VALUE_1);
                     });
 
@@ -1054,10 +1033,10 @@
                 {
                     vh.set(array, i, VALUE_1);
 
-                    long o = (long) vh.getAndAdd(array, i, VALUE_3);
+                    long o = (long) vh.getAndAdd(array, i, VALUE_2);
                     assertEquals(o, VALUE_1, "getAndAdd long");
-                    long c = (long) vh.addAndGet(array, i, VALUE_3);
-                    assertEquals(c, VALUE_1 + VALUE_3 + VALUE_3, "getAndAdd long value");
+                    long x = (long) vh.get(array, i);
+                    assertEquals(x, VALUE_1 + VALUE_2, "getAndAdd long value");
                 }
 
                 {
@@ -1334,10 +1313,10 @@
                 {
                     vh.set(array, i, VALUE_1);
 
-                    long o = (long) vh.getAndAdd(array, i, VALUE_3);
+                    long o = (long) vh.getAndAdd(array, i, VALUE_2);
                     assertEquals(o, VALUE_1, "getAndAdd long");
-                    long c = (long) vh.addAndGet(array, i, VALUE_3);
-                    assertEquals(c, VALUE_1 + VALUE_3 + VALUE_3, "getAndAdd long value");
+                    long x = (long) vh.get(array, i);
+                    assertEquals(x, VALUE_1 + VALUE_2, "getAndAdd long value");
                 }
 
                 {
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsShort.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestByteArrayAsShort.java	Thu Sep 01 10:17:01 2016 -0700
@@ -103,7 +103,6 @@
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_BITWISE_OR_ACQUIRE));
@@ -255,10 +254,6 @@
         });
 
         checkUOE(() -> {
-            short o = (short) vh.addAndGet(array, ci, VALUE_1);
-        });
-
-        checkUOE(() -> {
             short o = (short) vh.getAndBitwiseOr(array, ci, VALUE_1);
         });
 
@@ -376,10 +371,6 @@
             });
 
             checkUOE(() -> {
-                short o = (short) vh.addAndGet(array, ci, VALUE_1);
-            });
-
-            checkUOE(() -> {
                 short o = (short) vh.getAndBitwiseOr(array, ci, VALUE_1);
             });
 
@@ -470,10 +461,6 @@
             checkUOE(() -> {
                 short o = (short) vh.getAndAddRelease(array, ci, VALUE_1);
             });
-
-            checkUOE(() -> {
-                short o = (short) vh.addAndGet(array, ci, VALUE_1);
-            });
             checkUOE(() -> {
                 short o = (short) vh.getAndBitwiseOr(array, ci, VALUE_1);
             });
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessByte.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessByte.java	Thu Sep 01 10:17:01 2016 -0700
@@ -259,10 +259,10 @@
         {
             hs.get(TestAccessMode.SET).invokeExact(recv, (byte)0x01);
 
-            byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, (byte)0x45);
+            byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, (byte)0x23);
             assertEquals(o, (byte)0x01, "getAndAdd byte");
-            byte c = (byte) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(recv, (byte)0x45);
-            assertEquals(c, (byte)((byte)0x01 + (byte)0x45 + (byte)0x45), "getAndAdd byte value");
+            byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(recv);
+            assertEquals(x, (byte)((byte)0x01 + (byte)0x23), "getAndAdd byte value");
         }
 
         {
@@ -537,10 +537,10 @@
         {
             hs.get(TestAccessMode.SET).invokeExact((byte)0x01);
 
-            byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD).invokeExact((byte)0x45);
+            byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD).invokeExact((byte)0x23);
             assertEquals(o, (byte)0x01, "getAndAdd byte");
-            byte c = (byte) hs.get(TestAccessMode.ADD_AND_GET).invokeExact((byte)0x45);
-            assertEquals(c, (byte)((byte)0x01 + (byte)0x45 + (byte)0x45), "getAndAdd byte value");
+            byte x = (byte) hs.get(TestAccessMode.GET).invokeExact();
+            assertEquals(x, (byte)((byte)0x01 + (byte)0x23), "getAndAdd byte value");
         }
 
         {
@@ -816,10 +816,10 @@
             {
                 hs.get(TestAccessMode.SET).invokeExact(array, i, (byte)0x01);
 
-                byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, (byte)0x45);
+                byte o = (byte) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, (byte)0x23);
                 assertEquals(o, (byte)0x01, "getAndAdd byte");
-                byte c = (byte) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(array, i, (byte)0x45);
-                assertEquals(c, (byte)((byte)0x01 + (byte)0x45 + (byte)0x45), "getAndAdd byte value");
+                byte x = (byte) hs.get(TestAccessMode.GET).invokeExact(array, i);
+                assertEquals(x, (byte)((byte)0x01 + (byte)0x23), "getAndAdd byte value");
             }
 
             {
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessChar.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessChar.java	Thu Sep 01 10:17:01 2016 -0700
@@ -259,10 +259,10 @@
         {
             hs.get(TestAccessMode.SET).invokeExact(recv, '\u0123');
 
-            char o = (char) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, '\u89AB');
+            char o = (char) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, '\u4567');
             assertEquals(o, '\u0123', "getAndAdd char");
-            char c = (char) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(recv, '\u89AB');
-            assertEquals(c, (char)('\u0123' + '\u89AB' + '\u89AB'), "getAndAdd char value");
+            char x = (char) hs.get(TestAccessMode.GET).invokeExact(recv);
+            assertEquals(x, (char)('\u0123' + '\u4567'), "getAndAdd char value");
         }
 
         {
@@ -537,10 +537,10 @@
         {
             hs.get(TestAccessMode.SET).invokeExact('\u0123');
 
-            char o = (char) hs.get(TestAccessMode.GET_AND_ADD).invokeExact('\u89AB');
+            char o = (char) hs.get(TestAccessMode.GET_AND_ADD).invokeExact('\u4567');
             assertEquals(o, '\u0123', "getAndAdd char");
-            char c = (char) hs.get(TestAccessMode.ADD_AND_GET).invokeExact('\u89AB');
-            assertEquals(c, (char)('\u0123' + '\u89AB' + '\u89AB'), "getAndAdd char value");
+            char x = (char) hs.get(TestAccessMode.GET).invokeExact();
+            assertEquals(x, (char)('\u0123' + '\u4567'), "getAndAdd char value");
         }
 
         {
@@ -816,10 +816,10 @@
             {
                 hs.get(TestAccessMode.SET).invokeExact(array, i, '\u0123');
 
-                char o = (char) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, '\u89AB');
+                char o = (char) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, '\u4567');
                 assertEquals(o, '\u0123', "getAndAdd char");
-                char c = (char) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(array, i, '\u89AB');
-                assertEquals(c, (char)('\u0123' + '\u89AB' + '\u89AB'), "getAndAdd char value");
+                char x = (char) hs.get(TestAccessMode.GET).invokeExact(array, i);
+                assertEquals(x, (char)('\u0123' + '\u4567'), "getAndAdd char value");
             }
 
             {
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessDouble.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessDouble.java	Thu Sep 01 10:17:01 2016 -0700
@@ -259,10 +259,10 @@
         {
             hs.get(TestAccessMode.SET).invokeExact(recv, 1.0d);
 
-            double o = (double) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, 3.0d);
+            double o = (double) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, 2.0d);
             assertEquals(o, 1.0d, "getAndAdd double");
-            double c = (double) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(recv, 3.0d);
-            assertEquals(c, (double)(1.0d + 3.0d + 3.0d), "getAndAdd double value");
+            double x = (double) hs.get(TestAccessMode.GET).invokeExact(recv);
+            assertEquals(x, (double)(1.0d + 2.0d), "getAndAdd double value");
         }
 
         {
@@ -459,10 +459,10 @@
         {
             hs.get(TestAccessMode.SET).invokeExact(1.0d);
 
-            double o = (double) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(3.0d);
+            double o = (double) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(2.0d);
             assertEquals(o, 1.0d, "getAndAdd double");
-            double c = (double) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(3.0d);
-            assertEquals(c, (double)(1.0d + 3.0d + 3.0d), "getAndAdd double value");
+            double x = (double) hs.get(TestAccessMode.GET).invokeExact();
+            assertEquals(x, (double)(1.0d + 2.0d), "getAndAdd double value");
         }
 
         {
@@ -660,10 +660,10 @@
             {
                 hs.get(TestAccessMode.SET).invokeExact(array, i, 1.0d);
 
-                double o = (double) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, 3.0d);
+                double o = (double) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, 2.0d);
                 assertEquals(o, 1.0d, "getAndAdd double");
-                double c = (double) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(array, i, 3.0d);
-                assertEquals(c, (double)(1.0d + 3.0d + 3.0d), "getAndAdd double value");
+                double x = (double) hs.get(TestAccessMode.GET).invokeExact(array, i);
+                assertEquals(x, (double)(1.0d + 2.0d), "getAndAdd double value");
             }
 
             {
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessFloat.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessFloat.java	Thu Sep 01 10:17:01 2016 -0700
@@ -259,10 +259,10 @@
         {
             hs.get(TestAccessMode.SET).invokeExact(recv, 1.0f);
 
-            float o = (float) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, 3.0f);
+            float o = (float) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, 2.0f);
             assertEquals(o, 1.0f, "getAndAdd float");
-            float c = (float) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(recv, 3.0f);
-            assertEquals(c, (float)(1.0f + 3.0f + 3.0f), "getAndAdd float value");
+            float x = (float) hs.get(TestAccessMode.GET).invokeExact(recv);
+            assertEquals(x, (float)(1.0f + 2.0f), "getAndAdd float value");
         }
 
         {
@@ -459,10 +459,10 @@
         {
             hs.get(TestAccessMode.SET).invokeExact(1.0f);
 
-            float o = (float) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(3.0f);
+            float o = (float) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(2.0f);
             assertEquals(o, 1.0f, "getAndAdd float");
-            float c = (float) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(3.0f);
-            assertEquals(c, (float)(1.0f + 3.0f + 3.0f), "getAndAdd float value");
+            float x = (float) hs.get(TestAccessMode.GET).invokeExact();
+            assertEquals(x, (float)(1.0f + 2.0f), "getAndAdd float value");
         }
 
         {
@@ -660,10 +660,10 @@
             {
                 hs.get(TestAccessMode.SET).invokeExact(array, i, 1.0f);
 
-                float o = (float) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, 3.0f);
+                float o = (float) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, 2.0f);
                 assertEquals(o, 1.0f, "getAndAdd float");
-                float c = (float) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(array, i, 3.0f);
-                assertEquals(c, (float)(1.0f + 3.0f + 3.0f), "getAndAdd float value");
+                float x = (float) hs.get(TestAccessMode.GET).invokeExact(array, i);
+                assertEquals(x, (float)(1.0f + 2.0f), "getAndAdd float value");
             }
 
             {
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessInt.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessInt.java	Thu Sep 01 10:17:01 2016 -0700
@@ -259,10 +259,10 @@
         {
             hs.get(TestAccessMode.SET).invokeExact(recv, 0x01234567);
 
-            int o = (int) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, 0xCAFEBABE);
+            int o = (int) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, 0x89ABCDEF);
             assertEquals(o, 0x01234567, "getAndAdd int");
-            int c = (int) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(recv, 0xCAFEBABE);
-            assertEquals(c, (int)(0x01234567 + 0xCAFEBABE + 0xCAFEBABE), "getAndAdd int value");
+            int x = (int) hs.get(TestAccessMode.GET).invokeExact(recv);
+            assertEquals(x, (int)(0x01234567 + 0x89ABCDEF), "getAndAdd int value");
         }
 
         {
@@ -537,10 +537,10 @@
         {
             hs.get(TestAccessMode.SET).invokeExact(0x01234567);
 
-            int o = (int) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(0xCAFEBABE);
+            int o = (int) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(0x89ABCDEF);
             assertEquals(o, 0x01234567, "getAndAdd int");
-            int c = (int) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(0xCAFEBABE);
-            assertEquals(c, (int)(0x01234567 + 0xCAFEBABE + 0xCAFEBABE), "getAndAdd int value");
+            int x = (int) hs.get(TestAccessMode.GET).invokeExact();
+            assertEquals(x, (int)(0x01234567 + 0x89ABCDEF), "getAndAdd int value");
         }
 
         {
@@ -816,10 +816,10 @@
             {
                 hs.get(TestAccessMode.SET).invokeExact(array, i, 0x01234567);
 
-                int o = (int) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, 0xCAFEBABE);
+                int o = (int) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, 0x89ABCDEF);
                 assertEquals(o, 0x01234567, "getAndAdd int");
-                int c = (int) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(array, i, 0xCAFEBABE);
-                assertEquals(c, (int)(0x01234567 + 0xCAFEBABE + 0xCAFEBABE), "getAndAdd int value");
+                int x = (int) hs.get(TestAccessMode.GET).invokeExact(array, i);
+                assertEquals(x, (int)(0x01234567 + 0x89ABCDEF), "getAndAdd int value");
             }
 
             {
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessLong.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessLong.java	Thu Sep 01 10:17:01 2016 -0700
@@ -259,10 +259,10 @@
         {
             hs.get(TestAccessMode.SET).invokeExact(recv, 0x0123456789ABCDEFL);
 
-            long o = (long) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, 0xDEADBEEFDEADBEEFL);
+            long o = (long) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, 0xCAFEBABECAFEBABEL);
             assertEquals(o, 0x0123456789ABCDEFL, "getAndAdd long");
-            long c = (long) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(recv, 0xDEADBEEFDEADBEEFL);
-            assertEquals(c, (long)(0x0123456789ABCDEFL + 0xDEADBEEFDEADBEEFL + 0xDEADBEEFDEADBEEFL), "getAndAdd long value");
+            long x = (long) hs.get(TestAccessMode.GET).invokeExact(recv);
+            assertEquals(x, (long)(0x0123456789ABCDEFL + 0xCAFEBABECAFEBABEL), "getAndAdd long value");
         }
 
         {
@@ -537,10 +537,10 @@
         {
             hs.get(TestAccessMode.SET).invokeExact(0x0123456789ABCDEFL);
 
-            long o = (long) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(0xDEADBEEFDEADBEEFL);
+            long o = (long) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(0xCAFEBABECAFEBABEL);
             assertEquals(o, 0x0123456789ABCDEFL, "getAndAdd long");
-            long c = (long) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(0xDEADBEEFDEADBEEFL);
-            assertEquals(c, (long)(0x0123456789ABCDEFL + 0xDEADBEEFDEADBEEFL + 0xDEADBEEFDEADBEEFL), "getAndAdd long value");
+            long x = (long) hs.get(TestAccessMode.GET).invokeExact();
+            assertEquals(x, (long)(0x0123456789ABCDEFL + 0xCAFEBABECAFEBABEL), "getAndAdd long value");
         }
 
         {
@@ -816,10 +816,10 @@
             {
                 hs.get(TestAccessMode.SET).invokeExact(array, i, 0x0123456789ABCDEFL);
 
-                long o = (long) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, 0xDEADBEEFDEADBEEFL);
+                long o = (long) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, 0xCAFEBABECAFEBABEL);
                 assertEquals(o, 0x0123456789ABCDEFL, "getAndAdd long");
-                long c = (long) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(array, i, 0xDEADBEEFDEADBEEFL);
-                assertEquals(c, (long)(0x0123456789ABCDEFL + 0xDEADBEEFDEADBEEFL + 0xDEADBEEFDEADBEEFL), "getAndAdd long value");
+                long x = (long) hs.get(TestAccessMode.GET).invokeExact(array, i);
+                assertEquals(x, (long)(0x0123456789ABCDEFL + 0xCAFEBABECAFEBABEL), "getAndAdd long value");
             }
 
             {
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessShort.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodHandleAccessShort.java	Thu Sep 01 10:17:01 2016 -0700
@@ -259,10 +259,10 @@
         {
             hs.get(TestAccessMode.SET).invokeExact(recv, (short)0x0123);
 
-            short o = (short) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, (short)0x89AB);
+            short o = (short) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, (short)0x4567);
             assertEquals(o, (short)0x0123, "getAndAdd short");
-            short c = (short) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(recv, (short)0x89AB);
-            assertEquals(c, (short)((short)0x0123 + (short)0x89AB + (short)0x89AB), "getAndAdd short value");
+            short x = (short) hs.get(TestAccessMode.GET).invokeExact(recv);
+            assertEquals(x, (short)((short)0x0123 + (short)0x4567), "getAndAdd short value");
         }
 
         {
@@ -537,10 +537,10 @@
         {
             hs.get(TestAccessMode.SET).invokeExact((short)0x0123);
 
-            short o = (short) hs.get(TestAccessMode.GET_AND_ADD).invokeExact((short)0x89AB);
+            short o = (short) hs.get(TestAccessMode.GET_AND_ADD).invokeExact((short)0x4567);
             assertEquals(o, (short)0x0123, "getAndAdd short");
-            short c = (short) hs.get(TestAccessMode.ADD_AND_GET).invokeExact((short)0x89AB);
-            assertEquals(c, (short)((short)0x0123 + (short)0x89AB + (short)0x89AB), "getAndAdd short value");
+            short x = (short) hs.get(TestAccessMode.GET).invokeExact();
+            assertEquals(x, (short)((short)0x0123 + (short)0x4567), "getAndAdd short value");
         }
 
         {
@@ -816,10 +816,10 @@
             {
                 hs.get(TestAccessMode.SET).invokeExact(array, i, (short)0x0123);
 
-                short o = (short) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, (short)0x89AB);
+                short o = (short) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, (short)0x4567);
                 assertEquals(o, (short)0x0123, "getAndAdd short");
-                short c = (short) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(array, i, (short)0x89AB);
-                assertEquals(c, (short)((short)0x0123 + (short)0x89AB + (short)0x89AB), "getAndAdd short value");
+                short x = (short) hs.get(TestAccessMode.GET).invokeExact(array, i);
+                assertEquals(x, (short)((short)0x0123 + (short)0x4567), "getAndAdd short value");
             }
 
             {
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeByte.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeByte.java	Thu Sep 01 10:17:01 2016 -0700
@@ -727,35 +727,6 @@
             byte x = (byte) vh.getAndAddRelease(recv, (byte)0x01, Void.class);
         });
 
-        // AddAndGet
-        // Incorrect argument types
-        checkNPE(() -> { // null receiver
-            byte x = (byte) vh.addAndGet(null, (byte)0x01);
-        });
-        checkCCE(() -> { // receiver reference class
-            byte x = (byte) vh.addAndGet(Void.class, (byte)0x01);
-        });
-        checkWMTE(() -> { // value reference class
-            byte x = (byte) vh.addAndGet(recv, Void.class);
-        });
-        checkWMTE(() -> { // reciever primitive class
-            byte x = (byte) vh.addAndGet(0, (byte)0x01);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(recv, (byte)0x01);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(recv, (byte)0x01);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            byte x = (byte) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            byte x = (byte) vh.addAndGet(recv, (byte)0x01, Void.class);
-        });
-
         // GetAndBitwiseOr
         // Incorrect argument types
         checkNPE(() -> { // null receiver
@@ -1668,27 +1639,6 @@
             byte x = (byte) vh.getAndAddRelease((byte)0x01, Void.class);
         });
 
-
-        // AddAndGet
-        // Incorrect argument types
-        checkWMTE(() -> { // value reference class
-            byte x = (byte) vh.addAndGet(Void.class);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet((byte)0x01);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet((byte)0x01);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            byte x = (byte) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            byte x = (byte) vh.addAndGet((byte)0x01, Void.class);
-        });
-
         // GetAndBitwiseOr
         // Incorrect argument types
         checkWMTE(() -> { // value reference class
@@ -2721,39 +2671,6 @@
             byte x = (byte) vh.getAndAddRelease(array, 0, (byte)0x01, Void.class);
         });
 
-
-        // AddAndGet
-        // Incorrect argument types
-        checkNPE(() -> { // null array
-            byte x = (byte) vh.addAndGet(null, 0, (byte)0x01);
-        });
-        checkCCE(() -> { // array reference class
-            byte x = (byte) vh.addAndGet(Void.class, 0, (byte)0x01);
-        });
-        checkWMTE(() -> { // value reference class
-            byte x = (byte) vh.addAndGet(array, 0, Void.class);
-        });
-        checkWMTE(() -> { // array primitive class
-            byte x = (byte) vh.addAndGet(0, 0, (byte)0x01);
-        });
-        checkWMTE(() -> { // index reference class
-            byte x = (byte) vh.addAndGet(array, Void.class, (byte)0x01);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(array, 0, (byte)0x01);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(array, 0, (byte)0x01);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            byte x = (byte) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            byte x = (byte) vh.addAndGet(array, 0, (byte)0x01, Void.class);
-        });
-
         // GetAndBitwiseOr
         // Incorrect argument types
         checkNPE(() -> { // null array
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeChar.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeChar.java	Thu Sep 01 10:17:01 2016 -0700
@@ -727,35 +727,6 @@
             char x = (char) vh.getAndAddRelease(recv, '\u0123', Void.class);
         });
 
-        // AddAndGet
-        // Incorrect argument types
-        checkNPE(() -> { // null receiver
-            char x = (char) vh.addAndGet(null, '\u0123');
-        });
-        checkCCE(() -> { // receiver reference class
-            char x = (char) vh.addAndGet(Void.class, '\u0123');
-        });
-        checkWMTE(() -> { // value reference class
-            char x = (char) vh.addAndGet(recv, Void.class);
-        });
-        checkWMTE(() -> { // reciever primitive class
-            char x = (char) vh.addAndGet(0, '\u0123');
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(recv, '\u0123');
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(recv, '\u0123');
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            char x = (char) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            char x = (char) vh.addAndGet(recv, '\u0123', Void.class);
-        });
-
         // GetAndBitwiseOr
         // Incorrect argument types
         checkNPE(() -> { // null receiver
@@ -1668,27 +1639,6 @@
             char x = (char) vh.getAndAddRelease('\u0123', Void.class);
         });
 
-
-        // AddAndGet
-        // Incorrect argument types
-        checkWMTE(() -> { // value reference class
-            char x = (char) vh.addAndGet(Void.class);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet('\u0123');
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet('\u0123');
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            char x = (char) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            char x = (char) vh.addAndGet('\u0123', Void.class);
-        });
-
         // GetAndBitwiseOr
         // Incorrect argument types
         checkWMTE(() -> { // value reference class
@@ -2721,39 +2671,6 @@
             char x = (char) vh.getAndAddRelease(array, 0, '\u0123', Void.class);
         });
 
-
-        // AddAndGet
-        // Incorrect argument types
-        checkNPE(() -> { // null array
-            char x = (char) vh.addAndGet(null, 0, '\u0123');
-        });
-        checkCCE(() -> { // array reference class
-            char x = (char) vh.addAndGet(Void.class, 0, '\u0123');
-        });
-        checkWMTE(() -> { // value reference class
-            char x = (char) vh.addAndGet(array, 0, Void.class);
-        });
-        checkWMTE(() -> { // array primitive class
-            char x = (char) vh.addAndGet(0, 0, '\u0123');
-        });
-        checkWMTE(() -> { // index reference class
-            char x = (char) vh.addAndGet(array, Void.class, '\u0123');
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(array, 0, '\u0123');
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(array, 0, '\u0123');
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            char x = (char) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            char x = (char) vh.addAndGet(array, 0, '\u0123', Void.class);
-        });
-
         // GetAndBitwiseOr
         // Incorrect argument types
         checkNPE(() -> { // null array
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeDouble.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeDouble.java	Thu Sep 01 10:17:01 2016 -0700
@@ -727,35 +727,6 @@
             double x = (double) vh.getAndAddRelease(recv, 1.0d, Void.class);
         });
 
-        // AddAndGet
-        // Incorrect argument types
-        checkNPE(() -> { // null receiver
-            double x = (double) vh.addAndGet(null, 1.0d);
-        });
-        checkCCE(() -> { // receiver reference class
-            double x = (double) vh.addAndGet(Void.class, 1.0d);
-        });
-        checkWMTE(() -> { // value reference class
-            double x = (double) vh.addAndGet(recv, Void.class);
-        });
-        checkWMTE(() -> { // reciever primitive class
-            double x = (double) vh.addAndGet(0, 1.0d);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(recv, 1.0d);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(recv, 1.0d);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            double x = (double) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            double x = (double) vh.addAndGet(recv, 1.0d, Void.class);
-        });
-
     }
 
     static void testInstanceFieldWrongMethodType(VarHandleTestMethodTypeDouble recv, Handles hs) throws Throwable {
@@ -1364,27 +1335,6 @@
             double x = (double) vh.getAndAddRelease(1.0d, Void.class);
         });
 
-
-        // AddAndGet
-        // Incorrect argument types
-        checkWMTE(() -> { // value reference class
-            double x = (double) vh.addAndGet(Void.class);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(1.0d);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(1.0d);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            double x = (double) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            double x = (double) vh.addAndGet(1.0d, Void.class);
-        });
-
     }
 
     static void testStaticFieldWrongMethodType(Handles hs) throws Throwable {
@@ -2205,39 +2155,6 @@
             double x = (double) vh.getAndAddRelease(array, 0, 1.0d, Void.class);
         });
 
-
-        // AddAndGet
-        // Incorrect argument types
-        checkNPE(() -> { // null array
-            double x = (double) vh.addAndGet(null, 0, 1.0d);
-        });
-        checkCCE(() -> { // array reference class
-            double x = (double) vh.addAndGet(Void.class, 0, 1.0d);
-        });
-        checkWMTE(() -> { // value reference class
-            double x = (double) vh.addAndGet(array, 0, Void.class);
-        });
-        checkWMTE(() -> { // array primitive class
-            double x = (double) vh.addAndGet(0, 0, 1.0d);
-        });
-        checkWMTE(() -> { // index reference class
-            double x = (double) vh.addAndGet(array, Void.class, 1.0d);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(array, 0, 1.0d);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(array, 0, 1.0d);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            double x = (double) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            double x = (double) vh.addAndGet(array, 0, 1.0d, Void.class);
-        });
-
     }
 
     static void testArrayWrongMethodType(Handles hs) throws Throwable {
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeFloat.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeFloat.java	Thu Sep 01 10:17:01 2016 -0700
@@ -727,35 +727,6 @@
             float x = (float) vh.getAndAddRelease(recv, 1.0f, Void.class);
         });
 
-        // AddAndGet
-        // Incorrect argument types
-        checkNPE(() -> { // null receiver
-            float x = (float) vh.addAndGet(null, 1.0f);
-        });
-        checkCCE(() -> { // receiver reference class
-            float x = (float) vh.addAndGet(Void.class, 1.0f);
-        });
-        checkWMTE(() -> { // value reference class
-            float x = (float) vh.addAndGet(recv, Void.class);
-        });
-        checkWMTE(() -> { // reciever primitive class
-            float x = (float) vh.addAndGet(0, 1.0f);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(recv, 1.0f);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(recv, 1.0f);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            float x = (float) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            float x = (float) vh.addAndGet(recv, 1.0f, Void.class);
-        });
-
     }
 
     static void testInstanceFieldWrongMethodType(VarHandleTestMethodTypeFloat recv, Handles hs) throws Throwable {
@@ -1364,27 +1335,6 @@
             float x = (float) vh.getAndAddRelease(1.0f, Void.class);
         });
 
-
-        // AddAndGet
-        // Incorrect argument types
-        checkWMTE(() -> { // value reference class
-            float x = (float) vh.addAndGet(Void.class);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(1.0f);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(1.0f);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            float x = (float) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            float x = (float) vh.addAndGet(1.0f, Void.class);
-        });
-
     }
 
     static void testStaticFieldWrongMethodType(Handles hs) throws Throwable {
@@ -2205,39 +2155,6 @@
             float x = (float) vh.getAndAddRelease(array, 0, 1.0f, Void.class);
         });
 
-
-        // AddAndGet
-        // Incorrect argument types
-        checkNPE(() -> { // null array
-            float x = (float) vh.addAndGet(null, 0, 1.0f);
-        });
-        checkCCE(() -> { // array reference class
-            float x = (float) vh.addAndGet(Void.class, 0, 1.0f);
-        });
-        checkWMTE(() -> { // value reference class
-            float x = (float) vh.addAndGet(array, 0, Void.class);
-        });
-        checkWMTE(() -> { // array primitive class
-            float x = (float) vh.addAndGet(0, 0, 1.0f);
-        });
-        checkWMTE(() -> { // index reference class
-            float x = (float) vh.addAndGet(array, Void.class, 1.0f);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(array, 0, 1.0f);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(array, 0, 1.0f);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            float x = (float) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            float x = (float) vh.addAndGet(array, 0, 1.0f, Void.class);
-        });
-
     }
 
     static void testArrayWrongMethodType(Handles hs) throws Throwable {
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeInt.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeInt.java	Thu Sep 01 10:17:01 2016 -0700
@@ -727,35 +727,6 @@
             int x = (int) vh.getAndAddRelease(recv, 0x01234567, Void.class);
         });
 
-        // AddAndGet
-        // Incorrect argument types
-        checkNPE(() -> { // null receiver
-            int x = (int) vh.addAndGet(null, 0x01234567);
-        });
-        checkCCE(() -> { // receiver reference class
-            int x = (int) vh.addAndGet(Void.class, 0x01234567);
-        });
-        checkWMTE(() -> { // value reference class
-            int x = (int) vh.addAndGet(recv, Void.class);
-        });
-        checkWMTE(() -> { // reciever primitive class
-            int x = (int) vh.addAndGet(0, 0x01234567);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(recv, 0x01234567);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(recv, 0x01234567);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            int x = (int) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            int x = (int) vh.addAndGet(recv, 0x01234567, Void.class);
-        });
-
         // GetAndBitwiseOr
         // Incorrect argument types
         checkNPE(() -> { // null receiver
@@ -1668,27 +1639,6 @@
             int x = (int) vh.getAndAddRelease(0x01234567, Void.class);
         });
 
-
-        // AddAndGet
-        // Incorrect argument types
-        checkWMTE(() -> { // value reference class
-            int x = (int) vh.addAndGet(Void.class);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(0x01234567);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(0x01234567);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            int x = (int) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            int x = (int) vh.addAndGet(0x01234567, Void.class);
-        });
-
         // GetAndBitwiseOr
         // Incorrect argument types
         checkWMTE(() -> { // value reference class
@@ -2721,39 +2671,6 @@
             int x = (int) vh.getAndAddRelease(array, 0, 0x01234567, Void.class);
         });
 
-
-        // AddAndGet
-        // Incorrect argument types
-        checkNPE(() -> { // null array
-            int x = (int) vh.addAndGet(null, 0, 0x01234567);
-        });
-        checkCCE(() -> { // array reference class
-            int x = (int) vh.addAndGet(Void.class, 0, 0x01234567);
-        });
-        checkWMTE(() -> { // value reference class
-            int x = (int) vh.addAndGet(array, 0, Void.class);
-        });
-        checkWMTE(() -> { // array primitive class
-            int x = (int) vh.addAndGet(0, 0, 0x01234567);
-        });
-        checkWMTE(() -> { // index reference class
-            int x = (int) vh.addAndGet(array, Void.class, 0x01234567);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(array, 0, 0x01234567);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(array, 0, 0x01234567);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            int x = (int) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            int x = (int) vh.addAndGet(array, 0, 0x01234567, Void.class);
-        });
-
         // GetAndBitwiseOr
         // Incorrect argument types
         checkNPE(() -> { // null array
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeLong.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeLong.java	Thu Sep 01 10:17:01 2016 -0700
@@ -727,35 +727,6 @@
             long x = (long) vh.getAndAddRelease(recv, 0x0123456789ABCDEFL, Void.class);
         });
 
-        // AddAndGet
-        // Incorrect argument types
-        checkNPE(() -> { // null receiver
-            long x = (long) vh.addAndGet(null, 0x0123456789ABCDEFL);
-        });
-        checkCCE(() -> { // receiver reference class
-            long x = (long) vh.addAndGet(Void.class, 0x0123456789ABCDEFL);
-        });
-        checkWMTE(() -> { // value reference class
-            long x = (long) vh.addAndGet(recv, Void.class);
-        });
-        checkWMTE(() -> { // reciever primitive class
-            long x = (long) vh.addAndGet(0, 0x0123456789ABCDEFL);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(recv, 0x0123456789ABCDEFL);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(recv, 0x0123456789ABCDEFL);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            long x = (long) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            long x = (long) vh.addAndGet(recv, 0x0123456789ABCDEFL, Void.class);
-        });
-
         // GetAndBitwiseOr
         // Incorrect argument types
         checkNPE(() -> { // null receiver
@@ -1668,27 +1639,6 @@
             long x = (long) vh.getAndAddRelease(0x0123456789ABCDEFL, Void.class);
         });
 
-
-        // AddAndGet
-        // Incorrect argument types
-        checkWMTE(() -> { // value reference class
-            long x = (long) vh.addAndGet(Void.class);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(0x0123456789ABCDEFL);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(0x0123456789ABCDEFL);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            long x = (long) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            long x = (long) vh.addAndGet(0x0123456789ABCDEFL, Void.class);
-        });
-
         // GetAndBitwiseOr
         // Incorrect argument types
         checkWMTE(() -> { // value reference class
@@ -2721,39 +2671,6 @@
             long x = (long) vh.getAndAddRelease(array, 0, 0x0123456789ABCDEFL, Void.class);
         });
 
-
-        // AddAndGet
-        // Incorrect argument types
-        checkNPE(() -> { // null array
-            long x = (long) vh.addAndGet(null, 0, 0x0123456789ABCDEFL);
-        });
-        checkCCE(() -> { // array reference class
-            long x = (long) vh.addAndGet(Void.class, 0, 0x0123456789ABCDEFL);
-        });
-        checkWMTE(() -> { // value reference class
-            long x = (long) vh.addAndGet(array, 0, Void.class);
-        });
-        checkWMTE(() -> { // array primitive class
-            long x = (long) vh.addAndGet(0, 0, 0x0123456789ABCDEFL);
-        });
-        checkWMTE(() -> { // index reference class
-            long x = (long) vh.addAndGet(array, Void.class, 0x0123456789ABCDEFL);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(array, 0, 0x0123456789ABCDEFL);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(array, 0, 0x0123456789ABCDEFL);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            long x = (long) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            long x = (long) vh.addAndGet(array, 0, 0x0123456789ABCDEFL, Void.class);
-        });
-
         // GetAndBitwiseOr
         // Incorrect argument types
         checkNPE(() -> { // null array
--- a/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeShort.java	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/VarHandleTestMethodTypeShort.java	Thu Sep 01 10:17:01 2016 -0700
@@ -727,35 +727,6 @@
             short x = (short) vh.getAndAddRelease(recv, (short)0x0123, Void.class);
         });
 
-        // AddAndGet
-        // Incorrect argument types
-        checkNPE(() -> { // null receiver
-            short x = (short) vh.addAndGet(null, (short)0x0123);
-        });
-        checkCCE(() -> { // receiver reference class
-            short x = (short) vh.addAndGet(Void.class, (short)0x0123);
-        });
-        checkWMTE(() -> { // value reference class
-            short x = (short) vh.addAndGet(recv, Void.class);
-        });
-        checkWMTE(() -> { // reciever primitive class
-            short x = (short) vh.addAndGet(0, (short)0x0123);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(recv, (short)0x0123);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(recv, (short)0x0123);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            short x = (short) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            short x = (short) vh.addAndGet(recv, (short)0x0123, Void.class);
-        });
-
         // GetAndBitwiseOr
         // Incorrect argument types
         checkNPE(() -> { // null receiver
@@ -1668,27 +1639,6 @@
             short x = (short) vh.getAndAddRelease((short)0x0123, Void.class);
         });
 
-
-        // AddAndGet
-        // Incorrect argument types
-        checkWMTE(() -> { // value reference class
-            short x = (short) vh.addAndGet(Void.class);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet((short)0x0123);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet((short)0x0123);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            short x = (short) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            short x = (short) vh.addAndGet((short)0x0123, Void.class);
-        });
-
         // GetAndBitwiseOr
         // Incorrect argument types
         checkWMTE(() -> { // value reference class
@@ -2721,39 +2671,6 @@
             short x = (short) vh.getAndAddRelease(array, 0, (short)0x0123, Void.class);
         });
 
-
-        // AddAndGet
-        // Incorrect argument types
-        checkNPE(() -> { // null array
-            short x = (short) vh.addAndGet(null, 0, (short)0x0123);
-        });
-        checkCCE(() -> { // array reference class
-            short x = (short) vh.addAndGet(Void.class, 0, (short)0x0123);
-        });
-        checkWMTE(() -> { // value reference class
-            short x = (short) vh.addAndGet(array, 0, Void.class);
-        });
-        checkWMTE(() -> { // array primitive class
-            short x = (short) vh.addAndGet(0, 0, (short)0x0123);
-        });
-        checkWMTE(() -> { // index reference class
-            short x = (short) vh.addAndGet(array, Void.class, (short)0x0123);
-        });
-        // Incorrect return type
-        checkWMTE(() -> { // reference class
-            Void r = (Void) vh.addAndGet(array, 0, (short)0x0123);
-        });
-        checkWMTE(() -> { // primitive class
-            boolean x = (boolean) vh.addAndGet(array, 0, (short)0x0123);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            short x = (short) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            short x = (short) vh.addAndGet(array, 0, (short)0x0123, Void.class);
-        });
-
         // GetAndBitwiseOr
         // Incorrect argument types
         checkNPE(() -> { // null array
--- a/jdk/test/java/lang/invoke/VarHandles/X-VarHandleTestAccess.java.template	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/X-VarHandleTestAccess.java.template	Thu Sep 01 10:17:01 2016 -0700
@@ -129,12 +129,10 @@
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 #else[AtomicAdd]
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 #end[AtomicAdd]
 
 #if[Bitwise]
@@ -365,10 +363,6 @@
         checkUOE(() -> {
             $type$ o = ($type$) vh.getAndAddRelease(recv, $value1$);
         });
-
-        checkUOE(() -> {
-            $type$ o = ($type$) vh.addAndGet(recv, $value1$);
-        });
 #end[AtomicAdd]
 
 #if[!Bitwise]
@@ -513,10 +507,6 @@
         checkUOE(() -> {
             $type$ o = ($type$) vh.getAndAddRelease($value1$);
         });
-
-        checkUOE(() -> {
-            $type$ o = ($type$) vh.addAndGet($value1$);
-        });
 #end[AtomicAdd]
 
 #if[!Bitwise]
@@ -723,10 +713,10 @@
         {
             vh.set(recv, $value1$);
 
-            $type$ o = ($type$) vh.getAndAdd(recv, $value3$);
+            $type$ o = ($type$) vh.getAndAdd(recv, $value2$);
             assertEquals(o, $value1$, "getAndAdd $type$");
-            $type$ c = ($type$) vh.addAndGet(recv, $value3$);
-            assertEquals(c, ($type$)($value1$ + $value3$ + $value3$), "getAndAdd $type$ value");
+            $type$ x = ($type$) vh.get(recv);
+            assertEquals(x, ($type$)($value1$ + $value2$), "getAndAdd $type$ value");
         }
 
         {
@@ -894,10 +884,6 @@
         checkUOE(() -> {
             $type$ o = ($type$) vh.getAndAddRelease(recv, $value1$);
         });
-
-        checkUOE(() -> {
-            $type$ o = ($type$) vh.addAndGet(recv, $value1$);
-        });
 #end[AtomicAdd]
 
 #if[!Bitwise]
@@ -1104,10 +1090,10 @@
         {
             vh.set($value1$);
 
-            $type$ o = ($type$) vh.getAndAdd( $value3$);
+            $type$ o = ($type$) vh.getAndAdd($value2$);
             assertEquals(o, $value1$, "getAndAdd $type$");
-            $type$ c = ($type$) vh.addAndGet($value3$);
-            assertEquals(c, ($type$)($value1$ + $value3$ + $value3$), "getAndAdd $type$ value");
+            $type$ x = ($type$) vh.get();
+            assertEquals(x, ($type$)($value1$ + $value2$), "getAndAdd $type$ value");
         }
 
         {
@@ -1275,10 +1261,6 @@
         checkUOE(() -> {
             $type$ o = ($type$) vh.getAndAddRelease($value1$);
         });
-
-        checkUOE(() -> {
-            $type$ o = ($type$) vh.addAndGet($value1$);
-        });
 #end[AtomicAdd]
 
 #if[!Bitwise]
@@ -1488,10 +1470,10 @@
             {
                 vh.set(array, i, $value1$);
 
-                $type$ o = ($type$) vh.getAndAdd(array, i, $value3$);
+                $type$ o = ($type$) vh.getAndAdd(array, i, $value2$);
                 assertEquals(o, $value1$, "getAndAdd $type$");
-                $type$ c = ($type$) vh.addAndGet(array, i, $value3$);
-                assertEquals(c, ($type$)($value1$ + $value3$ + $value3$), "getAndAdd $type$ value");
+                $type$ x = ($type$) vh.get(array, i);
+                assertEquals(x, ($type$)($value1$ + $value2$), "getAndAdd $type$ value");
             }
 
             {
@@ -1663,10 +1645,6 @@
         checkUOE(() -> {
             $type$ o = ($type$) vh.getAndAddRelease(array, i, $value1$);
         });
-
-        checkUOE(() -> {
-            $type$ o = ($type$) vh.addAndGet(array, i, $value1$);
-        });
 #end[AtomicAdd]
 
 #if[!Bitwise]
@@ -1804,10 +1782,6 @@
             checkIOOBE(() -> {
                 $type$ o = ($type$) vh.getAndAddRelease(array, ci, $value1$);
             });
-
-            checkIOOBE(() -> {
-                $type$ o = ($type$) vh.addAndGet(array, ci, $value1$);
-            });
 #end[AtomicAdd]
 
 #if[Bitwise]
--- a/jdk/test/java/lang/invoke/VarHandles/X-VarHandleTestByteArrayView.java.template	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/X-VarHandleTestByteArrayView.java.template	Thu Sep 01 10:17:01 2016 -0700
@@ -118,12 +118,10 @@
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertTrue(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 #else[AtomicAdd]
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_ACQUIRE));
         assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.GET_AND_ADD_RELEASE));
-        assertFalse(vh.isAccessModeSupported(VarHandle.AccessMode.ADD_AND_GET));
 #end[AtomicAdd]
 
 #if[Bitwise]
@@ -289,10 +287,6 @@
         checkUOE(() -> {
             $type$ o = ($type$) vh.getAndAddRelease(array, ci, VALUE_1);
         });
-
-        checkUOE(() -> {
-            $type$ o = ($type$) vh.addAndGet(array, ci, VALUE_1);
-        });
 #end[AtomicAdd]
 
 #if[!Bitwise]
@@ -462,10 +456,6 @@
             checkROBE(() -> {
                 $type$ o = ($type$) vh.getAndAddRelease(array, ci, VALUE_1);
             });
-
-            checkROBE(() -> {
-                $type$ o = ($type$) vh.addAndGet(array, ci, VALUE_1);
-            });
 #else[AtomicAdd]
             checkUOE(() -> {
                 $type$ o = ($type$) vh.getAndAdd(array, ci, VALUE_1);
@@ -478,10 +468,6 @@
             checkUOE(() -> {
                 $type$ o = ($type$) vh.getAndAddRelease(array, ci, VALUE_1);
             });
-
-            checkUOE(() -> {
-                $type$ o = ($type$) vh.addAndGet(array, ci, VALUE_1);
-            });
 #end[AtomicAdd]
 
 #if[Bitwise]
@@ -616,10 +602,6 @@
             checkUOE(() -> {
                 $type$ o = ($type$) vh.getAndAddRelease(array, ci, VALUE_1);
             });
-
-            checkUOE(() -> {
-                $type$ o = ($type$) vh.addAndGet(array, ci, VALUE_1);
-            });
 #end[AtomicAdd]
 #if[!Bitwise]
             checkUOE(() -> {
@@ -760,10 +742,6 @@
             checkIOOBE(() -> {
                 $type$ o = ($type$) vh.getAndAddRelease(array, ci, VALUE_1);
             });
-
-            checkIOOBE(() -> {
-                $type$ o = ($type$) vh.addAndGet(array, ci, VALUE_1);
-            });
 #end[AtomicAdd]
 
 #if[Bitwise]
@@ -910,10 +888,6 @@
                 checkIOOBE(() -> {
                     $type$ o = ($type$) vh.getAndAddRelease(array, ci, VALUE_1);
                 });
-
-                checkIOOBE(() -> {
-                    $type$ o = ($type$) vh.addAndGet(array, ci, VALUE_1);
-                });
 #end[AtomicAdd]
 
 #if[Bitwise]
@@ -1051,10 +1025,6 @@
                 checkISE(() -> {
                     $type$ o = ($type$) vh.getAndAddRelease(array, ci, VALUE_1);
                 });
-
-                checkISE(() -> {
-                    $type$ o = ($type$) vh.addAndGet(array, ci, VALUE_1);
-                });
 #end[AtomicAdd]
 
 #if[Bitwise]
@@ -1194,10 +1164,6 @@
                     checkISE(() -> {
                         $type$ o = ($type$) vh.getAndAddRelease(array, ci, VALUE_1);
                     });
-
-                    checkISE(() -> {
-                        $type$ o = ($type$) vh.addAndGet(array, ci, VALUE_1);
-                    });
 #end[AtomicAdd]
 
 #if[Bitwise]
@@ -1414,10 +1380,10 @@
                 {
                     vh.set(array, i, VALUE_1);
 
-                    $type$ o = ($type$) vh.getAndAdd(array, i, VALUE_3);
+                    $type$ o = ($type$) vh.getAndAdd(array, i, VALUE_2);
                     assertEquals(o, VALUE_1, "getAndAdd $type$");
-                    $type$ c = ($type$) vh.addAndGet(array, i, VALUE_3);
-                    assertEquals(c, VALUE_1 + VALUE_3 + VALUE_3, "getAndAdd $type$ value");
+                    $type$ x = ($type$) vh.get(array, i);
+                    assertEquals(x, VALUE_1 + VALUE_2, "getAndAdd $type$ value");
                 }
 
                 {
@@ -1700,10 +1666,10 @@
                 {
                     vh.set(array, i, VALUE_1);
 
-                    $type$ o = ($type$) vh.getAndAdd(array, i, VALUE_3);
+                    $type$ o = ($type$) vh.getAndAdd(array, i, VALUE_2);
                     assertEquals(o, VALUE_1, "getAndAdd $type$");
-                    $type$ c = ($type$) vh.addAndGet(array, i, VALUE_3);
-                    assertEquals(c, VALUE_1 + VALUE_3 + VALUE_3, "getAndAdd $type$ value");
+                    $type$ x = ($type$) vh.get(array, i);
+                    assertEquals(x, VALUE_1 + VALUE_2, "getAndAdd $type$ value");
                 }
 
                 {
--- a/jdk/test/java/lang/invoke/VarHandles/X-VarHandleTestMethodHandleAccess.java.template	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/X-VarHandleTestMethodHandleAccess.java.template	Thu Sep 01 10:17:01 2016 -0700
@@ -262,10 +262,10 @@
         {
             hs.get(TestAccessMode.SET).invokeExact(recv, $value1$);
 
-            $type$ o = ($type$) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, $value3$);
+            $type$ o = ($type$) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(recv, $value2$);
             assertEquals(o, $value1$, "getAndAdd $type$");
-            $type$ c = ($type$) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(recv, $value3$);
-            assertEquals(c, ($type$)($value1$ + $value3$ + $value3$), "getAndAdd $type$ value");
+            $type$ x = ($type$) hs.get(TestAccessMode.GET).invokeExact(recv);
+            assertEquals(x, ($type$)($value1$ + $value2$), "getAndAdd $type$ value");
         }
 
         {
@@ -579,10 +579,10 @@
         {
             hs.get(TestAccessMode.SET).invokeExact($value1$);
 
-            $type$ o = ($type$) hs.get(TestAccessMode.GET_AND_ADD).invokeExact($value3$);
+            $type$ o = ($type$) hs.get(TestAccessMode.GET_AND_ADD).invokeExact($value2$);
             assertEquals(o, $value1$, "getAndAdd $type$");
-            $type$ c = ($type$) hs.get(TestAccessMode.ADD_AND_GET).invokeExact($value3$);
-            assertEquals(c, ($type$)($value1$ + $value3$ + $value3$), "getAndAdd $type$ value");
+            $type$ x = ($type$) hs.get(TestAccessMode.GET).invokeExact();
+            assertEquals(x, ($type$)($value1$ + $value2$), "getAndAdd $type$ value");
         }
 
         {
@@ -897,10 +897,10 @@
             {
                 hs.get(TestAccessMode.SET).invokeExact(array, i, $value1$);
 
-                $type$ o = ($type$) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, $value3$);
+                $type$ o = ($type$) hs.get(TestAccessMode.GET_AND_ADD).invokeExact(array, i, $value2$);
                 assertEquals(o, $value1$, "getAndAdd $type$");
-                $type$ c = ($type$) hs.get(TestAccessMode.ADD_AND_GET).invokeExact(array, i, $value3$);
-                assertEquals(c, ($type$)($value1$ + $value3$ + $value3$), "getAndAdd $type$ value");
+                $type$ x = ($type$) hs.get(TestAccessMode.GET).invokeExact(array, i);
+                assertEquals(x, ($type$)($value1$ + $value2$), "getAndAdd $type$ value");
             }
 
             {
--- a/jdk/test/java/lang/invoke/VarHandles/X-VarHandleTestMethodType.java.template	Thu Sep 01 10:16:57 2016 -0700
+++ b/jdk/test/java/lang/invoke/VarHandles/X-VarHandleTestMethodType.java.template	Thu Sep 01 10:17:01 2016 -0700
@@ -729,35 +729,6 @@
         checkWMTE(() -> { // >
             $type$ x = ($type$) vh.getAndAddRelease(recv, $value1$, Void.class);
         });
-
-        // AddAndGet
-        // Incorrect argument types
-        checkNPE(() -> { // null receiver
-            $type$ x = ($type$) vh.addAndGet(null, $value1$);
-        });
-        checkCCE(() -> { // receiver reference class
-            $type$ x = ($type$) vh.addAndGet(Void.class, $value1$);
-        });
-        check{#if[String]?CCE:WMTE}(() -> { // value reference class
-            $type$ x = ($type$) vh.addAndGet(recv, Void.class);
-        });
-        checkWMTE(() -> { // reciever primitive class
-            $type$ x = ($type$) vh.addAndGet(0, $value1$);
-        });
-        // Incorrect return type
-        check{#if[String]?CCE:WMTE}(() -> { // reference class
-            Void r = (Void) vh.addAndGet(recv, $value1$);
-        });
-        checkWMTE(() -> { // primitive class
-            $wrong_primitive_type$ x = ($wrong_primitive_type$) vh.addAndGet(recv, $value1$);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            $type$ x = ($type$) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            $type$ x = ($type$) vh.addAndGet(recv, $value1$, Void.class);
-        });
 #end[AtomicAdd]
 
 #if[Bitwise]
@@ -1682,27 +1653,6 @@
         checkWMTE(() -> { // >
             $type$ x = ($type$) vh.getAndAddRelease($value1$, Void.class);
         });
-
-
-        // AddAndGet
-        // Incorrect argument types
-        check{#if[String]?CCE:WMTE}(() -> { // value reference class
-            $type$ x = ($type$) vh.addAndGet(Void.class);
-        });
-        // Incorrect return type
-        check{#if[String]?CCE:WMTE}(() -> { // reference class
-            Void r = (Void) vh.addAndGet($value1$);
-        });
-        checkWMTE(() -> { // primitive class
-            $wrong_primitive_type$ x = ($wrong_primitive_type$) vh.addAndGet($value1$);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            $type$ x = ($type$) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            $type$ x = ($type$) vh.addAndGet($value1$, Void.class);
-        });
 #end[AtomicAdd]
 
 #if[Bitwise]
@@ -2747,39 +2697,6 @@
         checkWMTE(() -> { // >
             $type$ x = ($type$) vh.getAndAddRelease(array, 0, $value1$, Void.class);
         });
-
-
-        // AddAndGet
-        // Incorrect argument types
-        checkNPE(() -> { // null array
-            $type$ x = ($type$) vh.addAndGet(null, 0, $value1$);
-        });
-        checkCCE(() -> { // array reference class
-            $type$ x = ($type$) vh.addAndGet(Void.class, 0, $value1$);
-        });
-        check{#if[String]?CCE:WMTE}(() -> { // value reference class
-            $type$ x = ($type$) vh.addAndGet(array, 0, Void.class);
-        });
-        checkWMTE(() -> { // array primitive class
-            $type$ x = ($type$) vh.addAndGet(0, 0, $value1$);
-        });
-        checkWMTE(() -> { // index reference class
-            $type$ x = ($type$) vh.addAndGet(array, Void.class, $value1$);
-        });
-        // Incorrect return type
-        check{#if[String]?CCE:WMTE}(() -> { // reference class
-            Void r = (Void) vh.addAndGet(array, 0, $value1$);
-        });
-        checkWMTE(() -> { // primitive class
-            $wrong_primitive_type$ x = ($wrong_primitive_type$) vh.addAndGet(array, 0, $value1$);
-        });
-        // Incorrect arity
-        checkWMTE(() -> { // 0
-            $type$ x = ($type$) vh.addAndGet();
-        });
-        checkWMTE(() -> { // >
-            $type$ x = ($type$) vh.addAndGet(array, 0, $value1$, Void.class);
-        });
 #end[AtomicAdd]
 
 #if[Bitwise]