From 2591d91ebeab0e2243a3b8262b4710ce262929ad Mon Sep 17 00:00:00 2001 From: Robin Watts Date: Mon, 23 Jan 2012 16:01:47 +0000 Subject: Update ARM optimised scaling code in line with recent changes. The ARM optimised code relied on the size of the weights structure which was changed by the addition of a new member as part of the patch scaling changes. Fix the code here, and add a note to the structure in the hopes that this will avoid such breakages happening in future. --- draw/draw_scale.c | 10 ++++++---- draw/draw_simple_scale.c | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) (limited to 'draw') diff --git a/draw/draw_scale.c b/draw/draw_scale.c index b34f9770..b2e28b7b 100644 --- a/draw/draw_scale.c +++ b/draw/draw_scale.c @@ -260,6 +260,8 @@ leave enough space) and then reordering afterwards. typedef struct fz_weights_s fz_weights; +/* This structure is accessed from ARM code - bear this in mind before + * altering it! */ struct fz_weights_s { int flip; /* true if outputting reversed */ @@ -616,7 +618,7 @@ scale_row_to_temp1(int *dst, unsigned char *src, fz_weights *weights) "@ r1 = src \n" "@ r2 = weights \n" "ldr r12,[r2],#4 @ r12= flip \n" - "ldr r3, [r2],#16 @ r3 = count r2 = &index\n" + "ldr r3, [r2],#20 @ r3 = count r2 = &index\n" "ldr r4, [r2] @ r4 = index[0] \n" "cmp r12,#0 @ if (flip) \n" "beq 4f @ { \n" @@ -676,7 +678,7 @@ scale_row_to_temp2(int *dst, unsigned char *src, fz_weights *weights) "@ r1 = src \n" "@ r2 = weights \n" "ldr r12,[r2],#4 @ r12= flip \n" - "ldr r3, [r2],#16 @ r3 = count r2 = &index\n" + "ldr r3, [r2],#20 @ r3 = count r2 = &index\n" "ldr r4, [r2] @ r4 = index[0] \n" "cmp r12,#0 @ if (flip) \n" "beq 4f @ { \n" @@ -740,7 +742,7 @@ scale_row_to_temp4(int *dst, unsigned char *src, fz_weights *weights) "@ r1 = src \n" "@ r2 = weights \n" "ldr r12,[r2],#4 @ r12= flip \n" - "ldr r3, [r2],#16 @ r3 = count r2 = &index\n" + "ldr r3, [r2],#20 @ r3 = count r2 = &index\n" "ldr r4, [r2] @ r4 = index[0] \n" "cmp r12,#0 @ if (flip) \n" "beq 4f @ { \n" @@ -814,7 +816,7 @@ scale_row_from_temp(unsigned char *dst, int *src, fz_weights *weights, int width asm volatile( ENTER_ARM "ldr r12,[r13] @ r12= row \n" - "add r2, r2, #20 @ r2 = weights->index \n" + "add r2, r2, #24 @ r2 = weights->index \n" "stmfd r13!,{r4-r11,r14} \n" "@ r0 = dst \n" "@ r1 = src \n" diff --git a/draw/draw_simple_scale.c b/draw/draw_simple_scale.c index 1329b0e0..2d436b54 100644 --- a/draw/draw_simple_scale.c +++ b/draw/draw_simple_scale.c @@ -216,6 +216,8 @@ leave enough space) and then reordering afterwards. typedef struct fz_weights_s fz_weights; +/* This structure is accessed from ARM code - bear this in mind before + * altering it! */ struct fz_weights_s { int flip; /* true if outputting reversed */ @@ -583,7 +585,7 @@ scale_row_to_temp1(unsigned char *dst, unsigned char *src, fz_weights *weights) "@ r1 = src \n" "@ r2 = weights \n" "ldr r12,[r2],#4 @ r12= flip \n" - "ldr r3, [r2],#16 @ r3 = count r2 = &index\n" + "ldr r3, [r2],#20 @ r3 = count r2 = &index\n" "ldr r4, [r2] @ r4 = index[0] \n" "cmp r12,#0 @ if (flip) \n" "beq 4f @ { \n" @@ -645,7 +647,7 @@ scale_row_to_temp2(unsigned char *dst, unsigned char *src, fz_weights *weights) "@ r1 = src \n" "@ r2 = weights \n" "ldr r12,[r2],#4 @ r12= flip \n" - "ldr r3, [r2],#16 @ r3 = count r2 = &index\n" + "ldr r3, [r2],#20 @ r3 = count r2 = &index\n" "ldr r4, [r2] @ r4 = index[0] \n" "cmp r12,#0 @ if (flip) \n" "beq 4f @ { \n" @@ -715,7 +717,7 @@ scale_row_to_temp4(unsigned char *dst, unsigned char *src, fz_weights *weights) "@ r1 = src \n" "@ r2 = weights \n" "ldr r12,[r2],#4 @ r12= flip \n" - "ldr r3, [r2],#16 @ r3 = count r2 = &index\n" + "ldr r3, [r2],#20 @ r3 = count r2 = &index\n" "ldr r4, [r2] @ r4 = index[0] \n" "ldr r5,=0x00800080 @ r5 = rounding \n" "ldr r6,=0x00FF00FF @ r7 = 0x00FF00FF \n" @@ -785,7 +787,7 @@ scale_row_from_temp(unsigned char *dst, unsigned char *src, fz_weights *weights, asm volatile( ENTER_ARM "ldr r12,[r13] @ r12= row \n" - "add r2, r2, #20 @ r2 = weights->index \n" + "add r2, r2, #24 @ r2 = weights->index \n" "stmfd r13!,{r4-r11,r14} \n" "@ r0 = dst \n" "@ r1 = src \n" -- cgit v1.2.3