summaryrefslogtreecommitdiffstats
path: root/libpixelflinger/codeflinger/ARMAssembler.h
diff options
context:
space:
mode:
authorMartyn Capewell <martyn.capewell@arm.com>2009-12-04 16:44:58 +0000
committerDave Butcher <david.butcher@arm.com>2010-05-28 17:04:36 +0100
commit4dc1fa8e8d1f14868ab8bba93a8cbb87f847c4e3 (patch)
tree6660a0eaa05954ba69f0693b5ee52fad94860c7c /libpixelflinger/codeflinger/ARMAssembler.h
parent67d5358e2a870f9e9447517bfa49bf5c6b410a50 (diff)
downloadsystem_core-4dc1fa8e8d1f14868ab8bba93a8cbb87f847c4e3.zip
system_core-4dc1fa8e8d1f14868ab8bba93a8cbb87f847c4e3.tar.gz
system_core-4dc1fa8e8d1f14868ab8bba93a8cbb87f847c4e3.tar.bz2
Adds support for UBFX to JIT and Disassembler
This introduces UBFX instruction generation abilities to the Pixelflinger JIT, and also modifies the component extraction function to generate the instruction. The extract function contains defines to prevent generation of UBFX on pre-v7 cores. The JIT itself retains the ability to produce the instruction even on v5/6. This patch only generates UBFX when MOV, AND or BIC can't be used. Based on the TRM, this appears to be faster on A9 than using UBFX in all cases. On startup, Pixelflinger JITs three chunks of code. UBFX improves these as follows: 00000077:03515104_00000000_00000000 (Blends a single colour into an RGB565 buffer.) Before: 27 inst/pixel, After: 24 inst/pixel, Improvement: 12.5% 00000077:03545404_00000A01_00000000 (Blends RGBA8888 texture into an RGB565 buffer using alpha.) Before: 30 inst/pixel, After: 27 inst/pixel, Improvement: 11.1% 00000077:03545404_00000A04_00000000 (Blends RGB565 texture into an RGB565 buffer using alpha.) Before: 29 inst/pixel, After: 27 inst/pixel, Improvement: 7.4%
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 a667cb5..e7f038a 100644
--- a/libpixelflinger/codeflinger/ARMAssembler.h
+++ b/libpixelflinger/codeflinger/ARMAssembler.h
@@ -124,6 +124,7 @@ public:
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);
+ virtual void UBFX(int cc, int Rd, int Rn, int lsb, int width);
private:
ARMAssembler(const ARMAssembler& rhs);