Hmm... it looks like LLVM already does that for me? (Maybe it's inlining the interpolate function?)

```bash
damocles@moya:~/uber/rainbow-dash(emscripten-ify)$ npm run build

> rainbow-dash@0.1.8 build /Users/damocles/uber/rainbow-dash
> ./build.sh

damocles@moya:~/uber/rainbow-dash(emscripten-ify)$ git status
# On branch emscripten-ify
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   src/dash-core.c
#
no changes added to commit (use "git add" and/or "git commit -a")
damocles@moya:~/uber/rainbow-dash(emscripten-ify)$ git diff
diff --git a/src/dash-core.c b/src/dash-core.c
index ed2757d..d4dd277 100644
--- a/src/dash-core.c
+++ b/src/dash-core.c
@@ -8,19 +8,21 @@
 typedef unsigned char byte;
 
 // # interpolate
-// Simple integer out `y=mx+b` method
-byte interpolate(double m, double b, double x) {
-    return (byte)(m*x+b);
+// Simple integer out `y=mx+b` method. `y` must be in the range of 0-255.
+byte interpolate(double* m, double* b, double* x) {
+    return (byte)((*m)*(*x)+(*b));
 }
 
 // # calculateM
 // Given two points on a line, calculate `m` for `y=mx+b`
+// x1 *must not* equal x2
 double calculateM(double x1, double x2, double y1, double y2) {
     return (y2 - y1)/(x2 - x1);
 }
 
 // # calculateB
 // Given two points on a line, calculate `b` for `y=mx+b`
+// x1 *must not* equal x2
 double calculateB(double x1, double x2, double y1, double y2) {
     return (x2*y1 - x1*y2)/(x2 - x1);
 }
@@ -33,8 +35,8 @@ byte* getTriple(double* stopVals, double* rVals, double* gVals, double* bVals, d
     int i = 0;
     static byte out[3] = {0};
     while(stopVals[i+1] < x) { i++; }
-    out[0] = interpolate(rVals[2*i], rVals[2*i+1], x);
-    out[1] = interpolate(gVals[2*i], gVals[2*i+1], x);
-    out[2] = interpolate(bVals[2*i], bVals[2*i+1], x);
+    out[0] = interpolate(rVals+(2*i), rVals+(2*i+1), &x);
+    out[1] = interpolate(gVals+(2*i), gVals+(2*i+1), &x);
+    out[2] = interpolate(bVals+(2*i), bVals+(2*i+1), &x);
     return out;
 }
```