Add ceil to skvx/skvm/JIT, and floor/ceil intrinsics to ByteCode

This is enough to get the colorcube GM working on the CPU backend.
(It's not blazingly fast, but it works!)

Change-Id: Ic069861bab162ed49f876fd03af2cbaaec2da628
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/297718
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/src/sksl/SkSLByteCodeGenerator.cpp b/src/sksl/SkSLByteCodeGenerator.cpp
index 8ada9d5..e5ab5af 100644
--- a/src/sksl/SkSLByteCodeGenerator.cpp
+++ b/src/sksl/SkSLByteCodeGenerator.cpp
@@ -47,9 +47,11 @@
     // You can probably copy the declarations from sksl_gpu.inc.
     , fIntrinsics {
         { "atan",     ByteCodeInstruction::kATan },
+        { "ceil",     ByteCodeInstruction::kCeil },
         { "clamp",    SpecialIntrinsic::kClamp },
         { "cos",      ByteCodeInstruction::kCos },
         { "dot",      SpecialIntrinsic::kDot },
+        { "floor",    ByteCodeInstruction::kFloor },
         { "fract",    ByteCodeInstruction::kFract },
         { "inverse",  ByteCodeInstruction::kInverse2x2 },
         { "length",   SpecialIntrinsic::kLength },
@@ -257,7 +259,9 @@
         VECTOR_UNARY_OP(kConvertUtoF)
 
         VECTOR_UNARY_OP(kATan)
+        VECTOR_UNARY_OP(kCeil)
         VECTOR_UNARY_OP(kCos)
+        VECTOR_UNARY_OP(kFloor)
         VECTOR_UNARY_OP(kFract)
         VECTOR_UNARY_OP(kSin)
         VECTOR_UNARY_OP(kSqrt)