diff options
author | Lucas Crowthers <lucasc@codeaurora.org> | 2013-01-08 15:54:49 -0500 |
---|---|---|
committer | Steve Kondik <shade@chemlab.org> | 2013-02-27 14:15:29 -0800 |
commit | a2e20761b5ad646ce3f08ed24995799dd81acee0 (patch) | |
tree | 8aacdbf6447a4e9888cf55e44e853adab3466e83 /core/jni/android/graphics | |
parent | 320793c410094bda32c880acedf873c352eabd54 (diff) | |
download | frameworks_base-a2e20761b5ad646ce3f08ed24995799dd81acee0.zip frameworks_base-a2e20761b5ad646ce3f08ed24995799dd81acee0.tar.gz frameworks_base-a2e20761b5ad646ce3f08ed24995799dd81acee0.tar.bz2 |
frameworks/base: vectorize Bitmap operations
Enable gcc vectorizing optimizations for Bitmap operations within
libandroid_runtime.so. Adds -ftree-vectorize -mvectorize-with-neon-quad
-fprefetch-loop-arrays to functions and compiles Bitmap.cpp in ARM mode
(necessary to enable vectorizing optimizations) for appropriate targets.
Change-Id: I12defef6f47adf41af849df6e750097f5906d92d
Diffstat (limited to 'core/jni/android/graphics')
-rw-r--r-- | core/jni/android/graphics/Bitmap.cpp | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/core/jni/android/graphics/Bitmap.cpp b/core/jni/android/graphics/Bitmap.cpp index 63683b4..7c5da26 100644 --- a/core/jni/android/graphics/Bitmap.cpp +++ b/core/jni/android/graphics/Bitmap.cpp @@ -22,6 +22,12 @@ #define TRACE_BITMAP(code)
#endif
+#ifdef USE_NEON_BITMAP_OPTS
+ #define __BITMAP_OPTS __attribute__((optimize("-ftree-vectorize", "-fprefetch-loop-arrays")))
+#else
+ #define __BITMAP_OPTS
+#endif
+
///////////////////////////////////////////////////////////////////////////////
// Conversions to/from SkColor, for get/setPixels, and the create method, which
// is basically like setPixels
@@ -29,7 +35,7 @@ typedef void (*FromColorProc)(void* dst, const SkColor src[], int width,
int x, int y);
-static void FromColor_D32(void* dst, const SkColor src[], int width,
+static void __BITMAP_OPTS FromColor_D32(void* dst, const SkColor src[], int width,
int, int) {
SkPMColor* d = (SkPMColor*)dst;
@@ -38,7 +44,7 @@ static void FromColor_D32(void* dst, const SkColor src[], int width, }
}
-static void FromColor_D565(void* dst, const SkColor src[], int width,
+static void __BITMAP_OPTS FromColor_D565(void* dst, const SkColor src[], int width,
int x, int y) {
uint16_t* d = (uint16_t*)dst;
@@ -50,7 +56,7 @@ static void FromColor_D565(void* dst, const SkColor src[], int width, }
}
-static void FromColor_D4444(void* dst, const SkColor src[], int width,
+static void __BITMAP_OPTS FromColor_D4444(void* dst, const SkColor src[], int width,
int x, int y) {
SkPMColor16* d = (SkPMColor16*)dst;
@@ -113,7 +119,7 @@ bool GraphicsJNI::SetPixels(JNIEnv* env, jintArray srcColors, typedef void (*ToColorProc)(SkColor dst[], const void* src, int width,
SkColorTable*);
-static void ToColor_S32_Alpha(SkColor dst[], const void* src, int width,
+static void __BITMAP_OPTS ToColor_S32_Alpha(SkColor dst[], const void* src, int width,
SkColorTable*) {
SkASSERT(width > 0);
const SkPMColor* s = (const SkPMColor*)src;
@@ -122,7 +128,7 @@ static void ToColor_S32_Alpha(SkColor dst[], const void* src, int width, } while (--width != 0);
}
-static void ToColor_S32_Opaque(SkColor dst[], const void* src, int width,
+static void __BITMAP_OPTS ToColor_S32_Opaque(SkColor dst[], const void* src, int width,
SkColorTable*) {
SkASSERT(width > 0);
const SkPMColor* s = (const SkPMColor*)src;
@@ -133,7 +139,7 @@ static void ToColor_S32_Opaque(SkColor dst[], const void* src, int width, } while (--width != 0);
}
-static void ToColor_S4444_Alpha(SkColor dst[], const void* src, int width,
+static void __BITMAP_OPTS ToColor_S4444_Alpha(SkColor dst[], const void* src, int width,
SkColorTable*) {
SkASSERT(width > 0);
const SkPMColor16* s = (const SkPMColor16*)src;
@@ -142,7 +148,7 @@ static void ToColor_S4444_Alpha(SkColor dst[], const void* src, int width, } while (--width != 0);
}
-static void ToColor_S4444_Opaque(SkColor dst[], const void* src, int width,
+static void __BITMAP_OPTS ToColor_S4444_Opaque(SkColor dst[], const void* src, int width,
SkColorTable*) {
SkASSERT(width > 0);
const SkPMColor16* s = (const SkPMColor16*)src;
@@ -153,7 +159,7 @@ static void ToColor_S4444_Opaque(SkColor dst[], const void* src, int width, } while (--width != 0);
}
-static void ToColor_S565(SkColor dst[], const void* src, int width,
+static void __BITMAP_OPTS ToColor_S565(SkColor dst[], const void* src, int width,
SkColorTable*) {
SkASSERT(width > 0);
const uint16_t* s = (const uint16_t*)src;
@@ -164,7 +170,7 @@ static void ToColor_S565(SkColor dst[], const void* src, int width, } while (--width != 0);
}
-static void ToColor_SI8_Alpha(SkColor dst[], const void* src, int width,
+static void __BITMAP_OPTS ToColor_SI8_Alpha(SkColor dst[], const void* src, int width,
SkColorTable* ctable) {
SkASSERT(width > 0);
const uint8_t* s = (const uint8_t*)src;
@@ -175,7 +181,7 @@ static void ToColor_SI8_Alpha(SkColor dst[], const void* src, int width, ctable->unlockColors(false);
}
-static void ToColor_SI8_Opaque(SkColor dst[], const void* src, int width,
+static void __BITMAP_OPTS ToColor_SI8_Opaque(SkColor dst[], const void* src, int width,
SkColorTable* ctable) {
SkASSERT(width > 0);
const uint8_t* s = (const uint8_t*)src;
|