summaryrefslogtreecommitdiff
path: root/libguile/lightening
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2019-05-21 14:21:42 +0200
committerAndy Wingo <wingo@pobox.com>2019-05-21 14:21:42 +0200
commit12e0063022c5e7a1eadbf211b60ac0d88260f915 (patch)
tree7abd72bf7ee2fae3e18c0d4338cbff7eab40ca31 /libguile/lightening
parentda0cc5d3e6efc91eb6c54254f222105e452b4ddf (diff)
parent568fdecc86fa6fe40dbfb523a8dd24f794d9ed27 (diff)
downloadguile-12e0063022c5e7a1eadbf211b60ac0d88260f915.tar.gz
Merge remote-tracking branch 'lightening/master'
Diffstat (limited to 'libguile/lightening')
-rw-r--r--libguile/lightening/lightening/aarch64-cpu.c24
-rw-r--r--libguile/lightening/lightening/aarch64-fpu.c6
-rw-r--r--libguile/lightening/lightening/arm-cpu.c104
-rw-r--r--libguile/lightening/lightening/lightening.c18
4 files changed, 81 insertions, 71 deletions
diff --git a/libguile/lightening/lightening/aarch64-cpu.c b/libguile/lightening/lightening/aarch64-cpu.c
index c83b5f807..c04b4cfb1 100644
--- a/libguile/lightening/lightening/aarch64-cpu.c
+++ b/libguile/lightening/lightening/aarch64-cpu.c
@@ -60,7 +60,7 @@ oxxx(jit_state_t *_jit, int32_t Op, int32_t Rd, int32_t Rn, int32_t Rm)
inst = write_Rd_bitfield(inst, Rd);
inst = write_Rn_bitfield(inst, Rn);
inst = write_Rm_bitfield(inst, Rm);
- emit_u32(_jit, inst);
+ emit_u32_with_pool(_jit, inst);
}
static void
@@ -70,7 +70,7 @@ oxxi(jit_state_t *_jit, int32_t Op, int32_t Rd, int32_t Rn, int32_t Imm12)
inst = write_Rd_bitfield(inst, Rd);
inst = write_Rn_bitfield(inst, Rn);
inst = write_imm12_bitfield(inst, Imm12);
- emit_u32(_jit, inst);
+ emit_u32_with_pool(_jit, inst);
}
static void
@@ -80,7 +80,7 @@ oxx9(jit_state_t *_jit, int32_t Op, int32_t Rd, int32_t Rn, int32_t Simm9)
inst = write_Rd_bitfield(inst, Rd);
inst = write_Rn_bitfield(inst, Rn);
inst = write_simm9_bitfield(inst, Simm9);
- emit_u32(_jit, inst);
+ emit_u32_with_pool(_jit, inst);
}
static uint32_t
@@ -112,7 +112,7 @@ ox_x(jit_state_t *_jit, int32_t Op, int32_t Rd, int32_t Rm)
uint32_t inst = Op;
inst = write_Rd_bitfield(inst, Rd);
inst = write_Rm_bitfield(inst, Rm);
- emit_u32(_jit, inst);
+ emit_u32_with_pool(_jit, inst);
}
static void
@@ -121,7 +121,7 @@ o_xx(jit_state_t *_jit, int32_t Op, int32_t Rd, int32_t Rn)
uint32_t inst = Op;
inst = write_Rd_bitfield(inst, Rd);
inst = write_Rn_bitfield(inst, Rn);
- emit_u32(_jit, inst);
+ emit_u32_with_pool(_jit, inst);
}
static void
@@ -130,7 +130,7 @@ oxx_(jit_state_t *_jit, int32_t Op, int32_t Rn, int32_t Rm)
uint32_t inst = Op;
inst = write_Rn_bitfield(inst, Rn);
inst = write_Rm_bitfield(inst, Rm);
- emit_u32(_jit, inst);
+ emit_u32_with_pool(_jit, inst);
}
static void
@@ -138,7 +138,7 @@ o_x_(jit_state_t *_jit, int32_t Op, int32_t Rn)
{
uint32_t inst = Op;
inst = write_Rn_bitfield(inst, Rn);
- emit_u32(_jit, inst);
+ emit_u32_with_pool(_jit, inst);
}
static void
@@ -147,7 +147,7 @@ ox_h(jit_state_t *_jit, int32_t Op, int32_t Rd, int32_t Imm16)
uint32_t inst = Op;
inst = write_Rd_bitfield(inst, Rd);
inst = write_imm16_bitfield(inst, Imm16);
- emit_u32(_jit, inst);
+ emit_u32_with_pool(_jit, inst);
}
static void
@@ -159,7 +159,7 @@ oxxrs(jit_state_t *_jit, int32_t Op,
inst = write_Rn_bitfield(inst, Rn);
inst = write_immr_bitfield(inst, R);
inst = write_imms_bitfield(inst, S);
- emit_u32(_jit, inst);
+ emit_u32_with_pool(_jit, inst);
}
static void
@@ -171,7 +171,7 @@ oxxxc(jit_state_t *_jit, int32_t Op,
inst = write_Rn_bitfield(inst, Rn);
inst = write_Rm_bitfield(inst, Rm);
inst = write_cond_bitfield(inst, Cc);
- emit_u32(_jit, inst);
+ emit_u32_with_pool(_jit, inst);
}
static void
@@ -183,7 +183,7 @@ oxxx7(jit_state_t *_jit, int32_t Op,
inst = write_Rt2_bitfield(inst, Rt2);
inst = write_Rn_bitfield(inst, Rn);
inst = write_simm7_bitfield(inst, Simm7);
- emit_u32(_jit, inst);
+ emit_u32_with_pool(_jit, inst);
}
#define XZR_REGNO 0x1f
@@ -981,7 +981,7 @@ CBNZ(jit_state_t *_jit, int32_t Rd)
static void
NOP(jit_state_t *_jit)
{
- return emit_u32(_jit, 0xd503201f);
+ return emit_u32_with_pool(_jit, 0xd503201f);
}
static jit_reloc_t
diff --git a/libguile/lightening/lightening/aarch64-fpu.c b/libguile/lightening/lightening/aarch64-fpu.c
index 44f1eb0df..629734264 100644
--- a/libguile/lightening/lightening/aarch64-fpu.c
+++ b/libguile/lightening/lightening/aarch64-fpu.c
@@ -26,7 +26,7 @@ osvvv(jit_state_t *_jit, int32_t Op, int32_t Sz, int32_t Rd, int32_t Rn,
inst = write_Rd_bitfield(inst, Rd);
inst = write_Rn_bitfield(inst, Rn);
inst = write_Rm_bitfield(inst, Rm);
- emit_u32(_jit, inst);
+ emit_u32_with_pool(_jit, inst);
}
static void
@@ -36,7 +36,7 @@ osvv_(jit_state_t *_jit, int32_t Op, int32_t Sz, int32_t Rd, int32_t Rn)
inst = write_size_bitfield(inst, Sz);
inst = write_Rd_bitfield(inst, Rd);
inst = write_Rn_bitfield(inst, Rn);
- emit_u32(_jit, inst);
+ emit_u32_with_pool(_jit, inst);
}
static void
@@ -46,7 +46,7 @@ os_vv(jit_state_t *_jit, int32_t Op, int32_t Sz, int32_t Rn, int32_t Rm)
inst = write_size_bitfield(inst, Sz);
inst = write_Rn_bitfield(inst, Rn);
inst = write_Rm_bitfield(inst, Rm);
- emit_u32(_jit, inst);
+ emit_u32_with_pool(_jit, inst);
}
#define A64_SCVTF 0x1e220000
diff --git a/libguile/lightening/lightening/arm-cpu.c b/libguile/lightening/lightening/arm-cpu.c
index e758bfd28..5ce5f06fd 100644
--- a/libguile/lightening/lightening/arm-cpu.c
+++ b/libguile/lightening/lightening/arm-cpu.c
@@ -186,7 +186,7 @@ static void
emit_wide_thumb(jit_state_t *_jit, uint32_t inst)
{
emit_u16(_jit, inst >> 16);
- emit_u16(_jit, inst & 0xffff);
+ emit_u16_with_pool(_jit, inst & 0xffff);
}
/* from binutils */
@@ -487,7 +487,7 @@ tb(jit_state_t *_jit, int o)
static void
T1_ORR(jit_state_t *_jit, int32_t rdn, int32_t rm)
{
- return emit_u16(_jit, THUMB_ORR|(_u3(rm)<<3)|_u3(rdn));
+ emit_u16_with_pool(_jit, THUMB_ORR|(_u3(rm)<<3)|_u3(rdn));
}
static void
@@ -505,7 +505,7 @@ T2_ORRI(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t im)
static void
T1_EOR(jit_state_t *_jit, int32_t rdn, int32_t rm)
{
- return emit_u16(_jit, THUMB_EOR|(_u3(rm)<<3)|_u3(rdn));
+ emit_u16_with_pool(_jit, THUMB_EOR|(_u3(rm)<<3)|_u3(rdn));
}
static void
@@ -523,13 +523,13 @@ T2_EORI(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t im)
static void
T1_MOV(jit_state_t *_jit, int32_t rd, int32_t rm)
{
- return emit_u16(_jit, THUMB_MOV|((_u4(rd)&8)<<4)|(_u4(rm)<<3)|(rd&7));
+ emit_u16_with_pool(_jit, THUMB_MOV|((_u4(rd)&8)<<4)|(_u4(rm)<<3)|(rd&7));
}
static void
T1_MOVI(jit_state_t *_jit, int32_t rd, int32_t im)
{
- return emit_u16(_jit, THUMB_MOVI|(_u3(rd)<<8)|_u8(im));
+ emit_u16_with_pool(_jit, THUMB_MOVI|(_u3(rd)<<8)|_u8(im));
}
static void
@@ -553,7 +553,7 @@ T2_MOVTI(jit_state_t *_jit, int32_t rd, int32_t im)
static void
T1_MVN(jit_state_t *_jit, int32_t rd, int32_t rm)
{
- return emit_u16(_jit, THUMB_MVN|(_u3(rm)<<3)|_u3(rd));
+ emit_u16_with_pool(_jit, THUMB_MVN|(_u3(rm)<<3)|_u3(rd));
}
static void
@@ -583,19 +583,19 @@ T2_NOT(jit_state_t *_jit, int32_t rd, int32_t rm)
static void
T1_NOP(jit_state_t *_jit)
{
- return emit_u16(_jit, 0xbf00);
+ emit_u16_with_pool(_jit, 0xbf00);
}
static void
T1_ADD(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t rm)
{
- return emit_u16(_jit, THUMB_ADD|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rd));
+ emit_u16_with_pool(_jit, THUMB_ADD|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rd));
}
static void
T1_ADDX(jit_state_t *_jit, int32_t rdn, int32_t rm)
{
- return emit_u16(_jit, THUMB_ADDX|((_u4(rdn)&8)<<4)|(_u4(rm)<<3)|(rdn&7));
+ emit_u16_with_pool(_jit, THUMB_ADDX|((_u4(rdn)&8)<<4)|(_u4(rm)<<3)|(rdn&7));
}
static void
@@ -607,13 +607,13 @@ T2_ADD(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t rm)
static void
T1_ADDI3(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t im)
{
- return emit_u16(_jit, THUMB_ADDI3|(_u3(im)<<6)|(_u3(rn)<<3)|_u3(rd));
+ emit_u16_with_pool(_jit, THUMB_ADDI3|(_u3(im)<<6)|(_u3(rn)<<3)|_u3(rd));
}
static void
T1_ADDI8(jit_state_t *_jit, int32_t rdn, int32_t im)
{
- return emit_u16(_jit, THUMB_ADDI8|(_u3(rdn)<<8)|_u8(im));
+ emit_u16_with_pool(_jit, THUMB_ADDI8|(_u3(rdn)<<8)|_u8(im));
}
static void
@@ -643,7 +643,7 @@ T2_ADDSI(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t im)
static void
T1_ADC(jit_state_t *_jit, int32_t rdn, int32_t rm)
{
- return emit_u16(_jit, THUMB_ADC|(_u3(rm)<<3)|_u3(rdn));
+ emit_u16_with_pool(_jit, THUMB_ADC|(_u3(rm)<<3)|_u3(rdn));
}
static void
@@ -661,7 +661,7 @@ T2_ADCSI(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t im)
static void
T1_SUB(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t rm)
{
- return emit_u16(_jit, THUMB_SUB|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rd));
+ emit_u16_with_pool(_jit, THUMB_SUB|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rd));
}
static void
@@ -673,13 +673,13 @@ T2_SUB(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t rm)
static void
T1_SUBI3(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t im)
{
- return emit_u16(_jit, THUMB_SUBI3|(_u3(im)<<6)|(_u3(rn)<<3)|_u3(rd));
+ emit_u16_with_pool(_jit, THUMB_SUBI3|(_u3(im)<<6)|(_u3(rn)<<3)|_u3(rd));
}
static void
T1_SUBI8(jit_state_t *_jit, int32_t rdn, int32_t im)
{
- return emit_u16(_jit, THUMB_SUBI8|(_u3(rdn)<<8)|_u8(im));
+ emit_u16_with_pool(_jit, THUMB_SUBI8|(_u3(rdn)<<8)|_u8(im));
}
static void
@@ -709,7 +709,7 @@ T2_SUBSI(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t im)
static void
T1_SBC(jit_state_t *_jit, int32_t rdn, int32_t rm)
{
- return emit_u16(_jit, THUMB_SBC|(_u3(rm)<<3)|_u3(rdn));
+ emit_u16_with_pool(_jit, THUMB_SBC|(_u3(rm)<<3)|_u3(rdn));
}
static void
@@ -727,7 +727,7 @@ T2_SBCSI(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t im)
static void
T1_RSBI(jit_state_t *_jit, int32_t rd, int32_t rn)
{
- return emit_u16(_jit, THUMB_RSBI|(_u3(rn)<<3)|_u3(rd));
+ emit_u16_with_pool(_jit, THUMB_RSBI|(_u3(rn)<<3)|_u3(rd));
}
static void
@@ -739,7 +739,7 @@ T2_RSBI(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t im)
static void
T1_MUL(jit_state_t *_jit, int32_t rdm, int32_t rn)
{
- return emit_u16(_jit, THUMB_MUL|(_u3(rn)<<3)|_u3(rdm));
+ emit_u16_with_pool(_jit, THUMB_MUL|(_u3(rn)<<3)|_u3(rdm));
}
static void
@@ -781,7 +781,7 @@ T1_MLS(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t rm, int32_t ra)
static void
T1_AND(jit_state_t *_jit, int32_t rdn, int32_t rm)
{
- return emit_u16(_jit, THUMB_AND|(_u3(rm)<<3)|_u3(rdn));
+ emit_u16_with_pool(_jit, THUMB_AND|(_u3(rm)<<3)|_u3(rdn));
}
static void
@@ -805,7 +805,7 @@ T2_BICI(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t im)
static void
T1_REV(jit_state_t *_jit, int32_t rd, int32_t rm)
{
- return emit_u16(_jit, THUMB_REV|(_u3(rm)<<3)|_u3(rd));
+ emit_u16_with_pool(_jit, THUMB_REV|(_u3(rm)<<3)|_u3(rd));
}
static void
@@ -817,7 +817,7 @@ T2_REV(jit_state_t *_jit, int32_t rd, int32_t rm)
static void
T1_SXTB(jit_state_t *_jit, int32_t rd, int32_t rm)
{
- return emit_u16(_jit, THUMB_SXTB|(_u3(rm)<<3)|_u3(rd));
+ emit_u16_with_pool(_jit, THUMB_SXTB|(_u3(rm)<<3)|_u3(rd));
}
static void
@@ -829,7 +829,7 @@ T2_SXTB(jit_state_t *_jit, int32_t rd, int32_t rm)
static void
T1_UXTB(jit_state_t *_jit, int32_t rd, int32_t rm)
{
- return emit_u16(_jit, THUMB_UXTB|(_u3(rm)<<3)|_u3(rd));
+ emit_u16_with_pool(_jit, THUMB_UXTB|(_u3(rm)<<3)|_u3(rd));
}
static void
@@ -841,7 +841,7 @@ T2_UXTB(jit_state_t *_jit, int32_t rd, int32_t rm)
static void
T1_SXTH(jit_state_t *_jit, int32_t rd, int32_t rm)
{
- return emit_u16(_jit, THUMB_SXTH|(_u3(rm)<<3)|_u3(rd));
+ emit_u16_with_pool(_jit, THUMB_SXTH|(_u3(rm)<<3)|_u3(rd));
}
static void
@@ -853,7 +853,7 @@ T2_SXTH(jit_state_t *_jit, int32_t rd, int32_t rm)
static void
T1_UXTH(jit_state_t *_jit, int32_t rd, int32_t rm)
{
- return emit_u16(_jit, THUMB_UXTH|(_u3(rm)<<3)|_u3(rd));
+ emit_u16_with_pool(_jit, THUMB_UXTH|(_u3(rm)<<3)|_u3(rd));
}
static void
@@ -865,7 +865,7 @@ T2_UXTH(jit_state_t *_jit, int32_t rd, int32_t rm)
static void
T1_LSL(jit_state_t *_jit, int32_t rdn, int32_t rm)
{
- return emit_u16(_jit, THUMB_LSL|(_u3(rm)<<3)|_u3(rdn));
+ emit_u16_with_pool(_jit, THUMB_LSL|(_u3(rm)<<3)|_u3(rdn));
}
static void
@@ -877,7 +877,7 @@ T2_LSL(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t rm)
static void
T1_LSLI(jit_state_t *_jit, int32_t rd, int32_t rm, int32_t im)
{
- return emit_u16(_jit, THUMB_LSLI|(_u5(im)<<6)|(_u3(rm)<<3)|_u3(rd));
+ emit_u16_with_pool(_jit, THUMB_LSLI|(_u5(im)<<6)|(_u3(rm)<<3)|_u3(rd));
}
static void
@@ -889,7 +889,7 @@ T2_LSLI(jit_state_t *_jit, int32_t rd, int32_t rm, int32_t im)
static void
T1_LSR(jit_state_t *_jit, int32_t rdn, int32_t rm)
{
- return emit_u16(_jit, THUMB_LSR|(_u3(rm)<<3)|_u3(rdn));
+ emit_u16_with_pool(_jit, THUMB_LSR|(_u3(rm)<<3)|_u3(rdn));
}
static void
@@ -901,7 +901,7 @@ T2_LSR(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t rm)
static void
T1_LSRI(jit_state_t *_jit, int32_t rd, int32_t rm, int32_t im)
{
- return emit_u16(_jit, THUMB_LSRI|(_u5(im)<<6)|(_u3(rm)<<3)|_u3(rd));
+ emit_u16_with_pool(_jit, THUMB_LSRI|(_u5(im)<<6)|(_u3(rm)<<3)|_u3(rd));
}
static void
@@ -913,7 +913,7 @@ T2_LSRI(jit_state_t *_jit, int32_t rd, int32_t rm, int32_t im)
static void
T1_ASR(jit_state_t *_jit, int32_t rdn, int32_t rm)
{
- return emit_u16(_jit, THUMB_ASR|(_u3(rm)<<3)|_u3(rdn));
+ emit_u16_with_pool(_jit, THUMB_ASR|(_u3(rm)<<3)|_u3(rdn));
}
static void
@@ -925,7 +925,7 @@ T2_ASR(jit_state_t *_jit, int32_t rd, int32_t rn, int32_t rm)
static void
T1_ASRI(jit_state_t *_jit, int32_t rd, int32_t rm, int32_t im)
{
- return emit_u16(_jit, THUMB_ASRI|(_u5(im)<<6)|(_u3(rm)<<3)|_u3(rd));
+ emit_u16_with_pool(_jit, THUMB_ASRI|(_u5(im)<<6)|(_u3(rm)<<3)|_u3(rd));
}
static void
@@ -937,13 +937,13 @@ T2_ASRI(jit_state_t *_jit, int32_t rd, int32_t rm, int32_t im)
static void
T1_CMP(jit_state_t *_jit, int32_t rn, int32_t rm)
{
- return emit_u16(_jit, THUMB_CMP|(_u3(rm)<<3)|_u3(rn));
+ emit_u16_with_pool(_jit, THUMB_CMP|(_u3(rm)<<3)|_u3(rn));
}
static void
T1_CMPX(jit_state_t *_jit, int32_t rn, int32_t rm)
{
- return emit_u16(_jit, THUMB_CMPX|((_u4(rn)&8)<<4)|(_u4(rm)<<3)|(rn&7));
+ emit_u16_with_pool(_jit, THUMB_CMPX|((_u4(rn)&8)<<4)|(_u4(rm)<<3)|(rn&7));
}
static void
@@ -955,7 +955,7 @@ T2_CMP(jit_state_t *_jit, int32_t rn, int32_t rm)
static void
T1_CMPI(jit_state_t *_jit, int32_t rn, int32_t im)
{
- return emit_u16(_jit, THUMB_CMPI|(_u3(rn)<<8)|_u8(im));
+ emit_u16_with_pool(_jit, THUMB_CMPI|(_u3(rn)<<8)|_u8(im));
}
static void
@@ -973,7 +973,7 @@ T2_CMNI(jit_state_t *_jit, int32_t rn, int32_t im)
static void
T1_TST(jit_state_t *_jit, int32_t rn, int32_t rm)
{
- return emit_u16(_jit, THUMB_TST|(_u3(rm)<<3)|_u3(rn));
+ emit_u16_with_pool(_jit, THUMB_TST|(_u3(rm)<<3)|_u3(rn));
}
static void
@@ -991,13 +991,13 @@ T2_TSTI(jit_state_t *_jit, int32_t rn, int32_t im)
static void
T1_BLX(jit_state_t *_jit, int32_t r0)
{
- emit_u16(_jit, THUMB_BLX|(_u4(r0)<<3));
+ emit_u16_with_pool(_jit, THUMB_BLX|(_u4(r0)<<3));
}
static void
T1_BX(jit_state_t *_jit, int32_t r0)
{
- emit_u16(_jit, THUMB_BX|(_u4(r0)<<3));
+ emit_u16_with_pool(_jit, THUMB_BX|(_u4(r0)<<3));
}
static jit_reloc_t
@@ -1027,7 +1027,7 @@ T2_BLXI(jit_state_t *_jit)
static void
T1_LDRSB(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t rm)
{
- return emit_u16(_jit, THUMB_LDRSB|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt));
+ emit_u16_with_pool(_jit, THUMB_LDRSB|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt));
}
static void
@@ -1057,7 +1057,7 @@ T2_LDRSBIN(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t im)
static void
T1_LDRB(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t rm)
{
- return emit_u16(_jit, THUMB_LDRB|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt));
+ emit_u16_with_pool(_jit, THUMB_LDRB|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt));
}
static void
@@ -1069,7 +1069,7 @@ T2_LDRB(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t rm)
static void
T1_LDRBI(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t im)
{
- return emit_u16(_jit, THUMB_LDRBI|(_u5(im)<<6)|(_u3(rn)<<3)|_u3(rt));
+ emit_u16_with_pool(_jit, THUMB_LDRBI|(_u5(im)<<6)|(_u3(rn)<<3)|_u3(rt));
}
static void
@@ -1093,7 +1093,7 @@ T2_LDRBIN(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t im)
static void
T1_LDRSH(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t rm)
{
- return emit_u16(_jit, THUMB_LDRSH|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt));
+ emit_u16_with_pool(_jit, THUMB_LDRSH|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt));
}
static void
@@ -1123,7 +1123,7 @@ T2_LDRSHIN(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t im)
static void
T1_LDRH(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t rm)
{
- return emit_u16(_jit, THUMB_LDRH|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt));
+ emit_u16_with_pool(_jit, THUMB_LDRH|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt));
}
static void
@@ -1135,7 +1135,7 @@ T2_LDRH(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t rm)
static void
T1_LDRHI(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t im)
{
- return emit_u16(_jit, THUMB_LDRHI|(_u5(im)<<6)|(_u3(rn)<<3)|_u3(rt));
+ emit_u16_with_pool(_jit, THUMB_LDRHI|(_u5(im)<<6)|(_u3(rn)<<3)|_u3(rt));
}
static void
@@ -1159,7 +1159,7 @@ T2_LDRHIN(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t im)
static void
T1_LDR(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t rm)
{
- return emit_u16(_jit, THUMB_LDR|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt));
+ emit_u16_with_pool(_jit, THUMB_LDR|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt));
}
static void
@@ -1171,13 +1171,13 @@ T2_LDR(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t rm)
static void
T1_LDRI(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t im)
{
- return emit_u16(_jit, THUMB_LDRI|(_u5(im)<<6)|(_u3(rn)<<3)|_u3(rt));
+ emit_u16_with_pool(_jit, THUMB_LDRI|(_u5(im)<<6)|(_u3(rn)<<3)|_u3(rt));
}
static void
T1_LDRISP(jit_state_t *_jit, int32_t rt, int32_t im)
{
- return emit_u16(_jit, THUMB_LDRISP|(_u3(rt)<<8)|_u8(im));
+ emit_u16_with_pool(_jit, THUMB_LDRISP|(_u3(rt)<<8)|_u8(im));
}
static void
@@ -1201,7 +1201,7 @@ T2_LDRIN(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t im)
static void
T1_STRB(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t rm)
{
- return emit_u16(_jit, THUMB_STRB|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt));
+ emit_u16_with_pool(_jit, THUMB_STRB|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt));
}
static void
@@ -1213,7 +1213,7 @@ T2_STRB(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t rm)
static void
T1_STRBI(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t im)
{
- emit_u16(_jit, THUMB_STRBI | (_u5(im) << 6) | (_u3(rn) << 3) | _u3(rt));
+ emit_u16_with_pool(_jit, THUMB_STRBI | (_u5(im) << 6) | (_u3(rn) << 3) | _u3(rt));
}
static void
@@ -1237,7 +1237,7 @@ T2_STRBIN(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t im)
static void
T1_STRH(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t rm)
{
- return emit_u16(_jit, THUMB_STRH|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt));
+ emit_u16_with_pool(_jit, THUMB_STRH|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt));
}
static void
@@ -1249,7 +1249,7 @@ T2_STRH(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t rm)
static void
T1_STRHI(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t im)
{
- return emit_u16(_jit, THUMB_STRHI|(_u5(im)<<6)|(_u3(rn)<<3)|_u3(rt));
+ emit_u16_with_pool(_jit, THUMB_STRHI|(_u5(im)<<6)|(_u3(rn)<<3)|_u3(rt));
}
static void
@@ -1273,7 +1273,7 @@ T2_STRHIN(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t im)
static void
T1_STR(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t rm)
{
- return emit_u16(_jit, THUMB_STR|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt));
+ emit_u16_with_pool(_jit, THUMB_STR|(_u3(rm)<<6)|(_u3(rn)<<3)|_u3(rt));
}
static void
@@ -1285,13 +1285,13 @@ T2_STR(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t rm)
static void
T1_STRI(jit_state_t *_jit, int32_t rt, int32_t rn, int32_t im)
{
- return emit_u16(_jit, THUMB_STRI|(_u5(im)<<6)|(_u3(rn)<<3)|_u3(rt));
+ emit_u16_with_pool(_jit, THUMB_STRI|(_u5(im)<<6)|(_u3(rn)<<3)|_u3(rt));
}
static void
T1_STRISP(jit_state_t *_jit, int32_t rt, int32_t im)
{
- return emit_u16(_jit, THUMB_STRISP|(_u3(rt)<<8)|(_u8(im)));
+ emit_u16_with_pool(_jit, THUMB_STRISP|(_u3(rt)<<8)|(_u8(im)));
}
static void
diff --git a/libguile/lightening/lightening/lightening.c b/libguile/lightening/lightening/lightening.c
index 6d6d5ee73..9d0d8f29f 100644
--- a/libguile/lightening/lightening/lightening.c
+++ b/libguile/lightening/lightening/lightening.c
@@ -315,13 +315,23 @@ static inline void emit_u32(jit_state_t *_jit, uint32_t u32) {
_jit->overflow = 1;
} else {
*_jit->pc.ui++ = u32;
-#ifdef JIT_NEEDS_LITERAL_POOL
- if (UNLIKELY(_jit->pc.uc >= _jit->start + _jit->pool->deadline))
- emit_literal_pool(_jit, GUARD_NEEDED);
-#endif
}
}
+#ifdef JIT_NEEDS_LITERAL_POOL
+static inline void emit_u16_with_pool(jit_state_t *_jit, uint16_t u16) {
+ emit_u16(_jit, u16);
+ if (UNLIKELY(_jit->pc.uc >= _jit->start + _jit->pool->deadline))
+ emit_literal_pool(_jit, GUARD_NEEDED);
+}
+
+static inline void emit_u32_with_pool(jit_state_t *_jit, uint32_t u32) {
+ emit_u32(_jit, u32);
+ if (UNLIKELY(_jit->pc.uc >= _jit->start + _jit->pool->deadline))
+ emit_literal_pool(_jit, GUARD_NEEDED);
+}
+#endif
+
static inline void emit_u64(jit_state_t *_jit, uint64_t u64) {
if (UNLIKELY(_jit->pc.ul + 1 > (uint64_t*)_jit->limit)) {
_jit->overflow = 1;