summaryrefslogtreecommitdiff
path: root/vp8/encoder/arm
diff options
context:
space:
mode:
authorTero Rintaluoma <teror@google.com>2011-09-19 10:59:52 +0300
committerTero Rintaluoma <teror@google.com>2011-09-20 09:59:27 +0300
commit3c19bc3fb3d816e6587719d8af43a98c912113a0 (patch)
treed2cb82ca978eff66077b40b22a3e7fe25f3c82ae /vp8/encoder/arm
parent35ce4eb01d2ef02e0ab930bf8327aabd95189a52 (diff)
downloadlibvpx-3c19bc3fb3d816e6587719d8af43a98c912113a0.tar
libvpx-3c19bc3fb3d816e6587719d8af43a98c912113a0.tar.gz
libvpx-3c19bc3fb3d816e6587719d8af43a98c912113a0.tar.bz2
libvpx-3c19bc3fb3d816e6587719d8af43a98c912113a0.zip
Fixed armv5te multiplications
Rd and Rm registers should be different in 'mul'. This register combination results in unpredictable behaviour. GCC will give a warning and RVCT an error in this case. Restriction applies only to armv5 targets and not for armv6 and above. Change-Id: I378d17c51e1f16a6820814fbed43e115aaabb03e
Diffstat (limited to 'vp8/encoder/arm')
-rw-r--r--vp8/encoder/arm/armv5te/boolhuff_armv5te.asm4
-rw-r--r--vp8/encoder/arm/armv5te/vp8_packtokens_armv5.asm8
-rw-r--r--vp8/encoder/arm/armv5te/vp8_packtokens_mbrow_armv5.asm8
-rw-r--r--vp8/encoder/arm/armv5te/vp8_packtokens_partitions_armv5.asm8
4 files changed, 14 insertions, 14 deletions
diff --git a/vp8/encoder/arm/armv5te/boolhuff_armv5te.asm b/vp8/encoder/arm/armv5te/boolhuff_armv5te.asm
index 3c05f5705..138ed46de 100644
--- a/vp8/encoder/arm/armv5te/boolhuff_armv5te.asm
+++ b/vp8/encoder/arm/armv5te/boolhuff_armv5te.asm
@@ -53,10 +53,10 @@
sub r7, r5, #1 ; range-1
cmp r1, #0
- mul r4, r4, r7 ; ((range-1) * probability)
+ mul r6, r4, r7 ; ((range-1) * probability)
mov r7, #1
- add r4, r7, r4, lsr #8 ; 1 + (((range-1) * probability) >> 8)
+ add r4, r7, r6, lsr #8 ; 1 + (((range-1) * probability) >> 8)
addne r2, r2, r4 ; if (bit) lowvalue += split
subne r4, r5, r4 ; if (bit) range = range-split
diff --git a/vp8/encoder/arm/armv5te/vp8_packtokens_armv5.asm b/vp8/encoder/arm/armv5te/vp8_packtokens_armv5.asm
index d939287ff..933717c63 100644
--- a/vp8/encoder/arm/armv5te/vp8_packtokens_armv5.asm
+++ b/vp8/encoder/arm/armv5te/vp8_packtokens_armv5.asm
@@ -71,7 +71,7 @@ token_loop
; off of v, so set a flag here based on this.
; This value is refered to as "bb"
lsls r12, r12, #1 ; bb = v >> n
- mul r4, r4, r7 ; ((range-1) * pp[i>>1]))
+ mul r6, r4, r7 ; ((range-1) * pp[i>>1]))
; bb can only be 0 or 1. So only execute this statement
; if bb == 1, otherwise it will act like i + 0
@@ -79,7 +79,7 @@ token_loop
mov r7, #1
ldrsb lr, [r10, lr] ; i = vp8_coef_tree[i+bb]
- add r4, r7, r4, lsr #8 ; 1 + (((range-1) * pp[i>>1]) >> 8)
+ add r4, r7, r6, lsr #8 ; 1 + (((range-1) * pp[i>>1]) >> 8)
addcs r2, r2, r4 ; if (bb) lowvalue += split
subcs r4, r5, r4 ; if (bb) range = range-split
@@ -172,12 +172,12 @@ extra_bits_loop
ldrb r4, [r9, lr, asr #1] ; pp[i>>1]
sub r7, r5, #1 ; range-1
lsls r12, r12, #1 ; v >> n
- mul r4, r4, r7 ; (range-1) * pp[i>>1]
+ mul r6, r4, r7 ; (range-1) * pp[i>>1]
addcs lr, lr, #1 ; i + bb
mov r7, #1
ldrsb lr, [r10, lr] ; i = b->tree[i+bb]
- add r4, r7, r4, lsr #8 ; split = 1 + (((range-1) * pp[i>>1]) >> 8)
+ add r4, r7, r6, lsr #8 ; split = 1 + (((range-1) * pp[i>>1]) >> 8)
addcs r2, r2, r4 ; if (bb) lowvalue += split
subcs r4, r5, r4 ; if (bb) range = range-split
diff --git a/vp8/encoder/arm/armv5te/vp8_packtokens_mbrow_armv5.asm b/vp8/encoder/arm/armv5te/vp8_packtokens_mbrow_armv5.asm
index ac2bba681..82bf71f35 100644
--- a/vp8/encoder/arm/armv5te/vp8_packtokens_mbrow_armv5.asm
+++ b/vp8/encoder/arm/armv5te/vp8_packtokens_mbrow_armv5.asm
@@ -93,7 +93,7 @@ token_loop
; off of v, so set a flag here based on this.
; This value is refered to as "bb"
lsls r12, r12, #1 ; bb = v >> n
- mul r4, r4, r7 ; ((range-1) * pp[i>>1]))
+ mul r6, r4, r7 ; ((range-1) * pp[i>>1]))
; bb can only be 0 or 1. So only execute this statement
; if bb == 1, otherwise it will act like i + 0
@@ -101,7 +101,7 @@ token_loop
mov r7, #1
ldrsb lr, [r10, lr] ; i = vp8_coef_tree[i+bb]
- add r4, r7, r4, lsr #8 ; 1 + (((range-1) * pp[i>>1]) >> 8)
+ add r4, r7, r6, lsr #8 ; 1 + (((range-1) * pp[i>>1]) >> 8)
addcs r2, r2, r4 ; if (bb) lowvalue += split
subcs r4, r5, r4 ; if (bb) range = range-split
@@ -194,12 +194,12 @@ extra_bits_loop
ldrb r4, [r9, lr, asr #1] ; pp[i>>1]
sub r7, r5, #1 ; range-1
lsls r12, r12, #1 ; v >> n
- mul r4, r4, r7 ; (range-1) * pp[i>>1]
+ mul r6, r4, r7 ; (range-1) * pp[i>>1]
addcs lr, lr, #1 ; i + bb
mov r7, #1
ldrsb lr, [r10, lr] ; i = b->tree[i+bb]
- add r4, r7, r4, lsr #8 ; split = 1 + (((range-1) * pp[i>>1]) >> 8)
+ add r4, r7, r6, lsr #8 ; split = 1 + (((range-1) * pp[i>>1]) >> 8)
addcs r2, r2, r4 ; if (bb) lowvalue += split
subcs r4, r5, r4 ; if (bb) range = range-split
diff --git a/vp8/encoder/arm/armv5te/vp8_packtokens_partitions_armv5.asm b/vp8/encoder/arm/armv5te/vp8_packtokens_partitions_armv5.asm
index c2eccdb53..c00375e88 100644
--- a/vp8/encoder/arm/armv5te/vp8_packtokens_partitions_armv5.asm
+++ b/vp8/encoder/arm/armv5te/vp8_packtokens_partitions_armv5.asm
@@ -123,7 +123,7 @@ token_loop
; off of v, so set a flag here based on this.
; This value is refered to as "bb"
lsls r12, r12, #1 ; bb = v >> n
- mul r4, r4, r7 ; ((range-1) * pp[i>>1]))
+ mul r6, r4, r7 ; ((range-1) * pp[i>>1]))
; bb can only be 0 or 1. So only execute this statement
; if bb == 1, otherwise it will act like i + 0
@@ -131,7 +131,7 @@ token_loop
mov r7, #1
ldrsb lr, [r10, lr] ; i = vp8_coef_tree[i+bb]
- add r4, r7, r4, lsr #8 ; 1 + (((range-1) * pp[i>>1]) >> 8)
+ add r4, r7, r6, lsr #8 ; 1 + (((range-1) * pp[i>>1]) >> 8)
addcs r2, r2, r4 ; if (bb) lowvalue += split
subcs r4, r5, r4 ; if (bb) range = range-split
@@ -224,12 +224,12 @@ extra_bits_loop
ldrb r4, [r9, lr, asr #1] ; pp[i>>1]
sub r7, r5, #1 ; range-1
lsls r12, r12, #1 ; v >> n
- mul r4, r4, r7 ; (range-1) * pp[i>>1]
+ mul r6, r4, r7 ; (range-1) * pp[i>>1]
addcs lr, lr, #1 ; i + bb
mov r7, #1
ldrsb lr, [r10, lr] ; i = b->tree[i+bb]
- add r4, r7, r4, lsr #8 ; split = 1 + (((range-1) * pp[i>>1]) >> 8)
+ add r4, r7, r6, lsr #8 ; split = 1 + (((range-1) * pp[i>>1]) >> 8)
addcs r2, r2, r4 ; if (bb) lowvalue += split
subcs r4, r5, r4 ; if (bb) range = range-split