Add label predicates - lightning.git - Portable just-in-time compiler library

index : lightning.git
Portable just-in-time compiler library
summary refs log tree commit diff
diff options
context:
space:
mode:
authorpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2014年10月21日 15:32:24 -0200
committerpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2014年10月21日 15:32:24 -0200
commit9c5e2b511ec6f80a350d756d4464acfb10373ee4 (patch)
tree87ca5c4ad4dd7ea8075da3af0a97f5b1273477de
parenta43fb630557358eaaa31697344b8f52d849f2eb4 (diff)
downloadlightning-9c5e2b511ec6f80a350d756d4464acfb10373ee4.tar.gz
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.
Diffstat
-rw-r--r--ChangeLog 11
-rw-r--r--include/lightning.h 6
-rw-r--r--lib/lightning.c 18
3 files changed, 35 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index e1988f7..85804e6 100644
--- a/ChangeLog
+++ b/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>
* check/range.ok, check/range.tst: New test case designed
diff --git a/include/lightning.h b/include/lightning.h
index 926d0f1..b495af8 100644
--- a/include/lightning.h
+++ b/include/lightning.h
@@ -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_indirect(jit_state_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*);
diff --git a/lib/lightning.c b/lib/lightning.c
index 20aa1bd..7240f6b 100644
--- a/lib/lightning.c
+++ b/lib/lightning.c
@@ -1127,6 +1127,24 @@ _jit_link(jit_state_t *_jit, jit_node_t *node)
++_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
_jit_prepare(jit_state_t *_jit)
{
generated by cgit v1.2.3 (git 2.39.1) at 2025年09月28日 11:10:36 +0000

AltStyle によって変換されたページ (->オリジナル) /