Revert "begin to remove SkLONGLONG and wean Skia off of Sk64"

This reverts commit 784890196fdab96289f9389db43aca01f35db0f9.

Revert "use LL suffix for 64bit literal"

This reverts commit 9634295aff9bffd7a3875a0ca4a9b1a27d0793fc.

BUG=

Review URL: https://codereview.chromium.org/116543009

git-svn-id: http://skia.googlecode.com/svn/trunk@12790 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
reed@google.com 2013-12-19 22:28:48 +00:00
Родитель 8d7ed847be
Коммит b1560445c6
10 изменённых файлов: 77 добавлений и 48 удалений

Просмотреть файл

@ -88,6 +88,12 @@
//#define SK_UINT8_BITFIELD_LENDIAN
/* Some compilers don't support long long for 64bit integers. If yours does
not, define this to the appropriate type.
*/
//#define SkLONGLONG int64_t
/* To write debug messages to a console, skia will call SkDebugf(...) following
printf conventions (e.g. const char* format, ...). If you want to redirect
this to something other than printf, define yours here

Просмотреть файл

@ -17,17 +17,9 @@
Sk64 is a 64-bit math package that does not require long long support from the compiler.
*/
struct SK_API Sk64 {
private:
int32_t fHi; //!< the high 32 bits of the number (including sign)
uint32_t fLo; //!< the low 32 bits of the number
public:
int32_t hi() const { return fHi; }
uint32_t lo() const { return fLo; }
int64_t as64() const { return ((int64_t)fHi << 32) | fLo; }
int64_t getLongLong() const { return this->as64(); }
/** Returns non-zero if the Sk64 can be represented as a signed 32 bit integer
*/
SkBool is32() const { return fHi == ((int32_t)fLo >> 31); }
@ -177,8 +169,9 @@ public:
return a.fHi > b.fHi || (a.fHi == b.fHi && a.fLo >= b.fLo);
}
// Private to unittests. Parameter is (skiatest::Reporter*)
static void UnitTestWithReporter(void* skiatest_reporter);
#ifdef SkLONGLONG
SkLONGLONG getLongLong() const;
#endif
};
#endif

Просмотреть файл

@ -118,11 +118,11 @@ static inline SkFixed SkFixedCos(SkFixed radians) {
#ifdef SkLONGLONG
inline SkFixed SkFixedMul_longlong(SkFixed a, SkFixed b)
{
return (SkFixed)((int64_t)a * b >> 16);
return (SkFixed)((SkLONGLONG)a * b >> 16);
}
inline SkFixed SkFixedSquare_longlong(SkFixed value)
{
return (SkFixed)((int64_t)value * value >> 16);
return (SkFixed)((SkLONGLONG)value * value >> 16);
}
#define SkFixedMul(a,b) SkFixedMul_longlong(a,b)
#define SkFixedSquare(a) SkFixedSquare_longlong(a)

Просмотреть файл

@ -227,13 +227,13 @@
//////////////////////////////////////////////////////////////////////
// TODO: rebaseline as needed so we can remove this flag entirely.
// - all platforms have int64_t now
// - we have slightly different fixed math results because of this check
// since we don't define this for linux/android
#if defined(SK_BUILD_FOR_WIN32) || defined(SK_BUILD_FOR_MAC)
# ifndef SkLONGLONG
# define SkLONGLONG int64_t
# ifdef SK_BUILD_FOR_WIN32
# define SkLONGLONG __int64
# else
# define SkLONGLONG long long
# endif
# endif
#endif

Просмотреть файл

@ -1,3 +1,4 @@
/*
* Copyright 2006 The Android Open Source Project
*
@ -5,11 +6,15 @@
* found in the LICENSE file.
*/
// Inspired by Rob Johnson's most excellent QuickDraw GX sample code
#ifndef SkCamera_DEFINED
#define SkCamera_DEFINED
#include "Sk64.h"
#include "SkMatrix.h"
class SkCanvas;

Просмотреть файл

@ -285,3 +285,11 @@ int32_t Sk64::getSqrt() const
return root;
}
#ifdef SkLONGLONG
SkLONGLONG Sk64::getLongLong() const
{
SkLONGLONG value = fHi;
value <<= 32;
return value | fLo;
}
#endif

