diff options
-rw-r--r-- | draw/draw_simple_scale.c | 15 |
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" |