From 94cdcece9177ae33e9685671d816d707546c5c2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5ns=20Rullg=C3=A5rd?= Date: Mon, 25 Aug 2008 02:29:04 +0000 Subject: [PATCH] ARM: add prefetch function using ARMv5 PLD instruction Originally committed as revision 14962 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/armv4l/dsputil_arm.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/libavcodec/armv4l/dsputil_arm.c b/libavcodec/armv4l/dsputil_arm.c index af4e470be9..100b89ef8a 100644 --- a/libavcodec/armv4l/dsputil_arm.c +++ b/libavcodec/armv4l/dsputil_arm.c @@ -203,6 +203,19 @@ static void simple_idct_ipp_add(uint8_t *dest, int line_size, DCTELEM *block) } #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 @@ void dsputil_init_armv4l(DSPContext* c, AVCodecContext *avctx) 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