JIT functions taking six pointers

This allows us to JIT functions taking one more argument.
Our x86 JIT was the weak link: LLVM handles arbitrary numbers
of arguments, and our aarch64 JIT handles up to seven already.

I plan to pass one more source varying sometimes, and in extremely
unusual cases it we could need six pointers:

    1) uniforms
    2) destination
    3) 8-bit coverage plane
    4) 8-bit multiply plane
    5) 8-bit add plane
    6) source varying

Those varyings 3-5 are all indexable off the coverage pointer 3) if we
know the dimensions, so I could be convinced that we should only pass
one there, making our maximum number of arguments four.  I'll be looking
at that independently, but it doesn't hurt to have our capability to go
up to six either way.

Change-Id: Id7a5b88e382a95bb560633e95c5be273b7ea67d1
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/306241
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
diff --git a/tests/SkVMTest.cpp b/tests/SkVMTest.cpp
index 581f248..e6076fc 100644
--- a/tests/SkVMTest.cpp
+++ b/tests/SkVMTest.cpp
@@ -2304,3 +2304,32 @@
         }
     });
 }
+
+DEF_TEST(SkVM_args, r) {
+    // Test we can handle at least six arguments.
+    skvm::Builder b;
+    {
+        skvm::Arg dst = b.varying<float>(),
+                    A = b.varying<float>(),
+                    B = b.varying<float>(),
+                    C = b.varying<float>(),
+                    D = b.varying<float>(),
+                    E = b.varying<float>();
+        storeF(dst, b.loadF(A)
+                  + b.loadF(B)
+                  + b.loadF(C)
+                  + b.loadF(D)
+                  + b.loadF(E));
+    }
+
+    test_jit_and_interpreter(b.done(), [&](const skvm::Program& program){
+        float dst[17],A[17],B[17],C[17],D[17],E[17];
+        for (int i = 0; i < 17; i++) {
+            A[i] = B[i] = C[i] = D[i] = E[i] = (float)i;
+        }
+        program.eval(17, dst,A,B,C,D,E);
+        for (int i = 0; i < 17; i++) {
+            REPORTER_ASSERT(r, dst[i] == 5.0f*i);
+        }
+    });
+}