11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 20910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2006 The Android Open Source Project 40910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 70910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project */ 80910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 100910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifndef SkFDot6_DEFINED 110910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkFDot6_DEFINED 120910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 130910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#include "SkMath.h" 140910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 150910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Projecttypedef int32_t SkFDot6; 160910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 1787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#define SK_FDot6One (64) 180910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SK_FDot6Half (32) 190910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 200910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_DEBUG 2187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger inline SkFDot6 SkIntToFDot6(S16CPU x) { 220910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(SkToS16(x) == x); 230910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return x << 6; 240910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project } 250910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#else 260910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project #define SkIntToFDot6(x) ((x) << 6) 270910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 280910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 290910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkFDot6Floor(x) ((x) >> 6) 300910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkFDot6Ceil(x) (((x) + 63) >> 6) 310910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkFDot6Round(x) (((x) + 32) >> 6) 320910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 330910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#define SkFixedToFDot6(x) ((x) >> 10) 340910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 3587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerinline SkFixed SkFDot6ToFixed(SkFDot6 x) { 360910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT((x << 10 >> 10) == x); 370910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 380910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return x << 10; 390910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 400910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 410910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#ifdef SK_SCALAR_IS_FLOAT 420910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project #define SkScalarToFDot6(x) (SkFDot6)((x) * 64) 430910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#else 440910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project #define SkScalarToFDot6(x) ((x) >> 10) 450910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 460910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 4787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergerinline SkFixed SkFDot6Div(SkFDot6 a, SkFDot6 b) { 480910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project SkASSERT(b != 0); 490910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 5087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger if (a == (int16_t)a) { 510910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return (a << 16) / b; 5287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } else { 530910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project return SkFixedDiv(a, b); 5487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger } 550910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project} 560910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 570910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project#endif 580910916c0f7b951ee55c4b7c6358295b9bca0565The Android Open Source Project 59