1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2014 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #include "src/base/SkHalf.h" 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkFloatingPoint.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "src/base/SkVx.h" 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker // NOTE: These are defined within the CPP compilation unit so that they are not inlined everywhere 14*c8dee2aaSAndroid Build Coastguard Worker // and increase code size. Performance critical code is likely already using skvx directly, and 15*c8dee2aaSAndroid Build Coastguard Worker // they will be inlined where performance vs. code size is worth it. SkFloatToHalf(float f)16*c8dee2aaSAndroid Build Coastguard WorkerSkHalf SkFloatToHalf(float f) { 17*c8dee2aaSAndroid Build Coastguard Worker if (std::isnan(f)) { 18*c8dee2aaSAndroid Build Coastguard Worker return SK_HalfNaN; 19*c8dee2aaSAndroid Build Coastguard Worker } else { 20*c8dee2aaSAndroid Build Coastguard Worker return to_half(skvx::Vec<1,float>(f))[0]; 21*c8dee2aaSAndroid Build Coastguard Worker } 22*c8dee2aaSAndroid Build Coastguard Worker } 23*c8dee2aaSAndroid Build Coastguard Worker SkHalfToFloat(SkHalf h)24*c8dee2aaSAndroid Build Coastguard Workerfloat SkHalfToFloat(SkHalf h) { 25*c8dee2aaSAndroid Build Coastguard Worker return from_half(skvx::Vec<1,uint16_t>(h))[0]; 26*c8dee2aaSAndroid Build Coastguard Worker } 27