diff options
author | Siarhei Siamashka <siarhei.siamashka@nokia.com> | 2010-01-21 05:31:06 +0200 |
---|---|---|
committer | Siarhei Siamashka <siarhei.siamashka@nokia.com> | 2010-11-10 06:32:48 +0200 |
commit | 90a4196134aac33af8a5b2c33fdeb3e916fc2cc1 (patch) | |
tree | 8204e087cbbf7d05a2e22427e2211dfdad2fcedd | |
parent | 6f625a0844943d365ba13c5b00c0285c5139b49b (diff) |
A minor ARM NEON optimization for 'convsamp'
-rw-r--r-- | jcdctmgr.c | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -334,6 +334,16 @@ convsamp (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM * workspace) elemptr = sample_data[elemr] + start_col; #if DCTSIZE == 8 /* unroll the inner loop */ +#if defined(WITH_SIMD) && defined(__ARM_NEON__) + asm volatile ( + "vmov.s16 q0, #128\n" + "vld1.8 {d2}, [%[elemptr]]!\n" + "vmovl.u8 q1, d2\n" + "vsub.s16 q1, q1, q0\n" + "vst1.s16 {d2, d3}, [%[workspaceptr]]!\n" + : [workspaceptr] "+&r" (workspaceptr), [elemptr] "+&r" (elemptr) + : : "memory", "d0", "d1", "d2", "d3"); +#else *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; @@ -342,6 +352,7 @@ convsamp (JSAMPARRAY sample_data, JDIMENSION start_col, DCTELEM * workspace) *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; *workspaceptr++ = GETJSAMPLE(*elemptr++) - CENTERJSAMPLE; +#endif #else { register int elemc; |