diff --git a/ChangeLog b/ChangeLog index 23b4c7ce7..c7149bf6c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2012-12-14 Paulo Andrade + + * include/lightning.h, lib/lightning.c: Add two extra wrapper + functions to avoid need for excess pointer to/from word casts. + + * check/lightning.c: Only need for pointer to/from word cast + now is jit_movi, update accordingly. + 2012-12-13 Paulo Andrade * check/varargs.ok, check/varargs.tst: New test cases implementing diff --git a/check/lightning.c b/check/lightning.c index 2226da939..495ca6024 100644 --- a/check/lightning.c +++ b/check/lightning.c @@ -855,7 +855,7 @@ get_imm(void) break; case '@': dynamic(); - value = parser.value.p; + value = (long)parser.value.p; break; default: ungetch(ch); @@ -1292,11 +1292,11 @@ movi(void) ungetch(ch); label = get_label(skip_none); if (label->kind == label_kind_code_forward) - mov_forward((void *)jit_movi(r0, NULL), label); + mov_forward((void *)jit_movi(r0, 0), label); value = label->value; break; } - jit_movi(r0, value); + jit_movi(r0, (jit_word_t)value); } entry_ir_ir(extr_c) entry_ir_ir(extr_uc) entry_ir_ir(extr_s) entry_ir_ir(extr_us) diff --git a/include/lightning.h b/include/lightning.h index 7a382761c..366969542 100644 --- a/include/lightning.h +++ b/include/lightning.h @@ -244,19 +244,19 @@ typedef enum { jit_code_htonr, #define jit_ldr_c(u,v) jit_new_node_ww(jit_code_ldr_c,u,v) -#define jit_ldi_c(u,v) jit_new_node_ww(jit_code_ldi_c,u,v) +#define jit_ldi_c(u,v) jit_new_node_wp(jit_code_ldi_c,u,v) jit_code_ldr_c, jit_code_ldi_c, #define jit_ldr_uc(u,v) jit_new_node_ww(jit_code_ldr_uc,u,v) -#define jit_ldi_uc(u,v) jit_new_node_ww(jit_code_ldi_uc,u,v) +#define jit_ldi_uc(u,v) jit_new_node_wp(jit_code_ldi_uc,u,v) jit_code_ldr_uc, jit_code_ldi_uc, #define jit_ldr_s(u,v) jit_new_node_ww(jit_code_ldr_s,u,v) -#define jit_ldi_s(u,v) jit_new_node_ww(jit_code_ldi_s,u,v) +#define jit_ldi_s(u,v) jit_new_node_wp(jit_code_ldi_s,u,v) jit_code_ldr_s, jit_code_ldi_s, #define jit_ldr_us(u,v) jit_new_node_ww(jit_code_ldr_us,u,v) -#define jit_ldi_us(u,v) jit_new_node_ww(jit_code_ldi_us,u,v) +#define jit_ldi_us(u,v) jit_new_node_wp(jit_code_ldi_us,u,v) jit_code_ldr_us, jit_code_ldi_us, #define jit_ldr_i(u,v) jit_new_node_ww(jit_code_ldr_i,u,v) -#define jit_ldi_i(u,v) jit_new_node_ww(jit_code_ldi_i,u,v) +#define jit_ldi_i(u,v) jit_new_node_wp(jit_code_ldi_i,u,v) jit_code_ldr_i, jit_code_ldi_i, #if __WORDSIZE == 32 # define jit_ldr(u,v) jit_ldr_i(u,v) @@ -265,9 +265,9 @@ typedef enum { # define jit_ldr(u,v) jit_ldr_l(u,v) # define jit_ldi(u,v) jit_ldi_l(u,v) # define jit_ldr_ui(u,v) jit_new_node_ww(jit_code_ldr_ui,u,v) -# define jit_ldi_ui(u,v) jit_new_node_ww(jit_code_ldi_ui,u,v) +# define jit_ldi_ui(u,v) jit_new_node_wp(jit_code_ldi_ui,u,v) #define jit_ldr_l(u,v) jit_new_node_ww(jit_code_ldr_l,u,v) -#define jit_ldi_l(u,v) jit_new_node_ww(jit_code_ldi_l,u,v) +#define jit_ldi_l(u,v) jit_new_node_wp(jit_code_ldi_l,u,v) #endif jit_code_ldr_ui, jit_code_ldi_ui, jit_code_ldr_l, jit_code_ldi_l, @@ -302,13 +302,13 @@ typedef enum { jit_code_ldxr_l, jit_code_ldxi_l, #define jit_str_c(u,v) jit_new_node_ww(jit_code_str_c,u,v) -#define jit_sti_c(u,v) jit_new_node_ww(jit_code_sti_c,u,v) +#define jit_sti_c(u,v) jit_new_node_pw(jit_code_sti_c,u,v) jit_code_str_c, jit_code_sti_c, #define jit_str_s(u,v) jit_new_node_ww(jit_code_str_s,u,v) -#define jit_sti_s(u,v) jit_new_node_ww(jit_code_sti_s,u,v) +#define jit_sti_s(u,v) jit_new_node_pw(jit_code_sti_s,u,v) jit_code_str_s, jit_code_sti_s, #define jit_str_i(u,v) jit_new_node_ww(jit_code_str_i,u,v) -#define jit_sti_i(u,v) jit_new_node_ww(jit_code_sti_i,u,v) +#define jit_sti_i(u,v) jit_new_node_pw(jit_code_sti_i,u,v) jit_code_str_i, jit_code_sti_i, #if __WORDSIZE == 32 # define jit_str(u,v) jit_str_i(u,v) @@ -317,7 +317,7 @@ typedef enum { # define jit_str(u,v) jit_str_l(u,v) # define jit_sti(u,v) jit_sti_l(u,v) # define jit_str_l(u,v) jit_new_node_ww(jit_code_str_l,u,v) -# define jit_sti_l(u,v) jit_new_node_ww(jit_code_sti_l,u,v) +# define jit_sti_l(u,v) jit_new_node_pw(jit_code_sti_l,u,v) #endif jit_code_str_l, jit_code_sti_l, @@ -517,13 +517,13 @@ typedef enum { jit_code_movr_f, jit_code_movi_f, #define jit_ldr_f(u,v) jit_new_node_ww(jit_code_ldr_f,u,v) -#define jit_ldi_f(u,v) jit_new_node_ww(jit_code_ldi_f,u,v) +#define jit_ldi_f(u,v) jit_new_node_wp(jit_code_ldi_f,u,v) jit_code_ldr_f, jit_code_ldi_f, #define jit_ldxr_f(u,v,w) jit_new_node_www(jit_code_ldxr_f,u,v,w) #define jit_ldxi_f(u,v,w) jit_new_node_www(jit_code_ldxi_f,u,v,w) jit_code_ldxr_f, jit_code_ldxi_f, #define jit_str_f(u,v) jit_new_node_ww(jit_code_str_f,u,v) -#define jit_sti_f(u,v) jit_new_node_ww(jit_code_sti_f,u,v) +#define jit_sti_f(u,v) jit_new_node_pw(jit_code_sti_f,u,v) jit_code_str_f, jit_code_sti_f, #define jit_stxr_f(u,v,w) jit_new_node_www(jit_code_stxr_f,u,v,w) #define jit_stxi_f(u,v,w) jit_new_node_www(jit_code_stxi_f,u,v,w) @@ -662,13 +662,13 @@ typedef enum { jit_code_movr_d, jit_code_movi_d, #define jit_ldr_d(u,v) jit_new_node_ww(jit_code_ldr_d,u,v) -#define jit_ldi_d(u,v) jit_new_node_ww(jit_code_ldi_d,u,v) +#define jit_ldi_d(u,v) jit_new_node_wp(jit_code_ldi_d,u,v) jit_code_ldr_d, jit_code_ldi_d, #define jit_ldxr_d(u,v,w) jit_new_node_www(jit_code_ldxr_d,u,v,w) #define jit_ldxi_d(u,v,w) jit_new_node_www(jit_code_ldxi_d,u,v,w) jit_code_ldxr_d, jit_code_ldxi_d, #define jit_str_d(u,v) jit_new_node_ww(jit_code_str_d,u,v) -#define jit_sti_d(u,v) jit_new_node_ww(jit_code_sti_d,u,v) +#define jit_sti_d(u,v) jit_new_node_pw(jit_code_sti_d,u,v) jit_code_str_d, jit_code_sti_d, #define jit_stxr_d(u,v,w) jit_new_node_www(jit_code_stxr_d,u,v,w) #define jit_stxi_d(u,v,w) jit_new_node_www(jit_code_stxi_d,u,v,w) @@ -818,6 +818,12 @@ extern jit_node_t *_jit_new_node_p(jit_state_t*, jit_code_t, #define jit_new_node_ww(c,u,v) _jit_new_node_ww(_jit,c,u,v) extern jit_node_t *_jit_new_node_ww(jit_state_t*,jit_code_t, jit_word_t, jit_word_t); +#define jit_new_node_wp(c,u,v) _jit_new_node_wp(_jit,c,u,v) +extern jit_node_t *_jit_new_node_wp(jit_state_t*,jit_code_t, + jit_word_t, jit_pointer_t); +#define jit_new_node_pw(c,u,v) _jit_new_node_pw(_jit,c,u,v) +extern jit_node_t *_jit_new_node_pw(jit_state_t*,jit_code_t, + jit_pointer_t, jit_word_t); #define jit_new_node_wf(c,u,v) _jit_new_node_wf(_jit,c,u,v) extern jit_node_t *_jit_new_node_wf(jit_state_t*, jit_code_t, jit_word_t, jit_float32_t); diff --git a/lib/lightning.c b/lib/lightning.c index 1a49ffef9..94a3580b1 100644 --- a/lib/lightning.c +++ b/lib/lightning.c @@ -568,6 +568,20 @@ _jit_new_node_ww(jit_state_t *_jit, jit_code_t code, return (link_node(node)); } +jit_node_t * +_jit_new_node_wp(jit_state_t *_jit, jit_code_t code, + jit_word_t u, jit_pointer_t v) +{ + return (jit_new_node_ww(code, u, (jit_word_t)v)); +} + +jit_node_t * +_jit_new_node_pw(jit_state_t *_jit, jit_code_t code, + jit_pointer_t u, jit_word_t v) +{ + return (jit_new_node_ww(code, (jit_word_t)u, v)); +} + jit_node_t * _jit_new_node_wf(jit_state_t *_jit, jit_code_t code, jit_word_t u, jit_float32_t v)