# HG changeset patch # User mru # Date 1219631344 0 # Node ID 160d5c1ae60a9f39120840cc89cfddea18bc7c8b # Parent e5b5a9af1b6848f1f482399fbc247d58d5fc73a1 ARM: add prefetch function using ARMv5 PLD instruction diff -r e5b5a9af1b68 -r 160d5c1ae60a armv4l/dsputil_arm.c --- a/armv4l/dsputil_arm.c Mon Aug 25 01:59:06 2008 +0000 +++ b/armv4l/dsputil_arm.c Mon Aug 25 02:29:04 2008 +0000 @@ -203,6 +203,19 @@ } #endif +#ifdef HAVE_ARMV5TE +static void prefetch_arm(void *mem, int stride, int h) +{ + asm volatile( + "1: \n\t" + "subs %0, %0, #1 \n\t" + "pld [%1] \n\t" + "add %1, %1, %2 \n\t" + "bgt 1b \n\t" + : "+r"(h), "+r"(mem) : "r"(stride)); +} +#endif + int mm_support(void) { return ENABLE_IWMMXT * MM_IWMMXT; @@ -279,6 +292,10 @@ c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y2_arm; //OK c->put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy2_arm; +#ifdef HAVE_ARMV5TE + c->prefetch = prefetch_arm; +#endif + #ifdef HAVE_IWMMXT dsputil_init_iwmmxt(c, avctx); #endif