add mad, to_f32, trunc

enough for SkVM_mad, SkVM_madder

Change-Id: Id5165e221ae9923f6ccffc6a987d973c7f11332c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/274026
Auto-Submit: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
diff --git a/src/core/SkVM.cpp b/src/core/SkVM.cpp
index 219fcf5..88c3d57 100644
--- a/src/core/SkVM.cpp
+++ b/src/core/SkVM.cpp
@@ -1976,10 +1976,19 @@
                 case Op::sub_f32: vals[i] = I(b->CreateFSub(F(vals[x]), F(vals[y]))); break;
                 case Op::mul_f32: vals[i] = I(b->CreateFMul(F(vals[x]), F(vals[y]))); break;
                 case Op::div_f32: vals[i] = I(b->CreateFDiv(F(vals[x]), F(vals[y]))); break;
+
+                case Op::mad_f32:
+                    vals[i] = I(b->CreateFAdd(b->CreateFMul(F(vals[x]), F(vals[y])),
+                                              F(vals[z])));
+                    break;
+
                 case Op::floor:
                     vals[i] = I(b->CreateUnaryIntrinsic(llvm::Intrinsic::floor, F(vals[x])));
                     break;
 
+                case Op::to_f32: vals[i] = I(b->CreateSIToFP(  vals[x] , F32)); break;
+                case Op::trunc : vals[i] =   b->CreateFPToSI(F(vals[x]), I32) ; break;
+
                 case Op::gather32: {
                     // Our gather base pointer is immz bytes off of uniform immy.
                     llvm::Value* base =