1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-26 21:20:30 +02:00
Commit graph

50 commits

Author SHA1 Message Date
Andy Wingo
a643f99d68 Fix compilation on aarch64 2019-05-16 10:19:02 +02:00
Andy Wingo
7e0b0be1ba Fix GPR temporary selection 2019-05-15 16:26:18 +02:00
Andy Wingo
09e71475f4 Allow a backend to have multiple temporary registers 2019-05-15 16:19:33 +02:00
Andy Wingo
5b8262e804 Rework register saving to avoid push/pop
Push and pop are not well supported on AArch64, so we might as well just
bump the stack pointer once and fill in by offset.
2019-05-15 15:41:02 +02:00
Andy Wingo
0bfdcc7016 Refactor to add support for constant tables, shifted relocs 2019-05-14 15:53:25 +02:00
Andy Wingo
19e7712358 First pass at aarch64 assembler port 2019-05-14 15:46:19 +02:00
Andy Wingo
fc9b474da6 Refactor some bits from x86 to lightening 2019-05-10 14:14:32 +02:00
Andy Wingo
f7080facb4 Refactor to move temp register acquire to core 2019-05-09 16:02:39 +02:00
Andy Wingo
570f361c6c Remove Sparc support
Sadly, this is a dead architecture, without an official Debian port.
Rest in peace!
2019-05-08 21:44:03 +02:00
Andy Wingo
ced3c42dee Remove hppa support
This is a dead architecture without an official Debian port.
2019-05-08 21:44:03 +02:00
Andy Wingo
d51bd7d592 Remove alpha support
This is a dead architecture without an official Debian port.
2019-05-08 21:44:01 +02:00
Andy Wingo
80f79fca93 Remove ia64 (itanium) support
This is a dead architecture without an official Debian port.
2019-05-08 21:37:40 +02:00
Andy Wingo
d6eea0b499 Attempt to pop x87 stack 2019-04-29 17:15:46 +02:00
Andy Wingo
57b31f1111 Stack alignment is 16 even on x86-32 2019-04-29 16:12:38 +02:00
Andy Wingo
483e880b10 Fix byte stores on x86-32
Also on x86-32, use RBX as the tmp register, as it is byte-addressable.
2019-04-28 18:42:55 +02:00
Andy Wingo
2a5d315ab9 Unget temp xpr after mem->mem addend fixup 2019-04-28 16:21:09 +02:00
Andy Wingo
04cd8874de Stack alignment takes saved return address into account 2019-04-28 12:37:19 +02:00
Andy Wingo
d617315fdb Fix jit_leave_jit_abi to pop correct registers
Also relax stack alignment on 32-bit x86
2019-04-27 22:27:39 +02:00
Andy Wingo
e0cf51e482 Small bug fixes for ia32 2019-04-26 17:41:43 +02:00
Andy Wingo
42bc762d26 Add facility to enter and leave JIT ABI
This allows us to save and restore callee-save temporaries, i.e. RBP on
32-bit x86.  Otherwise it's a disaster shuffling stack arguments using
temporaries.
2019-04-26 17:28:29 +02:00
Andy Wingo
9906cd5f84 Remove most __X64_32 code
The x32 ABI (i.e., amd64 with 32-bit pointers) is mostly a C language
question.  From a JIT perspective it mostly looks just like amd64.  We
can fix any differences in a followup, but x32 is also a pretty dead
ABI, so I feel OK with this.
2019-04-26 17:19:16 +02:00
Andy Wingo
24950994ef Simplify 64/32 concerns in x86-cpu.c
* lightening/x86-cpu.c (il): Take a uint64_t.  It's only called this
  way.
(imovi): Remove some x64_32 conditions; they seem bogus.
2019-04-26 16:13:29 +02:00
Andy Wingo
fe34e3cdf1 Make jit_cpu private 2019-04-26 16:09:06 +02:00
Andy Wingo
19da79c8c1 Fix 32-bit movi_d
* lightening/x86-sse.c (movi_d): Fix combining of low and high double
  halves.
2019-04-26 15:57:25 +02:00
Andy Wingo
e9d1567f7f Use jit_word_t for register-sized values instead of intmax_t 2019-04-26 15:00:29 +02:00
Andy Wingo
bab1f40b5e Fix lightening to compile on 32-bit x86 2019-04-26 14:44:09 +02:00
Andy Wingo
89fd69fc00 Account for saved return address when locating args
Also, fix alignment to be in bytes rather than bits.  Oops!
2019-04-26 14:38:29 +02:00
Andy Wingo
ac972e1dba Inline some internal definitions into backend-specific files 2019-04-26 14:37:35 +02:00
Andy Wingo
04d89a7ce2 Implement reloc shortening, and remove unused functionality 2019-04-26 12:40:44 +02:00
Andy Wingo
796f263ed8 Remove unused jit_epilog definition 2019-04-26 11:40:06 +02:00
Andy Wingo
dc28ac03c1 Make jit_align_stack and jit_shrink_stack public 2019-04-26 10:04:04 +02:00
Andy Wingo
c54c248bc9 Track frame size to more reliably align stack before calls 2019-04-26 09:56:46 +02:00
Andy Wingo
a3e044c808 Move jit_move_operands etc to common lightening.c file 2019-04-26 09:09:50 +02:00
Andy Wingo
e29977a82b Simplify register representation even more
The register structures just contain the regno.  Since the only flag is
the callee-save flag, we can punt that to a separate per-backend,
per-target predicate.
2019-04-25 23:22:44 +02:00
Andy Wingo
2602f17fb4 Simplify register representation again
There's only one flag, "callee-save".  Also the regno range is limited
to 0-63 inclusive, to allow for cheap register sets as uint64_t values.
2019-04-25 19:12:55 +02:00
Andy Wingo
af4e0422ae Align stack on 64-bit targets for calls 2019-04-25 18:12:23 +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
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
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
0be4f7a2a1 Simplify API for loading call arguments 2019-04-22 09:15:03 +02:00
Andy Wingo
4e1876f294 Support spilling args to stack 2019-04-04 17:06:57 +02:00
Andy Wingo
ede10b101b Support immediate arguments 2019-04-04 12:09:41 +02:00
Andy Wingo
1d6feefa9d Add assert for jit_address 2019-04-04 11:41:51 +02:00
Andy Wingo
e95fb91b96 Fix reloc for jmpi and calli 2019-04-04 11:17:46 +02:00
Andy Wingo
bbfb03ac30 Fix implementation of jit_{gpr,fpr}_is_callee_save 2019-04-04 11:08:54 +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
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