Andy Wingo
e9a372b020
Re-enable fixnum less-than JIT fast-path
...
* libguile/jit.c (compile_less): Re-enable fast-path for fixnums, now
that the JIT library works :)
2019-04-25 18:24:20 +02:00
Andy Wingo
f0be544463
Merge from upstream lightening
2019-04-25 18:12:42 +02:00
Andy Wingo
af4e0422ae
Align stack on 64-bit targets for calls
2019-04-25 18:12:23 +02:00
Andy Wingo
b0cd9c0b77
Merge from upstream lightening
2019-04-25 17:16:54 +02:00
Andy Wingo
99e5672726
Renumber x86 registers
...
Now that there's no hazard to using a register used for passing
arguments, renumber to give JIT_R/JIT_F/JIT_V names to all registers.
Choose a temp register that's not used for passing arguments. Our
previous choice was an argument register (doh!) which made function
calls with many arguments fail.
2019-04-25 17:14:28 +02:00
Andy Wingo
ddd66a2f34
Simplify register representation
...
Instead of JIT_R0 being a wrapped index into a table which then gives
the regno and class, just have JIT_R0 be the wrapped regno and class.
2019-04-25 17:03:46 +02:00
Andy Wingo
fa6093c4ef
Merge from upstream lightening
2019-04-24 22:57:26 +02:00
Andy Wingo
b34e230413
Fix apply_addend bug
...
* lightening/x86.c (jit_move_operands): Fix bug when calling
apply_addend.
2019-04-24 22:56:48 +02:00
Andy Wingo
0ef614ecf9
Fix a JIT bug
...
* libguile/jit.c (compile): Reset frame size as well when restarting
compilation. Fixes JIT errors.
2019-04-24 22:20:00 +02:00
Andy Wingo
9a32b4b1ad
Adapt to new lightening call API
...
* libguile/jit.c: Operands have their ABI in them. We can now have
addends on GPR and MEM operands, which can improve register
allocation. Use new jit_calli_3, etc helper APIs.
2019-04-24 16:02:33 +02:00
Andy Wingo
d75303780b
Merge from upstream lightening
2019-04-24 15:53:22 +02:00
Andy Wingo
4db777e12e
Add support for operand addends
...
This can allow for better register allocation around calls for field
locations.
2019-04-24 15:52:07 +02:00
Andy Wingo
d07dac40ad
Add proper parallel-moves solver
...
Add parallel assignment serializer from Guile, originating in the Caml
paper by Rideau et al.
2019-04-24 15:08:35 +02:00
Andy Wingo
609df9ea55
Merge from upstream lightening
2019-04-22 09:17:26 +02:00
Andy Wingo
0be4f7a2a1
Simplify API for loading call arguments
2019-04-22 09:15:03 +02:00
Andy Wingo
668196aa27
Fix lightening name
2019-04-05 16:25:22 +02:00
Andy Wingo
a45d651755
Add support for "make test-ia32" in tests/
2019-04-05 16:24:21 +02:00
Andy Wingo
e6ac66a348
Allow test suite to test multiple targets.
...
* tests/Makefile: Allow for testing multiple targets.
2019-04-05 16:07:01 +02:00
Andy Wingo
b35662fb4e
Merge from upstream Lightening
2019-04-04 17:07:09 +02:00
Andy Wingo
4e1876f294
Support spilling args to stack
2019-04-04 17:06:57 +02:00
Andy Wingo
cfffd5b241
Fix compilation of call-scm<-u64
...
* libguile/jit.c (compile_call_scm_from_u64): Fix to take operands from
the right place.
2019-04-04 16:35:44 +02:00
Andy Wingo
5df432b763
Fix arena expansion logic
...
* libguile/jit.c (compile): Fix logic to clear old labels.
2019-04-04 14:59:38 +02:00
Andy Wingo
891e7600f4
JIT fixes for arena overflow
...
* libguile/jit.c (compute_mcode): Move analysis outside the code
emitter, as it doesn't need to re-run on overflow.
(compile): Clear labels before emitting, as they may have changed if we
overflowed.
2019-04-04 14:32:05 +02:00
Andy Wingo
9ff21412ff
Minor JIT cleanups
...
* libguile/jit.c (fp_scm_operand): Fix assertion about register state.
(compile_call_scm_sz_u32): Fix ABI declaration for immediate.
Some whitespace cleanups as well.
2019-04-04 12:48:37 +02:00
Andy Wingo
39d1ed3c27
Merge from upstream Lightening
2019-04-04 12:11:08 +02:00
Andy Wingo
89de2cb286
More various JIT fixen
...
* libguile/jit.c (prepare_jit_state): Remove unused function.
(initialize_thread_jit_state): Since the lightening state is allocated
using GC memory, trace the JIT state.
(compute_mcode): Avoid double-compile.
2019-04-04 12:10:13 +02:00
Andy Wingo
ede10b101b
Support immediate arguments
2019-04-04 12:09:41 +02:00
Andy Wingo
62df897929
Merge from upstream Lightening
2019-04-04 11:43:36 +02:00
Andy Wingo
f8fa1156a9
Fix some aspects of instruction mcode addresses
...
* libguile/jit.c (struct scm_jit_state): Remove entry_mcode member.
(add_inter_instruction_patch): Fix off-by-one.
(compile): Reset reloc_idx when restarting a compile. All instructions
record their addresses.
2019-04-04 11:42:33 +02:00
Andy Wingo
1d6feefa9d
Add assert for jit_address
2019-04-04 11:41:51 +02:00
Andy Wingo
c0369df5e7
Fix JIT bugs
...
* libguile/jit.c (compile): Fix reloc fixup.
(compute_mcode): Correctly compute entry mcode.
2019-04-04 11:33:16 +02:00
Andy Wingo
c63764f439
Merge from upstream Lightening
2019-04-04 11:18:30 +02:00
Andy Wingo
fb9003c137
Fix jit_gpr_is_callee_save usage
...
* libguile/jit.c (emit_entry_trampoline): Fix invocations for
jit_gpr_is_callee_save.
2019-04-04 11:18:08 +02:00
Andy Wingo
e95fb91b96
Fix reloc for jmpi and calli
2019-04-04 11:17:46 +02:00
Andy Wingo
11fa54646f
Merge from upstream Lightening
2019-04-04 11:09:24 +02:00
Andy Wingo
bbfb03ac30
Fix implementation of jit_{gpr,fpr}_is_callee_save
2019-04-04 11:08:54 +02:00
Andy Wingo
93f430d282
jit: Fix inter-instruction relocs.
...
* libguile/jit.c (struct pending_reloc, emit_entry_trampoline)
(add_inter_instruction_patch, compile, compute_mcode): Fix
inter-instruction relocs.
2019-04-04 10:59:37 +02:00
Andy Wingo
2db4ccd68c
Fix jit.c compilation
...
* libguile/jit.c: Finish adaptation for lightening. Still crashes
though.
2019-04-03 21:08:30 +02:00
Andy Wingo
83b086e40e
Remove -Wdeclaration-after-statement
...
* configure.ac (HOST_CC): Now that we have C99, there's no need to warn
on mixed statements and declarations.
2019-04-03 19:37:31 +02:00
Andy Wingo
1308404b5b
Merge from upstream lightening
2019-04-03 19:24:47 +02:00
Andy Wingo
0903a01812
Add jit_same_{gprs,fprs} helpers
2019-04-03 19:23:36 +02:00
Andy Wingo
061c967bfe
Checkpoint for lightning to lightening conversion
2019-04-03 17:42:27 +02:00
Andy Wingo
9f22ec9e2d
Merge from upstream Lightening
2019-04-03 17:38:00 +02:00
Andy Wingo
f9da599ef5
Fix jit_reset to be useful
2019-04-03 17:37:18 +02:00
Andy Wingo
22d06620ee
Allow users to pass custom allocators
2019-04-03 15:25:21 +02:00
Andy Wingo
e9be4ea73d
Adapt to lightning -> lightening name change
...
* libguile/jit.c: Include lightening.h.
* libguile/Makefile.am: Adapt.
2019-04-03 14:08:06 +02:00
Andy Wingo
2e4fb1e665
Merge in changes from upstream lightening
2019-04-03 13:59:33 +02:00
Andy Wingo
f348b8ed6d
Change headers and files to be named "lightening" instead of "jit"
...
This improves integration with other projects. Like for example Guile
already has files named jit.c and jit.h; it's easier to manage if
lightening uses its own file names.
2019-04-03 13:57:48 +02:00
Andy Wingo
d351f13bc2
Add subdir-objects option to libguile makefile.
...
* libguile/Makefile.am (AUTOMAKE_OPTIONS): Add subdir-objects, to allow
for having two files named "jit.c".
2019-04-03 13:37:35 +02:00
Andy Wingo
985faf35c1
Replace GNU Lightning with Lightening
2019-04-03 13:28:13 +02:00