1 2 /* 3 * Copyright 2006 The Android Open Source Project 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10 #ifndef SkFDot6_DEFINED 11 #define SkFDot6_DEFINED 12 13 #include "SkMath.h" 14 15 typedef int32_t SkFDot6; 16 17 #define SK_FDot6One (64) 18 #define SK_FDot6Half (32) 19 20 #ifdef SK_DEBUG SkIntToFDot6(S16CPU x)21 inline SkFDot6 SkIntToFDot6(S16CPU x) { 22 SkASSERT(SkToS16(x) == x); 23 return x << 6; 24 } 25 #else 26 #define SkIntToFDot6(x) ((x) << 6) 27 #endif 28 29 #define SkFDot6Floor(x) ((x) >> 6) 30 #define SkFDot6Ceil(x) (((x) + 63) >> 6) 31 #define SkFDot6Round(x) (((x) + 32) >> 6) 32 33 #define SkFixedToFDot6(x) ((x) >> 10) 34 SkFDot6ToFixed(SkFDot6 x)35inline SkFixed SkFDot6ToFixed(SkFDot6 x) { 36 SkASSERT((x << 10 >> 10) == x); 37 38 return x << 10; 39 } 40 41 #ifdef SK_SCALAR_IS_FLOAT 42 #define SkScalarToFDot6(x) (SkFDot6)((x) * 64) 43 #else 44 #define SkScalarToFDot6(x) ((x) >> 10) 45 #endif 46 SkFDot6Div(SkFDot6 a,SkFDot6 b)47inline SkFixed SkFDot6Div(SkFDot6 a, SkFDot6 b) { 48 SkASSERT(b != 0); 49 50 if (a == (int16_t)a) { 51 return (a << 16) / b; 52 } else { 53 return SkFixedDiv(a, b); 54 } 55 } 56 57 #endif 58 59