summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann <ssp@redhat.com>2013-12-26 00:49:14 -0500
committerSøren Sandmann <ssp@redhat.com>2013-12-26 00:49:14 -0500
commite725c4fd710d983985f81591de5b3ff985583d5e (patch)
tree6f3ce3cb6f55670b615b5ef9fbf422db4e2333d3
parent5470e5fd28d7321dbf06bbe55fd266c5641b5cb1 (diff)
Yak shaving
-rw-r--r--iterjit.c72
1 files 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,