summaryrefslogtreecommitdiffstats
path: root/libpixelflinger/codeflinger/ARMAssembler.h
diff options
context:
space:
mode:
authorMartyn Capewell <martyn.capewell@arm.com>2009-12-07 13:59:59 +0000
committerDave Butcher <david.butcher@arm.com>2009-12-07 13:59:59 +0000
commit96dbb4fc58fe2dcf4390e073dbb42cc77ef2f0b5 (patch)
treef8d668f884fdf07f95873fb04c215452d394d646 /libpixelflinger/codeflinger/ARMAssembler.h
parent303254eb674991bbb79b887b0d49fef48ae5abd4 (diff)
downloadsystem_core-96dbb4fc58fe2dcf4390e073dbb42cc77ef2f0b5.zip
system_core-96dbb4fc58fe2dcf4390e073dbb42cc77ef2f0b5.tar.gz
system_core-96dbb4fc58fe2dcf4390e073dbb42cc77ef2f0b5.tar.bz2
Adds UXTB16 support to Pixelflinger
* Add support for UXTB16 to the disassembler * Add encoding of the UXTB16 instruction to the Pixelflinger JIT. Introducing the UXTB16 instruction allows removal of some masking code, and is beneficial from a pipeline point of view - lots of UXTB16 followed by MUL sequences. Also, further rescheduling and use of SMULWB brings extra performance improvements. * Use UXTB16 in bilinear filtered texturing Uses UXTB16 to extract channels for SIMD operations, rather than creating and ANDing with masks. Saves a register and is faster on A8, as UXTB16 result can feed into first stage of multiply, unlike AND. Also, used SMULWB rather than SMULBB, which allows removal of MOVs used to rescale results. Code has been scheduled for A8 pipeline, specifically aiming to allow multiplies to issue in pipeline 0, for efficient dual issue operation. Testing on SpriteMethodTest (http://code.google.com/p/apps-for-android/) gives 8% improvement (12.7 vs. 13.7 fps.) SMULBB to SMULWB trick could be used in <v6 code path, but this hasn't been implemented.
Diffstat (limited to 'libpixelflinger/codeflinger/ARMAssembler.h')
-rw-r--r--libpixelflinger/codeflinger/ARMAssembler.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/libpixelflinger/codeflinger/ARMAssembler.h b/libpixelflinger/codeflinger/ARMAssembler.h
index ef3b66a..a667cb5 100644
--- a/libpixelflinger/codeflinger/ARMAssembler.h
+++ b/libpixelflinger/codeflinger/ARMAssembler.h
@@ -123,6 +123,7 @@ public:
int RdHi, int RdLo, int Rs, int Rm);
virtual void SMLAW(int cc, int y,
int Rd, int Rm, int Rs, int Rn);
+ virtual void UXTB16(int cc, int Rd, int Rm, int rotate);
private:
ARMAssembler(const ARMAssembler& rhs);