diff options
author | Søren Sandmann Pedersen <ssp@redhat.com> | 2013-09-02 02:09:16 -0400 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@redhat.com> | 2013-09-02 02:09:16 -0400 |
commit | 90b833510ee672185ae0c92a3c41f5577376f9ec (patch) | |
tree | 15a77c5d73eb6f356ccebd6ab7dcbab8391e37c2 | |
parent | 44551a7920272adb196a319d0643952ee47d6eb4 (diff) |
iterjit
-rw-r--r-- | Makefile | 7 | ||||
-rw-r--r-- | iterjit.c | 54 |
2 files changed, 42 insertions, 19 deletions
@@ -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 @@ -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(); |