[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 01/06: Allow jit_begin_data to declare max data size
From: |
Andy Wingo |
Subject: |
[Guile-commits] 01/06: Allow jit_begin_data to declare max data size |
Date: |
Thu, 30 Jul 2020 08:12:54 -0400 (EDT) |
wingo pushed a commit to branch master
in repository guile.
commit 44b07aef4b893af7057a4a25edea56a7c8346a79
Author: Andy Wingo <wingo@igalia.com>
AuthorDate: Thu Jul 30 13:36:24 2020 +0200
Allow jit_begin_data to declare max data size
* lightening.h:
* lightening/lightening.c (jit_begin_data): Add max data size
parameter. If nonzero, can allow the JIT to avoid prematurely
emitting a constant pool.
(jit_end_data): Allow pending literals.
* tests/jmp_table.c (run_test): Use new API.
---
lightening.h | 2 +-
lightening/lightening.c | 16 ++++++++--------
tests/jmp_table.c | 2 +-
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/lightening.h b/lightening.h
index 020c479..efa5dfd 100644
--- a/lightening.h
+++ b/lightening.h
@@ -661,7 +661,7 @@ FOR_EACH_INSTRUCTION(DECLARE_INSTRUCTION)
# define jit_truncr_f(j,u,v) jit_truncr_f_l(j,u,v)
#endif
-void jit_begin_data(jit_state_t *);
+void jit_begin_data(jit_state_t *, size_t max_size_or_zero);
void jit_end_data(jit_state_t *);
void jit_emit_u8(jit_state_t *, uint8_t);
void jit_emit_u16(jit_state_t *, uint16_t);
diff --git a/lightening/lightening.c b/lightening/lightening.c
index 775b2b6..97f4de0 100644
--- a/lightening/lightening.c
+++ b/lightening/lightening.c
@@ -484,12 +484,16 @@ jit_patch_there(jit_state_t* _jit, jit_reloc_t reloc,
jit_pointer_t addr)
}
void
-jit_begin_data(jit_state_t *j)
+jit_begin_data(jit_state_t *j, size_t max_size_or_zero)
{
#ifdef JIT_NEEDS_LITERAL_POOL
- if (j->pool->size)
- emit_literal_pool(j, NO_GUARD_NEEDED);
- ASSERT(j->overflow || j->pool->size == 0);
+ if (j->pool->size) {
+ uint8_t *deadline = j->start + j->pool->deadline;
+ // Emit a literal pool now if the data might overwrite the deadline.
+ // Emitting data won't add entries to the pool.
+ if (max_size_or_zero == 0 || j->pc.uc + max_size_or_zero >= deadline)
+ emit_literal_pool(j, NO_GUARD_NEEDED);
+ }
#endif
ASSERT(!j->emitting_data);
@@ -499,10 +503,6 @@ jit_begin_data(jit_state_t *j)
void
jit_end_data(jit_state_t *j)
{
-#ifdef JIT_NEEDS_LITERAL_POOL
- ASSERT(j->overflow || j->pool->size == 0);
-#endif
-
ASSERT(j->emitting_data);
j->emitting_data = 0;
}
diff --git a/tests/jmp_table.c b/tests/jmp_table.c
index 6d86b65..f90ab16 100644
--- a/tests/jmp_table.c
+++ b/tests/jmp_table.c
@@ -17,7 +17,7 @@ run_test(jit_state_t *j, uint8_t *arena_base, size_t
arena_size)
jit_ldxr(j, JIT_R1, JIT_R1, JIT_R0);
jit_jmpr(j, JIT_R1);
- jit_begin_data (j);
+ jit_begin_data (j, (NTARGETS + 1) * sizeof(intptr_t));
jit_align(j, sizeof(intptr_t));
jit_patch_here(j, table);
jit_reloc_t targets[NTARGETS];
- [Guile-commits] branch master updated (5342eb5 -> 2aa05ff), Andy Wingo, 2020/07/30
- [Guile-commits] 01/06: Allow jit_begin_data to declare max data size,
Andy Wingo <=
- [Guile-commits] 03/06: Literal pools have word-alignment, not u64-alignment, Andy Wingo, 2020/07/30
- [Guile-commits] 04/06: Merge branch 'word-align-literal-pools' into 'master', Andy Wingo, 2020/07/30
- [Guile-commits] 05/06: Merge https://gitlab.com/wingo/lightening master branch, Andy Wingo, 2020/07/30
- [Guile-commits] 02/06: Merge branch 'size-data' into 'master', Andy Wingo, 2020/07/30
- [Guile-commits] 06/06: Update use of jit_begin_data API, Andy Wingo, 2020/07/30