arm: hpeldsp: prevent overreads in armv6 asm
authorJanne Grunau <janne-libav@jannau.net>
Wed, 5 Mar 2014 11:44:57 +0000 (12:44 +0100)
committerJanne Grunau <janne-libav@jannau.net>
Thu, 6 Mar 2014 08:06:39 +0000 (09:06 +0100)
Based on a patch by Russel King <rmk+libav@arm.linux.org.uk>

Bug-Id: 646
CC: libav-stable@libav.org
libavcodec/arm/asm.S
libavcodec/arm/dsputil_armv6.S

index 3b495a279f440b0752582575331659426c123e2c..c9e4fec60f8d2f006389f282d4101fade786cf49 100644 (file)
@@ -126,6 +126,13 @@ T       ldr             \rt, [\rn]
 T       add             \rn, \rn, \rm
 .endm
 
+.macro  ldrc_pre        cc,  rt,  rn,  rm:vararg
+A       ldr\cc          \rt, [\rn, \rm]!
+T       itt             \cc
+T       add\cc          \rn, \rn, \rm
+T       ldr\cc          \rt, [\rn]
+.endm
+
 .macro  ldrd_reg        rt,  rt2, rn,  rm
 A       ldrd            \rt, \rt2, [\rn, \rm]
 T       add             \rt, \rn, \rm
index becf85182dbf52f8a106eb524c192c6d8e4e9963..e4f71cb5b63749721c9bee49bc8ac57db4306e5c 100644 (file)
@@ -134,11 +134,12 @@ function ff_put_pixels8_y2_armv6, export=1
         uhadd8          r9,  r5,  r7
         eor             r11, r5,  r7
         and             r10, r10, r12
-        ldr_pre         r4,  r1,  r2
+        ldrc_pre        ne,  r4,  r1,  r2
         uadd8           r8,  r8,  r10
         and             r11, r11, r12
         uadd8           r9,  r9,  r11
-        ldr             r5,  [r1, #4]
+        it              ne
+        ldrne           r5,  [r1, #4]
         uhadd8          r10, r4,  r6
         eor             r6,  r4,  r6
         uhadd8          r11, r5,  r7
@@ -146,10 +147,11 @@ function ff_put_pixels8_y2_armv6, export=1
         eor             r7,  r5,  r7
         uadd8           r10, r10, r6
         and             r7,  r7,  r12
-        ldr_pre         r6,  r1,  r2
+        ldrc_pre        ne,  r6,  r1,  r2
         uadd8           r11, r11, r7
         strd_post       r8,  r9,  r0,  r2
-        ldr             r7,  [r1, #4]
+        it              ne
+        ldrne           r7,  [r1, #4]
         strd_post       r10, r11, r0,  r2
         bne             1b
 
@@ -194,13 +196,15 @@ function ff_put_pixels8_y2_no_rnd_armv6, export=1
 1:
         subs            r3,  r3,  #2
         uhadd8          r8,  r4,  r6
-        ldr_pre         r4,  r1,  r2
+        ldrc_pre        ne,  r4,  r1,  r2
         uhadd8          r9,  r5,  r7
-        ldr             r5,  [r1, #4]
+        it              ne
+        ldrne           r5,  [r1, #4]
         uhadd8          r12, r4,  r6
-        ldr_pre         r6,  r1,  r2
+        ldrc_pre        ne,  r6,  r1,  r2
         uhadd8          r14, r5,  r7
-        ldr             r7,  [r1, #4]
+        it              ne
+        ldrne           r7,  [r1, #4]
         stm             r0,  {r8,r9}
         add             r0,  r0,  r2
         stm             r0,  {r12,r14}