Fix arm compile problem on Lucid.
authorvandebo@chromium.org <vandebo@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Tue, 3 May 2011 02:23:11 +0000 (02:23 +0000)
committervandebo@chromium.org <vandebo@chromium.org@2bbb7eff-a529-9590-31e7-b0007b416f81>
Tue, 3 May 2011 02:23:11 +0000 (02:23 +0000)
Patch from Jeff Bailey <jeffbailey@google.com>

These functions on ARM both are doing something weird where, when
optimization is not enable, there aren't enough low registers available for
the compiler to handle the asm.

My ARM-fu is pretty weak, so I have forced the functions to -O1, which
allows them to compile.  It would be reasonable to set them to O2 as I
expect anyone debugging this will just tweak it as appropriate.

The error that this is solving:

third_party/skia/src/opts/SkBitmapProcState_opts_arm.cpp: In function 'void
SI8_D16_nofilter_DX_arm(const SkBitmapProcState&, const uint32_t*, int,
uint16_t*)':
third_party/skia/src/opts/SkBitmapProcState_opts_arm.cpp:101:24: error:
can't find a register in class 'LO_REGS' while reloading 'asm'
third_party/skia/src/opts/SkBitmapProcState_opts_arm.cpp:101:24: error:
'asm' operand has impossible constraints

However, it has to be set on both functions, as after the first error is
cleared, it triggers a second time.

Review URL: http://codereview.appspot.com/4452044

git-svn-id: http://skia.googlecode.com/svn/trunk@1228 2bbb7eff-a529-9590-31e7-b0007b416f81

src/opts/SkBitmapProcState_opts_arm.cpp

index dfb5586..1084082 100644 (file)
 #include "SkUtils.h"
 
 #if __ARM_ARCH__ >= 6 && !defined(SK_CPU_BENDIAN)
+void SI8_D16_nofilter_DX_arm(
+    const SkBitmapProcState& s,
+    const uint32_t* SK_RESTRICT xy,
+    int count,
+    uint16_t* SK_RESTRICT colors) __attribute__((optimize("O1")));
+
 void SI8_D16_nofilter_DX_arm(const SkBitmapProcState& s,
                              const uint32_t* SK_RESTRICT xy,
                              int count, uint16_t* SK_RESTRICT colors) {
@@ -108,6 +114,12 @@ void SI8_D16_nofilter_DX_arm(const SkBitmapProcState& s,
     s.fBitmap->getColorTable()->unlock16BitCache(); 
 }
 
+void SI8_opaque_D32_nofilter_DX_arm(
+    const SkBitmapProcState& s,
+    const uint32_t* SK_RESTRICT xy,
+    int count,
+    SkPMColor* SK_RESTRICT colors) __attribute__((optimize("O1")));
+
 void SI8_opaque_D32_nofilter_DX_arm(const SkBitmapProcState& s,
                                     const uint32_t* SK_RESTRICT xy,
                                     int count, SkPMColor* SK_RESTRICT colors) {