summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--draw/draw_simple_scale.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/draw/draw_simple_scale.c b/draw/draw_simple_scale.c
index 8143b6fdb..6f123ce35 100644
--- a/draw/draw_simple_scale.c
+++ b/draw/draw_simple_scale.c
@@ -807,17 +807,18 @@ scale_row_from_temp(unsigned char *dst, unsigned char *src, fz_weights *weights,
" @ r14= len = *contrib \n"
"blt 4f @ while (x >= 0) { \n"
#ifndef ARCH_ARM_CAN_LOAD_UNALIGNED
- "tst r3, #3 @ if (r3 & 3) \n"
- "blt 4f @ can't do fast code \n"
+ "tst r3, #3 @ if ((r3 & 3) \n"
+ "tsteq r1, #3 @ || (r1 & 3)) \n"
+ "bne 4f @ can't do fast code \n"
#endif
"ldr r9, =0x00FF00FF @ r9 = 0x00FF00FF \n"
"1: \n"
- "ldr r5, =0x00800080 @ r5 = val0 = round \n"
- "stmfd r13!,{r1,r2} @ stash r1,r2,r14 \n"
+ "ldr r7, =0x00800080 @ r5 = val0 = round \n"
+ "stmfd r13!,{r1,r2,r7} @ stash r1,r2,r5 \n"
" @ r1 = min = src \n"
" @ r2 = contrib2-4 \n"
"movs r8, r14 @ r8 = len2 = len \n"
- "mov r7, r5 @ r7 = val1 = round \n"
+ "mov r5, r7 @ r7 = val1 = round \n"
"ble 3f @ while (len2-- > 0) { \n"
"2: \n"
"ldr r12,[r1], r3 @ r12 = *min r5 = min += width\n"
@@ -828,11 +829,11 @@ scale_row_from_temp(unsigned char *dst, unsigned char *src, fz_weights *weights,
"mla r5, r10,r11,r5 @ r5 = val0 += r11 * r10\n"
"mla r7, r10,r12,r7 @ r7 = val1 += r12 * r10\n"
"bgt 2b @ } \n"
- "3: \n"
- "ldmfd r13!,{r1,r2} @ restore r1,r2,r14 \n"
"and r5, r9, r5, LSR #8 @ r5 = __22__00 \n"
"and r7, r7, r9, LSL #8 @ r7 = 33__11__ \n"
"orr r5, r5, r7 @ r5 = 33221100 \n"
+ "3: \n"
+ "ldmfd r13!,{r1,r2,r7} @ restore r1,r2,r7 \n"
"subs r6, r6, #4 @ x-- \n"
"add r1, r1, #4 @ src++ \n"
"str r5, [r0], #4 @ *dst++ = val \n"