Revert of stop calling SkScalarDiv (patchset #4 id:60001 of https://codereview.chromium.org/1135053002/)

Reason for revert:
need to wait for Blink roll (and patch android)

Original issue's description:
> stop calling SkScalarDiv
>
> BUG=skia:
> TBR=
>
> Committed: https://skia.googlesource.com/skia/+/67d71c898249a7af3523b16c6a69895a63bfae0a

TBR=
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:

Review URL: https://codereview.chromium.org/1138263002
diff --git a/bench/GradientBench.cpp b/bench/GradientBench.cpp
index 21b7370..f32c4ef 100644
--- a/bench/GradientBench.cpp
+++ b/bench/GradientBench.cpp
@@ -101,8 +101,8 @@
 static SkShader* MakeConicalOutside(const SkPoint pts[2], const GradData& data,
                                     SkShader::TileMode tm, float scale) {
     SkPoint center0, center1;
-    SkScalar radius0 = (pts[1].fX - pts[0].fX) / 10;
-    SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3;
+    SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 10);
+    SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
     center0.set(pts[0].fX + radius0, pts[0].fY + radius0);
     center1.set(pts[1].fX - radius1, pts[1].fY - radius1);
     return SkGradientShader::CreateTwoPointConical(center0, radius0,
@@ -115,8 +115,8 @@
 static SkShader* MakeConicalOutsideZeroRad(const SkPoint pts[2], const GradData& data,
                                            SkShader::TileMode tm, float scale) {
     SkPoint center0, center1;
-    SkScalar radius0 = (pts[1].fX - pts[0].fX) / 10;
-    SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3;
+    SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 10);
+    SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
     center0.set(pts[0].fX + radius0, pts[0].fY + radius0);
     center1.set(pts[1].fX - radius1, pts[1].fY - radius1);
     return SkGradientShader::CreateTwoPointConical(center0, 0.0,
diff --git a/experimental/StrokePathRenderer/GrStrokePathRenderer.cpp b/experimental/StrokePathRenderer/GrStrokePathRenderer.cpp
index e693c41..4b41dba 100644
--- a/experimental/StrokePathRenderer/GrStrokePathRenderer.cpp
+++ b/experimental/StrokePathRenderer/GrStrokePathRenderer.cpp
@@ -39,8 +39,8 @@
     SkScalar pre  = SkScalarMul(x1, y2) - SkScalarMul(y1, x2),
              post = SkScalarMul(x3, y4) - SkScalarMul(y3, x4);
     // Compute the point of intersection
-    res.set((SkScalarMul(pre, x3 - x4) - SkScalarMul(x1 - x2, post) / d,
-            (SkScalarMul(pre, y3 - y4) - SkScalarMul(y1 - y2, post) / d);
+    res.set(SkScalarDiv(SkScalarMul(pre, x3 - x4) - SkScalarMul(x1 - x2, post), d),
+            SkScalarDiv(SkScalarMul(pre, y3 - y4) - SkScalarMul(y1 - y2, post), d));
 
     // Check if the x and y coordinates are within both lines
     return (res.x() < GrMin(x1, x2) || res.x() > GrMax(x1, x2) ||
@@ -184,7 +184,9 @@
                                                 SkPoint miterPt1 = miterPt[0] - *pt1;
                                                 SkScalar sqDist0 = miterPt0.dot(miterPt0);
                                                 SkScalar sqDist1 = miterPt1.dot(miterPt1);
-                                                const SkScalar rSq = radius*radius / sinHalfAngleSq;
+                                                const SkScalar rSq =
+                                                        SkScalarDiv(SkScalarMul(radius, radius),
+                                                                    sinHalfAngleSq);
                                                 const SkScalar sqRLimit =
                                                         SkScalarMul(sqMiterLimit, rSq);
                                                 if (sqDist0 > sqRLimit || sqDist1 > sqRLimit) {
diff --git a/gm/glyph_pos.cpp b/gm/glyph_pos.cpp
index 16cdfca..0da59ac 100644
--- a/gm/glyph_pos.cpp
+++ b/gm/glyph_pos.cpp
@@ -82,8 +82,10 @@
         canvas->scale(3.0f, 3.0f);
         SkMatrix skew;
         skew.setIdentity();
-        skew.setSkewX(8.0f / 25.0f);
-        skew.setSkewY(2.0f / 25.0f);
+        skew.setSkewX(SkScalarDiv(8.0f,
+                                  25.0f));
+        skew.setSkewY(SkScalarDiv(2.0f,
+                                  25.0f));
         canvas->concat(skew);
         drawTestCase(canvas, 1.0f);
         canvas->restore();
@@ -93,9 +95,11 @@
         canvas->save();
         SkMatrix perspective;
         perspective.setIdentity();
-        perspective.setPerspX(-SkScalarInvert(340));
-        perspective.setSkewX(8.0f / 25.0f);
-        perspective.setSkewY(2.0f / 25.0f);
+        perspective.setPerspX(-SkScalarDiv(SK_Scalar1, 340.0f));
+        perspective.setSkewX(SkScalarDiv(8.0f,
+                                         25.0f));
+        perspective.setSkewY(SkScalarDiv(2.0f,
+                                         25.0f));
 
 
         canvas->concat(perspective);
diff --git a/gm/gradients.cpp b/gm/gradients.cpp
index 4e6aba9..eb1409d 100644
--- a/gm/gradients.cpp
+++ b/gm/gradients.cpp
@@ -80,8 +80,8 @@
 static SkShader* Make2Conical(const SkPoint pts[2], const GradData& data,
                              SkShader::TileMode tm, const SkMatrix& localMatrix) {
     SkPoint center0, center1;
-    SkScalar radius0 = (pts[1].fX - pts[0].fX) / 10;
-    SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3;
+    SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 10);
+    SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
     center0.set(pts[0].fX + radius0, pts[0].fY + radius0);
     center1.set(pts[1].fX - radius1, pts[1].fY - radius1);
     return SkGradientShader::CreateTwoPointConical(center1, radius1,
@@ -185,8 +185,10 @@
                 // apply an increasing y perspective as we move to the right
                 SkMatrix perspective;
                 perspective.setIdentity();
-                perspective.setPerspY(SkIntToScalar(i+1) / 500);
-                perspective.setSkewX(SkIntToScalar(i+1) / 10);
+                perspective.setPerspY(SkScalarDiv(SkIntToScalar((unsigned) i+1),
+                                      SkIntToScalar(500)));
+                perspective.setSkewX(SkScalarDiv(SkIntToScalar((unsigned) i+1),
+                                     SkIntToScalar(10)));
 
                 SkShader* shader = gGradMakers[j](pts, gGradData[i], tm, perspective);
 
@@ -218,8 +220,8 @@
     virtual void onDraw(SkCanvas* canvas) {
         SkMatrix perspective;
         perspective.setIdentity();
-        perspective.setPerspY(0.001f);
-        perspective.setSkewX(SkIntToScalar(8) / 25);
+        perspective.setPerspY(SkScalarDiv(SK_Scalar1, SkIntToScalar(1000)));
+        perspective.setSkewX(SkScalarDiv(SkIntToScalar(8), SkIntToScalar(25)));
         canvas->concat(perspective);
         INHERITED::onDraw(canvas);
     }
diff --git a/gm/gradients_2pt_conical.cpp b/gm/gradients_2pt_conical.cpp
index c865d71..f43356e 100644
--- a/gm/gradients_2pt_conical.cpp
+++ b/gm/gradients_2pt_conical.cpp
@@ -40,8 +40,8 @@
 static SkShader* Make2ConicalOutside(const SkPoint pts[2], const GradData& data,
                                      SkShader::TileMode tm, const SkMatrix& localMatrix) {
     SkPoint center0, center1;
-    SkScalar radius0 = (pts[1].fX - pts[0].fX) / 10;
-    SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3;
+    SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 10);
+    SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
     center0.set(pts[0].fX + radius0, pts[0].fY + radius0);
     center1.set(pts[1].fX - radius1, pts[1].fY - radius1);
     return SkGradientShader::CreateTwoPointConical(center0, radius0,
@@ -53,8 +53,8 @@
 static SkShader* Make2ConicalOutsideFlip(const SkPoint pts[2], const GradData& data,
                              SkShader::TileMode tm, const SkMatrix& localMatrix) {
     SkPoint center0, center1;
-    SkScalar radius0 = (pts[1].fX - pts[0].fX) / 10;
-    SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3;
+    SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 10);
+    SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
     center0.set(pts[0].fX + radius0, pts[0].fY + radius0);
     center1.set(pts[1].fX - radius1, pts[1].fY - radius1);
     return SkGradientShader::CreateTwoPointConical(center1, radius1,
@@ -145,7 +145,7 @@
                              SkShader::TileMode tm, const SkMatrix& localMatrix) {
     SkPoint center0, center1;
     SkScalar radius0 = 0.f;
-    SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3;
+    SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
     center0.set(pts[0].fX + radius0, pts[0].fY + radius0);
     center1.set(pts[1].fX - radius1, pts[1].fY - radius1);
     return SkGradientShader::CreateTwoPointConical(center0, radius0,
@@ -158,7 +158,7 @@
                              SkShader::TileMode tm, const SkMatrix& localMatrix) {
     SkPoint center0, center1;
     SkScalar radius0 = 0.f;
-    SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3;
+    SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
     center0.set(pts[0].fX + radius0, pts[0].fY + radius0);
     center1.set(pts[1].fX - radius1, pts[1].fY - radius1);
     return SkGradientShader::CreateTwoPointConical(center1, radius1,
@@ -170,8 +170,8 @@
 static SkShader* Make2ConicalEdgeX(const SkPoint pts[2], const GradData& data,
                              SkShader::TileMode tm, const SkMatrix& localMatrix) {
     SkPoint center0, center1;
-    SkScalar radius0 = (pts[1].fX - pts[0].fX) / 7;
-    SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3;
+    SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 7);
+    SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
     center1.set(SkScalarAve(pts[0].fX, pts[1].fX),
                 SkScalarAve(pts[0].fY, pts[1].fY));
     center0.set(center1.fX + radius1, center1.fY);
@@ -184,8 +184,8 @@
 static SkShader* Make2ConicalEdgeY(const SkPoint pts[2], const GradData& data,
                              SkShader::TileMode tm, const SkMatrix& localMatrix) {
     SkPoint center0, center1;
-    SkScalar radius0 = (pts[1].fX - pts[0].fX) / 7;
-    SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3;
+    SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 7);
+    SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
     center1.set(SkScalarAve(pts[0].fX, pts[1].fX),
                 SkScalarAve(pts[0].fY, pts[1].fY));
     center0.set(center1.fX, center1.fY + radius1);
@@ -199,7 +199,7 @@
                              SkShader::TileMode tm, const SkMatrix& localMatrix) {
     SkPoint center0, center1;
     SkScalar radius0 = 0.f;
-    SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3;
+    SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
     center1.set(SkScalarAve(pts[0].fX, pts[1].fX),
                 SkScalarAve(pts[0].fY, pts[1].fY));
     center0.set(center1.fX + radius1, center1.fY);
@@ -213,7 +213,7 @@
                              SkShader::TileMode tm, const SkMatrix& localMatrix) {
     SkPoint center0, center1;
     SkScalar radius0 = 0.f;
-    SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3;
+    SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
     center1.set(SkScalarAve(pts[0].fX, pts[1].fX),
                 SkScalarAve(pts[0].fY, pts[1].fY));
     center0.set(center1.fX, center1.fY + radius1);
@@ -226,8 +226,8 @@
 static SkShader* Make2ConicalTouchX(const SkPoint pts[2], const GradData& data,
                              SkShader::TileMode tm, const SkMatrix& localMatrix) {
     SkPoint center0, center1;
-    SkScalar radius0 = (pts[1].fX - pts[0].fX) / 7;
-    SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3;
+    SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 7);
+    SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
     center1.set(SkScalarAve(pts[0].fX, pts[1].fX),
                 SkScalarAve(pts[0].fY, pts[1].fY));
     center0.set(center1.fX - radius1 + radius0, center1.fY);
@@ -240,8 +240,8 @@
 static SkShader* Make2ConicalTouchY(const SkPoint pts[2], const GradData& data,
                              SkShader::TileMode tm, const SkMatrix& localMatrix) {
     SkPoint center0, center1;
-    SkScalar radius0 = (pts[1].fX - pts[0].fX) / 7;
-    SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3;
+    SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 7);
+    SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
     center1.set(SkScalarAve(pts[0].fX, pts[1].fX),
                 SkScalarAve(pts[0].fY, pts[1].fY));
     center0.set(center1.fX, center1.fY + radius1 - radius0);
diff --git a/gm/gradients_no_texture.cpp b/gm/gradients_no_texture.cpp
index 391472a..dea9a65 100644
--- a/gm/gradients_no_texture.cpp
+++ b/gm/gradients_no_texture.cpp
@@ -59,8 +59,8 @@
 
 static SkShader* Make2Conical(const SkPoint pts[2], const GradData& data, SkShader::TileMode tm) {
     SkPoint center0, center1;
-    SkScalar radius0 = (pts[1].fX - pts[0].fX) / 10;
-    SkScalar radius1 = (pts[1].fX - pts[0].fX) / 3;
+    SkScalar radius0 = SkScalarDiv(pts[1].fX - pts[0].fX, 10);
+    SkScalar radius1 = SkScalarDiv(pts[1].fX - pts[0].fX, 3);
     center0.set(pts[0].fX + radius0, pts[0].fY + radius0);
     center1.set(pts[1].fX - radius1, pts[1].fY - radius1);
     return SkGradientShader::CreateTwoPointConical(center1, radius1,
diff --git a/gm/imagefiltersclipped.cpp b/gm/imagefiltersclipped.cpp
index cc636aa..50066fe 100644
--- a/gm/imagefiltersclipped.cpp
+++ b/gm/imagefiltersclipped.cpp
@@ -115,7 +115,8 @@
                     canvas->scale(SkScalarInvert(RESIZE_FACTOR_X),
                                   SkScalarInvert(RESIZE_FACTOR_Y));
                 }
-                canvas->drawCircle(r.centerX(), r.centerY(), r.width() * 2 / 5, paint);
+                canvas->drawCircle(r.centerX(), r.centerY(),
+                                   SkScalarDiv(r.width()*2, SkIntToScalar(5)), paint);
                 canvas->restore();
                 canvas->translate(r.width() + margin, 0);
             }
diff --git a/gm/imagefiltersscaled.cpp b/gm/imagefiltersscaled.cpp
index 9a80964..4dcf753 100644
--- a/gm/imagefiltersscaled.cpp
+++ b/gm/imagefiltersscaled.cpp
@@ -134,7 +134,8 @@
                     canvas->scale(SkScalarInvert(RESIZE_FACTOR),
                                   SkScalarInvert(RESIZE_FACTOR));
                 }
-                canvas->drawCircle(r.centerX(), r.centerY(), r.width()*2/5, paint);
+                canvas->drawCircle(r.centerX(), r.centerY(),
+                                   SkScalarDiv(r.width()*2, SkIntToScalar(5)), paint);
                 canvas->restore();
                 canvas->translate(r.width() * scales[j].fX + margin, 0);
             }
diff --git a/gm/resizeimagefilter.cpp b/gm/resizeimagefilter.cpp
index 2edb802..14f76b5 100644
--- a/gm/resizeimagefilter.cpp
+++ b/gm/resizeimagefilter.cpp
@@ -32,8 +32,8 @@
         SkRect dstRect;
         canvas->getTotalMatrix().mapRect(&dstRect, rect);
         canvas->save();
-        SkScalar deviceScaleX = deviceSize.width() / dstRect.width();
-        SkScalar deviceScaleY = deviceSize.height() / dstRect.height();
+        SkScalar deviceScaleX = SkScalarDiv(deviceSize.width(), dstRect.width());
+        SkScalar deviceScaleY = SkScalarDiv(deviceSize.height(), dstRect.height());
         canvas->translate(rect.x(), rect.y());
         canvas->scale(deviceScaleX, deviceScaleY);
         canvas->translate(-rect.x(), -rect.y());
@@ -96,7 +96,7 @@
             SkPaint paint;
             paint.setColor(0xFF00FF00);
             SkRect ovalRect = SkRect::MakeWH(16, 16);
-            ovalRect.inset(SkIntToScalar(2)/3, SkIntToScalar(2)/3);
+            ovalRect.inset(SkScalarDiv(2.0f, 3.0f), SkScalarDiv(2.0f, 3.0f));
             bitmapCanvas.drawOval(ovalRect, paint);
         }
         SkRect inRect = SkRect::MakeXYWH(-4, -4, 20, 20);
diff --git a/gm/shaderbounds.cpp b/gm/shaderbounds.cpp
index 4363d4e..e86ab05 100644
--- a/gm/shaderbounds.cpp
+++ b/gm/shaderbounds.cpp
@@ -80,9 +80,10 @@
         if (background) {
             scale = 0.6f;
         }
-        SkScalar shaderWidth = width / scale;
-        SkScalar shaderHeight = height / scale;
-        SkMatrix shaderScale = SkMatrix::MakeScale(scale);
+        SkScalar shaderWidth = SkScalarDiv(SkIntToScalar(width), scale);
+        SkScalar shaderHeight = SkScalarDiv(SkIntToScalar(height), scale);
+        SkMatrix shaderScale;
+        shaderScale.setScale(scale, scale);
         SkShader* shader = fShaderMaker(shaderWidth, shaderHeight, background, shaderScale);
         return shader;
     }
diff --git a/gm/stringart.cpp b/gm/stringart.cpp
index 7c9a22e..ed5fe0e 100644
--- a/gm/stringart.cpp
+++ b/gm/stringart.cpp
@@ -47,7 +47,7 @@
             SkPoint rp = SkPoint::Make(length*SkScalarCos(step) + center.fX,
                                        length*SkScalarSin(step) + center.fY);
             path.lineTo(rp);
-            length += angle / SkScalarHalf(SK_ScalarPI);
+            length += SkScalarDiv(angle, SkScalarHalf(SK_ScalarPI));
             step += angle;
         }
         path.close();
diff --git a/include/core/SkMatrix.h b/include/core/SkMatrix.h
index 0252bc71..89b3072 100644
--- a/include/core/SkMatrix.h
+++ b/include/core/SkMatrix.h
@@ -28,13 +28,7 @@
         m.setScale(sx, sy);
         return m;
     }
-    
-    static SkMatrix SK_WARN_UNUSED_RESULT MakeScale(SkScalar scale) {
-        SkMatrix m;
-        m.setScale(scale, scale);
-        return m;
-    }
-    
+
     static SkMatrix SK_WARN_UNUSED_RESULT MakeTrans(SkScalar dx, SkScalar dy) {
         SkMatrix m;
         m.setTranslate(dx, dy);
diff --git a/include/core/SkPoint.h b/include/core/SkPoint.h
index 52d01ae..4a97391 100644
--- a/include/core/SkPoint.h
+++ b/include/core/SkPoint.h
@@ -348,16 +348,6 @@
         fY -= v.fY;
     }
 
-    SkPoint operator*(SkScalar scale) const {
-        return Make(fX * scale, fY * scale);
-    }
-    
-    SkPoint& operator*=(SkScalar scale) {
-        fX *= scale;
-        fY *= scale;
-        return *this;
-    }
-    
     /**
      *  Returns true if both X and Y are finite (not infinity or NaN)
      */
diff --git a/include/core/SkScalar.h b/include/core/SkScalar.h
index 2c42eb8..443454a 100644
--- a/include/core/SkScalar.h
+++ b/include/core/SkScalar.h
@@ -184,9 +184,7 @@
 
 #define SkScalarMul(a, b)       ((SkScalar)(a) * (b))
 #define SkScalarMulAdd(a, b, c) ((SkScalar)(a) * (b) + (c))
-#ifdef SK_SUPPORT_LEGACY_SCALAR_DIV
-    #define SkScalarDiv(a, b)       ((SkScalar)(a) / (b))
-#endif
+#define SkScalarDiv(a, b)       ((SkScalar)(a) / (b))
 #define SkScalarMulDiv(a, b, c) ((SkScalar)(a) * (b) / (c))
 #define SkScalarInvert(x)       (SK_Scalar1 / (x))
 #define SkScalarFastInvert(x)   (SK_Scalar1 / (x))
diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index 04b1cb0..82d42fd 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -1320,18 +1320,18 @@
         static const SkScalar gAnimPeriod = 10 * SK_Scalar1;
         static const SkScalar gAnimMag = SK_Scalar1 / 1000;
         SkScalar t = SkScalarMod(secs, gAnimPeriod);
-        if (SkScalarFloorToInt(secs / gAnimPeriod) & 0x1) {
+        if (SkScalarFloorToInt(SkScalarDiv(secs, gAnimPeriod)) & 0x1) {
             t = gAnimPeriod - t;
         }
         t = 2 * t - gAnimPeriod;
-        t *= gAnimMag / gAnimPeriod;
+        t = SkScalarMul(SkScalarDiv(t, gAnimPeriod), gAnimMag);
         SkMatrix m;
         m.reset();
 #if 1
         m.setPerspY(t);
 #else
         m.setPerspY(SK_Scalar1 / 1000);
-        m.setSkewX(8.0f / 25);
+        m.setSkewX(SkScalarDiv(8, 25));
         m.dump();
 #endif
         canvas->concat(m);
diff --git a/samplecode/SampleStringArt.cpp b/samplecode/SampleStringArt.cpp
index 0e711b0..569fd7f 100644
--- a/samplecode/SampleStringArt.cpp
+++ b/samplecode/SampleStringArt.cpp
@@ -42,7 +42,7 @@
             SkPoint rp = SkPoint::Make(length*SkScalarCos(step) + center.fX,
                                        length*SkScalarSin(step) + center.fY);
             path.lineTo(rp);
-            length += angle / SkScalarHalf(SK_ScalarPI);
+            length += SkScalarDiv(angle, SkScalarHalf(SK_ScalarPI));
             step += angle;
         }
         path.close();
diff --git a/src/animator/SkAnimateBase.cpp b/src/animator/SkAnimateBase.cpp
index 82f777e..3515ed5 100644
--- a/src/animator/SkAnimateBase.cpp
+++ b/src/animator/SkAnimateBase.cpp
@@ -91,7 +91,7 @@
         SkDebugf("to=\"%s\" ", to.c_str());
     }
     if (begin != 0) {
-        SkDebugf("begin=\"%g\" ", begin * 0.001);
+        SkDebugf("begin=\"%g\" ", SkScalarToFloat(SkScalarDiv(begin,1000)));
     }
 }
 #endif
diff --git a/src/animator/SkAnimateField.cpp b/src/animator/SkAnimateField.cpp
index c6676e5..7aebb78 100644
--- a/src/animator/SkAnimateField.cpp
+++ b/src/animator/SkAnimateField.cpp
@@ -41,7 +41,7 @@
             SkDebugf("mirror=\"true\" ");
         if (fReset)
             SkDebugf("reset=\"true\" ");
-        SkDebugf("dur=\"%g\" ", dur * 0.001);
+        SkDebugf("dur=\"%g\" ", SkScalarToFloat(SkScalarDiv(dur,1000)));
         if (repeat != SK_Scalar1)
             SkDebugf("repeat=\"%g\" ", SkScalarToFloat(repeat));
         //if (fHasValues)
diff --git a/src/animator/SkAnimateSet.cpp b/src/animator/SkAnimateSet.cpp
index ec06a9e..d146118 100644
--- a/src/animator/SkAnimateSet.cpp
+++ b/src/animator/SkAnimateSet.cpp
@@ -39,7 +39,7 @@
 void SkSet::dump(SkAnimateMaker* maker) {
     INHERITED::dump(maker);
     if (dur != 1) {
-        SkDebugf("dur=\"%g\" ", dur * 0.001);
+        SkDebugf("dur=\"%g\" ", SkScalarToFloat(SkScalarDiv(dur,1000)));
     }
     //don't want double />\n's
     SkDebugf("/>\n");
diff --git a/src/animator/SkAnimatorScript.cpp b/src/animator/SkAnimatorScript.cpp
index f4ea518..df2e563 100644
--- a/src/animator/SkAnimatorScript.cpp
+++ b/src/animator/SkAnimatorScript.cpp
@@ -235,7 +235,7 @@
             if (info->fType != SkType_MemberProperty && info->fType != SkType_MemberFunction)
                 value->fOperand.fS32 = *(int32_t*) info->memberData(displayable);   // OK for SkScalar too
             if (type == SkType_MSec) {
-                value->fOperand.fScalar = value->fOperand.fS32 * 0.001f;
+                value->fOperand.fScalar = SkScalarDiv((SkScalar) value->fOperand.fS32, 1000); // dividing two ints is the same as dividing two scalars
                 type = SkType_Float;
             }
             break;
diff --git a/src/animator/SkAnimatorScript2.cpp b/src/animator/SkAnimatorScript2.cpp
index 28912fb..80ae0c6 100644
--- a/src/animator/SkAnimatorScript2.cpp
+++ b/src/animator/SkAnimatorScript2.cpp
@@ -412,7 +412,7 @@
             if (info->fType != SkType_MemberProperty && info->fType != SkType_MemberFunction)
                 value->fS32 = *(int32_t*) info->memberData(displayable);    // OK for SkScalar too
             if (type == SkType_MSec) {
-                value->fScalar = value->fS32 * 0.001f;
+                value->fScalar = SkScalarDiv((SkScalar) value->fS32, 1000); // dividing two ints is the same as dividing two scalars
                 type = SkType_Float;
             }
             break;
diff --git a/src/animator/SkDisplayPost.cpp b/src/animator/SkDisplayPost.cpp
index 0fd4a06..cc45b21 100644
--- a/src/animator/SkDisplayPost.cpp
+++ b/src/animator/SkDisplayPost.cpp
@@ -76,7 +76,7 @@
     delete eventType;
 
     if (delay > 0) {
-        SkDebugf("delay=\"%g\" ", delay * 0.001);
+        SkDebugf("delay=\"%g\" ", SkScalarToFloat(SkScalarDiv(delay, 1000)));
     }
 //  if (initialized == false)
 //      SkDebugf("(uninitialized) ");
diff --git a/src/animator/SkDisplayable.cpp b/src/animator/SkDisplayable.cpp
index 52532fe..aff3aae 100644
--- a/src/animator/SkDisplayable.cpp
+++ b/src/animator/SkDisplayable.cpp
@@ -377,7 +377,7 @@
         break;
     case SkType_MSec:
         if (op.fS32 != blankOp.fS32) {
-            SkDebugf(" %s=\"%g\"  ", info->fName, op.fS32 * 0.001);
+            SkDebugf(" %s=\"%g\"  ", info->fName, SkScalarToFloat(SkScalarDiv(op.fS32, 1000)));
         }
     default:
         SkDebugf("");
diff --git a/src/animator/SkDrawColor.cpp b/src/animator/SkDrawColor.cpp
index d86a2e9..eb57d9d 100644
--- a/src/animator/SkDrawColor.cpp
+++ b/src/animator/SkDrawColor.cpp
@@ -30,14 +30,14 @@
     if (choice == kGetValue)
         return value/255;
     SkScalar delta = value - min;
-    SkScalar saturation = value == 0 ? 0 : delta / value;
+    SkScalar saturation = value == 0 ? 0 : SkScalarDiv(delta, value);
     if (choice == kGetSaturation)
         return saturation;
     SkScalar hue;
     if (saturation == 0)
         hue = 0;
     else {
-        SkScalar part60 = 60 / delta;
+        SkScalar part60 = SkScalarDiv(60 * SK_Scalar1, delta);
         if (red == value) {
             hue = SkScalarMul(green - blue, part60);
             if (hue < 0)
diff --git a/src/animator/SkScript.cpp b/src/animator/SkScript.cpp
index c430695..1d04d1b 100644
--- a/src/animator/SkScript.cpp
+++ b/src/animator/SkScript.cpp
@@ -1387,7 +1387,7 @@
             if (operand2.fScalar == 0)
                 operand2.fScalar = operand1.fScalar == 0 ? SK_ScalarNaN : operand1.fScalar > 0 ? SK_ScalarMax : -SK_ScalarMax;
             else
-                operand2.fScalar = operand1.fScalar / operand2.fScalar;
+                operand2.fScalar = SkScalarDiv(operand1.fScalar, operand2.fScalar);
             break;
         case kEqualInt:
             operand2.fS32 = operand1.fS32 == operand2.fS32;
diff --git a/src/animator/SkScriptRuntime.cpp b/src/animator/SkScriptRuntime.cpp
index 07bd4c9..78d9d5c 100644
--- a/src/animator/SkScriptRuntime.cpp
+++ b/src/animator/SkScriptRuntime.cpp
@@ -249,7 +249,7 @@
                 operand[0].fScalar = operand[0].fScalar == 0 ? SK_ScalarNaN :
                     operand[0].fScalar > 0 ? SK_ScalarMax : -SK_ScalarMax;
             else
-                operand[0].fScalar = operand[0].fScalar / operand[1].fScalar;
+                operand[0].fScalar = SkScalarDiv(operand[0].fScalar, operand[1].fScalar);
             break;
         case SkScriptEngine2::kEqualInt:
             operand[0].fS32 = operand[0].fS32 == operand[1].fS32;
diff --git a/src/core/SkGeometry.cpp b/src/core/SkGeometry.cpp
index b4489d2..3ee2fa5 100644
--- a/src/core/SkGeometry.cpp
+++ b/src/core/SkGeometry.cpp
@@ -62,7 +62,7 @@
         return 0;
     }
 
-    SkScalar r = numer / denom;
+    SkScalar r = SkScalarDiv(numer, denom);
     if (SkScalarIsNaN(r)) {
         return 0;
     }
@@ -1149,7 +1149,7 @@
     A = -B;
     SkScalar denom = SkScalarMulAdd(SkScalarMulAdd(A, t, B), t, C);
 
-    return numer / denom;
+    return SkScalarDiv(numer, denom);
 }
 
 // F' = 2 (C t (1 + t (-1 + w)) - A (-1 + t) (t (-1 + w) - w) + B (1 - 2 t) w)
diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp
index c00dcc6..975d0cc 100644
--- a/src/core/SkPaint.cpp
+++ b/src/core/SkPaint.cpp
@@ -2313,7 +2313,7 @@
         fPaint.setTextSize(SkIntToScalar(SkPaint::kCanonicalTextSizeForPaths));
         fScale = paint.getTextSize() / SkPaint::kCanonicalTextSizeForPaths;
         if (has_thick_frame(fPaint)) {
-            fPaint.setStrokeWidth(fPaint.getStrokeWidth() / fScale);
+            fPaint.setStrokeWidth(SkScalarDiv(fPaint.getStrokeWidth(), fScale));
         }
     } else {
         fScale = SK_Scalar1;
diff --git a/src/core/SkPathMeasure.cpp b/src/core/SkPathMeasure.cpp
index a5dd840..c963e9c 100644
--- a/src/core/SkPathMeasure.cpp
+++ b/src/core/SkPathMeasure.cpp
@@ -341,7 +341,8 @@
                 if (SK_Scalar1 == stopT) {
                     dst->quadTo(tmp0[3], tmp0[4]);
                 } else {
-                    SkChopQuadAt(&tmp0[2], tmp1, (stopT - startT) / (1 - startT));
+                    SkChopQuadAt(&tmp0[2], tmp1, SkScalarDiv(stopT - startT,
+                                                         SK_Scalar1 - startT));
                     dst->quadTo(tmp1[1], tmp1[2]);
                 }
             }
@@ -382,7 +383,8 @@
                 if (SK_Scalar1 == stopT) {
                     dst->cubicTo(tmp0[4], tmp0[5], tmp0[6]);
                 } else {
-                    SkChopCubicAt(&tmp0[3], tmp1, (stopT - startT) / (1 - startT));
+                    SkChopCubicAt(&tmp0[3], tmp1, SkScalarDiv(stopT - startT,
+                                                        SK_Scalar1 - startT));
                     dst->cubicTo(tmp1[1], tmp1[2], tmp1[3]);
                 }
             }
diff --git a/src/core/SkPictureShader.cpp b/src/core/SkPictureShader.cpp
index c1c4755..2c835ed 100644
--- a/src/core/SkPictureShader.cpp
+++ b/src/core/SkPictureShader.cpp
@@ -168,7 +168,7 @@
     static const SkScalar kMaxTileArea = 2048 * 2048;
     SkScalar tileArea = SkScalarMul(scaledSize.width(), scaledSize.height());
     if (tileArea > kMaxTileArea) {
-        SkScalar clampScale = SkScalarSqrt(kMaxTileArea / tileArea);
+        SkScalar clampScale = SkScalarSqrt(SkScalarDiv(kMaxTileArea, tileArea));
         scaledSize.set(SkScalarMul(scaledSize.width(), clampScale),
                        SkScalarMul(scaledSize.height(), clampScale));
     }
@@ -176,7 +176,8 @@
     // Scale down the tile size if larger than maxTextureSize for GPU Path or it should fail on create texture
     if (maxTextureSize) {
         if (scaledSize.width() > maxTextureSize || scaledSize.height() > maxTextureSize) {
-            SkScalar downScale = maxTextureSize / SkMax32(scaledSize.width(), scaledSize.height());
+            SkScalar downScale = SkScalarDiv(maxTextureSize,
+                                            SkMax32(scaledSize.width(), scaledSize.height()));
             scaledSize.set(SkScalarFloorToScalar(SkScalarMul(scaledSize.width(), downScale)),
                            SkScalarFloorToScalar(SkScalarMul(scaledSize.height(), downScale)));
         }
diff --git a/src/core/SkRRect.cpp b/src/core/SkRRect.cpp
index 0d1887d..e542560 100644
--- a/src/core/SkRRect.cpp
+++ b/src/core/SkRRect.cpp
@@ -26,7 +26,8 @@
     }
 
     if (rect.width() < xRad+xRad || rect.height() < yRad+yRad) {
-        SkScalar scale = SkMinScalar(rect.width() / (xRad + xRad), rect.height() / (yRad + yRad));
+        SkScalar scale = SkMinScalar(SkScalarDiv(rect.width(), xRad + xRad),
+                                     SkScalarDiv(rect.height(), yRad + yRad));
         SkASSERT(scale < SK_Scalar1);
         xRad = SkScalarMul(xRad, scale);
         yRad = SkScalarMul(yRad, scale);
@@ -65,10 +66,10 @@
 
     SkScalar scale = SK_Scalar1;
     if (leftRad + rightRad > rect.width()) {
-        scale = rect.width() / (leftRad + rightRad);
+        scale = SkScalarDiv(rect.width(), leftRad + rightRad);
     }
     if (topRad + bottomRad > rect.height()) {
-        scale = SkMinScalar(scale, rect.height() / (topRad + bottomRad));
+        scale = SkMinScalar(scale, SkScalarDiv(rect.height(), topRad + bottomRad));
     }
 
     if (scale < SK_Scalar1) {
diff --git a/src/core/SkScalar.cpp b/src/core/SkScalar.cpp
index e8f6e93..c48d389 100644
--- a/src/core/SkScalar.cpp
+++ b/src/core/SkScalar.cpp
@@ -31,6 +31,6 @@
     // Otherwise, interpolate between right - 1 and right.
     SkScalar rightKey = keys[right];
     SkScalar leftKey = keys[right-1];
-    SkScalar fract = (searchKey - leftKey) / (rightKey - leftKey);
+    SkScalar fract = SkScalarDiv(searchKey-leftKey,rightKey-leftKey);
     return SkScalarInterp(values[right-1], values[right], fract);
 }
diff --git a/src/core/SkStroke.cpp b/src/core/SkStroke.cpp
index 6454f16..a3641ff 100644
--- a/src/core/SkStroke.cpp
+++ b/src/core/SkStroke.cpp
@@ -454,7 +454,8 @@
         normalB = pts[2] - pts[0];
         normalB.rotateCCW();
         SkScalar dot = SkPoint::DotProduct(unitNormalAB, *unitNormalBC);
-        SkAssertResult(normalB.setLength(fRadius / SkScalarSqrt((SK_Scalar1 + dot)/2)));
+        SkAssertResult(normalB.setLength(SkScalarDiv(fRadius,
+                                     SkScalarSqrt((SK_Scalar1 + dot)/2))));
 
         fOuter.quadTo(  pts[1].fX + normalB.fX, pts[1].fY + normalB.fY,
                         pts[2].fX + normalBC->fX, pts[2].fY + normalBC->fY);
@@ -760,9 +761,11 @@
         normalC = *unitNormalCD + unitBC;
 
         SkScalar dot = SkPoint::DotProduct(unitNormalAB, unitBC);
-        SkAssertResult(normalB.setLength(fRadius / SkScalarSqrt((SK_Scalar1 + dot)/2)));
+        SkAssertResult(normalB.setLength(SkScalarDiv(fRadius,
+                                    SkScalarSqrt((SK_Scalar1 + dot)/2))));
         dot = SkPoint::DotProduct(*unitNormalCD, unitBC);
-        SkAssertResult(normalC.setLength(fRadius / SkScalarSqrt((SK_Scalar1 + dot)/2)));
+        SkAssertResult(normalC.setLength(SkScalarDiv(fRadius,
+                                    SkScalarSqrt((SK_Scalar1 + dot)/2))));
 
         fOuter.cubicTo( pts[1].fX + normalB.fX, pts[1].fY + normalB.fY,
                         pts[2].fX + normalC.fX, pts[2].fY + normalC.fY,
diff --git a/src/core/SkStrokerPriv.cpp b/src/core/SkStrokerPriv.cpp
index 7fc773a..bc8e043 100644
--- a/src/core/SkStrokerPriv.cpp
+++ b/src/core/SkStrokerPriv.cpp
@@ -214,7 +214,7 @@
     else
         mid.set(before.fX + after.fX, before.fY + after.fY);
 
-    mid.setLength(radius / sinHalfAngle);
+    mid.setLength(SkScalarDiv(radius, sinHalfAngle));
 DO_MITER:
     if (prevIsLine)
         outer->setLastPt(pivot.fX + mid.fX, pivot.fY + mid.fY);
diff --git a/src/device/xps/SkXPSDevice.cpp b/src/device/xps/SkXPSDevice.cpp
index 1c06235..a5c0013 100644
--- a/src/device/xps/SkXPSDevice.cpp
+++ b/src/device/xps/SkXPSDevice.cpp
@@ -512,7 +512,7 @@
         SkScalar startToStop = (stopTransformed.fX - startTransformed.fX)
                              + (stopTransformed.fY - startTransformed.fY);
         //Percentage along transformed line.
-        stopOffsets[i] = startToStop / startToEnd;
+        stopOffsets[i] = SkScalarDiv(startToStop, startToEnd);
     }
 }
 
@@ -1396,8 +1396,10 @@
                                SkVector* ppuScale,
                                const SkIRect& clip, SkIRect* clipIRect) {
     //This action is in unit space, but the ppm is specified in physical space.
-    ppuScale->set(fCurrentPixelsPerMeter.fX / fCurrentUnitsPerMeter.fX,
-                  fCurrentPixelsPerMeter.fY / fCurrentUnitsPerMeter.fY);
+    ppuScale->fX = SkScalarDiv(this->fCurrentPixelsPerMeter.fX,
+                               this->fCurrentUnitsPerMeter.fX);
+    ppuScale->fY = SkScalarDiv(this->fCurrentPixelsPerMeter.fY,
+                               this->fCurrentUnitsPerMeter.fY);
 
     matrix->postScale(ppuScale->fX, ppuScale->fY);
 
diff --git a/src/effects/SkCornerPathEffect.cpp b/src/effects/SkCornerPathEffect.cpp
index 4b81f26..79d4c4c 100644
--- a/src/effects/SkCornerPathEffect.cpp
+++ b/src/effects/SkCornerPathEffect.cpp
@@ -20,12 +20,13 @@
                         SkPoint* step) {
     SkScalar dist = SkPoint::Distance(a, b);
 
-    *step = b - a;
+    step->set(b.fX - a.fX, b.fY - a.fY);
+
     if (dist <= radius * 2) {
-        *step *= SK_ScalarHalf;
+        step->scale(SK_ScalarHalf);
         return false;
     } else {
-        *step *= radius / dist;
+        step->scale(SkScalarDiv(radius, dist));
         return true;
     }
 }
@@ -46,7 +47,6 @@
     bool        prevIsValid = true;
 
     // to avoid warnings
-    step.set(0, 0);
     moveTo.set(0, 0);
     firstStep.set(0, 0);
     lastCorner.set(0, 0);
diff --git a/src/effects/SkDashPathEffect.cpp b/src/effects/SkDashPathEffect.cpp
index 62e6771..5296f97 100644
--- a/src/effects/SkDashPathEffect.cpp
+++ b/src/effects/SkDashPathEffect.cpp
@@ -248,7 +248,7 @@
                 len2 -= clampedInitialDashLength; // skip initial partial empty
             }
         }
