mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-22 03:30:22 +02:00
Add label predicates
* include/lightning.h, lib/lightning.c: Add three predicates to query information about labels. jit_forward_p(label) will return non zero if the label is "forward", that is need a call to jit_link(label), jit_indirect_p(label) that returns non zero if the label was created with the jit_indirect() call, and jit_target_p(label) that will return non zero if there is at least one jump patched to land at that label.
This commit is contained in:
parent
a43fb63055
commit
9c5e2b511e
3 changed files with 35 additions and 0 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
||||||
|
2014-10-21 Paulo Andrade <pcpa@gnu.org>
|
||||||
|
|
||||||
|
* include/lightning.h, lib/lightning.c: Add three predicates
|
||||||
|
to query information about labels. jit_forward_p(label)
|
||||||
|
will return non zero if the label is "forward", that is
|
||||||
|
need a call to jit_link(label), jit_indirect_p(label)
|
||||||
|
that returns non zero if the label was created with the
|
||||||
|
jit_indirect() call, and jit_target_p(label) that will
|
||||||
|
return non zero if there is at least one jump patched
|
||||||
|
to land at that label.
|
||||||
|
|
||||||
2014-10-18 Paulo Andrade <pcpa@gnu.org>
|
2014-10-18 Paulo Andrade <pcpa@gnu.org>
|
||||||
|
|
||||||
* check/range.ok, check/range.tst: New test case designed
|
* check/range.ok, check/range.tst: New test case designed
|
||||||
|
|
|
@ -864,6 +864,12 @@ 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*);
|
||||||
extern jit_node_t *_jit_indirect(jit_state_t*);
|
extern jit_node_t *_jit_indirect(jit_state_t*);
|
||||||
extern void _jit_link(jit_state_t*, jit_node_t*);
|
extern void _jit_link(jit_state_t*, jit_node_t*);
|
||||||
|
#define jit_forward_p(u) _jit_forward_p(_jit,u)
|
||||||
|
extern jit_bool_t _jit_forward_p(jit_state_t*,jit_node_t*);
|
||||||
|
#define jit_indirect_p(u) _jit_indirect_p(_jit,u)
|
||||||
|
extern jit_bool_t _jit_indirect_p(jit_state_t*,jit_node_t*);
|
||||||
|
#define jit_target_p(u) _jit_target_p(_jit,u)
|
||||||
|
extern jit_bool_t _jit_target_p(jit_state_t*,jit_node_t*);
|
||||||
|
|
||||||
extern void _jit_prolog(jit_state_t*);
|
extern void _jit_prolog(jit_state_t*);
|
||||||
|
|
||||||
|
|
|
@ -1127,6 +1127,24 @@ _jit_link(jit_state_t *_jit, jit_node_t *node)
|
||||||
++_jitc->blocks.offset;
|
++_jitc->blocks.offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
jit_bool_t
|
||||||
|
_jit_forward_p(jit_state_t *_jit, jit_node_t *node)
|
||||||
|
{
|
||||||
|
return (node->code == jit_code_label && !node->next && node != _jitc->tail);
|
||||||
|
}
|
||||||
|
|
||||||
|
jit_bool_t
|
||||||
|
_jit_indirect_p(jit_state_t *_jit, jit_node_t *node)
|
||||||
|
{
|
||||||
|
return (node->code == jit_code_label && !!(node->flag & jit_flag_use));
|
||||||
|
}
|
||||||
|
|
||||||
|
jit_bool_t
|
||||||
|
_jit_target_p(jit_state_t *_jit, jit_node_t *node)
|
||||||
|
{
|
||||||
|
return (node->code == jit_code_label && !!node->link);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_jit_prepare(jit_state_t *_jit)
|
_jit_prepare(jit_state_t *_jit)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue