aboutsummaryrefslogtreecommitdiff
path: root/deps/lightening/README.md
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-04-20 10:47:49 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-04-20 10:47:49 +0300
commit8a98b46ef2b5673fcdf0a9a466857a5de044dfc5 (patch)
treeae548496da015f3319760479e09cfe5a0b1eba5d /deps/lightening/README.md
parent1cc7990ef7d5483d0434dda412f2d88e0b17df27 (diff)
downloadposthaste-8a98b46ef2b5673fcdf0a9a466857a5de044dfc5.tar.gz
posthaste-8a98b46ef2b5673fcdf0a9a466857a5de044dfc5.zip
add lightening jit
Diffstat (limited to 'deps/lightening/README.md')
-rw-r--r--deps/lightening/README.md57
1 files changed, 57 insertions, 0 deletions
diff --git a/deps/lightening/README.md b/deps/lightening/README.md
new file mode 100644
index 0000000..515c3ee
--- /dev/null
+++ b/deps/lightening/README.md
@@ -0,0 +1,57 @@
+# Lightening
+
+Lightening is a just-in-time code generation library derived from GNU
+Lightning, adapted to the purposes of the GNU Guile project.
+
+## Use
+
+```
+gcc -flto -O2 -g -o lightening.o -c lightening/lightening.c
+gcc -flto -O2 -g -o my-program lightening.o my-program.c
+```
+
+See the GNU Lightning manual for more on how to program against
+Lightening (much of the details are the same).
+
+## What's the difference with GNU Lightning?
+
+This project is called Lightening because it's lighter-weight than GNU
+Lightning. When you go to generate code at run-time with GNU Lightning,
+what happens is that you build up a graph of nodes which GNU Lightning
+"optimizes" before finally emitting machine code. These optimizations
+can improve register allocation around call sites. However they are not
+helpful from a Guile perspective, as they get in the way of register
+allocation that we need to do; and they actually prevent access to all
+the registers that we would like to have.
+
+Guile needs a simple, light-weight code generation library. The GNU
+Lightning architecture-specific backends provide the bulk of this
+functionality, and Lightening wraps it all in a lightweight API.
+
+## Supported targets
+
+Lightening can generate code for the x86-64, i686, ARMv7, and AArch64
+architectures. It supports the calling conventions of MS Windows,
+GNU/Linux, and Mac OS.
+
+On i686, Lightening requires SSE support. On ARMv7, we require hardware
+floating-point support (the VFP instructions), as well as the UDIV/SDIV
+instructions.
+
+Lightening is automatically tested using GitLab's continuous integration
+for under the supported architectures, for GNU/Linux; for a list of
+recent jobs, see [the CI
+page](https://gitlab.com/wingo/lightening/-/jobs).
+
+## Future targets
+
+Lightening has some inherited code from GNU Lightning for MIPS, PPC64,
+and s390. Patches to adapt this code to the Lightening code structure
+are quite welcome.
+
+RISC-V support would be fun too.
+
+## Status
+
+Lightening is used in GNU Guile since version 2.9.2 and seems to work
+well.