From e725c4fd710d983985f81591de5b3ff985583d5e Mon Sep 17 00:00:00 2001 From: Søren Sandmann Date: Thu, 26 Dec 2013 00:49:14 -0500 Subject: Yak shaving --- iterjit.c | 72 +++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/iterjit.c b/iterjit.c index cc8788c..ef79e08 100644 --- a/iterjit.c +++ b/iterjit.c @@ -7,6 +7,9 @@ #include "crc32.h" #include "regnaive.h" +#define N_ELEMENTS(a) \ + (sizeof (a) / sizeof (a[0])) + typedef struct { pixman_op_t op; @@ -378,13 +381,12 @@ src_a8r8g8b8_begin (jit_src_iter_t *src, I_shl, src->stride, IMM (2), /* Line */ - I_mov, src->line, MEMBER(image, pixman_image_t, bits.bits), I_mov, tmp, src->stride, I_imul2, tmp, MEMBER (info, pixman_composite_info_t, src_y), - I_add, src->line, tmp, - I_mov, tmp, MEMBER (info, pixman_composite_info_t, src_x), - I_shl, tmp, IMM (2), - I_add, src->line, tmp, + + I_mov, src->line, MEMBER (info, pixman_composite_info_t, src_x), + I_lea, src->line, INDEX(tmp, src->line, 2), + I_add, src->line, MEMBER(image, pixman_image_t, bits.bits), END_ASM (); jit_free_gp (jit, info); @@ -543,11 +545,13 @@ dest_a8r8g8b8_process_line (jit_dest_iter_t *dest, for (i = 0; i < sizeof (n_pixels) / sizeof (n_pixels[0]); ++i) { - char *loop, *test, *done; + char loop[32] = { 0 }; + char test[32] = { 0 }; + char done[32] = { 0 }; - asprintf (&loop, "horz_%d_loop", i); /* FIXME OOM */ - asprintf (&test, "horz_%d_test", i); /* FIXME OOM */ - asprintf (&done, "horz_%d_done", i); /* FIXME OOM */ + snprintf (loop, sizeof (loop), "horz_%d_loop", i); + snprintf (test, sizeof (test), "horz_%d_test", i); + snprintf (done, sizeof (done), "horz_%d_done", i); BEGIN_ASM (jit->fragment) I_jmp, LABEL (test), @@ -584,10 +588,6 @@ dest_a8r8g8b8_process_line (jit_dest_iter_t *dest, I_jge, LABEL (loop), DEFINE_LABEL (done), END_ASM (); - - free (loop); - free (test); - free (done); } jit_free_gp (jit, dest->d); @@ -800,8 +800,10 @@ generate_kernel (jit_t *jit, jit_dest_iter_t *dest, jit_combiner_t *combiner) { - reg_t h, composite_info; + static const reg_t callee_save[] = { rbx, r12, r13, r14, r15 }; fragment_t *prologue, *epilogue; + reg_t h, composite_info; + int i; composite_info = rsi; @@ -856,33 +858,31 @@ generate_kernel (jit_t *jit, I_mov, rbp, rsp, END_ASM (); -#define SAVE(reg) \ - if (reg_alloc_clobbered (&jit->gp_allocator, reg)) \ - { \ - BEGIN_ASM (prologue) \ - I_push, reg, \ - END_ASM (); \ + for (i = 0; i < N_ELEMENTS (callee_save); ++i) + { + reg_t reg = callee_save[i]; + + if (reg_alloc_clobbered (&jit->gp_allocator, reg)) + { + BEGIN_ASM (prologue) + I_push, reg, + END_ASM (); + } } - SAVE (rbx); - SAVE (r12); - SAVE (r13); - SAVE (r14); - SAVE (r15); + /* Epilogue */ epilogue = fragment_new (jit->assembler); + for (i = N_ELEMENTS (callee_save) - 1; i >= 0; --i) + { + reg_t reg = callee_save[i]; -#define RESTORE(reg) \ - if (reg_alloc_clobbered (&jit->gp_allocator, reg)) \ - { \ - BEGIN_ASM (epilogue) \ - I_pop, reg, \ - END_ASM (); \ + if (reg_alloc_clobbered (&jit->gp_allocator, reg)) + { + BEGIN_ASM (epilogue) + I_pop, reg, + END_ASM (); + } } - RESTORE (r15); - RESTORE (r14); - RESTORE (r13); - RESTORE (r12); - RESTORE (rbx); BEGIN_ASM (epilogue) I_pop, rbp, -- cgit v1.2.3