lightning.git - Portable just-in-time compiler library

index : lightning.git
Portable just-in-time compiler library
summary refs log tree commit diff
path: root/lib/jit_note.c
diff options
context:
space:
mode:
authorpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2013年03月06日 16:49:26 -0300
committerpcpa <paulo.cesar.pereira.de.andrade@gmail.com>2013年03月06日 16:49:26 -0300
commit9afca85921522076006a7e901b2a040849f7beb0 (patch)
tree225bbc312a1cd584e00ec2f4c013a6eb65b323e9 /lib/jit_note.c
parentf39eee6694db4880fd5677c89b91ee7095799a55 (diff)
downloadlightning-9afca85921522076006a7e901b2a040849f7beb0.tar.gz
Rework to better describe what is used only during jit generation.
* include/lightning/jit_private.h, lib/jit_arm-cpu.c, lib/jit_arm.c, lib/jit_disasm.c, lib/jit_mips-cpu.c, lib/jit_mips.c, lib/jit_note.c, lib/jit_ppc-cpu.c, lib/jit_ppc.c, lib/jit_print.c, lib/jit_sparc-cpu.c, lib/jit_sparc.c, lib/jit_x86-cpu.c, lib/jit_x86.c, lib/lightning.c: Add an extra structure for data storage during jit generation, and release it after generating jit, to reduce a bit memory usage, and also to make it easier to understand what data is available during jit runtime.
Diffstat (limited to 'lib/jit_note.c')
-rw-r--r--lib/jit_note.c 70
1 files changed, 35 insertions, 35 deletions
diff --git a/lib/jit_note.c b/lib/jit_note.c
index 284f02d..6b30a02 100644
--- a/lib/jit_note.c
+++ b/lib/jit_note.c
@@ -54,17 +54,17 @@ _jit_name(jit_state_t *_jit, char *name)
node->v.n = jit_data(name, strlen(name) + 1, 1);
else
node->v.p = NULL;
- if (_jit->note.head == NULL)
- _jit->note.head = _jit->note.tail = node;
+ if (_jitc->note.head == NULL)
+ _jitc->note.head = _jitc->note.tail = node;
else {
- _jit->note.tail->link = node;
- _jit->note.tail = node;
+ _jitc->note.tail->link = node;
+ _jitc->note.tail = node;
}
++_jit->note.length;
- _jit->note.size += sizeof(jit_note_t);
+ _jitc->note.size += sizeof(jit_note_t);
/* remember previous note is invalid due to name change */
- _jit->note.note = NULL;
- return (_jit->note.name = node);
+ _jitc->note.note = NULL;
+ return (_jitc->note.name = node);
}
jit_node_t *
@@ -78,20 +78,20 @@ _jit_note(jit_state_t *_jit, char *name, int line)
else
node->v.p = NULL;
node->w.w = line;
- if (_jit->note.head == NULL)
- _jit->note.head = _jit->note.tail = node;
+ if (_jitc->note.head == NULL)
+ _jitc->note.head = _jitc->note.tail = node;
else {
- _jit->note.tail->link = node;
- _jit->note.tail = node;
+ _jitc->note.tail->link = node;
+ _jitc->note.tail = node;
}
- if (_jit->note.note == NULL ||
- (name == NULL && _jit->note.note != NULL) ||
- (name != NULL && _jit->note.note == NULL) ||
- (name != NULL && _jit->note.note != NULL &&
- strcmp(name, (char *)_jit->data.ptr + _jit->note.note->v.n->u.w)))
- _jit->note.size += sizeof(jit_line_t);
- _jit->note.size += sizeof(jit_int32_t) * 2;
- return (_jit->note.note = node);
+ if (_jitc->note.note == NULL ||
+ (name == NULL && _jitc->note.note != NULL) ||
+ (name != NULL && _jitc->note.note == NULL) ||
+ (name != NULL && _jitc->note.note != NULL &&
+ strcmp(name, (char *)_jit->data.ptr + _jitc->note.note->v.n->u.w)))
+ _jitc->note.size += sizeof(jit_line_t);
+ _jitc->note.size += sizeof(jit_int32_t) * 2;
+ return (_jitc->note.note = node);
}
void
@@ -105,11 +105,11 @@ _jit_annotate(jit_state_t *_jit)
jit_word_t line_offset;
/* initialize pointers in mmaped data area */
- _jit->note.ptr = (jit_note_t *)_jit->note.base;
+ _jit->note.ptr = (jit_note_t *)_jitc->note.base;
_jit->note.length = 0;
note = NULL;
- for (node = _jit->note.head; node; node = node->link) {
+ for (node = _jitc->note.head; node; node = node->link) {
if (node->code == jit_code_name)
note = new_note(node->u.p, node->v.p ? node->v.n->u.p : NULL);
else if (node->v.p) {
@@ -132,11 +132,11 @@ _jit_annotate(jit_state_t *_jit)
for (note_offset = 0; note_offset < _jit->note.length; note_offset++) {
note = _jit->note.ptr + note_offset;
length = sizeof(jit_line_t) * note->length;
- assert(_jit->note.base + length < _jit->data.ptr + _jit->data.length);
- memcpy(_jit->note.base, note->lines, length);
+ assert(_jitc->note.base + length < _jit->data.ptr + _jit->data.length);
+ memcpy(_jitc->note.base, note->lines, length);
free(note->lines);
- note->lines = (jit_line_t *)_jit->note.base;
- _jit->note.base += length;
+ note->lines = (jit_line_t *)_jitc->note.base;
+ _jitc->note.base += length;
}
/* relocate offset and line number information */
@@ -145,18 +145,18 @@ _jit_annotate(jit_state_t *_jit)
for (line_offset = 0; line_offset < note->length; line_offset++) {
line = note->lines + line_offset;
length = sizeof(jit_int32_t) * line->length;
- assert(_jit->note.base + length <
+ assert(_jitc->note.base + length <
_jit->data.ptr + _jit->data.length);
- memcpy(_jit->note.base, line->linenos, length);
+ memcpy(_jitc->note.base, line->linenos, length);
free(line->linenos);
- line->linenos = (jit_int32_t *)_jit->note.base;
- _jit->note.base += length;
- assert(_jit->note.base + length <
+ line->linenos = (jit_int32_t *)_jitc->note.base;
+ _jitc->note.base += length;
+ assert(_jitc->note.base + length <
_jit->data.ptr + _jit->data.length);
- memcpy(_jit->note.base, line->offsets, length);
+ memcpy(_jitc->note.base, line->offsets, length);
free(line->offsets);
- line->offsets = (jit_int32_t *)_jit->note.base;
- _jit->note.base += length;
+ line->offsets = (jit_int32_t *)_jitc->note.base;
+ _jitc->note.base += length;
}
}
}
@@ -252,8 +252,8 @@ _new_note(jit_state_t *_jit, jit_uint8_t *code, char *name)
assert(code >= prev->code);
prev->size = code - prev->code;
}
- note = (jit_note_t *)_jit->note.base;
- _jit->note.base += sizeof(jit_note_t);
+ note = (jit_note_t *)_jitc->note.base;
+ _jitc->note.base += sizeof(jit_note_t);
++_jit->note.length;
note->code = code;
note->name = name;
generated by cgit v1.2.3 (git 2.25.1) at 2025年09月14日 20:27:37 +0000

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