diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt
index 1162770..2f50058 100644
--- a/RELEASE_NOTES.txt
+++ b/RELEASE_NOTES.txt
@@ -7,6 +7,7 @@
 Milestone 82
 
 <Insert new notes here- top is most recent.>
+  * Removed SkClampMax.
   * Removed SkScalarClampMax and SkScalarPin.
   * Removed SkMax32 and SkMin32.
   * Removed SkMaxScalar and SkMinScalar.
diff --git a/include/core/SkMath.h b/include/core/SkMath.h
index 33d929e..41afb5a 100644
--- a/include/core/SkMath.h
+++ b/include/core/SkMath.h
@@ -21,24 +21,6 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-/** Given an integer and a positive (max) integer, return the value
- *  pinned against 0 and max, inclusive.
- *  @param value    The value we want returned pinned between [0...max]
- *  @param max      The positive max value
- *  @return 0 if value < 0, max if value > max, else value
- */
-static inline int SkClampMax(int value, int max) {
-    // ensure that max is positive
-    SkASSERT(max >= 0);
-    if (value < 0) {
-        value = 0;
-    }
-    if (value > max) {
-        value = max;
-    }
-    return value;
-}
-
 /**
  *  Returns true if value is a power of 2. Does not explicitly check for
  *  value <= 0.
diff --git a/src/core/SkBitmapProcState.cpp b/src/core/SkBitmapProcState.cpp
index 09a75f2..683f023 100755
--- a/src/core/SkBitmapProcState.cpp
+++ b/src/core/SkBitmapProcState.cpp
@@ -36,7 +36,7 @@
     {
         const SkBitmapProcStateAutoMapper mapper(s, x, y);
         const unsigned maxY = s.fPixmap.height() - 1;
-        dstY = SkClampMax(mapper.intY(), maxY);
+        dstY = SkTPin<int>(mapper.intY(), 0, maxY);
         fx = mapper.fractionalIntX();
     }
 
@@ -68,7 +68,7 @@
         }
     } else {
         for (int i = 0; i < count; ++i) {
-            dst[i] = src[SkClampMax(SkFractionalIntToInt(fx), maxX)];
+            dst[i] = src[SkTPin<int>(SkFractionalIntToInt(fx), 0, maxX)];
             fx += dx;
         }
     }
@@ -311,7 +311,7 @@
     const int maxX = s.fPixmap.width() - 1;
     const int maxY = s.fPixmap.height() - 1;
     int ix = s.fFilterOneX + x;
-    int iy = SkClampMax(s.fFilterOneY + y, maxY);
+    int iy = SkTPin(s.fFilterOneY + y, 0, maxY);
     const SkPMColor* row = s.fPixmap.addr32(0, iy);
 
     // clamp to the left
@@ -458,7 +458,7 @@
         const int stopY = s.fPixmap.height();
         switch (s.fTileModeY) {
             case SkTileMode::kClamp:
-                iY0 = SkClampMax(yTemp, stopY-1);
+                iY0 = SkTPin(yTemp, 0, stopY-1);
                 break;
             case SkTileMode::kRepeat:
                 iY0 = sk_int_mod(yTemp, stopY);
@@ -483,7 +483,7 @@
 
             switch (s.fTileModeY) {
             case SkTileMode::kClamp:
-                iY2 = SkClampMax(iY2, stopY-1);
+                iY2 = SkTPin(iY2, 0, stopY-1);
                 break;
             case SkTileMode::kRepeat:
                 iY2 = sk_int_mod(iY2, stopY);
diff --git a/src/core/SkBitmapProcState_matrixProcs.cpp b/src/core/SkBitmapProcState_matrixProcs.cpp
index 0e0cd6d..2f89c87 100755
--- a/src/core/SkBitmapProcState_matrixProcs.cpp
+++ b/src/core/SkBitmapProcState_matrixProcs.cpp
@@ -243,14 +243,14 @@
 }
 
 static unsigned clamp(SkFixed fx, int max) {
-    return SkClampMax(fx >> 16, max);
+    return SkTPin(fx >> 16, 0, max);
 }
 
 #if defined(SK_SUPPORT_LEGACY_TILED_BITMAPS)
  // For use with extract_low_bits_general(), where clamp() above expects extract_low_bits_clamp_clamp()
 static unsigned general_clamp(SkFixed fx, int max)
 {
-    return repeat(SkClampMax(fx, 0xFFFF), max);
+    return repeat(SkTPin(fx, 0, 0xFFFF), max);
 }
 #endif
 
diff --git a/src/core/SkBlurMask.cpp b/src/core/SkBlurMask.cpp
index 9963fff..9d51f55 100644
--- a/src/core/SkBlurMask.cpp
+++ b/src/core/SkBlurMask.cpp
@@ -612,7 +612,7 @@
                 finalValue /= windowSum;
                 uint8_t *outPixel = dstPixels + (x-pad)*dstWidth + y; // transposed output
                 int integerPixel = int(finalValue + 0.5f);
-                *outPixel = SkClampMax( SkClampPos(integerPixel), 255 );
+                *outPixel = SkTPin(SkClampPos(integerPixel), 0, 255);
             }
         }
 
diff --git a/src/effects/SkEmbossMask.cpp b/src/effects/SkEmbossMask.cpp
index 6b8f622..6fcbce3 100644
--- a/src/effects/SkEmbossMask.cpp
+++ b/src/effects/SkEmbossMask.cpp
@@ -91,7 +91,7 @@
                 int hilite = (2 * dot - lz_dot8) * lz_dot8 >> 8;
                 if (hilite > 0) {
                     // pin hilite to 255, since our fast math is also a little sloppy
-                    hilite = SkClampMax(hilite, 255);
+                    hilite = std::min(hilite, 255);
 
                     // specular is 4.4
                     // would really like to compute the fractional part of this
diff --git a/src/effects/imagefilters/SkLightingImageFilter.cpp b/src/effects/imagefilters/SkLightingImageFilter.cpp
index e17daf1..7d95eaa 100644
--- a/src/effects/imagefilters/SkLightingImageFilter.cpp
+++ b/src/effects/imagefilters/SkLightingImageFilter.cpp
@@ -167,9 +167,9 @@
         colorScale = SkTPin(colorScale, 0.0f, SK_Scalar1);
         SkPoint3 color = lightColor.makeScale(colorScale);
         return SkPackARGB32(255,
-                            SkClampMax(SkScalarRoundToInt(color.fX), 255),
-                            SkClampMax(SkScalarRoundToInt(color.fY), 255),
-                            SkClampMax(SkScalarRoundToInt(color.fZ), 255));
+                            SkTPin(SkScalarRoundToInt(color.fX), 0, 255),
+                            SkTPin(SkScalarRoundToInt(color.fY), 0, 255),
+                            SkTPin(SkScalarRoundToInt(color.fZ), 0, 255));
     }
 private:
     SkScalar fKD;
@@ -191,10 +191,10 @@
         SkScalar colorScale = fKS * SkScalarPow(normal.dot(halfDir), fShininess);
         colorScale = SkTPin(colorScale, 0.0f, SK_Scalar1);
         SkPoint3 color = lightColor.makeScale(colorScale);
-        return SkPackARGB32(SkClampMax(SkScalarRoundToInt(max_component(color)), 255),
-                            SkClampMax(SkScalarRoundToInt(color.fX), 255),
-                            SkClampMax(SkScalarRoundToInt(color.fY), 255),
-                            SkClampMax(SkScalarRoundToInt(color.fZ), 255));
+        return SkPackARGB32(SkTPin(SkScalarRoundToInt(max_component(color)), 0, 255),
+                            SkTPin(SkScalarRoundToInt(color.fX), 0, 255),
+                            SkTPin(SkScalarRoundToInt(color.fY), 0, 255),
+                            SkTPin(SkScalarRoundToInt(color.fZ), 0, 255));
     }
 private:
     SkScalar fKS;
diff --git a/src/effects/imagefilters/SkMatrixConvolutionImageFilter.cpp b/src/effects/imagefilters/SkMatrixConvolutionImageFilter.cpp
index 268ac53..4783d25 100644
--- a/src/effects/imagefilters/SkMatrixConvolutionImageFilter.cpp
+++ b/src/effects/imagefilters/SkMatrixConvolutionImageFilter.cpp
@@ -291,11 +291,11 @@
                 }
             }
             int a = convolveAlpha
-                  ? SkClampMax(SkScalarFloorToInt(sumA * fGain + fBias), 255)
+                  ? SkTPin(SkScalarFloorToInt(sumA * fGain + fBias), 0, 255)
                   : 255;
-            int r = SkClampMax(SkScalarFloorToInt(sumR * fGain + fBias), a);
-            int g = SkClampMax(SkScalarFloorToInt(sumG * fGain + fBias), a);
-            int b = SkClampMax(SkScalarFloorToInt(sumB * fGain + fBias), a);
+            int r = SkTPin(SkScalarFloorToInt(sumR * fGain + fBias), 0, a);
+            int g = SkTPin(SkScalarFloorToInt(sumG * fGain + fBias), 0, a);
+            int b = SkTPin(SkScalarFloorToInt(sumB * fGain + fBias), 0, a);
             if (!convolveAlpha) {
                 a = SkGetPackedA32(PixelFetcher::fetch(src, x, y, bounds));
                 *dptr++ = SkPreMultiplyARGB(a, r, g, b);
diff --git a/tests/BlurTest.cpp b/tests/BlurTest.cpp
index 1c85e31..4e80266 100644
--- a/tests/BlurTest.cpp
+++ b/tests/BlurTest.cpp
@@ -239,7 +239,7 @@
             sum += gaussian(j, gaussianSigma) * step(i-j, stepMin, stepMax);
         }
 
-        result[i] = SkClampMax(SkClampPos(int(sum + 0.5f)), 255);
+        result[i] = SkTPin(SkClampPos(int(sum + 0.5f)), 0, 255);
     }
 }
 
diff --git a/tests/MathTest.cpp b/tests/MathTest.cpp
index 26eff95..ed358de 100644
--- a/tests/MathTest.cpp
+++ b/tests/MathTest.cpp
@@ -408,15 +408,6 @@
         REPORTER_ASSERT(reporter, SkScalarIsNaN(x));
     }
 
-    for (i = 0; i < 1000; i++) {
-        int value = rand.nextS() >> 16;
-        int max = rand.nextU() >> 16;
-
-        int clamp = SkClampMax(value, max);
-        int clamp2 = value < 0 ? 0 : (value > max ? max : value);
-        REPORTER_ASSERT(reporter, clamp == clamp2);
-    }
-
     for (i = 0; i < 10000; i++) {
         SkPoint p;
 
