lightning.git - Portable just-in-time compiler library

index : lightning.git
Portable just-in-time compiler library
summary refs log tree commit diff
diff options
context:
space:
mode:
Diffstat
-rw-r--r--ChangeLog 9
-rw-r--r--check/collatz.tst 80
-rw-r--r--check/lightning.c 25
3 files changed, 98 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index a263683..d25df3d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2022年10月05日 Paulo Andrade <pcpa@gnu.org>
+
+ * check/lightning.c: Remove -Dmacro=value from usage and attempt
+ to parse it. It was buggy and not properly implemented. Now
+ it pass any extra options to the generated jit. To pass any
+ option starting with '-' need to also use '--'.
+ * check/collatz.e: New sample file showing an example of jit
+ generation.
+
2022年10月04日 Paulo Andrade <pcpa@gnu.org>
* include/lightning/jit_private.h: Add new flag to jit_block_t.
diff --git a/check/collatz.tst b/check/collatz.tst
new file mode 100644
index 0000000..41a11dc
--- /dev/null
+++ b/check/collatz.tst
@@ -0,0 +1,80 @@
+.data 32
+str:
+.c "%lu\n"
+.code
+ jmpi main
+/*
+ * unsigned long collatz(long n) {
+ * unsigned long r = n;
+ * if (!(r & 1)) {
+ * r = r / 2;
+ * return r;
+ * }
+ * r = r * 3;
+ * r = r + 1;
+ * return r;
+ * }
+ */
+collatz:
+ prolog
+ arg $n
+ getarg %r0 $n
+ bmsi odd %r0 1
+ //divi_u %r0 %r0 2
+ rshi_u %r0 %r0 1
+ retr %r0
+odd:
+ muli %r0 %r0 3
+ addi %r0 %r0 1
+ retr %r0
+ epilog
+
+/*
+ * int main(int argc, char *argv[]) {
+ * unsigned long v;
+ * if (argc == 2)
+ * v = strtoul(argv[1], NULL, 0);
+ * else
+ * v = (1L << __WORDSIZE / 2) - 1;
+ * while (1) {
+ * printf("%ld\n", v);
+ * if (v <= 1)
+ * break;
+ * v = collatz(v);
+ * }
+ * return 0;
+ * }
+ */
+main:
+ prolog
+ arg $argc
+ arg $argv
+ getarg %r0 $argc
+ bnei default %r0 2
+ getarg %v0 $argv
+ ldxi %r0 %v0 $(__WORDSIZE >> 3)
+ prepare
+ pushargr %r0
+ pushargi 0
+ pushargi 0
+ finishi @strtoul
+ retval %v0
+ jmpi loop
+default:
+ movi %v0 $((1 << __WORDSIZE / 2) - 1)
+loop:
+ prepare
+ pushargi str
+ ellipsis
+ pushargr %v0
+ finishi @printf
+ blei_u done %v0 1
+call:
+ prepare
+ pushargr %v0
+ finishi collatz
+ retval %v0
+ jmpi loop
+done:
+ reti 0
+ epilog
diff --git a/check/lightning.c b/check/lightning.c
index 34b5440..f55620b 100644
--- a/check/lightning.c
+++ b/check/lightning.c
@@ -3829,6 +3829,11 @@ execute(int argc, char *argv[])
jit_disassemble();
fprintf(stderr, " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");
}
+ if (flag_verbose && argc) {
+ for (result = 0; result < argc; result++)
+ printf("argv[%d] = %s\n", result, argv[result]);
+ fprintf(stderr, " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");
+ }
jit_clear_state();
if (flag_disasm)
@@ -4028,12 +4033,11 @@ usage(void)
{
#if HAVE_GETOPT_LONG_ONLY
fprintf(stderr, "\
-Usage: %s [jit assembler options] file [jit program options]\n\
+Usage: %s [jit assembler options] file [--] [jit program options]\n\
Jit assembler options:\n\
-help Display this information\n\
-v[0-3] Verbose output level\n\
- -d Do not use a data buffer\n\
- -D<macro>[=<val>] Preprocessor options\n"
+ -d Do not use a data buffer\n"
# if defined(__i386__) && __WORDSIZE == 32
" -mx87=1 Force using x87 when sse2 available\n"
# endif
@@ -4049,11 +4053,10 @@ Jit assembler options:\n\
, progname);
#else
fprintf(stderr, "\
-Usage: %s [jit assembler options] file [jit program options]\n\
+Usage: %s [jit assembler options] file [--] [jit program options]\n\
Jit assembler options:\n\
-h Display this information\n\
- -v Verbose output level\n\
- -D<macro>[=<val>] Preprocessor options\n", progname);
+ -v Verbose output level\n", progname);
#endif
finish_jit();
exit(1);
@@ -4228,16 +4231,6 @@ main(int argc, char *argv[])
# define cc "gcc"
#endif
opt_short = snprintf(cmdline, sizeof(cmdline), cc " -E -x c %s", argv[opt_index]);
- for (++opt_index; opt_index < argc; opt_index++) {
- if (argv[opt_index][0] == '-')
- opt_short += snprintf(cmdline + opt_short,
- sizeof(cmdline) - opt_short,
- " %s", argv[opt_index]);
- else {
- --opt_index;
- break;
- }
- }
opt_short += snprintf(cmdline + opt_short,
sizeof(cmdline) - opt_short,
" -D__WORDSIZE=%d", __WORDSIZE);
generated by cgit v1.2.3 (git 2.39.1) at 2025年09月16日 00:08:09 +0000

AltStyle によって変換されたページ (->オリジナル) /