-        int numMidPoints = SkScalarFloorToInt(len2 / fIntervalLength);
+        int numMidPoints = SkScalarFloorToInt(SkScalarDiv(len2, fIntervalLength));
         results->fNumPoints += numMidPoints;
         len2 -= numMidPoints * fIntervalLength;
         bool partialLast = false;
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index 2b9665c..6f0911c 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -56,7 +56,7 @@
                          SkBitmap* src,
                          const SkIRect& bounds)
 {
-    static const SkScalar Inv8bit = SkScalarInvert(255);
+    static const SkScalar Inv8bit = SkScalarDiv(SK_Scalar1, 255.0f);
     const int srcW = src->width();
     const int srcH = src->height();
     const SkVector scaleForColor = SkVector::Make(SkScalarMul(scale.fX, Inv8bit),
@@ -625,8 +625,8 @@
                                         const GrProcessor& proc) {
     const GrDisplacementMapEffect& displacementMap = proc.cast<GrDisplacementMapEffect>();
     GrTexture* colorTex = displacementMap.texture(1);
-    SkScalar scaleX = displacementMap.scale().fX / colorTex->width();
-    SkScalar scaleY = displacementMap.scale().fY / colorTex->height();
+    SkScalar scaleX = SkScalarDiv(displacementMap.scale().fX, SkIntToScalar(colorTex->width()));
+    SkScalar scaleY = SkScalarDiv(displacementMap.scale().fY, SkIntToScalar(colorTex->height()));
     pdman.set2f(fScaleUni, SkScalarToFloat(scaleX),
                 colorTex->origin() == kTopLeft_GrSurfaceOrigin ?
                 SkScalarToFloat(scaleY) : SkScalarToFloat(-scaleY));
diff --git a/src/effects/SkEmbossMaskFilter.cpp b/src/effects/SkEmbossMaskFilter.cpp
index 59d2978..8fcd272 100644
--- a/src/effects/SkEmbossMaskFilter.cpp
+++ b/src/effects/SkEmbossMaskFilter.cpp
@@ -61,7 +61,7 @@
     mag = SkScalarSqrt(mag);
 
     for (int i = 0; i < 3; i++) {
-        v[i] /= mag;
+        v[i] = SkScalarDiv(v[i], mag);
     }
 }
 
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
index b324cc4..39bd6c8 100644
--- a/src/effects/SkLightingImageFilter.cpp
+++ b/src/effects/SkLightingImageFilter.cpp
@@ -30,8 +30,8 @@
 
 namespace {
 
-const SkScalar gOneThird = SkIntToScalar(1) / 3;
-const SkScalar gTwoThirds = SkIntToScalar(2) / 3;
+const SkScalar gOneThird = SkScalarInvert(SkIntToScalar(3));
+const SkScalar gTwoThirds = SkScalarDiv(SkIntToScalar(2), SkIntToScalar(3));
 const SkScalar gOneHalf = 0.5f;
 const SkScalar gOneQuarter = 0.25f;
 
diff --git a/src/effects/SkPerlinNoiseShader.cpp b/src/effects/SkPerlinNoiseShader.cpp
index c59bd8c..7114703 100644
--- a/src/effects/SkPerlinNoiseShader.cpp
+++ b/src/effects/SkPerlinNoiseShader.cpp
@@ -212,7 +212,8 @@
             SkScalar highFrequencx =
                 SkScalarCeilToScalar(tileWidth * fBaseFrequency.fX) / tileWidth;
             // BaseFrequency should be non-negative according to the standard.
-            if (fBaseFrequency.fX / lowFrequencx < highFrequencx / fBaseFrequency.fX) {
+            if (SkScalarDiv(fBaseFrequency.fX, lowFrequencx) <
+                SkScalarDiv(highFrequencx, fBaseFrequency.fX)) {
                 fBaseFrequency.fX = lowFrequencx;
             } else {
                 fBaseFrequency.fX = highFrequencx;
@@ -223,7 +224,8 @@
                 SkScalarFloorToScalar(tileHeight * fBaseFrequency.fY) / tileHeight;
             SkScalar highFrequency =
                 SkScalarCeilToScalar(tileHeight * fBaseFrequency.fY) / tileHeight;
-            if (fBaseFrequency.fY / lowFrequency < highFrequency / fBaseFrequency.fY) {
+            if (SkScalarDiv(fBaseFrequency.fY, lowFrequency) <
+                SkScalarDiv(highFrequency, fBaseFrequency.fY)) {
                 fBaseFrequency.fY = lowFrequency;
             } else {
                 fBaseFrequency.fY = highFrequency;
@@ -382,9 +384,8 @@
     SkScalar ratio = SK_Scalar1;
     for (int octave = 0; octave < perlinNoiseShader.fNumOctaves; ++octave) {
         SkScalar noise = noise2D(channel, stitchData, noiseVector);
-        SkScalar numer = (perlinNoiseShader.fType == kFractalNoise_Type) ?
-                            noise : SkScalarAbs(noise);
-        turbulenceFunctionResult += numer / ratio;
+        turbulenceFunctionResult += SkScalarDiv(
+            (perlinNoiseShader.fType == kFractalNoise_Type) ? noise : SkScalarAbs(noise), ratio);
         noiseVector.fX *= 2;
         noiseVector.fY *= 2;
         ratio *= 2;
@@ -405,7 +406,8 @@
     }
 
     if (channel == 3) { // Scale alpha by paint value
-        turbulenceFunctionResult *= SkIntToScalar(getPaintAlpha()) / 255;
+        turbulenceFunctionResult = SkScalarMul(turbulenceFunctionResult,
+            SkScalarDiv(SkIntToScalar(getPaintAlpha()), SkIntToScalar(255)));
     }
 
     // Clamp result
@@ -929,7 +931,7 @@
 
     const SkVector& baseFrequency = turbulence.baseFrequency();
     pdman.set2f(fBaseFrequencyUni, baseFrequency.fX, baseFrequency.fY);
-    pdman.set1f(fAlphaUni, SkIntToScalar(turbulence.alpha()) / 255);
+    pdman.set1f(fAlphaUni, SkScalarDiv(SkIntToScalar(turbulence.alpha()), SkIntToScalar(255)));
 
     if (turbulence.stitchTiles()) {
         const SkPerlinNoiseShader::StitchData& stitchData = turbulence.stitchData();
diff --git a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
index f7b3eb8..bc70d6b 100644
--- a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
+++ b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp
@@ -357,7 +357,7 @@
 
     // Scale factor 1 / (1 - focalX * focalX)
     SkScalar oneMinusF2 = 1.f - SkScalarMul(*focalX, *focalX);
-    SkScalar s = SkScalarInvert(oneMinusF2);
+    SkScalar s = SkScalarDiv(1.f, oneMinusF2);
 
 
     if (s >= 0.f) {
@@ -1115,7 +1115,8 @@
         : INHERITED(ctx, shader, matrix, tm), fInfo(info) {
         this->initClassID<CircleOutside2PtConicalEffect>();
         if (shader.getStartRadius() != shader.getEndRadius()) {
-            fTLimit = shader.getStartRadius() / (shader.getStartRadius() - shader.getEndRadius());
+            fTLimit = SkScalarDiv(shader.getStartRadius(),
+                                  (shader.getStartRadius() - shader.getEndRadius()));
         } else {
             fTLimit = SK_ScalarMin;
         }
diff --git a/src/gpu/GrAAConvexPathRenderer.cpp b/src/gpu/GrAAConvexPathRenderer.cpp
index c68410f..fea943b 100644
--- a/src/gpu/GrAAConvexPathRenderer.cpp
+++ b/src/gpu/GrAAConvexPathRenderer.cpp
@@ -105,7 +105,7 @@
         *c = avg;
     } else {
         area *= 3;
-        area = SkScalarInvert(area);
+        area = SkScalarDiv(SK_Scalar1, area);
         center.fX = SkScalarMul(center.fX, area);
         center.fY = SkScalarMul(center.fY, area);
         // undo the translate of p0 to the origin.
diff --git a/src/gpu/GrOvalRenderer.cpp b/src/gpu/GrOvalRenderer.cpp
index b562167..ebac42f 100644
--- a/src/gpu/GrOvalRenderer.cpp
+++ b/src/gpu/GrOvalRenderer.cpp
@@ -1253,11 +1253,11 @@
             const SkRect& bounds = geom.fBounds;
 
             // This adjusts the "radius" to include the half-pixel border
-            SkScalar offsetDx = geom.fGeoDx / xRadius;
-            SkScalar offsetDy = geom.fGeoDy / yRadius;
+            SkScalar offsetDx = SkScalarDiv(geom.fGeoDx, xRadius);
+            SkScalar offsetDy = SkScalarDiv(geom.fGeoDy, yRadius);
 
-            SkScalar innerRatioX = xRadius / geom.fInnerXRadius;
-            SkScalar innerRatioY = yRadius / geom.fInnerYRadius;
+            SkScalar innerRatioX = SkScalarDiv(xRadius, geom.fInnerXRadius);
+            SkScalar innerRatioY = SkScalarDiv(yRadius, geom.fInnerYRadius);
 
             verts[0].fPos = SkPoint::Make(bounds.fLeft, bounds.fTop);
             verts[0].fOuterOffset = SkPoint::Make(-1.0f - offsetDx, -1.0f - offsetDy);
@@ -1386,8 +1386,8 @@
     SkScalar b = viewMatrix[SkMatrix::kMSkewX];
     SkScalar c = viewMatrix[SkMatrix::kMSkewY];
     SkScalar d = viewMatrix[SkMatrix::kMScaleY];
-    SkScalar geoDx = SK_ScalarHalf / SkScalarSqrt(a*a + c*c);
-    SkScalar geoDy = SK_ScalarHalf / SkScalarSqrt(b*b + d*d);
+    SkScalar geoDx = SkScalarDiv(SK_ScalarHalf, SkScalarSqrt(a*a + c*c));
+    SkScalar geoDy = SkScalarDiv(SK_ScalarHalf, SkScalarSqrt(b*b + d*d));
 
     DIEllipseBatch::Geometry geometry;
     geometry.fViewMatrix = viewMatrix;
diff --git a/src/gpu/GrPathUtils.cpp b/src/gpu/GrPathUtils.cpp
index 3e2c3bf..2a90666 100644
--- a/src/gpu/GrPathUtils.cpp
+++ b/src/gpu/GrPathUtils.cpp
@@ -29,7 +29,8 @@
             stretch = SkMaxScalar(stretch, mat.mapRadius(SK_Scalar1));
         }
     }
-    return srcTol / stretch;
+    srcTol = SkScalarDiv(srcTol, stretch);
+    return srcTol;
 }
 
 static const int MAX_POINTS_PER_CURVE = 1 << 10;
@@ -50,7 +51,7 @@
         // subdivide x = log4(d/tol) times. x subdivisions creates 2^(x)
         // points.
         // 2^(log4(x)) = sqrt(x);
-        SkScalar divSqrt = SkScalarSqrt(d / tol);
+        SkScalar divSqrt = SkScalarSqrt(SkScalarDiv(d, tol));
         if (((SkScalar)SK_MaxS32) <= divSqrt) {
             return MAX_POINTS_PER_CURVE;
         } else {
@@ -106,11 +107,11 @@
     if (d <= tol) {
         return 1;
     } else {
-        SkScalar divSqrt = SkScalarSqrt(d / tol);
+        SkScalar divSqrt = SkScalarSqrt(SkScalarDiv(d, tol));
         if (((SkScalar)SK_MaxS32) <= divSqrt) {
             return MAX_POINTS_PER_CURVE;
         } else {
-            int temp = SkScalarCeilToInt(SkScalarSqrt(d / tol));
+            int temp = SkScalarCeilToInt(SkScalarSqrt(SkScalarDiv(d, tol)));
             int pow2 = GrNextPow2(temp);
             // Because of NaNs & INFs we can wind up with a degenerate temp
             // such that pow2 comes out negative. Also, our point generator
diff --git a/src/gpu/effects/GrDashingEffect.cpp b/src/gpu/effects/GrDashingEffect.cpp
index 1ca5648..bd2997c 100644
--- a/src/gpu/effects/GrDashingEffect.cpp
+++ b/src/gpu/effects/GrDashingEffect.cpp
@@ -135,10 +135,10 @@
     }
     SkScalar srcIntervalLen = intervals[0] + intervals[1];
     SkScalar totalLen = pts[1].fX - pts[0].fX;
-    SkScalar temp = totalLen / srcIntervalLen;
+    SkScalar temp = SkScalarDiv(totalLen, srcIntervalLen);
     SkScalar numFullIntervals = SkScalarFloorToScalar(temp);
     *endingInt = totalLen - numFullIntervals * srcIntervalLen + phase;
-    temp = *endingInt / srcIntervalLen;
+    temp = SkScalarDiv(*endingInt, srcIntervalLen);
     *endingInt = *endingInt - SkScalarFloorToScalar(temp) * srcIntervalLen;
     if (0 == *endingInt) {
         *endingInt = srcIntervalLen;
diff --git a/src/pdf/SkPDFDevice.cpp b/src/pdf/SkPDFDevice.cpp
index 3b0d6f7..814504e 100644
--- a/src/pdf/SkPDFDevice.cpp
+++ b/src/pdf/SkPDFDevice.cpp
@@ -39,12 +39,15 @@
 
 static void emit_pdf_color(SkColor color, SkWStream* result) {
     SkASSERT(SkColorGetA(color) == 0xFF);  // We handle alpha elsewhere.
-    SkScalar colorScale = SkScalarInvert(0xFF);
-    SkPDFUtils::AppendScalar(SkColorGetR(color) * colorScale, result);
+    SkScalar colorMax = SkIntToScalar(0xFF);
+    SkPDFUtils::AppendScalar(
+            SkScalarDiv(SkIntToScalar(SkColorGetR(color)), colorMax), result);
     result->writeText(" ");
-    SkPDFUtils::AppendScalar(SkColorGetG(color) * colorScale, result);
+    SkPDFUtils::AppendScalar(
+            SkScalarDiv(SkIntToScalar(SkColorGetG(color)), colorMax), result);
     result->writeText(" ");
-    SkPDFUtils::AppendScalar(SkColorGetB(color) * colorScale, result);
+    SkPDFUtils::AppendScalar(
+            SkScalarDiv(SkIntToScalar(SkColorGetB(color)), colorMax), result);
     result->writeText(" ");
 }
 
diff --git a/src/pdf/SkPDFGraphicState.cpp b/src/pdf/SkPDFGraphicState.cpp
index 6cf6645..d063c15 100644
--- a/src/pdf/SkPDFGraphicState.cpp
+++ b/src/pdf/SkPDFGraphicState.cpp
@@ -201,7 +201,7 @@
     SkAutoTUnref<SkPDFDict> dict(SkNEW_ARGS(SkPDFDict, ("ExtGState")));
     dict->insertName("Type", "ExtGState");
 
-    SkScalar alpha = SkIntToScalar(fAlpha) / 0xFF;
+    SkScalar alpha = SkScalarDiv(fAlpha, 0xFF);
     dict->insertScalar("CA", alpha);
     dict->insertScalar("ca", alpha);
 
diff --git a/src/pdf/SkPDFShader.cpp b/src/pdf/SkPDFShader.cpp
index c627c14..c2f0bc4 100644
--- a/src/pdf/SkPDFShader.cpp
+++ b/src/pdf/SkPDFShader.cpp
@@ -58,7 +58,7 @@
     // Figure out how to scale each color component.
     SkScalar multiplier[kColorComponents];
     for (int i = 0; i < kColorComponents; i++) {
-        multiplier[i] = (curColor[i] - prevColor[i]) / range;
+        multiplier[i] = SkScalarDiv(curColor[i] - prevColor[i], range);
     }
 
     // Calculate when we no longer need to keep a copy of the input parameter t.
@@ -1132,7 +1132,7 @@
             static const SkScalar kMaxBitmapArea = 1024 * 1024;
             SkScalar bitmapArea = rasterScale * bbox.width() * rasterScale * bbox.height();
             if (bitmapArea > kMaxBitmapArea) {
-                rasterScale *= SkScalarSqrt(kMaxBitmapArea / bitmapArea);
+                rasterScale *= SkScalarSqrt(SkScalarDiv(kMaxBitmapArea, bitmapArea));
             }
 
             SkISize size = SkISize::Make(SkScalarRoundToInt(rasterScale * bbox.width()),
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp
index 5c53b9d..0a69b43 100644
--- a/src/ports/SkFontHost_FreeType.cpp
+++ b/src/ports/SkFontHost_FreeType.cpp
@@ -1198,7 +1198,8 @@
     // This means do not try to scale embedded bitmaps; only scale bitmaps in bitmap only fonts.
     if (!FT_IS_SCALABLE(fFace) && fScaleY && fFace->size->metrics.y_ppem) {
         // NOTE: both dimensions are scaled by y_ppem. this is WAI.
-        scaleGlyphMetrics(*glyph, SkFixedToScalar(fScaleY) / fFace->size->metrics.y_ppem);
+        scaleGlyphMetrics(*glyph, SkScalarDiv(SkFixedToScalar(fScaleY),
+                                              SkIntToScalar(fFace->size->metrics.y_ppem)));
     }
 
 #ifdef ENABLE_GLYPH_SPEW
diff --git a/src/svg/parser/SkSVGSVG.cpp b/src/svg/parser/SkSVGSVG.cpp
index 61ccb3c..fcce62d 100644
--- a/src/svg/parser/SkSVGSVG.cpp
+++ b/src/svg/parser/SkSVGSVG.cpp
@@ -43,8 +43,11 @@
     if (strcmp(wSuffix, "pt") == 0)
         width = SkScalarMulDiv(width, SK_Scalar1 * 72, SK_Scalar1 * 96);
     SkParse::FindScalars(f_viewBox.c_str(), viewBox, 4);
-    SkRect box = SkRect::MakeLTRB(viewBox[0] / width, viewBox[1] / height,
-                                  viewBox[2] / width, viewBox[3] / height);
+    SkRect box;
+    box.fLeft = SkScalarDiv(viewBox[0], width);
+    box.fTop = SkScalarDiv(viewBox[1], height);
+    box.fRight = SkScalarDiv(viewBox[2], width);
+    box.fBottom = SkScalarDiv(viewBox[3], height);
     if (box.fLeft == 0 && box.fTop == 0 &&
         box.fRight == SK_Scalar1 && box.fBottom == SK_Scalar1)
             return;
diff --git a/src/utils/SkInterpolator.cpp b/src/utils/SkInterpolator.cpp
index 03e7e4a..97574e4 100644
--- a/src/utils/SkInterpolator.cpp
+++ b/src/utils/SkInterpolator.cpp
@@ -62,7 +62,8 @@
                                   SkMSec nextTime, const SkScalar blend[4]) {
     SkASSERT(time > prevTime && time < nextTime);
 
-    SkScalar t = (SkScalar)(time - prevTime) / (SkScalar)(nextTime - prevTime);
+    SkScalar t = SkScalarDiv((SkScalar)(time - prevTime),
+                             (SkScalar)(nextTime - prevTime));
     return blend ?
             SkUnitCubicInterp(t, blend[0], blend[1], blend[2], blend[3]) : t;
 }
diff --git a/src/utils/SkNinePatch.cpp b/src/utils/SkNinePatch.cpp
index ce8d480..4e0d1d1 100644
--- a/src/utils/SkNinePatch.cpp
+++ b/src/utils/SkNinePatch.cpp
@@ -161,7 +161,7 @@
         if (bounds.width() >= fixed)
             stretchX = (bounds.width() - fixed) / stretchSize;
         else // reuse stretchX, but keep it negative as a signal
-            stretchX = -bounds.width() / fixed;
+            stretchX = SkScalarDiv(-bounds.width(), fixed);
     }
 
     if (numYStretch > 0) {
@@ -173,7 +173,7 @@
         if (bounds.height() >= fixed)
             stretchY = (bounds.height() - fixed) / stretchSize;
         else // reuse stretchX, but keep it negative as a signal
-            stretchY = -bounds.height() / fixed;
+            stretchY = SkScalarDiv(-bounds.height(), fixed);
     }
 
 #if 0
diff --git a/tests/DrawBitmapRectTest.cpp b/tests/DrawBitmapRectTest.cpp
index 80167b7..9c522db 100644
--- a/tests/DrawBitmapRectTest.cpp
+++ b/tests/DrawBitmapRectTest.cpp
@@ -124,19 +124,19 @@
     REPORTER_ASSERT(reporter, treat_as_sprite(mat, size, bilerBits));
 
     const SkScalar twoThirds = SK_Scalar1 * 2 / 3;
-    const SkScalar bigScale = (size.width() + twoThirds) / size.width();
+    const SkScalar bigScale = SkScalarDiv(size.width() + twoThirds, size.width());
     mat.setScale(bigScale, bigScale);
     REPORTER_ASSERT(reporter, !treat_as_sprite(mat, size, false));
     REPORTER_ASSERT(reporter, !treat_as_sprite(mat, size, bilerBits));
 
     const SkScalar oneThird = SK_Scalar1 / 3;
-    const SkScalar smallScale = (size.width() + oneThird) / size.width();
+    const SkScalar smallScale = SkScalarDiv(size.width() + oneThird, size.width());
     mat.setScale(smallScale, smallScale);
     REPORTER_ASSERT(reporter, treat_as_sprite(mat, size, false));
     REPORTER_ASSERT(reporter, !treat_as_sprite(mat, size, bilerBits));
 
     const SkScalar oneFortyth = SK_Scalar1 / 40;
-    const SkScalar tinyScale = (size.width() + oneFortyth) / size.width();
+    const SkScalar tinyScale = SkScalarDiv(size.width() + oneFortyth, size.width());
     mat.setScale(tinyScale, tinyScale);
     REPORTER_ASSERT(reporter, treat_as_sprite(mat, size, false));
     REPORTER_ASSERT(reporter, treat_as_sprite(mat, size, bilerBits));
diff --git a/tests/MatrixTest.cpp b/tests/MatrixTest.cpp
index 72e0dcc..95d33ac 100644
--- a/tests/MatrixTest.cpp
+++ b/tests/MatrixTest.cpp
@@ -270,8 +270,8 @@
         mat.mapVectors(vectors, SK_ARRAY_COUNT(vectors));
         for (size_t i = 0; i < SK_ARRAY_COUNT(vectors); ++i) {
             SkScalar d = vectors[i].length();
-            REPORTER_ASSERT(reporter, d / maxScale < gVectorScaleTol);
-            REPORTER_ASSERT(reporter, minScale / d < gVectorScaleTol);
+            REPORTER_ASSERT(reporter, SkScalarDiv(d, maxScale) < gVectorScaleTol);
+            REPORTER_ASSERT(reporter, SkScalarDiv(minScale, d) < gVectorScaleTol);
             if (max < d) {
                 max = d;
             }
@@ -279,8 +279,8 @@
                 min = d;
             }
         }
-        REPORTER_ASSERT(reporter, max / maxScale >= gCloseScaleTol);
-        REPORTER_ASSERT(reporter, minScale / min >= gCloseScaleTol);
+        REPORTER_ASSERT(reporter, SkScalarDiv(max, maxScale) >= gCloseScaleTol);
+        REPORTER_ASSERT(reporter, SkScalarDiv(minScale, min) >= gCloseScaleTol);
     }
 }
 
diff --git a/tests/PathCoverageTest.cpp b/tests/PathCoverageTest.cpp
index 303ddcc..0e4a153 100644
--- a/tests/PathCoverageTest.cpp
+++ b/tests/PathCoverageTest.cpp
@@ -60,7 +60,7 @@
     if (d < tol) {
        return 1;
     } else {
-       int temp = SkScalarCeilToInt(SkScalarSqrt(d / tol));
+       int temp = SkScalarCeilToInt(SkScalarSqrt(SkScalarDiv(d, tol)));
        uint32_t count = SkMin32(SkNextPow2(temp), MAX_POINTS_PER_CURVE);
        return count;
     }
diff --git a/tools/PictureRenderer.cpp b/tools/PictureRenderer.cpp
index 93701ba..559413f 100644
--- a/tools/PictureRenderer.cpp
+++ b/tools/PictureRenderer.cpp
@@ -40,7 +40,7 @@
 #include "sk_tool_utils.h"
 
 static inline SkScalar scalar_log2(SkScalar x) {
-    static const SkScalar log2_conversion_factor = SkScalarInvert(SkScalarLog(2));
+    static const SkScalar log2_conversion_factor = SkScalarDiv(1, SkScalarLog(2));
 
     return SkScalarLog(x) * log2_conversion_factor;
 }