Просмотреть файл

@ -55,7 +55,7 @@ int32_t SkMulDiv(int32_t numer1, int32_t numer2, int32_t denom) {
SkFixed SkFixedMul_portable(SkFixed a, SkFixed b) {
#if defined(SkLONGLONG)
return static_cast<SkFixed>((int64_t)a * b >> 16);
return static_cast<SkFixed>((SkLONGLONG)a * b >> 16);
#else
int sa = SkExtractSign(a);
int sb = SkExtractSign(b);

Просмотреть файл

@ -358,22 +358,22 @@ DEF_TEST(BitmapCopy, reporter) {
case SkBitmap::kA8_Config:
case SkBitmap::kIndex8_Config:
if (safeSize.as64() != 0x2386F26FC10000LL) {
if (safeSize.fHi != 0x2386F2 ||
safeSize.fLo != 0x6FC10000)
sizeFail = true;
}
break;
case SkBitmap::kRGB_565_Config:
case SkBitmap::kARGB_4444_Config:
if (safeSize.as64() != 0x470DE4DF820000LL) {
if (safeSize.fHi != 0x470DE4 ||
safeSize.fLo != 0xDF820000)
sizeFail = true;
}
break;
case SkBitmap::kARGB_8888_Config:
if (safeSize.as64() != 0x8E1BC9BF040000LL) {
if (safeSize.fHi != 0x8E1BC9 ||
safeSize.fLo != 0xBF040000)
sizeFail = true;
}
break;
default:

Просмотреть файл

@ -188,6 +188,7 @@ static void test_blend(skiatest::Reporter* reporter) {
}
}
#if defined(SkLONGLONG)
static int symmetric_fixmul(int a, int b) {
int sa = SkExtractSign(a);
int sb = SkExtractSign(b);
@ -195,9 +196,19 @@ static int symmetric_fixmul(int a, int b) {
a = SkApplySign(a, sa);
b = SkApplySign(b, sb);
int c = (int)(((int64_t)a * b) >> 16);
#if 1
int c = (int)(((SkLONGLONG)a * b) >> 16);
return SkApplySign(c, sa ^ sb);
#else
SkLONGLONG ab = (SkLONGLONG)a * b;
if (sa ^ sb) {
ab = -ab;
}
return ab >> 16;
#endif
}
#endif
static void check_length(skiatest::Reporter* reporter,
const SkPoint& p, SkScalar targetLen) {
@ -481,11 +492,12 @@ DEF_TEST(Math, reporter) {
unittest_fastfloat(reporter);
unittest_isfinite(reporter);
#ifdef SkLONGLONG
for (i = 0; i < 10000; i++) {
SkFixed numer = rand.nextS();
SkFixed denom = rand.nextS();
SkFixed result = SkFixedDiv(numer, denom);
int64_t check = ((int64_t)numer << 16) / denom;
SkLONGLONG check = ((SkLONGLONG)numer << 16) / denom;
(void)SkCLZ(numer);
(void)SkCLZ(denom);
@ -510,6 +522,7 @@ DEF_TEST(Math, reporter) {
r2 = SkFixedSquare(numer);
REPORTER_ASSERT(reporter, result == r2);
}
#endif
test_blend(reporter);

Просмотреть файл

@ -25,9 +25,14 @@ static void bool_table_test(skiatest::Reporter* reporter,
REPORTER_ASSERT(reporter, a.getSign() == table.sign);
}
void Sk64::UnitTestWithReporter(void* reporterParam) {
skiatest::Reporter* reporter = (skiatest::Reporter*)reporterParam;
#ifdef SkLONGLONG
static SkLONGLONG asLL(const Sk64& a)
{
return ((SkLONGLONG)a.fHi << 32) | a.fLo;
}
#endif
DEF_TEST(Sk64Test, reporter) {
enum BoolTests {
kZero_BoolTest,
kPos_BoolTest,
@ -91,7 +96,9 @@ void Sk64::UnitTestWithReporter(void* reporterParam) {
REPORTER_ASSERT(reporter, c.get32() == aa - bb);
}
for (i = 0; i < 1000; i++) {
#ifdef SkLONGLONG
for (i = 0; i < 1000; i++)
{
rand.next64(&a); //a.fHi >>= 1; // avoid overflow
rand.next64(&b); //b.fHi >>= 1; // avoid overflow
@ -106,8 +113,8 @@ void Sk64::UnitTestWithReporter(void* reporterParam) {
b.fHi = 0;
}
int64_t aa = a.as64();
int64_t bb = b.as64();
SkLONGLONG aa = asLL(a);
SkLONGLONG bb = asLL(b);
REPORTER_ASSERT(reporter, (a < b) == (aa < bb));
REPORTER_ASSERT(reporter, (a <= b) == (aa <= bb));
@ -117,31 +124,31 @@ void Sk64::UnitTestWithReporter(void* reporterParam) {
REPORTER_ASSERT(reporter, (a != b) == (aa != bb));
c = a; c.add(b);
REPORTER_ASSERT(reporter, c.as64() == aa + bb);
REPORTER_ASSERT(reporter, asLL(c) == aa + bb);
c = a; c.sub(b);
REPORTER_ASSERT(reporter, c.as64() == aa - bb);
REPORTER_ASSERT(reporter, asLL(c) == aa - bb);
c = a; c.rsub(b);
REPORTER_ASSERT(reporter, c.as64() == bb - aa);
REPORTER_ASSERT(reporter, asLL(c) == bb - aa);
c = a; c.negate();
REPORTER_ASSERT(reporter, c.as64() == -aa);
REPORTER_ASSERT(reporter, asLL(c) == -aa);
int bits = rand.nextU() & 63;
c = a; c.shiftLeft(bits);
REPORTER_ASSERT(reporter, c.as64() == (aa << bits));
REPORTER_ASSERT(reporter, asLL(c) == (aa << bits));
c = a; c.shiftRight(bits);
REPORTER_ASSERT(reporter, c.as64() == (aa >> bits));
REPORTER_ASSERT(reporter, asLL(c) == (aa >> bits));
c = a; c.roundRight(bits);
int64_t tmp;
SkLONGLONG tmp;
tmp = aa;
if (bits > 0)
tmp += (int64_t)1 << (bits - 1);
REPORTER_ASSERT(reporter, c.as64() == (tmp >> bits));
tmp += (SkLONGLONG)1 << (bits - 1);
REPORTER_ASSERT(reporter, asLL(c) == (tmp >> bits));
c.setMul(a.fHi, b.fHi);
tmp = (int64_t)a.fHi * b.fHi;
REPORTER_ASSERT(reporter, c.as64() == tmp);
tmp = (SkLONGLONG)a.fHi * b.fHi;
REPORTER_ASSERT(reporter, asLL(c) == tmp);
}
@ -153,11 +160,11 @@ void Sk64::UnitTestWithReporter(void* reporterParam) {
while (denom == 0)
denom = rand.nextS();
wide.setMul(rand.nextS(), rand.nextS());
int64_t check = wide.getLongLong();
SkLONGLONG check = wide.getLongLong();
wide.div(denom, Sk64::kTrunc_DivOption);
check /= denom;
int64_t w = wide.getLongLong();
SkLONGLONG w = wide.getLongLong();
REPORTER_ASSERT(reporter, check == w);
@ -168,8 +175,5 @@ void Sk64::UnitTestWithReporter(void* reporterParam) {
int diff = denom - ck;
REPORTER_ASSERT(reporter, SkAbs32(diff) <= 1);
}
}
DEF_TEST(Sk64Test, reporter) {
Sk64::UnitTestWithReporter(reporter);
#endif
}