From 90b833510ee672185ae0c92a3c41f5577376f9ec Mon Sep 17 00:00:00 2001 From: Søren Sandmann Pedersen Date: Mon, 2 Sep 2013 02:09:16 -0400 Subject: iterjit --- Makefile | 7 +++++-- iterjit.c | 54 +++++++++++++++++++++++++++++++++++++----------------- 2 files changed, 42 insertions(+), 19 deletions(-) diff --git a/Makefile b/Makefile index 73ffa9f..00b78ce 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,7 @@ COMMON_HEADERS = \ crc32.h \ stack-man.c -all: genrender blitter testsuite +all: genrender blitter testsuite iterjit genrender: $(COMMON) main.c $(CC) $(CFLAGS) -o genrender $(COMMON_SOURCES) main.c $(LDFLAGS) @@ -30,6 +30,9 @@ blitter: $(COMMON) blitter.c testsuite: $(COMMON) testsuite.c $(CC) $(CFLAGS) -o testsuite $(COMMON_SOURCES) testsuite.c $(LDFLAGS) +iterjit: $(COMMON) iterjit.c + $(CC) $(CFLAGS) -o iterjit $(COMMON_SOURCES) iterjit.c $(LDFLAGS) + clean: - rm -f genrender blitter testsuite + rm -f genrender blitter testsuite iterjit diff --git a/iterjit.c b/iterjit.c index c6af98f..e3b8845 100644 --- a/iterjit.c +++ b/iterjit.c @@ -59,51 +59,73 @@ typedef struct jit_dest_iter_t jit_dest_iter_t; typedef struct jit_src_iter_t jit_src_iter_t; typedef struct jit_combiner_t jit_combiner_t; +typedef struct jit_t jit_t; + +struct jit_t +{ + assembler_t *assembler; + fragment_t *fragment; + stack_man_t stack_man; + reg_alloc_t reg_alloc; +}; struct jit_src_iter_t { - void (* begin) (jit_src_iter_t *src); - void (* begin_line) (jit_src_iter_t *src); - op_t (* get_1_pixel) (jit_src_iter_t *src); - op_t (* get_2_pixels) (jit_src_iter_t *src); - op_t (* get_4_pixels) (jit_src_iter_t *src); - op_t (* get_8_pixels) (jit_src_iter_t *src); - op_t (* get_16_pixels) (jit_src_iter_t *src); - void (* end_line) (jit_src_iter_t *); - void (* end) (jit_src_iter_t *); + void (* begin) (jit_src_iter_t *src, jit_t *jit); + void (* begin_line) (jit_src_iter_t *src, jit_t *jit); + op_t (* get_1_pixel) (jit_src_iter_t *src, jit_t *jit); + op_t (* get_2_pixels) (jit_src_iter_t *src, jit_t *jit); + op_t (* get_4_pixels) (jit_src_iter_t *src, jit_t *jit); + op_t (* get_8_pixels) (jit_src_iter_t *src, jit_t *jit); + op_t (* get_16_pixels) (jit_src_iter_t *src, jit_t *jit); + void (* end_line) (jit_src_iter_t *src, jit_t *jit); + void (* end) (jit_src_iter_t *src, jit_t *jit); }; struct jit_combiner_t { - op_t (* combine) (jit_src_iter_t *src, op_t a, op_t b, op_t c); + op_t (* combine) (jit_combiner_t *combiner, jit_t *jit, + op_t s, op_t m, op_t d); }; struct jit_dest_iter_t { - void (* begin) (jit_dest_iter_t *dest); + void (* begin) (jit_dest_iter_t *dest, jit_t *jit); void (* process_line) (jit_dest_iter_t *dest_iter, + jit_t *jit, jit_src_iter_t *src_iter, jit_src_iter_t *mask_iter, jit_combiner_t *combiner); - void (* end) (jit_dest_iter_t *dest); + void (* end) (jit_dest_iter_t *dest, jit_t *jit); }; static void -dest_a8r8g8b8_begin (jit_dest_iter_t *dest) +dest_a8r8g8b8_begin (jit_dest_iter_t * dest, + jit_t * jit) { - + BEGIN_ASM (jit->fragment) + + I_and, al, IMM(8), + END_ASM (); } static void dest_a8r8g8b8_process_line (jit_dest_iter_t *dest, + jit_t *jit, jit_src_iter_t *src, jit_src_iter_t *mask, jit_combiner_t *combiner) { + src->begin_line (src, jit); + + BEGIN_ASM (jit->fragment) + + + END_ASM (); } static void -dest_a8r8g8b8_end (jit_dest_iter_t *dest) +dest_a8r8g8b8_end (jit_dest_iter_t *dest, jit_t *jit) { } @@ -125,8 +147,6 @@ generate_kernel (jit_src_iter_t *src_iter, jit_dest_iter_t *dest_iter, jit_combiner_t *combiner) { - - /* This function does * * src_iter->setup(); -- cgit v1.2.3