summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <ssp@redhat.com>2013-09-02 02:09:16 -0400
committerSøren Sandmann Pedersen <ssp@redhat.com>2013-09-02 02:09:16 -0400
commit90b833510ee672185ae0c92a3c41f5577376f9ec (patch)
tree15a77c5d73eb6f356ccebd6ab7dcbab8391e37c2
parent44551a7920272adb196a319d0643952ee47d6eb4 (diff)
iterjit
-rw-r--r--Makefile7
-rw-r--r--iterjit.c54
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();