Replace SkIsFinite with a parameter-pack implementation.

This should be more ergonomic, and will generate slightly better
code than `SkIsFinite(a, b) && SkIsFinite(c, d)`.

The algorithm has been slightly tweaked; it's now a hybrid of the
previous approaches. The first element of the list is subtracted
from itself (yielding zero or NAN) and multiplied against all the
subsequent elements. Finally the value is compared against itself.
This gives us one instruction per value, plus one comparison op,
and does not require us to synthesize a constant zero.

Change-Id: I7f87c09a74bc847f0afc10346b51211b17811c1c
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/842484
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
14 files changed