mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-01 12:20:26 +02:00
Correct off by one label/note name and add align argument to jit_data
2013-01-14 Paulo Andrade <pcpa@gnu.org> * include/lightning.h, lib/lightning.c: Add an extra align argument to the jit_data call (that should be made private), so that it should not align strings at 8 bytes. Correct the jit_note call to include the null ending byte when adding label/note names to the "jit data section".
This commit is contained in:
parent
a34410eee2
commit
39afbe1c40
3 changed files with 21 additions and 9 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2013-01-14 Paulo Andrade <pcpa@gnu.org>
|
||||||
|
|
||||||
|
* include/lightning.h, lib/lightning.c: Add an extra align
|
||||||
|
argument to the jit_data call (that should be made private),
|
||||||
|
so that it should not align strings at 8 bytes.
|
||||||
|
Correct the jit_note call to include the null ending byte
|
||||||
|
when adding label/note names to the "jit data section".
|
||||||
|
|
||||||
2013-01-11 Paulo Andrade <pcpa@gnu.org>
|
2013-01-11 Paulo Andrade <pcpa@gnu.org>
|
||||||
|
|
||||||
* lib/jit_note.c: New file implementing a simple string+integer
|
* lib/jit_note.c: New file implementing a simple string+integer
|
||||||
|
|
|
@ -99,7 +99,7 @@ typedef struct jit_node jit_node_t;
|
||||||
typedef struct jit_state jit_state_t;
|
typedef struct jit_state jit_state_t;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
#define jit_data(u,v) _jit_data(_jit,u,v)
|
#define jit_data(u,v,w) _jit_data(_jit,u,v,w)
|
||||||
jit_code_data,
|
jit_code_data,
|
||||||
jit_code_save, jit_code_load,
|
jit_code_save, jit_code_load,
|
||||||
#define jit_note(u, v) _jit_note(_jit, u, v)
|
#define jit_note(u, v) _jit_note(_jit, u, v)
|
||||||
|
@ -739,7 +739,8 @@ extern jit_state_t *jit_new_state(void);
|
||||||
|
|
||||||
#define jit_address(node) _jit_address(_jit, node)
|
#define jit_address(node) _jit_address(_jit, node)
|
||||||
extern jit_pointer_t _jit_address(jit_state_t*, jit_node_t*);
|
extern jit_pointer_t _jit_address(jit_state_t*, jit_node_t*);
|
||||||
extern jit_node_t *_jit_data(jit_state_t*, jit_pointer_t, jit_word_t);
|
extern jit_node_t *_jit_data(jit_state_t*, jit_pointer_t,
|
||||||
|
jit_word_t, jit_int32_t);
|
||||||
extern jit_node_t *_jit_note(jit_state_t*, char*, int);
|
extern jit_node_t *_jit_note(jit_state_t*, char*, int);
|
||||||
extern jit_node_t *_jit_label(jit_state_t*);
|
extern jit_node_t *_jit_label(jit_state_t*);
|
||||||
extern jit_node_t *_jit_forward(jit_state_t*);
|
extern jit_node_t *_jit_forward(jit_state_t*);
|
||||||
|
|
|
@ -326,7 +326,8 @@ _jit_address(jit_state_t *_jit, jit_node_t *node)
|
||||||
}
|
}
|
||||||
|
|
||||||
jit_node_t *
|
jit_node_t *
|
||||||
_jit_data(jit_state_t *_jit, jit_pointer_t data, jit_word_t length)
|
_jit_data(jit_state_t *_jit, jit_pointer_t data,
|
||||||
|
jit_word_t length, jit_int32_t align)
|
||||||
{
|
{
|
||||||
jit_word_t key;
|
jit_word_t key;
|
||||||
jit_node_t *node;
|
jit_node_t *node;
|
||||||
|
@ -361,7 +362,9 @@ _jit_data(jit_state_t *_jit, jit_pointer_t data, jit_word_t length)
|
||||||
|
|
||||||
if (!node) {
|
if (!node) {
|
||||||
node = jit_new_node_no_link(jit_code_data);
|
node = jit_new_node_no_link(jit_code_data);
|
||||||
switch (length) {
|
if (!align)
|
||||||
|
align = length;
|
||||||
|
switch (align) {
|
||||||
case 0: case 1:
|
case 0: case 1:
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
|
@ -419,7 +422,7 @@ _jit_note(jit_state_t *_jit, char *name, int line)
|
||||||
|
|
||||||
node = new_node(jit_code_note);
|
node = new_node(jit_code_note);
|
||||||
if (name)
|
if (name)
|
||||||
node->v.n = jit_data(name, strlen(name));
|
node->v.n = jit_data(name, strlen(name) + 1, 1);
|
||||||
else
|
else
|
||||||
node->v.p = NULL;
|
node->v.p = NULL;
|
||||||
node->w.w = line;
|
node->w.w = line;
|
||||||
|
@ -1112,19 +1115,19 @@ _jit_optimize(jit_state_t *_jit)
|
||||||
mask = jit_classify(node->code);
|
mask = jit_classify(node->code);
|
||||||
#if JIT_HASH_CONSTS
|
#if JIT_HASH_CONSTS
|
||||||
if (mask & jit_cc_a1_flt) {
|
if (mask & jit_cc_a1_flt) {
|
||||||
node->v.p = jit_data(&node->v.f, sizeof(jit_float32_t));
|
node->v.p = jit_data(&node->v.f, sizeof(jit_float32_t), 4);
|
||||||
node->flag |= jit_flag_node | jit_flag_data;
|
node->flag |= jit_flag_node | jit_flag_data;
|
||||||
}
|
}
|
||||||
else if (mask & jit_cc_a1_dbl) {
|
else if (mask & jit_cc_a1_dbl) {
|
||||||
node->v.p = jit_data(&node->v.d, sizeof(jit_float64_t));
|
node->v.p = jit_data(&node->v.d, sizeof(jit_float64_t), 8);
|
||||||
node->flag |= jit_flag_node | jit_flag_data;
|
node->flag |= jit_flag_node | jit_flag_data;
|
||||||
}
|
}
|
||||||
else if (mask & jit_cc_a2_flt) {
|
else if (mask & jit_cc_a2_flt) {
|
||||||
node->w.p = jit_data(&node->w.f, sizeof(jit_float32_t));
|
node->w.p = jit_data(&node->w.f, sizeof(jit_float32_t), 4);
|
||||||
node->flag |= jit_flag_node | jit_flag_data;
|
node->flag |= jit_flag_node | jit_flag_data;
|
||||||
}
|
}
|
||||||
else if (mask & jit_cc_a2_dbl) {
|
else if (mask & jit_cc_a2_dbl) {
|
||||||
node->w.p = jit_data(&node->w.d, sizeof(jit_float64_t));
|
node->w.p = jit_data(&node->w.d, sizeof(jit_float64_t), 8);
|
||||||
node->flag |= jit_flag_node | jit_flag_data;
|
node->flag |= jit_flag_node | jit_flag_data;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue