| Index: src/core/Sk64.cpp
|
| diff --git a/src/core/Sk64.cpp b/src/core/Sk64.cpp
|
| deleted file mode 100644
|
| index 552d45685ebde0fd81b54896ad695a48a3561dcd..0000000000000000000000000000000000000000
|
| --- a/src/core/Sk64.cpp
|
| +++ /dev/null
|
| @@ -1,286 +0,0 @@
|
| -/*
|
| - * Copyright 2006 The Android Open Source Project
|
| - *
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| -#include "Sk64.h"
|
| -#include "SkMathPriv.h"
|
| -
|
| -#define shift_left(hi, lo) \
|
| - hi = (hi << 1) | (lo >> 31); \
|
| - lo <<= 1
|
| -
|
| -#define shift_left_bits(hi, lo, bits) \
|
| - SkASSERT((unsigned)(bits) < 31); \
|
| - hi = (hi << (bits)) | (lo >> (32 - (bits))); \
|
| - lo <<= (bits)
|
| -
|
| -//////////////////////////////////////////////////////////////////////
|
| -
|
| -int Sk64::getClzAbs() const
|
| -{
|
| - int32_t hi = fHi;
|
| - uint32_t lo = fLo;
|
| -
|
| - // get abs
|
| - if (hi < 0)
|
| - {
|
| - hi = -hi - Sk32ToBool(lo);
|
| - lo = 0 - lo;
|
| - }
|
| - return hi ? SkCLZ(hi) : SkCLZ(lo) + 32;
|
| -}
|
| -
|
| -void Sk64::shiftLeft(unsigned bits)
|
| -{
|
| - SkASSERT(bits <= 63);
|
| - if (bits == 0)
|
| - return;
|
| -
|
| - if (bits >= 32)
|
| - {
|
| - fHi = fLo << (bits - 32);
|
| - fLo = 0;
|
| - }
|
| - else
|
| - {
|
| - fHi = (fHi << bits) | (fLo >> (32 - bits));
|
| - fLo <<= bits;
|
| - }
|
| -}
|
| -
|
| -int32_t Sk64::getShiftRight(unsigned bits) const
|
| -{
|
| - SkASSERT(bits <= 63);
|
| -
|
| - if (bits == 0)
|
| - return fLo;
|
| -
|
| - if (bits >= 32)
|
| - return fHi >> (bits - 32);
|
| - else
|
| - {
|
| -#ifdef SK_DEBUG
|
| - int32_t tmp = fHi >> bits;
|
| - SkASSERT(tmp == 0 || tmp == -1);
|
| -#endif
|
| - return (fHi << (32 - bits)) | (fLo >> bits);
|
| - }
|
| -}
|
| -
|
| -void Sk64::shiftRight(unsigned bits)
|
| -{
|
| - SkASSERT(bits <= 63);
|
| - if (bits == 0)
|
| - return;
|
| -
|
| - if (bits >= 32)
|
| - {
|
| - fLo = fHi >> (bits - 32);
|
| - fHi >>= 31;
|
| - }
|
| - else
|
| - {
|
| - fLo = (fHi << (32 - bits)) | (fLo >> bits);
|
| - fHi >>= bits;
|
| - }
|
| -}
|
| -
|
| -void Sk64::roundRight(unsigned bits)
|
| -{
|
| - SkASSERT(bits <= 63);
|
| - if (bits)
|
| - {
|
| - Sk64 one;
|
| - one.set(1);
|
| - one.shiftLeft(bits - 1);
|
| - this->add(one);
|
| - this->shiftRight(bits);
|
| - }
|
| -}
|
| -
|
| -int Sk64::shiftToMake32() const
|
| -{
|
| - int32_t hi = fHi;
|
| - uint32_t lo = fLo;
|
| -
|
| - if (hi < 0) // make it positive
|
| - {
|
| - hi = -hi - Sk32ToBool(lo);
|
| - lo = 0 - lo;
|
| - }
|
| -
|
| - if (hi == 0)
|
| - return lo >> 31;
|
| - else
|
| - return 33 - SkCLZ(hi);
|
| -}
|
| -
|
| -void Sk64::negate()
|
| -{
|
| - fHi = -fHi - Sk32ToBool(fLo);
|
| - fLo = 0 - fLo;
|
| -}
|
| -
|
| -void Sk64::abs()
|
| -{
|
| - if (fHi < 0)
|
| - {
|
| - fHi = -fHi - Sk32ToBool(fLo);
|
| - fLo = 0 - fLo;
|
| - }
|
| -}
|
| -
|
| -#if 0
|
| -SkBool Sk64::isFixed() const
|
| -{
|
| - Sk64 tmp = *this;
|
| - tmp.roundRight(16);
|
| - return tmp.is32();
|
| -}
|
| -#endif
|
| -
|
| -void Sk64::sub(const Sk64& a)
|
| -{
|
| - fHi = fHi - a.fHi - (fLo < a.fLo);
|
| - fLo = fLo - a.fLo;
|
| -}
|
| -
|
| -void Sk64::rsub(const Sk64& a)
|
| -{
|
| - fHi = a.fHi - fHi - (a.fLo < fLo);
|
| - fLo = a.fLo - fLo;
|
| -}
|
| -
|
| -void Sk64::setMul(int32_t a, int32_t b)
|
| -{
|
| - int sa = a >> 31;
|
| - int sb = b >> 31;
|
| - // now make them positive
|
| - a = (a ^ sa) - sa;
|
| - b = (b ^ sb) - sb;
|
| -
|
| - uint32_t ah = a >> 16;
|
| - uint32_t al = a & 0xFFFF;
|
| - uint32_t bh = b >> 16;
|
| - uint32_t bl = b & 0xFFFF;
|
| -
|
| - uint32_t A = ah * bh;
|
| - uint32_t B = ah * bl + al * bh;
|
| - uint32_t C = al * bl;
|
| -
|
| - /* [ A ]
|
| - [ B ]
|
| - [ C ]
|
| - */
|
| - fLo = C + (B << 16);
|
| - fHi = A + (B >>16) + (fLo < C);
|
| -
|
| - if (sa != sb)
|
| - this->negate();
|
| -}
|
| -
|
| -void Sk64::div(int32_t denom, DivOptions option)
|
| -{
|
| - SkASSERT(denom);
|
| -
|
| - int32_t hi = fHi;
|
| - uint32_t lo = fLo;
|
| - int sign = denom ^ hi;
|
| -
|
| - denom = SkAbs32(denom);
|
| - if (hi < 0)
|
| - {
|
| - hi = -hi - Sk32ToBool(lo);
|
| - lo = 0 - lo;
|
| - }
|
| -
|
| - if (option == kRound_DivOption) // add denom/2
|
| - {
|
| - uint32_t newLo = lo + (denom >> 1);
|
| - hi += (newLo < lo);
|
| - lo = newLo;
|
| - }
|
| -
|
| - if (hi == 0) // fast-case
|
| - {
|
| - if (lo < (uint32_t)denom)
|
| - this->set(0, 0);
|
| - else
|
| - {
|
| - this->set(0, lo / denom);
|
| - if (sign < 0)
|
| - this->negate();
|
| - }
|
| - return;
|
| - }
|
| -
|
| - int bits;
|
| -
|
| - {
|
| - int dbits = SkCLZ(denom);
|
| - int nbits = SkCLZ(hi);
|
| -
|
| - bits = 32 + dbits - nbits;
|
| - SkASSERT(bits <= 63);
|
| - if (bits <= 0)
|
| - {
|
| - this->set(0, 0);
|
| - return;
|
| - }
|
| - denom <<= (dbits - 1);
|
| - shift_left_bits(hi, lo, nbits - 1);
|
| - }
|
| -
|
| - int32_t rhi = 0;
|
| - uint32_t rlo = 0;
|
| -
|
| - do {
|
| - shift_left(rhi, rlo);
|
| - if ((uint32_t)denom <= (uint32_t)hi)
|
| - {
|
| - hi -= denom;
|
| - rlo |= 1;
|
| - }
|
| - shift_left(hi, lo);
|
| - } while (--bits >= 0);
|
| - SkASSERT(rhi >= 0);
|
| -
|
| - fHi = rhi;
|
| - fLo = rlo;
|
| - if (sign < 0)
|
| - this->negate();
|
| -}
|
| -
|
| -#define shift_left_2(a, b, c) \
|
| - a = (a << 2) | (b >> 30); \
|
| - b = (b << 2) | (c >> 30); \
|
| - c <<= 2
|
| -
|
| -int32_t Sk64::getSqrt() const
|
| -{
|
| - SkASSERT(!this->isNeg());
|
| -
|
| - uint32_t hi = fHi;
|
| - uint32_t lo = fLo;
|
| - uint32_t sqr = 0;
|
| - uint32_t root = 0;
|
| - int count = 31;
|
| -
|
| - do {
|
| - root <<= 1;
|
| - shift_left_2(sqr, hi, lo);
|
| -
|
| - uint32_t testDiv = (root << 1) + 1;
|
| - if (sqr >= testDiv)
|
| - {
|
| - sqr -= testDiv;
|
| - root++;
|
| - }
|
| - } while (--count >= 0);
|
| - SkASSERT((int32_t)root >= 0);
|
| -
|
| - return root;
|
| -}
|
|
|